Chapter 3. Architecting and Designing

The only thing that makes life possible is permanent, intolerable uncertainty: not knowing what comes next.

Ursula K. Le Guin, The Left Hand of Darkness

When we decide to evolve our systems toward resilience, architecting and designing the system is the first step in what becomes an ineluctable cycle of redesigning the system as it ripens in the runtime of reality. During this phase, we describe the system’s functions, features, and relationships in detail to make it clear to software engineers how to build and deliver the system. It is in this phase when we first mold our mental models of system behavior. And it is also in this phase when we cast the initial etch in our system’s dragon spiral, as shown in Figure 3-1. With each iteration, our system effloresces, sprouting new interactions and interconnections that obfuscate its simpler “beginning.”

Our systems are always becoming—an active process of change—in contrast to our beliefs, which are often about our systems being. There is not a perfect architecture we can prescribe for all software systems because, remember, resilience is a verb; the optimal architecture today may impede our systems in the future. As we discussed in Chapter 1, resilience is of what, to what: it depends on context. When we design and architect systems, we must accept that resilient design is context-dependent ...

Get Security Chaos Engineering now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.