evolutionary architecture guiding principles
TRANSCRIPT
Evolutionary Architecture
– Guiding Principles
CorkDev.io Feb 2016
Aidan Caseychief architect MYOB Australia | @AIDANJCASEY | Microsoft Azure MVP
NO CODE
Unusable rolling pin © Giuseppe Colarusso
“The best architectures, requirements, and designs emerge from self-organizing teams.”
-Agile Manefesto
In 2016 the most popular design in software engineering is …
Big ball of mud symptoms• Throwaway code• Merciless deadlines• Cut and paste • Sheer neglect• Afraid to change parts of the system • Brittle / fragile tests• Data shared promiscuously among distant parts of the system
Guiding Principles• Last Responsible Moment• Continuous Integration• Lightweight, Living Documentation• Continuous Delivery• Adapt for Organisational Structure• Design for Replacability
Last Responsible Moment
• Decisions made too early in a project are hugely risky
• Delay decisions as long as you can but no longer !• Every additional tool / technology you add will slow you down….
http://qualityswdev.com/2013/08/20/lean-startup-distilled/
How to absorb change
Continuous Integration
• Without adequate tests your architecture won’t evolve freely• Code coverage stats are absolutely useless !• TDD – writing tests first changes the shape of your code…• Be prepared to throw away old tests over time who cares !• Code that is easier to test its easier to change, easier to
understand
The simplest branching strategy ever!
• Use (VERY) short lived feature branches • When you merge with master its ready for production• Continuously deploy from master
Unit
API & integration
UI
faster, more isolated
increased scope,slower Manual
tests
Pact – Consumer Driven Contract Test
Lightweight, Living Documentation
• agile does not mean doing no documentation !• No technical discussions / decisions in emails !• Prefer , wiki’s & collaborative tools – e.g. yammer / slack /
confluence • What to document
- System diagrams (napkin sketches)- Design decisions- Operational instructions
Continuous Delivery
• Embrace continuous delivery as an organisation• Deployments should be boring !• Feature Switches• Takes the fear out of releasing software• Forces you to deal with versioning API’s from the start
Adapt for Organisational Structure
Conway’s Law
“Organizations which design systems ... are constrained to
produce designs which are copies of the
communication structures of these organizations”
— M. Conway 1967
Two Pizza rule = better productivity
Design for Replacability
Robustness
"Be liberal in what you accept, and conservative in what you send“
- Jon Postel (God of the Internet)
Summary• Last Responsible Moment• Continuous Integration• Lightweight, Living Documentation• Continuous Delivery• Adapt for Organisational Structure• Design for Replacability