How pair programming and test-driven development looks in real life

Pair programming and test-driven development are some of the practices that are most often talked about and least often actually understood. So I’ve decided to undertake the task to teach myself to program a simple, yet realistic problem with a pair programming partner. The goal is to create an entertaining and realistic performance that portrays what it feels like to work like this.

I’ve been extremely lucky. I’ve found not one, but two programmers that have been willing to train enough with me to make a smooth performance of a pair programming session. The result is the Java EE Spike Kata. My colleagues in Steria, Anders Karlsen and Ivar Nilsen have been great to work with. Between us, we’ve showed the kata at three conferences, and more are coming.

Here is the performance at JavaZone 2010 by Anders Karlsen and myself.

The Java EE Spike Kata from JavaZone on Vimeo.

Make sure to watch the video in full screen mode as there will be LOTS of code.

Some things to watch for when you’re watching a (paired) code kata:

  • How are we working together? How often are we changing who’s at the keyboard? What will the person who’s not at the keyboard be doing?
  • How do we progress from one test to the next? When do we decide to modify an existing test and when do we decide to add a new one? How much of the test do we write before we start modifying the production code?
  • How are we writing the production code? How often are we refactoring existing code?
  • How are we using the IDE? What tricks do we use to take advantage of the code completion facilities? How often do we use the mouse and how often do we use the keyboard?

I also hope to be putting up the video of me and Ivar Nilsen at the TelecomCity conference in Sweden. As we’d both practiced even more for that performance, I think it’s even smoother than the JavaZone performance.

Enjoy!

(Kudos to Cisco Norway, formerly Tandberg, for excellent filming services at JavaZone. And thank you to Robert “Uncle Bob” Martin for turning me on to code katas in the first place)

About Johannes Brodwall

Johannes is Principal Software Engineer in SopraSteria. In his spare time he likes to coach teams and developers on better coding, collaboration, planning and product understanding.
This entry was posted in English, Extreme Programming, Java, Pair programming, video. Bookmark the permalink.
  • Abc

    You should be spending less than 20 minutes getting equals and hadcode right since it distracts the audience from what you’re trying to show

  • Hi, Abc. Thanks for asking. The point of implementing equals (we don’t implement hashCode), is to show the audience ping-pong programming on a very fine level of granularity.

  • Very well presented!

  • Øistein

    Reminds me of the time we did this presentation @NTNU together. Definitely something useful for most developers. Especially the use of keyboard + eclipse and the awesome toolkit of mockito, junit, and fest-assert. Did you ever get around to trying fest-reflect?

  • Yeah, that was a fun presentation, wasn’t it?

    I haven’t tried out FEST-reflect. The things I mostly want to do with reflection is to iterate over fields or methods, and FEST-reflect seem to be mostly geared towards getting fields when you have the name as a string already.

  • Alenmilk

    Hello, the video is not working anymore.
    That’s a shame since I wanted to use it to teach TDD and the version on javazone.no is not good enough to actually read the text.
    Could you upload it again please?

  • Hi, Alan

    Thank you for the heads up, and thank you a lot for the interest. :-). The video seems to be having some problems on blip.tv, so, I have replaced the embedded video with a link. Please let me know if this works for you.

  • Alenmilk

    Is there source code available from this presentation by any chance?

  • Hi, Alen

    Here is the end of the kata we showed at JavaZone: https://github.com/jhannes/java-ee-spike-kata/tree/jz2010-3-fin

  • Pingback: Django | Coding Is Like Cooking()