Xp Ina Strange Land

Does XP work when the problem domain isn't well understood?


Some people certainly think so. But there are reasons to think otherwise:

Bulleted italics and [bracketed phrases] in this section begun by RonJeffries. Please interleave further, perhaps we can converge by iteration. This is helping me, if no one else. What is here is all explicit somewhere in the XP pantheon, but it seems to be hanging together nicely here. I'm starting to like it. I hope that doesn't mean Peter is hating it.

So maybe XP isn't the best way to go about exploring a "Strange Land". --PeterMerel

Maybe it isn't. Please describe what would be better. Don't feel it necessary to go as relentlessly far as certain XP people have ... ;->


If nobody has ever done something before, the first people to do it are doing research. Most research projects don't accomplish what they set out. That is why research is risky. (And exciting.) --RalphJohnson

The question is whether XP is a good way to go about such research. I'd certainly be very interested in hearing how you would adapt XP to overcome the 4 objections above. --PeterMerel

XP is not about research, it is about building software. XP tries to solve the problem that the programmers do not know the problem domain and the users don't know how to design software nor how to explain the problem domain to programmers. Suppose that I want to invent a new kind of file system. Perhaps I assume that large, cheap main memory will mean that we can cache most of the active part of the disk, and that writes will become more common than reads. So, it will be faster to treat a file system like a tape, and to write changes at the end in a sequence, i.e. to make a log of changes. Naturally, I do some statistical analysis based on the file systems I've benchmarked in the past. It looks good. Now it is time to build a prototype.

At this point, I could use XP. We'd write user stories (which are just the usual file system user stories, except that we expect the frequency of them to be different and so performance tradeoffs are different), and implement them one at a time. Open a file. Read a file that is on disk. Read a file that has been cached (i.e. read the same file thirty times in the same hour). Write a file. Create a file. Delete a file. Rearrange the disk. Reboot the system. Initialize a new disk.

XP will help us make software that is easy to change. This is good because when I actually try out my file system, I'll probably find out that I made some problems in the specifications. This is a lot like what happens in a payroll system when there is a new union contract. Moreover, XP (supposedly) helps me build the software quickly and inexpensively, so I will have time and money to try out other ideas.

You might object that file systems are a pretty well understood domain. Suppose I wanted to build an air traffic control system using virtual reality. (I've got a bunch of ideas about how to do this). Air traffic control has been around for some time, and there are people who know how to do this. VR is pretty cutting edge, though, and nobody knows whether the combination will work. So, I'd get together with some air traffic control experts, build some mockups (without using any computers at all, just actors!), argue my case, and hopefully get a good plan. Once I had an idea what I wanted to build, I'd get a team of developers and do it. What is wrong with them using XP? Sure, maybe I am a crackpot and my ideas will never work, but that is not the fault of the programmers. As long as they build software quickly for me, and as long as they can keep changing the software as fast as I change my mind, I don't care what programming method they use. Why won't XP work? -RalphJohnson


This page is correct. If your domain causes you this much fear, you should not use ExtremeProgramming. --RonJeffries

This page is entirely wrong. The only way to get past your fear is to face it. You should use ExtremeProgramming. --RonJeffries


Grin, but actually...

You should use ExtremeProgramming ONLY if your domain causes you fear. A key risk that XP mitigates is that developers are not good at prediction (cf. YAGNI). This will be very true when the domain is new to the developers, probably not when the domain is familiar. -- DaveCleal

So when there's no fear, we should use what?

You should do more design up front, because your experience of the domain will shift the balance of the YAGNI forces in that direction (ie the probability of you guessing correctly will increase).


Building from ExtremeProgrammingBoundaryConditions, here are what I feel are the boundary conditions:

As far as I can tell, these are the only boundary conditions. Knowledge of the problem domain does not affect the matter, as far as I can tell. --AlistairCockburn

Alistair, while I have no qualm with ExtremeProgrammingBoundaryConditions, I'm not certain how this addresses the objections raised here. --PeterMerel

Peter, what it means is that I disagree with your analysis, above. I am a die-hard fan of feedback informing both the proces and the design. As XP provides rapid feedback, I expect it to deal well with the mid-course surprises that a new domain will offer. XP really is extreme to me - it seems to kill all the sacred cows at one swoop. The sacred cow of mine it kills is the "thinking" one - I like to think and like to think that thinking is useful. However, when I try XP on an interesting project, I'll get to find out more about that. In the meantime, it seems to have so many feedback mechanisms that I don't think a project will get too far off track.

I said I disagree with your analysis. Here's my reading:

Sorry for the long comments. I felt your sentences merited a fairly full reply. --AlistairCockburn

You are right on on how you select worst: you guess. I would suppose that if you think your estimates of risk are likely to be poor, you'd just rank more things high, and do more spikes. Perfect? No. But what would be better? --RonJeffries


EditText of this page (last edited March 11, 1999) or FindPage with title or text search