These principles relate to the software practices we should follow when building software.

  • Automate by Default
  • Tasks that can be automated should be automated by default. The choice not to automate should always be a conscious decision.

  • Consistent Environments
  • Environments should have homogeneous application configuration, software, operating system, infrastructure and data (where appropriate).

  • Get Feedback Early and Often
  • Gain feedback by frequent and early releases of functionality, rather than Big Bang releases.

  • Performance Importance
  • Our systems meet or exceed their users' expectations of performance. Degradations in performance are investigated, understood and either remedied, or accepted as appropriate in the business context.

  • Secure by Design
  • Systems will be designed and maintained with the assumption that our software and the data they hold will be attacked and possibly compromised.

  • Design for Testability
  • Solutions should be designed - and code structured - in a way that makes execution of its tests happen more easily and quickly.

  • Understandability
  • Each codebase must be understandable and easy to change by new developers with minimal experience of the application.