Slide 1

Slide 1 text

Evolving Continuous Delivery From Rags to Riches Hibri Marzook @hibri

Slide 2

Slide 2 text

@hibri http://www.hibri.net

Slide 3

Slide 3 text

Hibri Marzook, February 2017 @hibri Fintech Post startup phase Successful product in the market ~ 30 in engineering ~ 200 employees Context

Slide 4

Slide 4 text

Hibri Marzook, February 2017 @hibri First impressions Public facing API, running in the Cloud No automation Inconsistent environments Context switching. Not finishing work in progress Old, stale branches merged into active branch Manual deploys

Slide 5

Slide 5 text

Hibri Marzook, February 2017 @hibri

Slide 6

Slide 6 text

Hibri Marzook, February 2017 @hibri What to fix first? Branching strategy? Lack of automation? Lack of technical practices? TDD? Lack of CI? Process? Scrum, Kanban ceremonies?

Slide 7

Slide 7 text

Hibri Marzook, February 2017 @hibri A focus on delivery is needed for continuous improvement

Slide 8

Slide 8 text

Hibri Marzook, February 2017 @hibri Gain situational awareness Photo Credit - Hugh Trainer via Flickr

Slide 9

Slide 9 text

Hibri Marzook, February 2017 @hibri Gaining situational awareness Install an application monitoring tool. New Relic Zero friction install Alerting out of the box PagerDuty integration

Slide 10

Slide 10 text

Hibri Marzook, February 2017 @hibri We could be the first responders How much traffic? How many users are affected? Usage trends? Error rates? Can this scale?

Slide 11

Slide 11 text

Hibri Marzook, February 2017 @hibri Shared understanding of the system Draw environment map Draw components of the system Ensure that all team members have the same understanding Keep maps visible

Slide 12

Slide 12 text

Hibri Marzook, February 2017 @hibri Better situational awareness Photo Credit - Steve Jurveston via Flickr

Slide 13

Slide 13 text

Hibri Marzook, February 2017 @hibri

Slide 14

Slide 14 text

Hibri Marzook, February 2017 @hibri Expose the realities of the system instead of relying on assumptions

Slide 15

Slide 15 text

Hibri Marzook, February 2017 @hibri In a legacy distributed application, there is a disconnect between how the system behaves in production and how the creators think it “should” behave.

Slide 16

Slide 16 text

Hibri Marzook, February 2017 @hibri Create visibility

Slide 17

Slide 17 text

Hibri Marzook, February 2017 @hibri Agile ≠ JIRA

Slide 18

Slide 18 text

Hibri Marzook, February 2017 @hibri Creating visibility Made work visible with a simple card wall Pull from the right attitude Use JIRA only for tracking Created transparency about the work we are doing

Slide 19

Slide 19 text

Hibri Marzook, February 2017 @hibri Limit work in progress Did one thing at a time Got into the habit of finishing one thing Whole team focussed on delivery Only then did we do more

Slide 20

Slide 20 text

Hibri Marzook, February 2017 @hibri When you don’t have anything else, put everyone together

Slide 21

Slide 21 text

Hibri Marzook, February 2017 @hibri Put everyone together Everyone we worked with sat in the same area Introduced Slack Devs are always around to fix an issue Practice remote working early

Slide 22

Slide 22 text

Hibri Marzook, February 2017 @hibri

Slide 23

Slide 23 text

Hibri Marzook, February 2017 @hibri Use slack time to learn and improve

Slide 24

Slide 24 text

Hibri Marzook, February 2017 @hibri How did we create slack? WIP Limits Production issues are quantified, don’t need to jump on every issue Have data to push back on management pressure Can ignore some problems

Slide 25

Slide 25 text

Hibri Marzook, February 2017 @hibri Long term change happens during slack time

Slide 26

Slide 26 text

Hibri Marzook, February 2017 @hibri Before CI Couldn’t reliably build the system. “Works on my machine” Key man dependencies to do a release. Build time dependencies have to be fixed manually.

Slide 27

Slide 27 text

Hibri Marzook, February 2017 @hibri

Slide 28

Slide 28 text

Hibri Marzook, February 2017 @hibri When the team spends more time talking about branching and merging, you have the wrong strategy

Slide 29

Slide 29 text

Hibri Marzook, February 2017 @hibri Introducing CI Built the system reliably and repeatedly on a CI server Removed the key man dependency Used this build as the source for manual deploys No ATDD yet Manual regression testing

Slide 30

Slide 30 text

Hibri Marzook, February 2017 @hibri Getting branching under control

Slide 31

Slide 31 text

Hibri Marzook, February 2017 @hibri

Slide 32

Slide 32 text

Hibri Marzook, February 2017 @hibri Amplify the good things

Slide 33

Slide 33 text

Hibri Marzook, February 2017 @hibri Adding automated testing Made the tests work in a local dev environment Made the same tests run in other environments Kept adding tests for all new work and fixes Refactored tests continuously

Slide 34

Slide 34 text

Hibri Marzook, February 2017 @hibri Adding automated deploys Deployed to test environments on every commit Used Azure’s “slots” feature for blue/green TeamCity + Octopus Deploy Smoke tests after every deploy

Slide 35

Slide 35 text

Hibri Marzook, February 2017 @hibri

Slide 36

Slide 36 text

Hibri Marzook, February 2017 @hibri The ‘A’ word

Slide 37

Slide 37 text

Hibri Marzook, February 2017 @hibri Talk and discuss the values Focus on the impact Explain cause and effect Introduce and repeat the principles Agile manifesto. Left over right

Slide 38

Slide 38 text

Hibri Marzook, February 2017 @hibri https://landing.google.com/sre/book/chapters/part3.html#fig_part-practices_reliability-hierarchy

Slide 39

Slide 39 text

Hibri Marzook, February 2017 @hibri Evolutionary approach Deal with current constraints Sometimes it’s OK to do things manually Every change should make sense and help the team a little bit more Team should not have to wait for all the changes to gain value

Slide 40

Slide 40 text

Hibri Marzook, February 2017 @hibri Have a primal push to get your software into the hands of users

Slide 41

Slide 41 text

Hibri Marzook, February 2017 @hibri Thanks! Questions? @hibri hibri@hibri.net