Maintainability
Most of the lifetime cost of software is in maintenance — fixing bugs, adapting to new requirements, and keeping it running. Maintainability is about making that work productive.
Building a system is only the beginning. Over years, teams fix bugs, adapt to regulation, add features, and replace components. If the codebase is a tangled mess, every change is risky and slow. Maintainability is the quality that keeps the total cost of ownership reasonable.
Operability
Operations teams need good visibility into system health: metrics, logs, traces, and clear runbooks for common failures. Good operability means routine tasks (deploys, scaling, config changes) are safe and boring — not heroic.
- Expose key metrics: latency, error rate, saturation, and business KPIs.
- Provide clear documentation for deployment, rollback, and disaster recovery.
- Automate repetitive tasks to reduce human error.
Simplicity
Complexity slows everyone down. It comes from accidental complexity (poor abstractions, tangled dependencies) and essential complexity (the problem is genuinely hard). Good design minimizes accidental complexity by choosing the right abstractions and interfaces.
Evolvability
Requirements change. A system that cannot adapt becomes a legacy burden. Evolvability means the architecture supports incremental change: you can swap a storage engine, add a new API version, or migrate data formats without a rewrite.
