Evolutionary architecture guiding principles

31
Evolutionary Architecture – Guiding Principles CorkDev.io Feb 2016

Transcript of Evolutionary architecture guiding principles

Page 1: Evolutionary architecture guiding principles

Evolutionary Architecture

– Guiding Principles

CorkDev.io Feb 2016

Page 2: Evolutionary architecture guiding principles

Aidan Caseychief architect MYOB Australia | @AIDANJCASEY | Microsoft Azure MVP

Page 3: Evolutionary architecture guiding principles

NO CODE

Page 5: Evolutionary architecture guiding principles

Unusable rolling pin © Giuseppe Colarusso

Page 6: Evolutionary architecture guiding principles

“The best architectures, requirements, and designs emerge from self-organizing teams.”

-Agile Manefesto

Page 7: Evolutionary architecture guiding principles

In 2016 the most popular design in software engineering is …

Page 8: Evolutionary architecture guiding principles
Page 9: Evolutionary architecture guiding principles

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

Page 10: Evolutionary architecture guiding principles

Guiding Principles• Last Responsible Moment• Continuous Integration• Lightweight, Living Documentation• Continuous Delivery• Adapt for Organisational Structure• Design for Replacability

Page 11: Evolutionary architecture guiding principles

Last Responsible Moment

Page 12: Evolutionary architecture guiding principles

• 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….

Page 13: Evolutionary architecture guiding principles

http://qualityswdev.com/2013/08/20/lean-startup-distilled/

How to absorb change

Page 14: Evolutionary architecture guiding principles

Continuous Integration

Page 15: Evolutionary architecture guiding principles

• 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

Page 16: Evolutionary architecture guiding principles

The simplest branching strategy ever!

• Use (VERY) short lived feature branches • When you merge with master its ready for production• Continuously deploy from master

Page 17: Evolutionary architecture guiding principles

Unit

API & integration

UI

faster, more isolated

increased scope,slower Manual

tests

Page 18: Evolutionary architecture guiding principles
Page 19: Evolutionary architecture guiding principles

Pact – Consumer Driven Contract Test

Page 20: Evolutionary architecture guiding principles

Lightweight, Living Documentation

Page 21: Evolutionary architecture guiding principles

• 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

Page 22: Evolutionary architecture guiding principles

Continuous Delivery

Page 23: Evolutionary architecture guiding principles

• 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

Page 24: Evolutionary architecture guiding principles

Adapt for Organisational Structure

Page 25: Evolutionary architecture guiding principles
Page 26: Evolutionary architecture guiding principles

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

Page 27: Evolutionary architecture guiding principles

Two Pizza rule = better productivity

Page 28: Evolutionary architecture guiding principles

Design for Replacability

Page 29: Evolutionary architecture guiding principles
Page 30: Evolutionary architecture guiding principles

Robustness

 "Be liberal in what you accept, and conservative in what you send“

- Jon Postel (God of the Internet)

Page 31: Evolutionary architecture guiding principles

Summary• Last Responsible Moment• Continuous Integration• Lightweight, Living Documentation• Continuous Delivery• Adapt for Organisational Structure• Design for Replacability