Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to break apart a monolithic system safely without destroying your team - Velocity 2016 - Matthew Skelton

How to break apart a monolithic system safely without destroying your team - Velocity 2016 - Matthew Skelton

DevOps comes in many flavors: there is no one-size-fits-all. This is particularly true of team structures and responsibility boundaries, where what works for one organization might be completely unsuitable for another.

Since 2013 we have curated the DevOps Team Topologies (http://devopstopologies.com/), whilst helping organizations around the world to adopt and evolve effective team structures for DevOps. The changing technology landscape of IaaS, PaaS, containers, microservices, and serverless architectures all shape the communication patterns and responsibilities of technical teams, together with Conway's Law. Furthermore, as engineering organizations grow and mature different topologies become suitable.

---

From a talk at Velocity 2016

Team topologies should be mutable and responsive to the conditions around the teams. This talk will provide insights into how, why and when to evolve team topologies based on our real-world experience.

We also explain the key difference between an enabling 'capability' team and a service-providing platform team and the implications for DevOps and collaboration.

The insights are based on work with a variety of organizations including: a global publishing organisation, software vendors with blue-chip clients, a global technology company specialising in telecoms, several organisations in the financial services sector in the UK, an international commodities trading organisation, and a major UK broadcaster.

Matthew Skelton

November 07, 2016
Tweet

More Decks by Matthew Skelton

Other Decks in Technology

Transcript

  1. How to break apart a monolithic system safely without destroying

    your team Matthew Skelton, Skelton Thatcher Consulting @matthewpskelton 07 November 2016, Amsterdam, NL - #velocityconf
  2. “organizations which design systems ... are constrained to produce designs

    which are copies of the communication structures of these organizations” – Mel Conway, 1968 http://www.melconway.com/Home/Conways_Law.html
  3. Cognitive load the total amount of mental effort being used

    in the working memory (see Sweller, 1988)
  4. Science since 1988 (!) • Driskell et al, 1999 ‘Does

    Stress Lead to a Loss of Team Perspective?’ Group Dynamics: Theory, Research, and Practice 3, no. 4 (1999): 291. • Fan et al, 2010 ‘Learning HMM-Based Cognitive Load Models for Supporting Human-Agent Teamwork’. Cognitive Systems Research 11, no. 1 (2010): 108–119. • Ilgen & Hollenbeck, 1993 ‘Effective Team Performance under Stress and Normal Conditions: An Experimental Paradigm, Theory and Data for Studying Team Decision Making in Hierarchical Teams with Distributed Expertise’. DTIC Document, 1993. • Johnston et al, 2002 ‘Application of Cognitive Load Theory to Developing a Measure of Team Decision Efficiency’. DTIC Document, 2002. • Sweller, John, 1994 ‘Cognitive Load Theory, Learning Difficulty, and Instructional Design’. Learning and Instruction 4 (1994): 295–312. • Sweller, John, 1988. ‘Cognitive Load during Problem Solving: Effects on Learning’. Cognitive Science 12, no. 2 (1988): 257–285.
  5. “stress impacts team performance … by narrowing or weakening the

    team-level perspective required for effective team behavior.” – Driskell et al, 1999 Group Dynamics: Theory, Research, and Practice 1999, Vol. 3, No. 4,291-302
  6. “Don’t start with a monolith when your goal is a

    microservices architecture” – Stefan Tilkov, innoQ http://martinfowler.com/articles/dont-start-monolith.html
  7. Types of software monoliths •Application monolith •Joined at the DB

    •Monolithic build (rebuild everything) •Monolithic releases (coupled) •Monolithic thinking (standardisation)
  8. Joined at the DB Difficult to change separately (but not

    impossible) Risk is (probably) elevated Chris Collyer, http://www.stone-circles.org.uk/stone/pentreifan.htm
  9. Dangers of splitting a monolith •Reduced domain consistency •Data duplication

    (unintentional) •Additional operational complexity due to distributed system and async messaging •Degraded UX across the product
  10. Splitting a monolith Reiner Flassig - CC BY-SA 2.0 de

    - Wikipedia Choose the right technique for splitting Understand the nature of the monolith
  11. ‘Fracture planes’ for code •Business domain bounded context •Regulatory compliance

    •Change cadence •Risk •Performance isolation •User personas •Team location
  12. Adam Tornhill Code, Crime, Complexity: Analyzing software with forensic psychology

    Adam Tornhill TEDxTrondheim youtube.com/watch?v=qJ_hplxTYJw
  13. Team types Component team Platform / ’substrate’ team Supporting /

    ‘productivity’ team Product/Feature team
  14. Code repositories Repo 1 Build Test Deploy Run Repo 2

    Build Test Deploy Run Repo 3 Build Test Deploy Run
  15. “You can use a monorepo only if your organisation has

    published a scientific paper on Computer Science. Otherwise, use one repo per deployable runnable thing.” – Matthew Skelton LondonCD meetup group, 11 Oct 2016 
  16. When not to split a monolith •‘Heritage’ ERP system (‘cloudified’)

    •No native Unit Test framework •20-30 min startup times •VMs need 56GB RAM (yes) •CI builds take 50 mins
  17. Monolith-splitting recipe 1. Instrument the monolith – logging 2. Grok

    data flows and fault responses 3. Align teams to available segments 4. Split off segments one-by-one
  18. Technical Domain public enum EventID { // Badly-initialised logging data

    NotSet = 0, // An unrecognised event has occurred UnexpectedError = 10000, ApplicationStarted = 20000, ApplicationShutdownNoticeReceived = 20001, PageGenerationStarted = 30000, PageGenerationCompleted = 30001, MessageQueued = 40000, MessagePeeked = 40001, BasketItemAdded = 60001, BasketItemRemoved = 60002, CreditCardDetailsSubmitted = 70001, // ... }
  19. use logging as a channel/vector to make distributed systems more

    testable use logging as a channel/vector to make distributed systems more testable
  20. Grok data flows and fault responses Correlation ID Event ID

    Unexpected collaborating subsystems Undetected fault condition
  21. Grok data flows and fault responses Correlation ID Event ID

    Adjust subsystem boundaries Fix poor fault responses
  22. use logging as a channel/vector to make distributed systems more

    testable Invest in Build & Release Engineering
  23. Monolith-splitting recipe * 1. Instrument the monolith – logging 2.

    Grok data flows and fault responses 3. Align teams to available segments 4. Split off segments one-by-one (5. Invest in Build & Release Engineering) * The simplistic version
  24. Monolith-splitting recipe * 1. Instrument 2. Grok behaviour 3. Align

    teams 4. Split off segments 5. Invest in Build & Release * The simplistic version
  25. Monolith-splitting recipe * * The simplistic version 1. Instrument 2.

    Grok behaviour 3. Align teams 4. Split off segments 5. Invest in Build & Release
  26. Determine monolith type (Apply ‘Code Forensics’) Find ‘fracture planes’ Assess

    cognitive load for teams Use the monolith-splitting recipe How to break apart a monolithic system safely without destroying your team
  27. Books & articles • Working Effectively with Legacy Code, by

    Michael Feathers • Building Microservices by Sam Newman (O’Reilly, 2015) • Managing Cognitive Load for Team Learning by Jo Pearce http://12devsofxmas.co.uk/2015/12/day-3-managing-cognitive-load- for-team-learning/ • Continuous Delivery with Windows and .NET by Matthew Skelton and Chris O’Dell (O’Reilly, 2016) http://cdwithwindows.net/ • Team Guide to Software Operability by Matthew Skelton and Rob Thatcher (Skelton Thatcher Publications, 2016) http://operabilitybook.com/ • Ye Olde Monolith by Pter Pilgrim https://dzone.com/articles/ye-olde- monolith
  28. Training • From Monolith to Microservices (online training) – Sam

    Newman, author of Building Microservices http://www.oreilly.com/live-training/from-monolith-to- microservices.html • Run Book template & Run Book dialogue sheets http://runbooktemplate.info/
  29. Talks & slides • Hacking Your Head – Managing Information

    Overload, by Jo Pearce - http://www.slideshare.net/JoPearce5/hacking-your- head-managing-information-overload-45-mix / http://conferences.oreilly.com/oscon/open-source- eu/public/schedule/detail/53013 • Principles of Microservices by Sam Newman @ Devoxx 2015 https://www.youtube.com/watch?v=PFQnNFe27kU
  30. Research papers • Driskell, James E., Eduardo Salas, and Joan

    Johnston. ‘Does Stress Lead to a Loss of Team Perspective?’ Group Dynamics: Theory, Research, and Practice 3, no. 4 (1999): 291. • Fan, Xiaocong, Po-Chun Chen, and John Yen. ‘Learning HMM-Based Cognitive Load Models for Supporting Human-Agent Teamwork’. Cognitive Systems Research 11, no. 1 (2010): 108–119. • Ilgen, Daniel R., and John R. Hollenbeck. ‘Effective Team Performance under Stress and Normal Conditions: An Experimental Paradigm, Theory and Data for Studying Team Decision Making in Hierarchical Teams with Distributed Expertise’. DTIC Document, 1993. http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA284683. • Johnston, Joan H., Stephen M. Fiore, Carol Paris, and C. A. Smith. ‘Application of Cognitive Load Theory to Developing a Measure of Team Decision Efficiency’. DTIC Document, 2002. http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA525820. • Sweller, John. ‘Cognitive Load Theory, Learning Difficulty, and Instructional Design’. Learning and Instruction 4 (1994): 295–312. • Sweller, John. ‘Cognitive Load during Problem Solving: Effects on Learning’. Cognitive Science 12, no. 2 (1988): 257–285.
  31. Determine monolith type (Apply ‘Code Forensics’) Find ‘fracture planes’ Assess

    cognitive load for teams Use the monolith-splitting recipe How to break apart a monolithic system safely without destroying your team