Code retreat 
www.mozaicworks.com
www.mozaicworks.com 
Me 
Adi Bolboaca 
Organizational & Technical 
Trainer & Coach
2009, First time outside US
Why? 
Learn through pairing 
Extend your comfort zone 
Practice 
Experiment 
Learn new practices 
www.mozaicworks.com
How? 
1 day of coding 
Choose a simple problem 
6 pairing partners 
On average 135 minutes of coding 
6 different constraints 
A lot of fun! 
www.mozaicworks.com
How it started 
CodeMash conference 2009 
Gary Bernhardt 
Patrick Welsh 
Nayan Hajratwala 
Corey Haines 
www.mozaicworks.com
How it started 
Repeatable 
Day-long 
Practice the fundamentals of programming 
Intense day of coding 
www.mozaicworks.com
Day structure 
15' introduction 
3 sessions of 45' coding + 15' retro&break 
1h lunch 
3 sessions of 45' coding + 15' retro&break 
15' closing circle 
www.mozaicworks.com
Principles 
Language agnostic 
Do not try to finish the problem 
Delete the code after each session 
Focus on practicing 
Experiment each session 
Have fun! 
www.mozaicworks.com
How to take advantage 
1. Embrace the freedom of deleting the code 
2. Do what you always wanted but couldn't 
3. Get out of your comfort zone 
4. Pair with strangers in languages you don't know 
5. What you learn is your responsibility
Prerequisites 
Computer 
Coding environment 
Testing framework 
Source control (git, svn, etc) 
www.mozaicworks.com
The four elements of simple design 
1) Passes its tests 
2) Minimizes duplication 
3) Maximizes clarity 
4) Has fewer elements 
www.mozaicworks.com
Conway's game of life 
Having an infinite 2D orthogonal universe 
Being given an initial generation called a seed 
The following rules are applied simultaneously 
A live cell having less than 2 live neighbors dies 
A live cell having 2 or 3 live neighbors lives 
A live cell having more than 3 neighbors dies 
A dead cell having 3 neighbors becomes alive 
www.mozaicworks.com
Session 1: Understand the problem 
Find a pair 
Choose a programming language 
Setup the environment 
Choose an entry point for the problem 
Start in 5 min 
www.mozaicworks.com
Conway's game of life 
Having an infinite 2D orthogonal universe 
Being given an initial generation called a seed 
The following rules are applied simultaneously 
A live cell having less than 2 live neighbors dies 
A live cell having 2 or 3 live neighbors lives 
A live cell having more than 3 neighbors dies 
A dead cell having 3 neighbors becomes alive 
www.mozaicworks.com
Session 2: Full test coverage 
100% test coverage during the session 
When test is below 100% the facilitator stops you 
from adding functionalities until the coverage is 
back at 100% 
All your tests must contain the assert 
Install a code coverage tool for your language 
www.mozaicworks.com
Session 3: Object calisthenics 
Concepts 
Use only one level of indentation per method 
Don’t use the else keyword 
Wrap all primitives and strings 
Use only one dot per line 
Don’t abbreviate 
Keep all entities small 
Don’t use any classes with more than two instance 
variables 
Use first-class collections 
www.mozaicworks.com 
Don’t use any getters / setters / properties
Code retreat 
1 hour Lunch 
www.mozaicworks.com
Session 4: Taking Baby Steps 
1) Initialize source control repository 
2) Start a timer for 2 minutes 
3) Write exactly one test 
a) Timer rings, the test is red, then revert and go to 2) 
b) The test is green before the timer rings, then commit 
4) Restart timer 
5) Refactor 
a) Timer rings, the refactoring is not complete then revert and 
restart 
b) The refactoring is complete before the timer rings, commit 
and go to 2) 
Obs. 
The timers must run continuously, don't stop to talk! www.mozaicworks.com
Session 5: Brutal Refactoring Game 
www.mozaicworks.com 
1) Lack of tests 
2) Name not from domain 
3) Name not expressing intent 
4) Unnecessary if 
5) Unnecessary else 
6) Duplication of constant 
7) Method does more than 
one thing 
8) Primitive obsession 
9) Feature envy 
10) Method too long (> 6 lines) 
11) Too many parameters (> 3) 
12) Test – not unitary 
13) Test – setup too complex 
14) Test – unclear Act 
15) Test - more than one assert 
16) Test – no assert 
17) Test – too many paths
Session 6: Choose a 
constraint 
Each pair to choose their own constraint 
www.mozaicworks.com
Closing circle 
1) How did you feel? 
2) What did you learn today? 
3) What will you do differently tomorrow? 
www.mozaicworks.com
Code retreat 
Why? 
Learn through pairing 
Extend your comfort zone 
Practice 
Experiment 
Learn new practices 
www.mozaicworks.com
Contact me 
● Remote pair-programming 
● Unit testing workshop 
● Test driven development workshop 
● Clean code workshop 
● Refactoring workshop 
● Legacy code retreat 
● Working FAST and Safe with existing 
code 
● Code retreat 
www.mozaicworks.com
Code retreat 
Extend your mentoring & training capacity 
Accelerate learning through communities 
of practice 
Grow your functional leaders and top 
talents 
http://www.mozaicworks.com 
adrian.bolboaca@mozaicworks.com 
@adibolb

Coderetreat @AgileFinland Helsinki 2014 11 13

  • 1.
  • 2.
    www.mozaicworks.com Me AdiBolboaca Organizational & Technical Trainer & Coach
  • 3.
    2009, First timeoutside US
  • 4.
    Why? Learn throughpairing Extend your comfort zone Practice Experiment Learn new practices www.mozaicworks.com
  • 5.
    How? 1 dayof coding Choose a simple problem 6 pairing partners On average 135 minutes of coding 6 different constraints A lot of fun! www.mozaicworks.com
  • 6.
    How it started CodeMash conference 2009 Gary Bernhardt Patrick Welsh Nayan Hajratwala Corey Haines www.mozaicworks.com
  • 7.
    How it started Repeatable Day-long Practice the fundamentals of programming Intense day of coding www.mozaicworks.com
  • 8.
    Day structure 15'introduction 3 sessions of 45' coding + 15' retro&break 1h lunch 3 sessions of 45' coding + 15' retro&break 15' closing circle www.mozaicworks.com
  • 9.
    Principles Language agnostic Do not try to finish the problem Delete the code after each session Focus on practicing Experiment each session Have fun! www.mozaicworks.com
  • 10.
    How to takeadvantage 1. Embrace the freedom of deleting the code 2. Do what you always wanted but couldn't 3. Get out of your comfort zone 4. Pair with strangers in languages you don't know 5. What you learn is your responsibility
  • 11.
    Prerequisites Computer Codingenvironment Testing framework Source control (git, svn, etc) www.mozaicworks.com
  • 12.
    The four elementsof simple design 1) Passes its tests 2) Minimizes duplication 3) Maximizes clarity 4) Has fewer elements www.mozaicworks.com
  • 13.
    Conway's game oflife Having an infinite 2D orthogonal universe Being given an initial generation called a seed The following rules are applied simultaneously A live cell having less than 2 live neighbors dies A live cell having 2 or 3 live neighbors lives A live cell having more than 3 neighbors dies A dead cell having 3 neighbors becomes alive www.mozaicworks.com
  • 14.
    Session 1: Understandthe problem Find a pair Choose a programming language Setup the environment Choose an entry point for the problem Start in 5 min www.mozaicworks.com
  • 15.
    Conway's game oflife Having an infinite 2D orthogonal universe Being given an initial generation called a seed The following rules are applied simultaneously A live cell having less than 2 live neighbors dies A live cell having 2 or 3 live neighbors lives A live cell having more than 3 neighbors dies A dead cell having 3 neighbors becomes alive www.mozaicworks.com
  • 16.
    Session 2: Fulltest coverage 100% test coverage during the session When test is below 100% the facilitator stops you from adding functionalities until the coverage is back at 100% All your tests must contain the assert Install a code coverage tool for your language www.mozaicworks.com
  • 17.
    Session 3: Objectcalisthenics Concepts Use only one level of indentation per method Don’t use the else keyword Wrap all primitives and strings Use only one dot per line Don’t abbreviate Keep all entities small Don’t use any classes with more than two instance variables Use first-class collections www.mozaicworks.com Don’t use any getters / setters / properties
  • 18.
    Code retreat 1hour Lunch www.mozaicworks.com
  • 19.
    Session 4: TakingBaby Steps 1) Initialize source control repository 2) Start a timer for 2 minutes 3) Write exactly one test a) Timer rings, the test is red, then revert and go to 2) b) The test is green before the timer rings, then commit 4) Restart timer 5) Refactor a) Timer rings, the refactoring is not complete then revert and restart b) The refactoring is complete before the timer rings, commit and go to 2) Obs. The timers must run continuously, don't stop to talk! www.mozaicworks.com
  • 20.
    Session 5: BrutalRefactoring Game www.mozaicworks.com 1) Lack of tests 2) Name not from domain 3) Name not expressing intent 4) Unnecessary if 5) Unnecessary else 6) Duplication of constant 7) Method does more than one thing 8) Primitive obsession 9) Feature envy 10) Method too long (> 6 lines) 11) Too many parameters (> 3) 12) Test – not unitary 13) Test – setup too complex 14) Test – unclear Act 15) Test - more than one assert 16) Test – no assert 17) Test – too many paths
  • 21.
    Session 6: Choosea constraint Each pair to choose their own constraint www.mozaicworks.com
  • 22.
    Closing circle 1)How did you feel? 2) What did you learn today? 3) What will you do differently tomorrow? www.mozaicworks.com
  • 23.
    Code retreat Why? Learn through pairing Extend your comfort zone Practice Experiment Learn new practices www.mozaicworks.com
  • 24.
    Contact me ●Remote pair-programming ● Unit testing workshop ● Test driven development workshop ● Clean code workshop ● Refactoring workshop ● Legacy code retreat ● Working FAST and Safe with existing code ● Code retreat www.mozaicworks.com
  • 25.
    Code retreat Extendyour mentoring & training capacity Accelerate learning through communities of practice Grow your functional leaders and top talents http://www.mozaicworks.com adrian.bolboaca@mozaicworks.com @adibolb