building systems that are never done jalewis@thoughtworks.com @boicy 1
never done 2
never done Incomplete adjective not having all the necessary or appropriate parts 3
never done Incomplete adjective not having all the necessary or appropriate parts 3
never done 4
never done “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.” 4
microservices should be: cheap to replace quick to scale able to withstand failure and should allow us to go as “fast as possible”? 5
“the fi rst post-devops architectural style” Neal Ford 6
replaceable component architectures Dan North 7
the future is scary 8
" 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 a ff airs, as we know them, could not continue ” John von Neumann, as recorded by Ulam, 1958 9
10
Singularity 11
JavaScript Singularity 11
JavaScript Singularity Container 11
Log aggregation JavaScript Singularity Container 11
even closer to home 12
HOW WE DESIGN SOFTWARE IS CHANGING 13
14
Hardest things to do: 15
End-to-end testing Hardest things to do: 15
End-to-end testing Hardest things to do: Independent deployment 15
End-to-end testing Hardest things to do: Independent deployment Service versioning / evolution 15
TESTING MICROSERVICES IS HARD Service A Service Large Medium Small 16
TESTING MICROSERVICES IS HARD Service A Service Large Medium Small 16
TESTING MICROSERVICES IS HARD Service A Service Stub Large Medium Small 16
INTEGRATING MICROSERVICES IS HARD 17
INTEGRATING MICROSERVICES IS HARD Integration Test 17
INTEGRATING MICROSERVICES IS HARD … Integration Test Prod 17
INTEGRATING MICROSERVICES IS HARD … Integration Test Prod 17
INTEGRATING MICROSERVICES IS HARD … Integration Test Prod 17
INTEGRATING MICROSERVICES IS HARD … Integration Test Prod 17
<thinks> 18
GRASP YAGNI World of Warcraft SOLID agile DRY BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 19
20
Gemini Project, Rogallo wing Source: wikipedia.org 20
<thinks> 21
it’s turtles all the way down Gemini Project, Rogallo wing Source: wikipedia.org 22
GRASP YAGNI World of Warcraft SOLID agile DRY BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 23
GRASP World of Warcraft SOLID YAGNI agile DRY BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 24
http://martinfowler.com/bliki/Yagni.html 25
26 26
27 27
28 28
Build out services as you need them 29 29
YAGNI World of Warcraft SOLID GRASP agile DRY BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 30
31
Ful fi lment Retail 32
Retail Ful fi lment 33
Retail Ful fi lment 34
Retail Ful fi lment 35
High cohesion Retail Ful fi lment Low coupling 36
(incidentally, if you were playing the Conway’s law lottery, that’s when you number came up) 37
GRASP YAGNI World of Warcraft SOLID DRY agile BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 38
“Every piece of knowledge must have a single, unambiguous, authoritative representation within a system” Dave Thomas, interviewed by Bill Venners (2003-10-10). "Orthogonality and the DRY Principle". Retrieved 2006-12-01. 39
shared binary dependencies ∆ dep ⇒ ∆ S 1 + ∆ S 2 + … + ∆ S n 40 40
git clone https://github.com/boicy/service-template (note this doesn’t exist) 41
42
DRY within services duplication between services 43
GRASP YAGNI World of Warcraft SOLID TDD agile DRY BDD emergent design GoF Continuous Delivery XP KISS Refactoring 44
45
Large Medium Small 45
“The London school of Test Driven Development” Mike Feathers 46
should we write unit tests? 47
should bother with test driving our code if we are going to throw it away? 48
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 49
http://moleseyhill.com/blog/2009/08/27/dreyfus-model/ 50
should we write unit tests? personally I think it’s more important than *ever* 51
GRASP YAGNI World of Warcraft SRP agile DRY BDD emergent design GoF Continuous Delivery TDD XP KISS Refactoring 52
a class should be no bigger than my head 53
a:Class 54 54
a:Class a:Class a:Class a:Class 55 55
56 56
57 57
SRP a service should be no bigger than my head 58
GRASP YAGNI World of Warcraft SOLID KISS agile DRY BDD emergent design GoF Continuous Delivery TDD XP Refactoring 59
60
WWJD? 61
WWJD? (what would Joe do?) 61
62
cron, python, boto, pydot, graphviz 63
cron, python, boto, pydot, graphviz 63
cron, python, boto, pydot, graphviz Do the simplest thing possible 64
integration and deployment 65
66
66
SEMANTIC MONITORING 66
service a service b 67
service a service b Large Medium Small 67
service a service b Large Medium Small 67
service a service b Large Consumer Driven Contracts Medium Small 67
Customer Web Shop Service 68
Customer Web Shop Service Expectations 68
Customer Web Shop Service Expectations 68
Customer Web Shop Service Expectations Prod 68
Customer Web Shop Service Expectations Prod 68
69
https://github.com/realestate-com-au/pact 69
Good Monitoring Fast Remediation Prod Prod QA Prod Prod TESTING IN PRODUCTION 70
the death of the integration environment 71
Recommend
More recommend