SlideShare a Scribd company logo
1 of 45
Benefits of Context in
Software Development
By Frederico Cabral
Person A Person B
Where are you from?
I’m from Vancouver
Person A Person B
Where are you from?
I’m from Canada
? ?
Person A Person B
Where do you want to eat?
Sushi
Pizzaria
What do you want to eat?
Are you nuts?
Benefits of Context in
Software Development
By Frederico Cabral
Use case: Football Fans
Advertiseme
nt
Live Ticker
News
Products
Invoicing
Statistics
Football Fans Subdomains
Let’s dive
into it
Core
Support
Match
+ location (String)
+ when (DateTime)
+ nameTeamA (String)
+ nameTeamB (String)
+ currentScore (Score)
+ status (Status)
+ comments (List<Comment>)
+ score(…)
+ undo(…)
+ comment(…)
Score
+ teamA (Int)
+ teamB (Int)
+ asText(String)
Comment
+ by (String)
+ when (DateTime)
+ content (String)
Status (Enum)
+ Not started
+ Started
+ 2nd half Started
+ Finished
Football Live Ticker Model
Football & Tennis Live
Ticker
Match
+ location (String)
+ when (DateTime)
+ nameTeamA (String)
+ nameTeamB (String)
+ currentScore (Score)
+ status (Status)
+ isGrandSlan? (boolean)
+ comments (List<Comment>)
+ score(…)
+ undo(…)
+ comment(…)
Score
+ teamA (Int)
+ teamB (Int)
+ Sets (List<Set>)
+ asText()
Comment
+ by (String)
+ when (DateTime)
+ content (String)
Status (Enum)
+ Not started
+ Started
+ 2nd half Started
+ Suspended
+ Finished
Set
+ gamesWonPlayerA (Int)
+ gamesWonPlayerB (Int)
+ games (List<Game)
Point (Enum)
+ zero
+ fifteen
+ thirty
+ forty
+ deuce
+ advantage
+ game
Game
+ pointsPlayerA (Point)
+ pointsPlayerB (Point)
+ next(…)
Football & Tennis Live Ticker
Tennis specifics
(and very
simplified for
pedagogical
reasons)
Tennis Only
Football Only
Common
Huge Switch!
Football Score
<> Tennis
Score
Nullables!
Because they
are used for
different
scenarios
Football & Tennis &
Volleyball Live Ticker
Match
+ location (String)
+ when (DateTime)
+ nameTeamA (String)
+ nameTeamB (String)
+ currentScore (Score)
+ status (Status)
+ isGrandSlan? (boolean)
+ comments (List<Comment>)
+ scoreFootball(…)
+ scoreTennis(…)
+ scoreVolleyball(…)
+ comment(…)
Score
+ teamA (Int)
+ teamB (Int)
+ Sets (List<Set>)
+ asText()
Comment
+ by (String)
+ when (DateTime)
+ content (String)
Status (Enum)
+ Not started
+ Started
+ 2nd half Started
+ Suspended
+ Finished
Set
+ gamesWonPlayerA (Int)
+ gamesWonPlayerB (Int)
+ pointsTeamA (Int)
+ pointsTeamB (Int)
+ isTieBreak? (Boolean)
+ games (List<Game)
Point (Enum)
+ zero
+ fifteen
+ thirty
+ forty
+ deuce
+ advantage
+ game
Game
+ pointsPlayerA (Point)
+ pointsPlayerB (Point)
+ next(…)
Volley has sets,
but no “games"
Everything must
be nullable!
Volley use
“Teams" instead
of “Players"
Football & Tennis & Volleyball Live Ticker
MDDP
Monster Decomposition Design Pattern
Rules to mark as
“Finished" are
very unique
Bob
The creator of
Chris (new Joiner)
Must understand
Chris doesn’t know the code
Chris doesn’t know the code
Chris doesn’t know the context
• Code
• Code Design becomes simpler
• Better naming and intention revealing
• Improves code testability
• Productivity
• Decrease cognitive load
• Less side-effects when changing things
(Aka Bugs)
Benefits of Context in Software Development
Microservices
Match
+ location (String)
+ when (DateTime)
+ nameTeamA (String)
+ nameTeamB (String)
+ currentScore (Score)
+ status (Status)
+ isGrandSlan? (boolean)
+ comments (List<Comment>)
+ scoreFootball(…)
+ scoreTennis(…)
+ scoreVolleyball(…)
+ comment(…)
Score
+ teamA (Int)
+ teamB (Int)
+ Sets (List<Set>)
+ asText()
Comment
+ by (String)
+ when (DateTime)
+ content (String)
Status (Enum)
+ Not started
+ Started
+ 2nd half Started
+ Suspended
+ Finished
Set
+ gamesWonPlayerA (Int)
+ gamesWonPlayerB (Int)
+ pointsTeamA (Int)
+ pointsTeamB (Int)
+ isTieBreak? (Boolean)
+ games (List<Game)
Point (Enum)
+ zero
+ fifteen
+ thirty
+ forty
+ deuce
+ advantage
+ game
Game
+ pointsPlayerA (Point)
+ pointsPlayerB (Point)
+ next(…)
Football & Tennis & Volleyball Live Ticker
Score Team?
Status
Management
Team?
Comment Team?
Match Team?
Live Ticker
Comment Team
Score Team
Match Team
Comment
Service
Match
Service
Score
Service
Status Management
Team
Status
Service
Conway’s Law in Practice!
Match
Service
Comment
Service
Status
Service
Score
Service
Live Ticker
Volleyball has new
rules! We need to adjust
Changes
required
We fixed Volley, but we
introduced a bug for Tennis
We need to support
20 new sports
Changes
required
Changes
required
Match Service is down!
X
X
X
Volley
Service
Comment
Service
Tennis
Service
Football
Service
Another approach - Teams oriented by context
"Volleyball has new rules!
We need to adjust”
"We fixed Volley, but we
introduced a bug for Tennis”
"We need to support 20
new sports”
Change
s
required
X
Basketball
Service
"Volley Service is down!"
Other sports not impacted
X
Microservice is the problem
Context dissolved in many
services is the problem
Microservice is the problem
Teams oriented by context
Comment Team
Score Team
Volley Team
Match Team
Football Team
Comment
Service
Match
Service
Score
Service
Status Management
Team
Tennis Team
Status
Service
Changing the teams will
not immediately change
the software
the sooner the better,
otherwise…
More microservices will emerge…
Comment Team
Score Team
Match Team
Status Management
Team
• Architecture
• More insights for Distributed Architecture
• Loosely coupled and strongly cohesive
Microservices
• Team Topology
• Teams with more autonomy
• Less coordination effort
Benefits of Context in Software Development
Bounded Context = Language Boundary
Terms
Rules
Behaviour
Expected
Jargons
Facts and Events
Relationships
“In general, microservices should cleanly
align to bounded contexts. So, if our
service boundaries align to the bounded
contexts in our domain, and our
microservices represent those bounded
contexts, we are off to an excellent
start ensuring that our microservices are
loosely coupled and strongly cohesive”
Building Microservices: Designing Fine-
Grained Systems, page 33
Sam Newman
(@samnewman)
• Code
• Code Design becomes simpler
• Better naming and intention revealing
• Improves code testability
• Productivity
• Decrease cognitive load
• Less side-effects when changing things (Aka Bugs)
• Architecture
• Insights for Distributed Architecture
• Loosely coupled and strongly cohesive Microservices
• Team Topology
• Teams with more autonomy
• Less coordination effort
Benefits of Context in Software Development
How to identify our
Bounded Contexts?
Context can be fuzzy!
“if our models were music, they
would have the unmistakable sound
of completeness, purity,
power, and possibly even elegance
and beauty”
Implementing Domain-Driven Design
Vaughn Vernon
(@VaughnVernon)
• Linguistic boundaries
• Domain expertise
• Flow/Steps*
Some smells…
Event Storming
by Alberto Brandolini
https://www.eventstorming.com/
Bounded Context Canvas
by Nick Tune
https://medium.com/nick-tune-tech-strategy-blog
Domain Storytelling
by Stefan Hofer and Henning Schwenter
https://domainstorytelling.org
Conversation
"a talk, especially an informal one, between two or more people, in which
news and ideas are exchanged.”
(Cambridge Dictionary)
What’s next?
• Deep Dive your Subdomains and
Bounded Contexts
• Understand the relationship
types among your Bounded
Contexts
• Implement your new projects
using Context as the main driver
What’s next?
Domain-Driven Design:
Tackling Complexity in the Heart of Software
Eric J. Evans
Implementing Domain-Driven Design
Vaughn Vernon
Team Topologies: Organizing Business
and Technology Teams for Fast Flow
Matthew Skelton / Manuel Pais
Building Microservices:
Designing Fine-Grained Systems
Sam Newman

More Related Content

Similar to Benefits of Context in Software Development

Application Development and Data Modeling on Amazon DynamoDB
Application Development and Data Modeling on Amazon DynamoDBApplication Development and Data Modeling on Amazon DynamoDB
Application Development and Data Modeling on Amazon DynamoDBAmazon Web Services Japan
 
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB
 
Cloud Gaming Architectures: From Social to Mobile to MMO
Cloud Gaming Architectures: From Social to Mobile to MMOCloud Gaming Architectures: From Social to Mobile to MMO
Cloud Gaming Architectures: From Social to Mobile to MMOAWS Germany
 
Football graph - Neo4j and the Premier League
Football graph - Neo4j and the Premier LeagueFootball graph - Neo4j and the Premier League
Football graph - Neo4j and the Premier LeagueMark Needham
 
Designing Big Data Systems Like a Pro
Designing Big Data Systems Like a ProDesigning Big Data Systems Like a Pro
Designing Big Data Systems Like a ProSoftServe
 
Expanding the idea of static analysis from code check to other development pr...
Expanding the idea of static analysis from code check to other development pr...Expanding the idea of static analysis from code check to other development pr...
Expanding the idea of static analysis from code check to other development pr...Andrey Karpov
 
MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)Peter Presnell
 
Jumpstart: Introduction to MongoDB
Jumpstart: Introduction to MongoDBJumpstart: Introduction to MongoDB
Jumpstart: Introduction to MongoDBMongoDB
 
Graph Database Use Cases - StampedeCon 2015
Graph Database Use Cases - StampedeCon 2015Graph Database Use Cases - StampedeCon 2015
Graph Database Use Cases - StampedeCon 2015StampedeCon
 
Graph database Use Cases
Graph database Use CasesGraph database Use Cases
Graph database Use CasesMax De Marzi
 
Refactoringforddd davidberliner-141006004456-conversion-gate02
Refactoringforddd davidberliner-141006004456-conversion-gate02Refactoringforddd davidberliner-141006004456-conversion-gate02
Refactoringforddd davidberliner-141006004456-conversion-gate02Nina Lubinarskaya
 
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017Eran Stiller
 
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
 DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th... DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...Patrick Viafore
 
Still using MySQL? Maybe you should reconsider.
Still using MySQL? Maybe you should reconsider.Still using MySQL? Maybe you should reconsider.
Still using MySQL? Maybe you should reconsider.Radu-Sebastian Amarie
 
Planning, Designing, Producing, And Costing
Planning, Designing, Producing, And CostingPlanning, Designing, Producing, And Costing
Planning, Designing, Producing, And CostingMarlin Sugama
 
What’s New with Databricks Machine Learning
What’s New with Databricks Machine LearningWhat’s New with Databricks Machine Learning
What’s New with Databricks Machine LearningDatabricks
 
Neo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph DatabasesNeo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph DatabasesNeo4j
 
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)ITCamp
 

Similar to Benefits of Context in Software Development (20)

Application Development and Data Modeling on Amazon DynamoDB
Application Development and Data Modeling on Amazon DynamoDBApplication Development and Data Modeling on Amazon DynamoDB
Application Development and Data Modeling on Amazon DynamoDB
 
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep DiveMongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
MongoDB .local Toronto 2019: MongoDB Atlas Search Deep Dive
 
Cloud Gaming Architectures: From Social to Mobile to MMO
Cloud Gaming Architectures: From Social to Mobile to MMOCloud Gaming Architectures: From Social to Mobile to MMO
Cloud Gaming Architectures: From Social to Mobile to MMO
 
Football graph - Neo4j and the Premier League
Football graph - Neo4j and the Premier LeagueFootball graph - Neo4j and the Premier League
Football graph - Neo4j and the Premier League
 
Designing Big Data Systems Like a Pro
Designing Big Data Systems Like a ProDesigning Big Data Systems Like a Pro
Designing Big Data Systems Like a Pro
 
Expanding the idea of static analysis from code check to other development pr...
Expanding the idea of static analysis from code check to other development pr...Expanding the idea of static analysis from code check to other development pr...
Expanding the idea of static analysis from code check to other development pr...
 
MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)
 
Jumpstart: Introduction to MongoDB
Jumpstart: Introduction to MongoDBJumpstart: Introduction to MongoDB
Jumpstart: Introduction to MongoDB
 
Graph Database Use Cases - StampedeCon 2015
Graph Database Use Cases - StampedeCon 2015Graph Database Use Cases - StampedeCon 2015
Graph Database Use Cases - StampedeCon 2015
 
Graph database Use Cases
Graph database Use CasesGraph database Use Cases
Graph database Use Cases
 
Intro to HTML + CSS
Intro to HTML + CSSIntro to HTML + CSS
Intro to HTML + CSS
 
Refactoringforddd davidberliner-141006004456-conversion-gate02
Refactoringforddd davidberliner-141006004456-conversion-gate02Refactoringforddd davidberliner-141006004456-conversion-gate02
Refactoringforddd davidberliner-141006004456-conversion-gate02
 
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017
Bot-Tender: A Chat Bot Walks into a Bar - TechBash 2017
 
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
 DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th... DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
DevSpace 2018 - Practical Computer Science: What You Need To Know Without Th...
 
Explicit architecture
Explicit architectureExplicit architecture
Explicit architecture
 
Still using MySQL? Maybe you should reconsider.
Still using MySQL? Maybe you should reconsider.Still using MySQL? Maybe you should reconsider.
Still using MySQL? Maybe you should reconsider.
 
Planning, Designing, Producing, And Costing
Planning, Designing, Producing, And CostingPlanning, Designing, Producing, And Costing
Planning, Designing, Producing, And Costing
 
What’s New with Databricks Machine Learning
What’s New with Databricks Machine LearningWhat’s New with Databricks Machine Learning
What’s New with Databricks Machine Learning
 
Neo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph DatabasesNeo4j Aura on AWS: The Customer Choice for Graph Databases
Neo4j Aura on AWS: The Customer Choice for Graph Databases
 
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)
Migrating from eRoom to SharePoint, A Success Story (Valy Greavu)
 

Recently uploaded

What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?Watsoo Telematics
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutionsmonugehlot87
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 

Recently uploaded (20)

What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?What are the features of Vehicle Tracking System?
What are the features of Vehicle Tracking System?
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
buds n tech IT solutions
buds n  tech IT                solutionsbuds n  tech IT                solutions
buds n tech IT solutions
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 

Benefits of Context in Software Development

  • 1. Benefits of Context in Software Development By Frederico Cabral
  • 2. Person A Person B Where are you from? I’m from Vancouver
  • 3. Person A Person B Where are you from? I’m from Canada ? ?
  • 4. Person A Person B Where do you want to eat? Sushi Pizzaria What do you want to eat? Are you nuts?
  • 5.
  • 6. Benefits of Context in Software Development By Frederico Cabral
  • 9.
  • 10.
  • 11. Match + location (String) + when (DateTime) + nameTeamA (String) + nameTeamB (String) + currentScore (Score) + status (Status) + comments (List<Comment>) + score(…) + undo(…) + comment(…) Score + teamA (Int) + teamB (Int) + asText(String) Comment + by (String) + when (DateTime) + content (String) Status (Enum) + Not started + Started + 2nd half Started + Finished Football Live Ticker Model
  • 12. Football & Tennis Live Ticker
  • 13. Match + location (String) + when (DateTime) + nameTeamA (String) + nameTeamB (String) + currentScore (Score) + status (Status) + isGrandSlan? (boolean) + comments (List<Comment>) + score(…) + undo(…) + comment(…) Score + teamA (Int) + teamB (Int) + Sets (List<Set>) + asText() Comment + by (String) + when (DateTime) + content (String) Status (Enum) + Not started + Started + 2nd half Started + Suspended + Finished Set + gamesWonPlayerA (Int) + gamesWonPlayerB (Int) + games (List<Game) Point (Enum) + zero + fifteen + thirty + forty + deuce + advantage + game Game + pointsPlayerA (Point) + pointsPlayerB (Point) + next(…) Football & Tennis Live Ticker Tennis specifics (and very simplified for pedagogical reasons) Tennis Only Football Only Common Huge Switch! Football Score <> Tennis Score Nullables! Because they are used for different scenarios
  • 14. Football & Tennis & Volleyball Live Ticker
  • 15. Match + location (String) + when (DateTime) + nameTeamA (String) + nameTeamB (String) + currentScore (Score) + status (Status) + isGrandSlan? (boolean) + comments (List<Comment>) + scoreFootball(…) + scoreTennis(…) + scoreVolleyball(…) + comment(…) Score + teamA (Int) + teamB (Int) + Sets (List<Set>) + asText() Comment + by (String) + when (DateTime) + content (String) Status (Enum) + Not started + Started + 2nd half Started + Suspended + Finished Set + gamesWonPlayerA (Int) + gamesWonPlayerB (Int) + pointsTeamA (Int) + pointsTeamB (Int) + isTieBreak? (Boolean) + games (List<Game) Point (Enum) + zero + fifteen + thirty + forty + deuce + advantage + game Game + pointsPlayerA (Point) + pointsPlayerB (Point) + next(…) Volley has sets, but no “games" Everything must be nullable! Volley use “Teams" instead of “Players" Football & Tennis & Volleyball Live Ticker MDDP Monster Decomposition Design Pattern Rules to mark as “Finished" are very unique
  • 16. Bob The creator of Chris (new Joiner) Must understand
  • 18. Chris doesn’t know the code Chris doesn’t know the context
  • 19. • Code • Code Design becomes simpler • Better naming and intention revealing • Improves code testability • Productivity • Decrease cognitive load • Less side-effects when changing things (Aka Bugs) Benefits of Context in Software Development
  • 21. Match + location (String) + when (DateTime) + nameTeamA (String) + nameTeamB (String) + currentScore (Score) + status (Status) + isGrandSlan? (boolean) + comments (List<Comment>) + scoreFootball(…) + scoreTennis(…) + scoreVolleyball(…) + comment(…) Score + teamA (Int) + teamB (Int) + Sets (List<Set>) + asText() Comment + by (String) + when (DateTime) + content (String) Status (Enum) + Not started + Started + 2nd half Started + Suspended + Finished Set + gamesWonPlayerA (Int) + gamesWonPlayerB (Int) + pointsTeamA (Int) + pointsTeamB (Int) + isTieBreak? (Boolean) + games (List<Game) Point (Enum) + zero + fifteen + thirty + forty + deuce + advantage + game Game + pointsPlayerA (Point) + pointsPlayerB (Point) + next(…) Football & Tennis & Volleyball Live Ticker Score Team? Status Management Team? Comment Team? Match Team?
  • 22. Live Ticker Comment Team Score Team Match Team Comment Service Match Service Score Service Status Management Team Status Service Conway’s Law in Practice!
  • 23. Match Service Comment Service Status Service Score Service Live Ticker Volleyball has new rules! We need to adjust Changes required We fixed Volley, but we introduced a bug for Tennis We need to support 20 new sports Changes required Changes required Match Service is down! X X X
  • 24. Volley Service Comment Service Tennis Service Football Service Another approach - Teams oriented by context "Volleyball has new rules! We need to adjust” "We fixed Volley, but we introduced a bug for Tennis” "We need to support 20 new sports” Change s required X Basketball Service "Volley Service is down!" Other sports not impacted X
  • 25.
  • 27. Context dissolved in many services is the problem Microservice is the problem
  • 28. Teams oriented by context Comment Team Score Team Volley Team Match Team Football Team Comment Service Match Service Score Service Status Management Team Tennis Team Status Service Changing the teams will not immediately change the software
  • 29. the sooner the better, otherwise…
  • 30. More microservices will emerge… Comment Team Score Team Match Team Status Management Team
  • 31. • Architecture • More insights for Distributed Architecture • Loosely coupled and strongly cohesive Microservices • Team Topology • Teams with more autonomy • Less coordination effort Benefits of Context in Software Development
  • 32. Bounded Context = Language Boundary Terms Rules Behaviour Expected Jargons Facts and Events Relationships
  • 33. “In general, microservices should cleanly align to bounded contexts. So, if our service boundaries align to the bounded contexts in our domain, and our microservices represent those bounded contexts, we are off to an excellent start ensuring that our microservices are loosely coupled and strongly cohesive” Building Microservices: Designing Fine- Grained Systems, page 33 Sam Newman (@samnewman)
  • 34. • Code • Code Design becomes simpler • Better naming and intention revealing • Improves code testability • Productivity • Decrease cognitive load • Less side-effects when changing things (Aka Bugs) • Architecture • Insights for Distributed Architecture • Loosely coupled and strongly cohesive Microservices • Team Topology • Teams with more autonomy • Less coordination effort Benefits of Context in Software Development
  • 35. How to identify our Bounded Contexts?
  • 36. Context can be fuzzy!
  • 37. “if our models were music, they would have the unmistakable sound of completeness, purity, power, and possibly even elegance and beauty” Implementing Domain-Driven Design Vaughn Vernon (@VaughnVernon)
  • 38. • Linguistic boundaries • Domain expertise • Flow/Steps* Some smells…
  • 39. Event Storming by Alberto Brandolini https://www.eventstorming.com/
  • 40. Bounded Context Canvas by Nick Tune https://medium.com/nick-tune-tech-strategy-blog
  • 41. Domain Storytelling by Stefan Hofer and Henning Schwenter https://domainstorytelling.org
  • 42. Conversation "a talk, especially an informal one, between two or more people, in which news and ideas are exchanged.” (Cambridge Dictionary)
  • 44. • Deep Dive your Subdomains and Bounded Contexts • Understand the relationship types among your Bounded Contexts • Implement your new projects using Context as the main driver What’s next?
  • 45. Domain-Driven Design: Tackling Complexity in the Heart of Software Eric J. Evans Implementing Domain-Driven Design Vaughn Vernon Team Topologies: Organizing Business and Technology Teams for Fast Flow Matthew Skelton / Manuel Pais Building Microservices: Designing Fine-Grained Systems Sam Newman