- Small releases - When you write code, getting feedback is very important. This feedback can come on several levels. On the lowest level, you check that any piece of code you write compiles and works correctly. On the highest level, you want to get feedback from the customer to be sure that as a whole the system is functioning correctly. XP encourages "small releases" in order to receive such feedback as often as possible. It's a good idea, since feedback adds to confidence, and condifence adds to productivity (similarly to testing). It's not very simple to implement "Small releases" though. The customer is not always delighted to cease all work, re-install a newer release and combat its problems, so it doesn't always work.
- Testing - I can't say enough good things about the habit to test a lot. It's a blessing, it makes programming much easier. I just wish that every piece of software was easy to test. How do you test graphical components, UIs, etc ? How do you test reports when their format changes often ? But wherever possible, testing should be embraced. I'm not sure one must write tests first, IMHO if one's disciplined enough, tests can be written after the code as well.
- Refactoring - I wrote a whole review about *the* Refactoring book (Fowler's), just just a quick one: Without a testing suite, refactoring is extremely dangerous. Paired with a good, thorough testing suite, refactoring is terrific.
- 40-Hour week. I'm a big believer in Parkinson's Law (work expands into the time limits assigned to it), so 40-hour weeks sound good. We should always take work not too hard... there are many *truly* important things in life, long work hours is not one of them. Naturally, spurts of overtime are sometimes necessary, so Beck puts it very accurately: a little overtime here and there is OK, but if your team is working overtime the second week in a row, it smells like trouble.
- Pair programming - It's funny to note that I've experienced pair programming long before XP came to the headlines. Circa 1998, when I just learned to program (in C), a friend of mine (who also just learned to program...) and I got to write a text soccer simulation program. It's a few KLOCs, and we wrote it together - *real* pair programming. Sometimes I'm "at the wheel" an he's sitting by my side, throwing ideas and correcting small errors on the fly, sometimes he's "at the wheel", etc. It was really nice, and I think it proved itself, since it really had very few defects, and those were simple. Back to the book though...
- I think that the image Beck presents in the book is an over-simplified perfection. I find it hard to believe that in a 1 million LOC project every programmer will know every part of the code because of pair programming - this is just too much code/complexity to keep in the brain. This is another point that questions the validity of all-pair-programming on very large projects. To Beck's defense, in chapter 25 he raises the point that XP doesn't work well with big teams. But small projects are simple anyway, people ARE looking for solutions for big teams/projects. On the other hand, one may argue that many of the best software projects we now use were developed by a small team of very skilled programmers. This is not the point though. Big projects often involve a large number of mostly mediocre programmers, and the "silver bullet" everyone is looking for is some way to make these big teams work to deliver good results.
Book review: "Extreme Programming explained" by Kent Beck
For comments, please send me an email.