software architecture for innovation

63
Software Architecture for Innovation Eberhard Wolff Fellow innoQ @ewolff

Upload: eberhard-wolff

Post on 11-Jan-2017

883 views

Category:

Software


5 download

TRANSCRIPT

Software Architecturefor Innovation

Eberhard WolffFellow 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

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.

Software architectureimplements

desired quality attributeswith 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/

Delivery Pipeline

Build Pipeline

CommitStage

AutomatedAcceptance

Testing

AutomatedCapacityTesting

ManualExplorative

TestingRelease

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

CommitStage

AutomatedAcceptance

Testing

AutomatedCapacityTesting

ManualExplorative

TestingRelease

UI Tests: Selenium

> Easy to start

> Natural for testers

> Fragile

> Loose semantics

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

Capacity Tests

> Automated

> Realistic scenario and data

> (Scaled-down) production-like system

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?

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

SoftwareArchitecture

ContinuousDelivery

Provide easyto deployment

Providechangeability

What Software Architecture supports Continuous Delivery?

Microservice

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

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

FREE!!!!

Server Server

Microservice Definition

> Independent deployment units

> E.g. process, VMs, Docker containers

> Any technology

MicroService

MicroService

Components Collaborate

MicroService

MicroService

Link

Data Replication

REST

Messaging

Microservices support Continuous Delivery!

Build PipelineECommerce

System

CommitStage

AutomatedAcceptance

Testing

AutomatedCapacityTesting

ManualExplorative

TestingRelease

Microservices

ECommerceSystem

3rd partysystems

Database

Microservices

3rd partysystems

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!

Microservice Pipeline> Independent deployment

> Build pipeline per Microservice

> Small

> Easier to set up

> Simpler (3rd party systems)

> Faster Feedback: Less tests

Microservices enable innovation byScaling Agile

Agility

> Put software out quickly

> …by implementing stories

> Measure success

> Provide feedback for next iteration

> Hard to do for large applications

Deployment Monolith

Deployment Monolith

Stories

Coordinating Releases

Technical coordination

Add people until team too large – what now?

Conway‘s Law

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 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

Microservices enable innovation by

self- organization

Self Organization

> Team can decide when to deploy into production

> Team can decide on technologies

> Total freedom?

Microservices enable 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

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

Thank You!@ewolff