Friday, January 14, 2005

Reflections on Extreme Programming

by Asim Jalis

There is a subtle problem with XP. These problems are hard to get at. Often I know something is wrong, but I can't quite explain it. There is a phenomenon, which I have noticed and Ward Cunningham also mentioned in a conversation, and this is that after a while XP teams tend to get bored with programming. There are different explanations for this. Regardless of what explanation we come up with the phenomenon should be noted. Even if we cannot explain it, this is something that happens. I have noticed it on all the teams I have worked on. One explanation is that people get bored because XP eliminates the challenge of writing big code. It makes writing bug free code relatively easy. Another thought is that XP eliminates hubris. The work that is done to create a system is so diluted across the team that it is not possible to look at something and say, I did this. On most XP teams it is possible to eliminate a member without a significant loss in team capability. Also the deep consensus that is required for most decisions, dumbs everything down. Truly innovative and crazy ideas have almost a zero likelihood of making it into an XP code base. Let me give you an example of this last one. Windows has a component called WMI which is like a giant database that allows you to change the system programmatically. You can create a share, change file permissions, read and set system properties, all from this single database interface. So we're writing code which contains SQL strings embedded in it. It would be much neater to write some kind of a code generator that created C# objects corresponding to the WMI objects, so this SQL did not need to be written. The team argues (in a very XP way) that this is YAGNI. We just need two classes, and these can easily be written by hand. And so the classes are written. Over time they evolve and have lots of really specialized logic around them. Once you go for a specialized solution instead of the general solution, the special solution evolves and acquires all kinds of idiosyncracies which make it really hard to refactor it. Also, the team never really sees the value of the general solution so it is impossible to sell the big refactoring to them later. On an individual project it is much easier to be clever, and then to bask in the hubris that comes from knowing that the cleverness has paid off. This might be one reason why many people who do XP at work do personal projects at home. The personal projects satisfy that craving for personal achievement that XP somehow excludes. Now, there might be XP teams which have avoided this. But somehow in all the teams I have been in, I have experienced this kind of boredom with the work over time. The work gets so dumbed down that it loses it's ability to engage.