Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Teams and monoliths - Matthew Skelton - London DevOps June 2017

848 views

Published on

Moving from a monolith to microservices can be daunting. How do we choose the right bounded contexts? How small should services be? Which teams should get which services? And how do we keep things from falling apart? By starting with the needs of the team, we can infer some useful heuristics for evolving from a monolithic architecture to a set of more loosely coupled services.

Talk given at London DevOps meetup group - June 2017 - https://www.meetup.com/London-DevOps/events/238827763/

Published in: Software
  • Be the first to comment

Teams and monoliths - Matthew Skelton - London DevOps June 2017

  1. 1. How to break apart a monolithic system safely without destroying your team Matthew Skelton, Skelton Thatcher Consulting @matthewpskelton 06 June 2017, London DevOps meetup, Facebook London - #londondevops
  2. 2. Today Cognitive load for teams ‘Monolith’ Code Forensics Team-first boundaries Monolith-splitting recipe
  3. 3. For now, let’s forget: Microservices CQRS / Event Sourcing Queues (Architectural changes)
  4. 4. Team-first digital transformation 30+ organisations UK, US, EU, India, China
  5. 5. We build modern capabilities by mentoring your teams
  6. 6. How to break apart a monolithic system safely without destroying your team
  7. 7. Safer, more rapid changes to software systems (Business Agility)
  8. 8. A ‘team-first’ approach to software subsystem boundaries
  9. 9. TEAM
  10. 10. TEAM capabilities appetite & aptitude understanding responsibilities
  11. 11. (assumption) the team is stable, slowly changing, and long-lived #NoProjects
  12. 12. Conway’s Law
  13. 13. “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
  14. 14. Front-end developers Back-end developers
  15. 15. ‘Reverse Conway’ Tobbe Gyllebring (@drunkcod)
  16. 16. homomorphic force (#Conway  #Yawnoc) HT @allankellynet (same) (shape)
  17. 17. Cognitive load for teams
  18. 18. Cognitive load the total amount of mental effort being used in the working memory (see Sweller, 1988)
  19. 19. Cognitive load Intrinsic Extraneous (Irrelevant ) Germane (Relevant)
  20. 20. ‘Hacking Your Head’: Jo Pearce See http://www.slideshare.net/JoPearce5/hacking-your-head-managing-information-overload-45-mix @jdpearce
  21. 21. We have SCIENCE!
  22. 22. 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.
  23. 23. “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
  24. 24. (not just ‘pop’ science!)
  25. 25. ‘Monolith’
  26. 26. monolith μόνο λίθος “single stone” Reiner Flassig - CC BY-SA 2.0 de - Wikipedia
  27. 27. “Don’t start with a monolith when your goal is a microservices architecture” – Stefan Tilkov, innoQ http://martinfowler.com/articles/dont-start-monolith.html
  28. 28. “Start monolithic and extract” – Tammer Saleh, Pivotal https://www.infoq.com/presentations/cloud-anti-patterns
  29. 29. A ‘team-first’ approach to software subsystem boundaries
  30. 30. Types of software monoliths •Application monolith •Joined at the DB •Monolithic build (rebuild everything) •Monolithic releases (coupled) •Monolithic thinking (standardisation)
  31. 31. Application monolith Single block of code Deployed as a unit
  32. 32. 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
  33. 33. Monolithic builds One gigantic CI build just to get a new version of any component
  34. 34. Monolithic releases Smaller components bundled together into a ‘release’
  35. 35. Monolithic thinking ‘One-size-fits-all’ for teams Assumption that minimising variation is A Good Thing
  36. 36. 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
  37. 37. Splitting a monolith Reiner Flassig - CC BY-SA 2.0 de - Wikipedia Choose the right technique for splitting Understand the nature of the monolith
  38. 38. ‘Fracture planes’ for code •Business domain bounded context •Regulatory compliance •Change cadence •Risk •Performance isolation •User personas •Team location
  39. 39. ‘Fracture planes’ for code Ask: Could we consume this thing as a service?
  40. 40. ‘Fracture planes’ for code Ask: Could we provide this thing as a service?
  41. 41. Code Forensics
  42. 42. Forensics Your Code as a Crime Scene Adam Tornhill
  43. 43. Adam Tornhill Code, Crime, Complexity: Analyzing software with forensic psychology Adam Tornhill TEDxTrondheim youtube.com/watch?v=qJ_hplxTYJw
  44. 44. ‘Code Maat’ tool
  45. 45. Adam Tornhill, http://www.adamtornhill.com/articles/crimescene/codeascrimescene.htm Code City plus Code Maat forensics
  46. 46. Beware of badly-named subsystems
  47. 47. "information-poor abstract names are magnets for extra [unwanted] responsibilities" – Adam Tornhill p.185, Your Code as a Crime Scene
  48. 48. Team-first boundaries
  49. 49. DevOpsTopologies.com
  50. 50. Team types Component team Platform / ’substrate’ team Supporting / ‘productivity’ team Product/Feature team
  51. 51. Team types devopstopologies.com Platform / ’substrate’ team Product/Feature team
  52. 52. Team types devopstopologies.com Component team Platform / ’substrate’ team Product/Feature team
  53. 53. Team types devopstopologies.com Component team Platform / ’substrate’ team Product/Feature team Supporting / ‘productivity’ team
  54. 54. Code repositories Align repositories to subsystem boundaries Avoid monolithic-y repos like TFS* * Don’t get me started on TFS, grrr…
  55. 55. Code repositories Repo 1 Build Test Deploy Run Repo 2 Build Test Deploy Run Repo 3 Build Test Deploy Run
  56. 56. “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 ☺
  57. 57. Find natural or available ‘fracture planes’ for splitting a monolith (with the team in mind)
  58. 58. 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
  59. 59. Monolith-splitting recipe Tried and tested!
  60. 60. 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
  61. 61. Instrument the monolith
  62. 62. Instrument the monolith
  63. 63. Instrument the monolith
  64. 64. search by event Event ID {Delivered, InTransit, Arrived}
  65. 65. transaction trace Correlation ID 612999958…
  66. 66. 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, // ... }
  67. 67. BasketItemAdded = 60001 BasketItemRemoved = 60002
  68. 68. Instrument the monolith Correlation ID Logs Event ID
  69. 69. use logging as a channel/vector to make distributed systems more testable use logging as a channel/vector to make distributed systems more testable
  70. 70. Grok data flows and fault responses
  71. 71. Grok data flows and fault responses Correlation ID Event ID Unexpected collaborating subsystems Undetected fault condition
  72. 72. Grok data flows and fault responses Correlation ID Event ID Adjust subsystem boundaries Fix poor fault responses
  73. 73. runbooktemplate.infoRun Book dialogue sheets
  74. 74. Align teams to available segments
  75. 75. Align teams to available segments
  76. 76. Align teams to available segments Map to business domain
  77. 77. Align teams to available segments Identify likely components or ‘platform’ elements
  78. 78. Split off segments one-by-one
  79. 79. Split off segments one-by-one
  80. 80. Split off segments one-by-one Separate: - Builds - Infrastructure - Deployments - Versions - Lifecycle
  81. 81. Team needs / responsibilities / capabilities come first
  82. 82. use logging as a channel/vector to make distributed systems more testable Invest in Build & Release Engineering
  83. 83. 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
  84. 84. Monolith-splitting recipe * 1. Instrument 2. Grok behaviour 3. Align teams 4. Split off segments 5. Invest in Build & Release * The simplistic version
  85. 85. 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
  86. 86. Training: 1-day workshop Splitting monolithic software safely without destroying the team training@skeltonthatcher.com
  87. 87. Industry experience
  88. 88. Industry experience Examples from recent work with clients Different monoliths Different ‘fracture planes’
  89. 89. Software for R&D teams Customers: over 80% of top 20 global pharma companies
  90. 90. 2014: Monolithic: builds, releases Pharma GxP: traceability Changes slow and tricky
  91. 91. Fracture plane: business domain
  92. 92. Fracture plane: technology
  93. 93. Compose with packages Logging for insights Technology splits Improved traceability
  94. 94. Major UK broadcaster (TV + online) Increasing digital delivery of content
  95. 95. 2014: Wide mix of technologies Need for visibility of changes Need for rapid turnaround
  96. 96. Fracture planes: read-only, location & cadence
  97. 97. Split off Reporting (read-only) Split on change cadence Increased change throughput
  98. 98. UK’s second largest credit reference agency Customers: major banks + large orgs
  99. 99. 2014: 6-weekly monolithic release Outage-sensitive customers
  100. 100. Fracture planes: risk & business domain
  101. 101. Split releases based on risk Align teams to value streams More rapid release cadence
  102. 102. Software for Internal Comms Customers: FTSE 100 & Fortune 1000
  103. 103. 2015: Successful system (monolithic) ISO 27001 compliance Aim to expand the org (x N)
  104. 104. Fracture plane: business domain
  105. 105. Optimise split for team engagement & personas Minimise ISO 27001 footprint Aided organisation expansion
  106. 106. 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
  107. 107. Training: 1-day workshop Splitting monolithic software safely without destroying the team training@skeltonthatcher.com
  108. 108. Further material
  109. 109. 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
  110. 110. 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/
  111. 111. 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
  112. 112. 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.
  113. 113. 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
  114. 114. thank you Matthew Skelton @matthewpskelton skeltonthatcher.com

×