Download - Software Architecture for Innovation
Software architecture:set of
structuresneeded to reason about a system,
comprisesoftware elements,
relations among them, andproperties of both.
Software architecture of a system:set of
structuresneeded to reason about a system,
comprisesoftware elements,
relations among them, andproperties of both.
Changeable software
> Holy grail ever of software development
> Through clean architecture
> Good code quality
Build Pipeline
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Many tests to minimize risk
Infrastructure automation
Fast Feedback
Acceptance Tests
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Behavior-drivenScenario: User registers successfully
Context
Event
Expectedoutcome
Given a new user with [email protected] Eberhardname Wolff
When the user registers
Then a customer with [email protected] should exist
And no error should be reported
Capacity Tests
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Explorative Tests
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Explorative Tests
> No strict test plan
> Focus on new features
> …unforeseen behavior
> Automation frees resources for manual testing
Release
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Release
> Automated!
> No manual change to any system
> Mitigate risk e.g. with Blue-green
> Two environments
> Install system on second in the background
Production
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Production
> Gather feedback
> …by monitoring
> ...and logging
> Does the software perform as expected?
CD & Innovation> Make software easy to change
> …by putting it into production quickly
> ...and reliably
> Less risk
> Monitor success
> ...by logging and monitoring
CD Quality Attributes
> Architecture must enable Continuous Delivery
> Easy to deploy & test
> Independent deployment
> Easy & fast Continuous Delivery Pipeline
Trading Quality
SoftwareArchitecture
ContinuousDelivery
Provide easyto deployment
Providechangeability
Server Server
Microservice Definition
> Independent deployment units
> E.g. process, VMs, Docker containers
> Any technology
MicroService
MicroService
Build PipelineECommerce
System
CommitStage
AutomatedAcceptance
Testing
AutomatedCapacityTesting
ManualExplorative
TestingRelease
Order
Billing
Customer
Commit!Stage!
Automated!Acceptance!Testing!
Automated!Capacity!Testing!
Manual!Explorative!Testing!
Release!
Commit!Stage!
Automated!Acceptance!Testing!
Automated!Capacity!Testing!
Manual!Explorative!Testing!
Release!
Commit!Stage!
Automated!Acceptance!Testing!
Automated!Capacity!Testing!
Manual!Explorative!Testing!
Release!
Microservice Pipeline> Independent deployment
> Build pipeline per Microservice
> Small
> Easier to set up
> Simpler (3rd party systems)
> Faster Feedback: Less tests
Agility
> Put software out quickly
> …by implementing stories
> Measure success
> Provide feedback for next iteration
> Hard to do for large applications
Microservices
> Team for each Microservice
> Team responsible for business features
> Ideal: Independent features
Microservices
Microservice
Stories
Microservice
Stories
Microservice
Stories
Order Billing Search
Release Release ReleaseTechnical
coordinationTechnical
coordinationTechnical
coordination
Team can deploy without integration
Changes can be deployed independently & quickly
One or many Microservices per Team
Synergy Microservices / Conway’s Law
Order SearchBilling
Order Billing Search
Technology decisions per team
Self Organization
> Team can decide when to deploy into production
> Team can decide on technologies
> Total freedom?
Continuous Delivery
> Continuous Delivery allows to put out new features quickly
> ...and measure success
> Microservices support Continuous Delivery
Microservices
> Microservices allow each team to create new products
> …put them in production
> ...and see the effect on revenue
> …with little coordination
Microservices
> Microservices allow to do experiments
> ...and remove failed experiments
> Even with new or different technologies!
Not new!> Amazon 2006
> Teams
> …build business services
> …operate them
> ...foundation: Amazon Cloud
> ...(i.e. virtual machines)
> Microservices + DevOps + Continuous Delivery
Not radical!
> Developer Anarchy is the radical approach.
> No management
> Programmers driven by business KPIs(Key Performance Indicators)
> http://www.se-radio.net/2016/03/se-radio-episode-253-fred-george-on-developer-anarchy/