Subj : extreme programming (thoughts) To : comp.programming From : matt Date : Thu Jul 21 2005 12:41 pm (note: i am not an XP expert, nor have i received formal training in it. rather, im a good developer recently assigned to an xp project. but actually i think thats ok) so last week or so i was put on a different project at work. my new assignment is on the "eXtreme Programming" gig -- for the non-programmers out there, no, im not making this up. its actually called extreme programming (XP). what makes it so extreme? strange haircuts and cardboard guitars? no. technie adrenaline junkies? hardly. free mountain dew? i wish. no, what makes this extreme is that it's extremely stupid. let me explain. in xp, you stick all your programmers into one room together. now, knowing the personal hygiene of some devs, that alone is reason to be wary. next, you give them half as many computer as they need -- yep, we have to share computers, 2 devs to a box. one is the "pilot" the other is the "navigator". this is called paired programming. what more, you do not have a fixed desk, nor partner. everyone rotates machines and partners. better hope youve got your flu shots. oh and at least two daily "stand up" meetings were everyone is forced to, you guessed it, stand up for the duration. that is the physical arrangement. there is more to xp than that. the core idea is nice: fast, flexible design & development. during the stand up meetings you have the devs, designers, and business owners all in the room together for hashing out requirements details. things can & do change, but the cost of development time reflects that, which keeps the biz owners honest. cool. but it starts to get stupid, fast. rather than estimate in hours or days, things are qualfied in "nuts". nebulous units of time (NUTs). each nut is worth a certain number of days, but that figure changes. i think its designed to prevent the biz owners from having quantatative expectations, instead "it's all relative, baby". next is the code. biggest beef: NO COMMENTING ALLOWED! thats right, we're designing highly complicated financial systems, and i'm not allowed to document or include helpful comments for any future developers. the idea is, as explained to me from the lead, is that this forces better code. because when some code starts getting bulky or complicated, you just break it down into smaller methods, and (get this) -- give each method a verbose descriptive name. you mean a name thats like a..comment?! great. so now we remove comments, and add tons of extra methods... in effect making it mandatory for a future programmer to examine (more) program code line-by-line, scrolling around to find & understand dozens of extra methods. how elegant! those poor saps. the last major, major difference is unit testing. rather than draw a design model, program it, add error handling, and send the app to QA, we do massive amounts of programmatic unit testing. by this i mean, write code to test your code. explicity and specifically testing every possible outcome in a futile attempt to write "bulletproof" code. the layers of programmatic development i am forced to code are mind boggling. 80% of my time is spent writing test cases and code, writing methods to insert & remove data for the tests, etc. and this is with the aid of NUnit and NUnitASP, popular tools for this process. and it's still this time consuming. 80% of my time for supporting the other 20%. and you know what? its futile. because in the end, it *still* has to go to QA, and they *still* find bugs -- because when you put complex systems together, weird things happen. theres no quantifiable & programmatically way to get around that simple truth. humans are flawed, thus any system we design will have flaws. EOS. now, put it all together: - days of busywork writing undocumented code, at a cost of two programmers - 10+ people in a room together - no personal desk, space, cube pictures/decorations, etc.. ....and what do you get? a collosial waste of resources, and a de-humanizing workplace. but damn it looks good on paper. so did the commies. matt -- Matt Del Vecchio .