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
  • If functionality is a differentiator for the Partnership then we should prefer to build, rather than buy and/or customise.

  • Design for Emergent Reuse
  • Design for well-defined use cases and adaptability. Address reuse as an optimisation opportunity rather than a goal.

  • Evolutionary Systems
  • Systems and architectures should be designed and built to enable easy, incremental change.

  • Scale Horizontally
  • System components should be horizontally scalable where possible.

  • Small and Simple
  • Where software is tending towards complexity, look for opportunities to break it down into smaller and simpler systems.

  • Smarts in the Nodes not the Network
  • 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.