[Update... be sure to read the comments where Raymond Lewallen corrects me]
Ok, after about a year of hearing people write about the glories of Extreme Programming, I think I get it. More importantly, I think I might want to do it (at least part of it). Let me explain what I think I know and then someone else can come behind and correct me.
My understanding of XP is that it starts with this premise: the customer knows what they want, but they can't articulate it, so you get the user to give you the big picture and ask what parts of the big picture are absolutely essential.
Once you have the concept for the essential pieces the development team goes off and builds just these pieces using patterns (if they apply, but don't force yourself into patterns), test driven development, refactoring, and pair programming (did I miss anything?). Spec documents are created if it seems that they will be helpful (XP seems to be light on documentation...although I could be wrong on this). The goal in the actual development is to do 3 thing: produce quality work, produce the simplest app that satisfies the requirements,and produce an app that is easy to change (because your app will change).
Next the app is shown to the client again (and you want this to happen ASAP). The client then either says that you have it right or the client explains what needs changed (editing is always easier than starting with a blank slate). If the client has changes you go through another short development cycle; if the app is correct then you find out what the next most important feature is and you go through another short dev cycle to produce this new requirement (once again spec doc are updated if it makes sense to have docs). Repeat, rinse, recycle.
Estimates are the hard part, but I think what gets said is that I estimate 2 months will be all that it will take (or we will work for 2 months and see where we are at). At the end of 2 months you may not have the complete app,but you may also have something that includes features not dreamed of in the original spec; you will also have the most important features built.
The only other thing is that the customer has to be committed to solving any problems and providing info that the developers need.
So what did I miss? Do I get it?