never done jalewis@thoughtworks.com @boicy 1 never done 2 never - - PowerPoint PPT Presentation

never done
SMART_READER_LITE
LIVE PREVIEW

never done jalewis@thoughtworks.com @boicy 1 never done 2 never - - PowerPoint PPT Presentation

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


slide-1
SLIDE 1 1

never done

building systems that are

jalewis@thoughtworks.com @boicy
slide-2
SLIDE 2 2

never done

slide-3
SLIDE 3 3

never done

Incomplete adjective not having all the necessary or appropriate parts

slide-4
SLIDE 4 3

never done

Incomplete adjective not having all the necessary or appropriate parts

slide-5
SLIDE 5 4

never done

slide-6
SLIDE 6 4

“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

  • rnamentation . . . 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

slide-7
SLIDE 7 5

microservices should be:

cheap to replace and should allow us to go as “fast as possible”? quick to scale able to withstand failure

slide-8
SLIDE 8 6

“the first post-devops architectural style”

Neal Ford
slide-9
SLIDE 9 7

replaceable component architectures

Dan North
slide-10
SLIDE 10 8

the future is scary

slide-11
SLIDE 11 9

"ever accelerating progress of technology and changes in the mode

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

slide-12
SLIDE 12 10
slide-13
SLIDE 13 11

Singularity

slide-14
SLIDE 14 11

Singularity

JavaScript

slide-15
SLIDE 15 11

Singularity

JavaScript

Container

slide-16
SLIDE 16 11

Singularity

JavaScript

Log aggregation

Container

slide-17
SLIDE 17 12

even closer to home

slide-18
SLIDE 18

HOW WE DESIGN SOFTWARE IS CHANGING

13
slide-19
SLIDE 19 14
slide-20
SLIDE 20 15

Hardest things to do:

slide-21
SLIDE 21 15

Hardest things to do:

End-to-end testing

slide-22
SLIDE 22 15

Hardest things to do:

End-to-end testing Independent deployment

slide-23
SLIDE 23 15

Hardest things to do:

End-to-end testing Independent deployment Service versioning / evolution

slide-24
SLIDE 24

TESTING MICROSERVICES IS HARD

16 Service A Service Large Medium Small
slide-25
SLIDE 25

TESTING MICROSERVICES IS HARD

16 Service A Service Large Medium Small
slide-26
SLIDE 26 Service Stub

TESTING MICROSERVICES IS HARD

16 Service A Large Medium Small
slide-27
SLIDE 27

INTEGRATING MICROSERVICES IS HARD

17
slide-28
SLIDE 28

INTEGRATING MICROSERVICES IS HARD

17 Integration Test
slide-29
SLIDE 29

INTEGRATING MICROSERVICES IS HARD

17 Integration Test Prod
slide-30
SLIDE 30

INTEGRATING MICROSERVICES IS HARD

17 Integration Test Prod
slide-31
SLIDE 31

INTEGRATING MICROSERVICES IS HARD

17 Integration Test Prod
slide-32
SLIDE 32

INTEGRATING MICROSERVICES IS HARD

17 Integration Test Prod
slide-33
SLIDE 33 18

<thinks>

slide-34
SLIDE 34 19 agile XP TDD BDD YAGNI DRY SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS
slide-35
SLIDE 35 20
slide-36
SLIDE 36 20

Gemini Project, Rogallo wing

Source: wikipedia.org
slide-37
SLIDE 37 21

<thinks>

slide-38
SLIDE 38 22

Gemini Project, Rogallo wing

Source: wikipedia.org

it’s turtles all the way down

slide-39
SLIDE 39 23 agile XP TDD BDD YAGNI DRY SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS
slide-40
SLIDE 40 24 agile XP TDD BDD

YAGNI

DRY SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS
slide-41
SLIDE 41 25 http://martinfowler.com/bliki/Yagni.html
slide-42
SLIDE 42 26 26
slide-43
SLIDE 43 27 27
slide-44
SLIDE 44 28 28
slide-45
SLIDE 45 29 29

Build out services as you need them

slide-46
SLIDE 46 30 agile XP TDD BDD YAGNI DRY SOLID Continuous Delivery Refactoring GoF

GRASP

emergent design World of Warcraft KISS
slide-47
SLIDE 47 31
slide-48
SLIDE 48 32 Fulfilment Retail
slide-49
SLIDE 49 33 Fulfilment Retail
slide-50
SLIDE 50 34 Fulfilment Retail
slide-51
SLIDE 51 35 Fulfilment Retail
slide-52
SLIDE 52 36 Fulfilment Retail

High cohesion Low coupling

slide-53
SLIDE 53 37

(incidentally, if you were playing the Conway’s law lottery, that’s when you number came up)

slide-54
SLIDE 54 38 agile XP TDD BDD YAGNI

DRY

SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS
slide-55
SLIDE 55 39

“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.
slide-56
SLIDE 56 40 40

shared binary dependencies

∆ dep ⇒ ∆S1 + ∆S2 + … + ∆Sn

slide-57
SLIDE 57 41 git clone https://github.com/boicy/service-template (note this doesn’t exist)
slide-58
SLIDE 58 42
slide-59
SLIDE 59 43

DRY within services duplication between services

slide-60
SLIDE 60 44 agile XP

TDD

BDD YAGNI DRY SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS
slide-61
SLIDE 61 45
slide-62
SLIDE 62 45 Small Medium Large
slide-63
SLIDE 63 46

“The London school

  • f Test Driven

Development”

Mike Feathers
slide-64
SLIDE 64 47

should we write unit tests?

slide-65
SLIDE 65 48

should bother with test driving our code if we are going to throw it away?

slide-66
SLIDE 66 49

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

slide-67
SLIDE 67 50 http://moleseyhill.com/blog/2009/08/27/dreyfus-model/
slide-68
SLIDE 68

should we write unit tests?

51

personally I think it’s more important than *ever*

slide-69
SLIDE 69 52 agile XP TDD BDD YAGNI DRY Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft KISS

SRP

slide-70
SLIDE 70 53

a class should be no bigger than my head

slide-71
SLIDE 71 54 54

a:Class

slide-72
SLIDE 72 55 55 a:Class a:Class a:Class a:Class
slide-73
SLIDE 73 56 56
slide-74
SLIDE 74 57 57
slide-75
SLIDE 75 58

SRP a service should be no bigger than my head

slide-76
SLIDE 76 59 agile XP TDD BDD YAGNI DRY SOLID Continuous Delivery Refactoring GoF GRASP emergent design World of Warcraft

KISS

slide-77
SLIDE 77 60
slide-78
SLIDE 78 61

WWJD?

slide-79
SLIDE 79 61

WWJD?

(what would Joe do?)

slide-80
SLIDE 80 62
slide-81
SLIDE 81 63

cron, python, boto, pydot, graphviz

slide-82
SLIDE 82 63

cron, python, boto, pydot, graphviz

slide-83
SLIDE 83 64

cron, python, boto, pydot, graphviz

Do the simplest thing possible

slide-84
SLIDE 84 65

integration and deployment

slide-85
SLIDE 85 66
slide-86
SLIDE 86 66
slide-87
SLIDE 87 66

SEMANTIC MONITORING

slide-88
SLIDE 88 67 service b service a
slide-89
SLIDE 89 67 service b service a Small Medium Large
slide-90
SLIDE 90 67 service b service a Small Medium Large
slide-91
SLIDE 91 67 service b service a Small Medium Large Consumer Driven Contracts
slide-92
SLIDE 92 68 Customer Service Web Shop
slide-93
SLIDE 93 68 Customer Service Web Shop Expectations
slide-94
SLIDE 94 68 Customer Service Web Shop Expectations
slide-95
SLIDE 95 68 Customer Service Web Shop Expectations Prod
slide-96
SLIDE 96 68 Customer Service Web Shop Expectations Prod
slide-97
SLIDE 97 69
slide-98
SLIDE 98 69

https://github.com/realestate-com-au/pact

slide-99
SLIDE 99 70 Prod Prod Prod Prod QA Good Monitoring Fast Remediation

TESTING IN PRODUCTION

slide-100
SLIDE 100 71

integration environment

the death of the

slide-101
SLIDE 101 72

production != live

slide-102
SLIDE 102 73

CHANGING SERVICES INDEPENDENTLY

slide-103
SLIDE 103 74

CHANGING SERVICES INDEPENDENTLY

What is the blast radius of the change?

slide-104
SLIDE 104 74

CHANGING SERVICES INDEPENDENTLY

What is the blast radius of the change?

Limited to your team?

slide-105
SLIDE 105 74

CHANGING SERVICES INDEPENDENTLY

What is the blast radius of the change?

business capability? Limited to your team?

slide-106
SLIDE 106 74

CHANGING SERVICES INDEPENDENTLY

What is the blast radius of the change?

business capability?

  • rganisation?

Limited to your team?

slide-107
SLIDE 107 75 Thomas J. Allen, 1977
slide-108
SLIDE 108 76 10 20 30 40 50 60 70 80 90 100 0.05 0.10 0.15 0.20 0.25 0.30 m Probability of weekly interaction

x x x x x xxxxxxxx x x x x x x x x

The effect of distance on communication
slide-109
SLIDE 109 77 Low change rate

inter-company integration

High stability Semantic Versioning Contract Testing Tolerant Reader “Conversational change”
slide-110
SLIDE 110 78 higher change rate

inter-team integration

lower stability Semantic Versioning Contract Testing Tolerant Reader “Conversational change”
slide-111
SLIDE 111 79 highest change rate

intra-team

lowest stability Semantic Versioning Contract Testing Tolerant Reader “Conversational change”
slide-112
SLIDE 112 80

the future is scary

slide-113
SLIDE 113

we are learning how to: Craft my families axe Deploy small services independently Test microservices in isolation Test microservices in production

slide-114
SLIDE 114 82

the future is bright

slide-115
SLIDE 115 83

we have old techniques that apply: SRP GRASP YAGNI KISS TDD DRY

slide-116
SLIDE 116

and new techniques to apply: Consumer Driven Contracts Semantic Monitoring Semantic Versioning Testing in Production Failure Isolation

slide-117
SLIDE 117 85
slide-118
SLIDE 118 85

do the simplest thing possible

slide-119
SLIDE 119 86 jalewis@thoughtworks.com @boicy
slide-120
SLIDE 120 86 jalewis@thoughtworks.com @boicy

Thanks!