Stable Intermediate Forms A Foundation Pattern for Derisking the Process of Change Kevlin Henney kevlin@curbralan.com kevlin@acm.org January 2005 Abstract The universe is change; life is what thinking makes of it. Marcus Aurelius Change is often associated with risk, in particular the risk of failure or unwanted side effects. Whether such change is the move from one position on a rock face to another during a climb, or the progress of development through a software project, or the change of state within an object when it is being copied to, risk is ever present. In all cases, change is associated with questions of confidence, consequence, and certainty. In the event of any failure or unknowns, change can cause further failure and greater unknowns — a missed foothold, a missed deadline, a missed exception. STABLE INTERMEDIATE FORMS is a general pattern for making progress with confidence and limiting the effect of failure. When undertaking a change or series of changes to move from one state to another, rather than carrying out a change suddenly and boldly, with a single large stride but uncertain footfall, each intermediate step in the process of change is itself a coherent state. This high-level pattern manifests itself in various domain-specific patterns, three of which are reported informally in this paper and used as examples: THREE POINTS OF CONTACT for rock climbing; ITERATIVE AND INCREMENTAL DEVELOPMENT for software development process; and COPY BEFORE RELEASE for exception safety in C++. It is a matter of preference and perspective as to whether this paper is considered to document one, three, or four patterns.