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

Teams and monoliths - Matthew Skelton - Velocity EU 2016