Software Architecture for Innovation

ewolff 1,781 views 63 slides Apr 20, 2016
Slide 1
Slide 1 of 63
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63

About This Presentation

How can software architecture help to enable innovation? Also discusses Continuous Delivery and Microservices.


Slide Content

Software Architecture
forInnovation
Eberhard Wolff
Fellow innoQ
@ewolff

What is Innovation?
>New products and services on the market
>New sources of revenue

What is Innovation?

How does innovation
relate to software
architecture?

What is software
architecture?

Software architecture:
set of
structures
needed to reason about a system,
comprise
software elements,
relationsamong them, and
propertiesof both.

Software architecture of a system:
set of
structures
needed to reason about a system,
comprise
software elements,
relationsamong them, and
propertiesof both.

Software architecture
implements
desired quality attributes
with technological means

Enable innovation…
>Easy to change software
>Measuring success (i.e. revenue)

Changeable software
>Holy grail ever of software development
>Through clean architecture
>Good code quality

Continuous Delivery

[email protected] - 68d9d9b46d11128addca-20160331114327-5878-1
http://continuous-delivery-buch.de/

DeliveryPipeline

Build Pipeline
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release
Many tests to minimize risk
Infrastructure automation
Fast Feedback

Jenkins + Build
Pipeline Plug In

Commit Stage
>Compile
>Unit Tests
>Static Code Analysis
>Result: binary or installer

Acceptance Tests
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

UI Tests: Selenium
>Easy to start
>Natural for testers
>Fragile
>Loose semantics

Behavior-driven
Scenario: User registers successfully
Context
Event
Expected
outcome
Given a new user with email
[email protected]
firstnameEberhard
name Wolff
When the user registers
Then a customer with email
[email protected] exist
And no error should be reported

Capacity Tests
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

Capacity Tests
>Automated
>Realistic scenario and data
>(Scaled-down) production-
like system

Explorative Tests
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

Explorative Tests
>No strict test plan
>Focus on new features
>…unforeseen behavior
>Automation frees resources for manual testing

Release
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

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
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

Production
>Gather feedback
>…by monitoring
>...and logging
>Does the software perform as expected?

Continuous Delivery
Software Production
Quick&
reliable
Feedback

CD & Innovation
>Make software easy to change
>…by putting it into production quickly
>...and reliably
>Less risk
>Monitor success
>...by logging and monitoring

Continuous Delivery is
one more tool to
achieve desired
quality attributes.

CD Quality Attributes
>Architecture must enable Continuous Delivery
>Easy to deploy & test
>Independent deployment
>Easy & fast Continuous Delivery Pipeline

Trading Quality
Software
Architecture
Continuous
Delivery
Provide easy
to deployment
Provide
changeability

What Software
Architecture supports
Continuous Delivery?

Microservice

http://microservices-buch.de/ http://microservices-book.com/

http://microservices-book.com/primer.html
FREE!!!!

ServerServer
MicroserviceDefinition
>Independent
deployment units
>E.g. process, VMs,
Dockercontainers
>Any technology
Micro
Service
Micro
Service

Components Collaborate
Micro
Service
Micro
Service
Link
Data Replication
REST
Messaging

Microservicessupport
Continuous Delivery!

Build Pipeline
ECommerce
System
Commit
Stage
Automated
Acceptance
Testing
Automated
Capacity
Testing
Manual
Explorative
Testing
Release

Microservices
ECommerce
System
3rd party
systems
Database

Microservices
3rd party
systems
Database
Order
Catalog
Billing
Search

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!

MicroservicePipeline
>Independent deployment
>Build pipeline per Microservice
>Small
>Easier to set up
>Simpler (3
rd
party systems)
>Faster Feedback: Less tests

Microservicesenable
innovation by
Scaling Agile

Agility
>Put software out quickly
>…by implementing stories
>Measure success
>Provide feedback for next iteration
>Hard to do for large applications

Deployment Monolith
DeploymentMonolith
Stories
Coordinating Releases
Technical coordination

Add people until team
too large –what now?

Conway‘sLaw
Architecture
copies
communication structures
of the organization

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 Release
Technical
coordination
Technical
coordination
Technical
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

Microservicesenable
innovation by
self-organization

Self Organization
>Team can decide when to deploy into
production
>Team can decide on technologies
>Total freedom?

Microservicesenable
innovation by
delegating technical
decision to teams

Conclusion

There are other ways
to make software
easily changeable.

Continuous Delivery
>Continuous Delivery allows to put out new
features quickly
>...and measure success
>Microservicessupport Continuous Delivery

Microservices
>Microservicesallow each team to create
new products
>…put them in production
>...and see the effect on revenue
>…with little coordination

Microservices
>Microservicesallow 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/

Thank You!
@ewolff