Moldable Development patterns

A Pattern Language for Moldable Development

Moldable Development is a way to support decision-making by molding the development tools and environment to your problem, thus making the domain concepts visible, explorable, and explainable . For an introduction, see How to get started with Moldable Development.

A good way to learn about moldable development is to focus on the patterns we observe when practicing it. Each of the patterns below addresses a problem to be solved, there are forces at play that motivate the application of the pattern, there is a solution , and steps to implement the pattern. Finally, there are related patterns that may be applied before, during or after the steps.

Overview

Moldable development works best when you incrementally extend a live model with custom tools as you explore it. You can start the exploration and molding process from a Moldable object, a live instance of a key domain entity, even at the very beginning of a new project. If you are analyzing existing data, you should start with a Viewable data wrapper.

Once you have a moldable object to explore, you can leverage its Contextual playground to prototype new behavior and custom tools.

As you are developing the live model, you may find yourself repeatedly performing the same sequences of navigation steps to access information, either by clicking through views or evaluating Playground snippets. This is often a sign that the information you navigate to should be turned into a Viewable entity of your domain object. Ideally, you should start with a Simple view.

Similarly, you may repeatedly perform certain code snippets to obtain a certain effect, such as opening a new window. In this case, instead of creating a custom view, you might want a Custom action.

If your domain deals with collections of entities, you want them to be moldable as well, so you should wrap each of them with a Collection wrapper.

Particular domain instances of interest for testing or documentation should each be encapsulated as an Example object. These can then be embedded in a Project diary to serve as a starting point for moldable development, to track the progress of your work, or to provide documentation.

Caveat

This collection of best practice patterns is a work in progress.

Feedback is welcome. See: How to give feedback