Code Retreat
june 24th 2011 - XEBIA
Welcome
Deliberate Practice

 Improve ability to perform a task


 Repetition, repetition, repetition...


 Not complete the task, but master it.
Simple Design
Run all tests and check they pass.


Don't Repeat Yourself


Reveal intent


Small methods & classes
Open your mind !

Try things you can't try @ work.
Do silly things that just *can't* work...
Explore, experiment.
Pair with as much people as you can
Don't be shy, try new languages.
Introduction

 a session lasts 40 minutes
 followed by a 10-15 minutes retrospective
 pair programming
 swap on each session
 delete all code after each session
Planning
10h00                                         14h00
        Code Session 1     Code Session 4

        Retrospective 1    Retrospective 4
11h00                                         15h00
        Code Session 2     Code Session 5

        Retrospective 2    Retrospective 5
12h00                                         16h00
        Code Session 3     Code Session 6

        Retrospective 3
                                              16h40
13h00                     Day Retrospective
                                              ...
            Lunch

14h00
TicTacToe
TicTacToe rules
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over
Session #1                     10h00 10h40
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over
Rétro #1             10h40 11h00
Does your code work at the end of the session ?
What is your implementation path ?
How was your pair programming experience ?
How was your TDD experience ? How did it help ?
Did you notice any code smells ?
Did you notice any communication smells ?
Any tips for the others ?
Session #2                     11h00 11h40
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over
Rétro #2             11h40 12h00
Does your code work at the end of the session ?
What is your implementation path ?
How was your pair programming experience ?
How was your TDD experience ? How did it help ?
Did you notice any code smells ?
Did you notice any communication smells ?
Any tips for the others ?
Session #3                     12h00 12h40
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over
Rétro #3             12h40 13h00
Does your code work at the end of the session ?
What is your implementation path ?
How was your pair programming experience ?
How was your TDD experience ? How did it help ?
Did you notice any code smells ?
Did you notice any communication smells ?
Any tips for the others ?
Lunch Time !
Session #4                     14h00 14h40
 1. a game is over when all fields are taken
 2. a game is over when all fields in a column are taken by a
    player
 3. a game is over when all fields in a row are taken by a player
 4. a game is over when all fields in a diagonal are taken by a
    player
 5. a player can take a field if not already taken
 6. players take turns taking fields until the game is over


TDD as you meant it || No mouse || Switch keyb.
TDD AS YOU MEANT IT

1. write exactly ONE failing test

2. make this test pass by first writing implementation code IN THE TEST METHOD

3. create a new implementation method by:
   1. doing extract method on implementation code created as per (2), or

   2. moving implementation code as per (2) into an existing implementation
      method

4. only ever create new methods IN THE TEST CLASS

5. only ever create implementation classes to provide a destination for extracting a
   method created as per (4).

6. populate implementation classes by doing move method from a test class into
   them

7. refactor as required

8. go to (1)
Rétro #4             14h40 15h00
Does your code work at the end of the session ?
What is your implementation path ?
How was your pair programming experience ?
How was your TDD experience ? How did it help ?
Did you notice any code smells ?
Did you notice any communication smells ?
Any tips for the others ?
Session #5                     15h00 15h40
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over



     No Loops || No if(s) || Small methods (<5)
Rétro #5             15h40 16h00
Does your code work at the end of the session ?
What is your implementation path ?
How was your pair programming experience ?
How was your TDD experience ? How did it help ?
Did you notice any code smells ?
Did you notice any communication smells ?
Any tips for the others ?
Session #6                     16h00 16h40
1. a game is over when all fields are taken
2. a game is over when all fields in a column are taken by a
   player
3. a game is over when all fields in a row are taken by a player
4. a game is over when all fields in a diagonal are taken by a
   player
5. a player can take a field if not already taken
6. players take turns taking fields until the game is over


     No Loops || No if(s) || Small methods (<5)
Day Retrospective

What did you learn today ?


What were you surprised about today ?


What will you apply starting Monday ?

Code retreat june24th

  • 1.
  • 2.
  • 3.
    Deliberate Practice Improveability to perform a task Repetition, repetition, repetition... Not complete the task, but master it.
  • 4.
    Simple Design Run alltests and check they pass. Don't Repeat Yourself Reveal intent Small methods & classes
  • 5.
    Open your mind! Try things you can't try @ work. Do silly things that just *can't* work... Explore, experiment. Pair with as much people as you can Don't be shy, try new languages.
  • 6.
    Introduction a sessionlasts 40 minutes followed by a 10-15 minutes retrospective pair programming swap on each session delete all code after each session
  • 7.
    Planning 10h00 14h00 Code Session 1 Code Session 4 Retrospective 1 Retrospective 4 11h00 15h00 Code Session 2 Code Session 5 Retrospective 2 Retrospective 5 12h00 16h00 Code Session 3 Code Session 6 Retrospective 3 16h40 13h00 Day Retrospective ... Lunch 14h00
  • 8.
  • 9.
    TicTacToe rules 1. agame is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over
  • 10.
    Session #1 10h00 10h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over
  • 11.
    Rétro #1 10h40 11h00 Does your code work at the end of the session ? What is your implementation path ? How was your pair programming experience ? How was your TDD experience ? How did it help ? Did you notice any code smells ? Did you notice any communication smells ? Any tips for the others ?
  • 12.
    Session #2 11h00 11h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over
  • 13.
    Rétro #2 11h40 12h00 Does your code work at the end of the session ? What is your implementation path ? How was your pair programming experience ? How was your TDD experience ? How did it help ? Did you notice any code smells ? Did you notice any communication smells ? Any tips for the others ?
  • 14.
    Session #3 12h00 12h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over
  • 15.
    Rétro #3 12h40 13h00 Does your code work at the end of the session ? What is your implementation path ? How was your pair programming experience ? How was your TDD experience ? How did it help ? Did you notice any code smells ? Did you notice any communication smells ? Any tips for the others ?
  • 16.
  • 17.
    Session #4 14h00 14h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over TDD as you meant it || No mouse || Switch keyb.
  • 18.
    TDD AS YOUMEANT IT 1. write exactly ONE failing test 2. make this test pass by first writing implementation code IN THE TEST METHOD 3. create a new implementation method by: 1. doing extract method on implementation code created as per (2), or 2. moving implementation code as per (2) into an existing implementation method 4. only ever create new methods IN THE TEST CLASS 5. only ever create implementation classes to provide a destination for extracting a method created as per (4). 6. populate implementation classes by doing move method from a test class into them 7. refactor as required 8. go to (1)
  • 19.
    Rétro #4 14h40 15h00 Does your code work at the end of the session ? What is your implementation path ? How was your pair programming experience ? How was your TDD experience ? How did it help ? Did you notice any code smells ? Did you notice any communication smells ? Any tips for the others ?
  • 20.
    Session #5 15h00 15h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over No Loops || No if(s) || Small methods (<5)
  • 21.
    Rétro #5 15h40 16h00 Does your code work at the end of the session ? What is your implementation path ? How was your pair programming experience ? How was your TDD experience ? How did it help ? Did you notice any code smells ? Did you notice any communication smells ? Any tips for the others ?
  • 22.
    Session #6 16h00 16h40 1. a game is over when all fields are taken 2. a game is over when all fields in a column are taken by a player 3. a game is over when all fields in a row are taken by a player 4. a game is over when all fields in a diagonal are taken by a player 5. a player can take a field if not already taken 6. players take turns taking fields until the game is over No Loops || No if(s) || Small methods (<5)
  • 23.
    Day Retrospective What didyou learn today ? What were you surprised about today ? What will you apply starting Monday ?