9 Durability in software design
This chapter covers
- Designing systems that adapt to change
- Tight cohesion and loose coupling
- How to keep systems resilient
- Using tests to preserve behavior
- Protecting trust with stable public interfaces
By using the dimensions explored so far, you’re already able to write higher-quality code that’s easier to maintain and extend. We’ve also looked at the role of team culture, including documentation, technical debt management, and other habits that sustain the long-term health of a codebase. All these dimensions serve one shared purpose: to write software that stands the test of time. That’s why durability lies at the base of our rosette, supporting and encompassing all the other dimensions.
A digital product is constantly evolving, often in unpredictable ways. Clients will request new features, and technologies will continue to shift. Change is not the exception but the rule. Software must also support changing conditions while it’s running. It must be robust enough to handle traffic spikes, misuse, or attacks without breaking, and resilient enough to recover from transient failures. In short, it must be durable.