Let's take this thing called ExtremeProgramming and play with it... push its limits. Here are several scenarios that take XP out of its element. How would we do XP in each of these circumstances?
I've learned a lot from these so far. My first motivation in presenting them was to vary things along different axes to figure out what the core of XP is. Secondarily, I was eager to see response to mythical situations that each have a grain of reality in experiences I've had and continue to have.
As an outsider, it appears to me that XP is the ExtremeValues with a set of practices that can be added, removed, or modified as needed. For instance, if you have only one person, you can not do PairProgramming, but you can still conform to ExtremeValues. This seems to tie in to the statement in AreYouDoingXp?:
"Your project is extreme to the degree that you are aware of your software development process, you are aware of when it is working and when it isn't, you are experimenting to fix the parts that aren't working, ..."
The ExtremeValues seem invariant, and among them there is a value (testing) which is also an activity, and it seems to be the one activity that does not seem discardable under any circumstances. One might think that this is very curious, but upon reflection it does not seem so to me. We test our software to verify it. I would suppose that we would test our practices under new situations to verify them. Testing seems to be the core value. Why SpikeSolution, YouArentGonnaNeedIt, etc.? Perhaps because they are tested? Because they embody the ethic of verification. Knowing what you know. Why Refactoring? Because you are always learning. Doing what it takes to learn what is working each step of the way. -- MichaelFeathers
I offer that "rapid feedback from running code" is also core. I was told that refactoring is a non-removable practice in XP. The practices you mentioned that are not testing are all connected to rapid feedback from running code. What I find extreme and interesting in XP is the shortness of their cycle - hours to a day.
In fact, I am willing by now to push hard on it: I suggest that testing is so core to the XP system because it permits the other practices... no testing, and refactoring fails, no refactoring and Do The Simplest Thing fails, no Simplest thing, and daily feedback fails. No daily feedback and you are out of XP. --AlistairCockburn
The above challenges appear technical, what about a set of challenges that are more ... human (can't think of a better word - its late). For example, my brother (LanceWalton) and I are introducing XP into the company we are currently working at. If we mentioned any methodology that had the word 'Extreme' in it the management would run a mile. Consquently we are introducing the concepts one by one (unit testing and refactoring being the main two to start with I feel.) Lance is working on one part of the application with end users and has managed to break away from the usual BigDesignUpFront/NoCodeUntilTheRequirementsAreSignedOff? approach, to an iterative, short cycle involving the end user.
Perhaps...
The way these pages are named (e.g. "ExtremeProgrammingChallengeThirteen") makes them hard to find. Someone asked about refactoring with relational databases, I looked around Wiki for something on it, and completely missed the above article: the title gives almost no information, and I searched the body for "RDBMS", not the "RDBs" mentioned above.
So I duplicated some effort by adding RefactoringWithRelationalDatabases. It would have been nice if the challenge had been named something findable like "XPChallengeRdbms". Is it too late to reform now? --GeorgePaci
Hmmm... I guess these pages don't really have MeaningfulNames and hence the side comments are required and are still insufficient. It's never too late to refactor... I'd suggest renaming this page ExtremeProgrammingChallenges? and renaming each challenge to something more descriptive. XpChallenge[topic] seems like a good standard to follow. -- JasonYip
I vote yea. -- RobHarwood
I concur. How 'bout this: We change the names of each of the individual pages to something meaningful, and then include a backlink to this page. For example, the first one could become ExtremeProgrammingCompilers?, and then at the top of that page you'd say
[ This is ExtremeProgrammingChallenge One. ]Maybe the name changes should maintain the word "challenge" so people are aware of the grouping, or maybe not. The first one could be ExtremeProgrammingCompilerChallenge?, maybe? -- FrancisHwang
Apr 11 2002 -- Unless anybody objects, I'm going to start renaming all the XPChallenge pages soon. -- francis
Possible suggestion: Use XpChallenge for a prefix, since it's easier to type and read.
Are you sure you are up to it, that is quite a task if you include links made to the renamed pages? I estimate that at least 120 pages refer to the pages in question, with 40 for ExtremeProgrammingForOne alone. This is not to mention the number of links existing on search engines referring to the pages, some of which are nearly two years old. I for one think it would be better to leave them as they are named. And as far as being able to find content on the wiki related to "rdbms", the second find option brings up three pages in this series, (ExtremeProgrammingChallenge ExtremeProgrammingChallengeThirteen ExtremeProgrammingChallengeThirteenPointFive), as well as 93 other pages.
And with Microsoft's use of the Xp some confusion might be introduced as to what Xp is meant.
I'm still up to it. But thanks for getting me thinking. Ya know, if this were an entry in the ReFactoring book, it would be broken down into little steps that could be completed without 'breaking the tests'. Normally when I rename a page, I create the new page, copy the stuff over, then change all the backlinks, then delete the old page. The problem with that is if you get lazy and stop before all the backlinks are changed, you end up with two copies of the same page. So, what we should do instead is create the new page, copy the stuff over, replace the old page with a redirect to the new page, then tackle the backlinks later. Then I thought, I guess you don't even have to delete the old page if it would cause too many problems. Then I thought, if we do the first steps of renaming these XpChallenge? pages, we now have an option of whether to complete the deletion or keep the old pages. Nice.
One other thing we need to do is come up with a common header or footer to put on each of the challenge pages for backlinking purposes. I vote XpChallenge? (or maybe ExtremeProgrammingChallenge), CategoryXpCritique, CategoryExtremeProgramming.
See also: ReferDontDelete.
We should also keep in mind that, due to the original unclearness of the page names, there's been a lot of duplication. See XpDatabasesFaq, RefactoringWithRelationalDatabases, UnitTestsAndDatabases -- all of which duplicate some of the content in ExtremeProgrammingChallengeThirteen. (This is what happens when you have unclear names.) We should eventually strive to have those pages merge somehow, which makes me wonder how important the XpChallenge? grouping is, conceptually. -- francis
Conceptually, I think it's important as a form of XpCritique. People can visit and ask, "Well, what's all this XP stuff? I wonder if they've really thought it through." XpChallenge? goes a long way to proving that we have, I think.
ReferDontDelete's premise is that the name is good, it's just not the 'official' name on Wiki. Our premise here is different (bad names, but external links and tradition). The solution is the same, though.