1
never done
building systems that are
jalewis@thoughtworks.com
@boicy
2
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
3
the future is scary
4
"ever accelerating progress of technology and changes in the mode
of human life, which gives the appearance of approaching some
essential singularity in the history of the race beyond which human
affairs, as we know them, could not continue”
John von Neumann, as recorded by Ulam, 1958
5
“Around the world, laboring women produce forty-five thousand babies a day,
representing 1023 MIPS of processing power. Also around the world, fab lines
casually churn out thirty million microprocessors a day, representing 1023 MIPS.
In another ten months, most of the MIPS being added to the solar system will be
machine-hosted for the first time”
6
7
“Self-Driving Trucks Are Going to Hit Us Like a Human-Driven Truck”
https://medium.com/basic-income/self-driving-trucks-are-going-to-hit-us-like-a-human-driven-truck-b8507d9c5961
source: Morgan Stanley
This is where we’re at and this is
what we face as we look
towards a quickly approaching
horizon of over 3 million
unemployed truckers and
millions more unemployed
service industry workers in
small towns all over the country
dependent on truckers as
consumers of their services.
“If you aren’t worried about strong AI within the next 5-10
years then you aren’t working closely enough with AI
teams”
(paraphrasing Elon Musk)
8
9
9
10
closer to home?
11
12
Singularity
12
Singularity
JavaScript
12
Singularity
JavaScript
Container
12
Singularity
JavaScript
Log aggregation
Container
13
even closer to home
HOW WE DESIGN SOFTWARE IS CHANGING
14
15
16
“the first post-devops architectural style”
Neal Ford
17
replaceable component architectures
Dan North
18
never done
19
never done
Incomplete
adjective
not having all the necessary or appropriate parts
19
never done
Incomplete
adjective
not having all the necessary or appropriate parts
20
never done
20
“This, milord, is my family's axe.
We have owned it for almost nine
hundred years, see. Of course,
sometimes it needed a new blade.
And sometimes it has required a
new handle, new designs on the
metalwork, a little refreshing of the
ornamentation . . . but is this not
the nine hundred-year-old axe of
my family? And because it has
changed gently over time, it is still a
pretty good axe, y'know. Pretty
good.”
never done
21
microservices should be:
cheap to replace
and should allow us to go as
“fast as possible”?
quick to scale
able to withstand failure
22
Hardest things to do:
22
Hardest things to do: End-to-end testing
22
Hardest things to do: End-to-end testing
Independent deployment
22
Hardest things to do: End-to-end testing
Independent deployment
Service versioning / evolution
TESTING MICROSERVICES IS HARD
23
Service A
Service
Large
Medium
Small
TESTING MICROSERVICES IS HARD
23
Service A
Service
Large
Medium
Small
Service
Stub
TESTING MICROSERVICES IS HARD
23
Service A
Large
Medium
Small
INTEGRATING MICROSERVICES IS HARD
24
INTEGRATING MICROSERVICES IS HARD
24
Integration Test
INTEGRATING MICROSERVICES IS HARD
24
Integration Test Prod…
INTEGRATING MICROSERVICES IS HARD
24
Integration Test Prod…
INTEGRATING MICROSERVICES IS HARD
24
Integration Test Prod…
INTEGRATING MICROSERVICES IS HARD
24
Integration Test Prod…
25
26
WHAT DOES THIS MEAN
FOR THE CRAFT OF
SOFTWARE DEVELOPMENT?
27
<thinks>
28
29
well crafted software
steadily adding value
30
31
Nat Pryce
Steve Freeman
Dan North
Sydney ‘Hoppalong’ Redelinghuys
Jim Webber
Ian Robinson
Ivan Moore
Liz Keogh
Simon Stewart
Jez Humble
Dave Farley
Jay Fields
Dan Worthington-Bodart
Joe Walnes
31
Nat Pryce
Steve Freeman
Dan North
Sydney ‘Hoppalong’ Redelinghuys
Jim Webber
Ian Robinson
Ivan Moore
Liz Keogh
Simon Stewart
Jez Humble
Dave Farley
Jay Fields
Dan Worthington-Bodart
Joe Walnes
APPEAL TO AUTHORITY
WARNING!
32
TW is an XP shop
33
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
34
does this still make sense?
35
35
Gemini Project, Rogallo wing
Source: wikipedia.org
36
<thinks>
37
Gemini Project, Rogallo wing
Source: wikipedia.org
it’s turtles all the way down
38
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
39
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
40
http://martinfowler.com/bliki/Yagni.html
4141
4242
4343
4444
Build out
services as
you need
them
45
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASPemergent design
World of Warcraft
KISS
46
47
Fulfilment
Retail
48
Fulfilment Retail
49
Fulfilment Retail
50
Fulfilment Retail
51
Fulfilment Retail
High cohesion
Low coupling
52
(incidentally, if you were playing
the Conway’s law lottery, that’s
when you number came up)
53
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
5454
55
git clone https://github.com/boicy/service-template
(note this doesn’t exist)
56
57
DRY within services
duplication between
services
58
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
59
“The London school
of Test Driven
Development”
Mike Feathers
60
should we write unit tests?
61
Nat Pryce
Steve Freeman
Dan North
Sydney ‘Hoppalong’ Redelinghuys
Jim Webber
Ian Robinson
Ivan Moore
Liz Keogh
Simon Stewart
Jez Humble
Dave Farley
Jay Fields
Dan Worthington-Bodart
Joe Walnes
62
http://moleseyhill.com/blog/2009/08/27/dreyfus-model/
should we write unit tests?
63
personally I think it’s more
important than *ever*
64
agile
XP
TDD
BDD
YAGNI
DRY
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
SOLID
65
a class should be no bigger than my head
6666
a:Class
6767
a:Class
a:Class
a:Class
a:Class
6868
6969
70
SRP
a service should
be no bigger than
my head
71
agile
XP
TDD
BDD
YAGNI
DRY
SOLID
Continuous Delivery
Refactoring
GoF
GRASP
emergent design
World of Warcraft
KISS
72
73
WWJD?
73
WWJD?
(what would Joe do?)
74
75
cron, python, boto, pydot, graphviz
75
cron, python, boto, pydot, graphviz
76
cron, python, boto, pydot, graphviz
Do the simplest
thing possible
77
but what about testing and deployment
78
78
78
SEMANTIC MONITORING
79
Customer
Service
Web Shop
79
Customer
Service
Web Shop
Small
Medium
Large
79
Customer
Service
Web Shop
Small
Medium
Large
79
Customer
Service
Web Shop
Small
Medium
Large
Consumer Driven Contracts
80
Customer
Service
Web Shop
80
Customer
Service
Web Shop
Expectations
80
Customer
Service
Web Shop
Expectations
80
Customer
Service
Web Shop
Expectations
Prod
80
Customer
Service
Web Shop
Expectations
Prod
81
81
https://github.com/realestate-com-au/pact
82
Prod
Prod
Prod
Prod
QA
Good Monitoring
Fast Remediation
TESTING IN PRODUCTION
83
CHANGING SERVICES INDEPENDENTLY
84
Thomas J. Allen, 1977
85
0 10 20 30 40 50 60 70 80 90 100
0
0.05
0.10
0.15
0.20
0.25
0.30
m
Probability of
weekly interaction
x
x x
x x
xxxx
xx
xx
x
x x
x
x x
x x
The effect of distance on communication
86
Low change rate
inter-company integration
High stability
Semantic Versioning
Contract Testing
Tolerant Reader
“Conversational change”
87
higher change rate
inter-team integration
lower stability
Semantic Versioning
Contract Testing
Tolerant Reader
“Conversational change”
88
highest change rate
intra-team
lowest stability
Semantic Versioning
Contract Testing
Tolerant Reader
“Conversational change”
89
integration environment
the death of the
90
production != live
91
the future is scary
we are learning how to:
Craft my families axe
Deploy microservices independently
Test microservices in isolation
Test microservices in production
93
the future is bright
94
we have old techniques that apply:
SRP
GRASP
YAGNI
KISS
TDD
DRY
and new techniques to apply:
Consumer Driven Contracts
Semantic Monitoring
Semantic Versioning
Testing in Production
96
96
software craftsmanship is around the code too
96
software craftsmanship is around the code too
chunk up and think about the “gaps”
96
software craftsmanship is around the code too
chunk up and think about the “gaps”
and
96
software craftsmanship is around the code too
chunk up and think about the “gaps”
do the simplest thing possible
and
97
Now…
98
Go forth and craft software
jalewis@thoughtworks.com
@boicy
98
Go forth and craft software
jalewis@thoughtworks.com
@boicy
Thanks!
Go forth and craft software
drink beer!
99
I, for one, welcome
our new overlords

James Lewis: Microservices - Systems That Are #neverdone at I T.A.K.E. Unconference 2015