The concept of "Sensible Defaults" offers a pragmatic alternative to "Best Practices" in software architecture and system design. It advocates for known-good starting points for practices, tools, and patterns that should be applied unless specific contextual constraints dictate otherwise. This approach encourages continuous re-evaluation and adaptation, promoting flexibility and informed decision-making in evolving technical landscapes, a critical aspect of effective system design.
Read original on Martin FowlerThe article introduces the concept of a "Sensible Default" as a fundamental principle in software development, distinguishing it from the more rigid idea of a "Best Practice." In the context of system design and software architecture, this distinction is crucial because architectural decisions are rarely one-size-fits-all and heavily depend on specific project constraints, team capabilities, and business requirements.
A Sensible Default is a practice or architectural choice that is generally recommended and effective in the absence of strong reasons to do otherwise. It serves as a known-good starting point. Examples relevant to system design include using version control, separating UI logic from domain logic (e.g., in a microservices architecture), or automating deployment pipelines. These are not rigid rules but rather common patterns that have proven effective in many scenarios.
The Nuance of "Sensible Default"
Unlike a "Best Practice" which implies universal applicability, a "Sensible Default" encourages architects and engineers to understand the rationale behind a default, recognize its limitations, and be prepared to justify deviations when specific project contexts demand a different approach. This fosters critical thinking over blind adherence.
For system designers, adopting sensible defaults means having a toolkit of proven architectural patterns, technologies, and development practices. When starting a new project or designing a new component, these defaults provide a baseline. However, the true value lies in the continuous evaluation of these defaults against changing requirements, technological advancements, and operational feedback. This iterative approach aligns with agile principles, where teams regularly reflect and adjust their behavior and architectures.
The Thoughtworks Technology Radar exemplifies this by regularly reassessing and evolving a set of recommended technologies and practices, providing guidance on what might be considered a "sensible default" at a given time, what to adopt, what to hold, and what to drop.