Tuesday, August 07, 2007

Pair Programming


In PairProgrammingMisconceptions Martin Fowler makes some very good points and I agree with everything that he writes. However, I think that there is an important point that he has not mentioned: what are the alternatives?


In traditional software engineering projects, there has been widespread use of peer review (design reviews, code inspections, code walkthroughs etc.) as a means of improving code quality. Pair Programming provides a more efficient means of reviewing both design decisions and code.


Over the last few years I've noticed a tendency in many organisations to dispense with code reviews without replacing them with anything, let alone pair programming. If developers don't think that anyone else will have to read their code, code quality in terms of defect density and ease of maintenance will suffer.

Saturday, June 09, 2007

Is the Toyota Production System Responsible for Toyota's Success?

In April of this year it was announced that Toyota had overtaken General Motors as the largest manufacturer of automobiles in the world in terms of vehicles sold. It seems that they will maintain this lead for some time to come. Interesting, a Toyota representative played down the achievement stating that they were focussed on meeting customer needs rather than winning a race.


The Toyota Production System and the Toyota Development System, initially developed in the 1940s and 1950s and publicized in the west in the 70s and 80s, were primary inspirations for the Lean and Agile movements. So is "The Toyota Way" responsible for Toyota's success? According to a report that I overheard on BBC World Service Radio, yes, at least partially. They mentioned the Toyota Production System and stated that it is now used by most automobile manufacturers. Maybe the superficial details of the production system itself are even used by GM, but the Toyota Production System is based on much more which, according to anecdotes that I have heard, has not been adopted by GM.


The Toyota way is based on respect for their workers and embodies important principles such as self-organisation and adaptive processes that are so important when managing complex systems. It also applies the principle of eliminating waste, so if, for example, a machine needs to be moved to enable a team to do its job better, it will happen without jumping through hoops.


All of this does not sit comfortably with a prescriptive command and control approach, yet many Western organisations remain tied to such practices. In many cases, particularly when there is a crisis, the instinct of Western organisations (including governments) is to add additional controls to their processes (in the form of rules, laws etc.). This is often the opposite of what is required - give people the resources that they need, make them feel that they are truly valued and respected and they will deliver the results.

Thursday, June 07, 2007

TDD Workshop

I recently led a test-driven development (TDD) workshop for the team that I am currently coaching. We've been working together for several Sprints (every Sprint bar none has resulted in valuable functionality that has been put into production). We've previously looked at unit tests in detail and I had made a strong recommendation to try to write the tests before the code under test. Over the last couple of Sprints, the quantity and quality of unit tests in the product has increased dramatically.


One of the outcomes of our last retrospective was that the team requested that we revisit the area, this time focusing on TDD. So I scheduled a couple of hours for a workshop.

I kicked the workshop off with a few slides to explain the philosophy behind TDD, explaining that TDD is not just about testing (or even mainly about testing) but has a great deal to do with design and documenting what services the code provides. I found a quote from Bob Martin that I really like:
“The act of writing a unit test is more an act of design than of verification. It is also more an act of documentation than of verification. The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function”.
The introduction led to an extensive discussion about the pros and cons of TDD. In this type of situation, I'm not looking to convince people that a particular technique is valuable (you can't make people believe in something) but to get them to try it out and then reflect on whether it works for them and the team.

I fired up Eclipse and went through some examples (based on material from Frank Westphal's excellent book Testgetriebene Entwicklung mit JUnit und FIT).

By the end of the workshop, everyone had agreed to give TDD a try in the current Sprint. As normal, we'll reflect on our experiences at our end of Sprint retrospective.

Second Talk on Agile at CDTM

I was recently invited to do another talk on agile methods at the Center for Digital Technology and Management in Munich, Germany.

This time, the talk covered the following areas:

  • user stories
  • agile estimating and planning
After examining some of the characteristics of good user stories, the students practiced writing some (with "As a ..., I want ..., so that ..." clauses and acceptance tests on the back).

We then used the planning poker technique to estimate some user stories for the team's first Sprint.

Once gain, thanks very much to Ana Balevic for organising and hosting the talk and to the students for some interesting questions and discussion.

Saturday, May 26, 2007

Talk on Scrum and SOA at the CDTM in Munich

I was recently invited to talk about Scrum and SOA at the Center for Digital Technology and Management in Munich, Germany. The CDTM is a partnership between two Munich universities and cooperates closely with industry. It's aim is to "prepare the students for future leadership positions in their professional career."

The talk was provided as a part of a course that introduces students to an agile approach to SOA development. During the course, real functionality will be developed and demonstrated to industry partners.

The talk covered the following areas:
  • What is agile?
  • Why do we do agile software development (what are the issues with traditional methods and how does agile make it better in many cases)?
  • The agile manifesto, key values, principles and practices.
  • Key success factors and pitfalls for agile projects.
  • An introduction to Scrum.
  • The Dysfunctional Scrum exercise.
  • Case studies - different ways of approaching building an SOA-based system using Scrum, based on my experience coaching different projects and teams.
Thanks very much to Ana Balevic for organising and hosting the talk and to the students for some very interesting questions and discussion.

Friday, January 26, 2007

Scrum auf Deutsch

We've translated Mike Cohn's re-distributable "Introduction to Scrum" into German. You can get it here. It's licensed using the Creative Commons Attribution-NonCommercial-ShareAlike License. Please let us know if you make improvements.

Thursday, January 25, 2007

Planning Poker


Planning Poker
Originally uploaded by sjroberts.
The estimates are starting to converge but there are still some significant differences. The participants are discussing the high and low estimates.

Friday, January 19, 2007

It's the end of the first week with a new client in Munich. Despite the storm on Thursday (didn't impact Munich too much apart from the S-Bahn being suspended from 20:00 on Thursday night) we've made some great progress.

I've tried to do a lot of listening this week and have taken part in several meetings as an observer. Some of the other activities this week have included:

  • Team formation. The pilot project will be reasonably large with in excess of 10 active team members. My recommendation has been to split this team into 2 Scrum teams, each of which sits together and tackles vertical slices of functionality based initially on particular functional areas. This recommendation has been, in principle, taken on board. We're still sorting out some of the seating arrangements.
  • Training workshops. We've identified three days of training to which the team members will be invited. The first of these, focussing on agile values and principles took place on Thursday. Unfortunately, the exercise that I usually like new agile inductees to do on the first day (based on the well-known XP Game), had to be abandoned due to the storm warning. We captured lots of useful insight into some of the key issues that will be encountered as this client tries to introduce agile methods. I'll be maintaining a log of these issues and tracking how we address them. The next workshop will on Friday next week when we'll be taking a closer look at Scrum and User Stories and putting the theory into practice with a fun exercise.
  • Product backlog. We've started to create the product backlog. Today I facilitated a User Story writing workshop for one of the functional areas. This had real customer involvement and produced some really useful results. It went quite slowly but definitely a good start and subsequent workshops will get faster.

Other Munich observations:

  • I last worked in Munich in 1993. Either it's changed a lot or I have, or perhaps we both have. It seems much more open and more multi-cultural and a more comfortable place to be. I feel good here.
  • I've been staying in the Derag Max Emmanuel Hotel in the Munich area Haidhausen. My room is effectively a small apartment with its own mini-kitchen and even a small terrace. Very good value (80 Euro a night), clean and comfortable - recommended. I found the hotel through ratestogo.com. All other web sites that I tried when looking for accommodation had very limited availability due to the Bau 2007 trade fair that has been taking place this week. The web site was uncomplicated, they have a fair cancellation policy and they had accommodation available when others didn't - also recommended.