These principles reflect architectural and design considerations when building software. They should be considered and applied continuously throughout the life of an application or service - not just at the start.
- Build Differentiators
- Design for Emergent Reuse
- Evolutionary Systems
- Scale Horizontally
- Small and Simple
- Smarts in the Nodes not the Network
If functionality is a differentiator for the Partnership then we should prefer to build, rather than buy and/or customise.
Design for well-defined use cases and adaptability. Address reuse as an optimisation opportunity rather than a goal.
Systems and architectures should be designed and built to enable easy, incremental change.
System components should be horizontally scalable where possible.
Where software is tending towards complexity, look for opportunities to break it down into smaller and simpler systems.
Sometimes referred to as “smart nodes and dumb pipes”, meaning that systems aim to be as decoupled and cohesive as possible, and not centrally choreographed in middleware.