"All Hands on Deck" 
Pragmatic 
Architecture 
for Agile Teams 
Janne Sinivirta / @v3rtti 
geecon prague 2014
Outline 
Where are we now and why? 
How can we be better? 
1. Balance 
2. "All Hands on Deck" 
3. Team vs. Organization 
4. Domain Modeling 
5. Documentation
Forgotten Architecture
Where are we now?
Conspiracy?
Bad Rap 
for Architecture
How can we be better? 
1. Balance
BDUF vs. YAGNI 
Big Design Up Front vs. You Aren't Gonna Need It 
* see "Balancing Agility and Discipline" by Barry Boehm and Richard Turner
MVP and Architecture 
Agile is all about emergent design 
Architecture gives the code a place to grow 
Designing architecture only for MVP is short-sighted 
Architecture from tests only .. is horse shit! 
- Uncle Bob Martin
The Dilemma of 
Last Responsible 
Moment 
Recognize hard problems 
Start early and prototype
How can we be better? 
2. All Hands 
on Deck
In Hurry to 
Wait
Team Decisions 
Architecture is too important to be left for the architect.
Modern Architect
Kaizen 
Optimizing the organization and the value stream.
How can we be better? 
3. Team vs. 
Organizatio 
n
Local and Fast 
Allow local decisions 
Ensure feedback both ways
Conway's Law
No organization 
There's no organization. Just people. Get to know them!
How can we be better? 
4. Domain 
Modeling
Domain Dictionary 
Aim for common language in team 
Reduce misunderstandings 
Don't conquer all with single dictionary 
Create with stakeholders 
Aliases that combine multiple terms/concepts
What the system.. 
IS vs DOES 
Data vs Algorithm 
Plan for change 
Traits?
Languages, paradigms 
and patterns 
Modeling variance 
Language features > libraries > design patterns
Role of DSL's 
Modern languages support DSL creation 
DSL often end up restrictive or fragile 
"Nothing says screw you like a DSL" 
- Stuart Halloway
Users and Domain 
Experts 
Genchi Genbutsu (x˜x) Go and see for yourselves! 
Matching users mental model 
Future proofing with crazy ideas
How can we be better? 
5. Documentation
Basics 
Who's the reader? 
Code as forward thinking documentation 
Document relationships that are not visible from code
Must-have documents 
External integrations diagram 
Created with PlantUML
Must-have documents 
Internal component diagram 
Created with PlantUML
Must-have documents 
Domain Model as Code 
https://github.com/NitorCreations/DomainReverseMapper
Must-have documents 
Internal component diagram 
External integration diagram 
Domain model as code 
Domain dictionary 
Decision log
Summary 
Design enough, early enough 
Architecture is a team responsibility 
See for yourself! is essential in good design 
Document things that are not visible from code
Thank you! 
Questions? 
Janne Sinivirta / @v3rtti

Pragmatic Architecture for Agile Teams - GeeCON 2014