Questioning Extreme Programming 492
Questioning Extreme Programming | |
author | Pete McBreen |
pages | 186 |
publisher | Addison-Wesley |
rating | 9 |
reviewer | David Kennedy |
ISBN | 0201844575 |
summary | A critical but fair re-examination of all of XP. |
In short:
This is bound to a controversial and widely read title -- it is a critical but fair re-examination of all of XP's assumptions and core practices. It provides a much needed comparison of XP with other, less popular, methodologies. Overall, XP emerges favourably, with one serious caveat -- the author concludes that XP is only suitable for a very narrow range of projects, and those that can fulfill all requirements probably stand a significant chance of succeeding using any of the similar methodologies. As with programming languages, there is no silver bullet -- put XP in your methodology toolbox, know when it is appropriate and only use it then.
A couple of interesting specifics:
- The author specifically argues, and I agree, that what the XP literature badly needs is a DSDM 'suitability filter' to advise project leaders as to whether XP is for them.
- In the preface, Kent Beck describes the On-Site Customer role as a team, and not an individual role.
The Extreme Programming Series
This is the 8th title in The Extreme Programming (XP) Series from Addison-Wesley, surely the most widely read series on a software methodology ever! (If that isn't achievement enough, XP also made testing sexy again. I hear that accountancy firms are looking for Kent Beck to do Public Relations work ...) For those of you who have been living under a rock for the past couple of years the previous titles are:
- Extreme Programming Explained (Beck)
- Planning Extreme Programming (Beck & Fowler)
- Extreme Programming Installed (Jeffries et al)
- Extreme Programming Examined (Succi & Marchesi)
- Extreme Programming in Practice (Newkirk & Martin)
- Extreme Programming Explored (Wake)
- Extreme Programming Applied (Auer & Miller)
This new addition to the XP library feature a foreword by Kent Beck. This is important as many of the reactionary XP fan-club will not like this book -- it challenges XP, and I am delighted to see this title as part of the series. Beck admits he doesn't agree with McBreen's conclusions, but asks you to read the book and decide for yourself, conceding that the arguments are fair and reasoned. I come from a scientific background and distrust anything except wide open debate, a position many who welcome XP will surely agree with. A book challenging XP can only help persuade people to give it a go, by addressing their fears and explaining how to manage any real risk.
Check your sources
Pete McBreen is the author of the excellent Software Craftmanship: The new imperative, a 2002 title from Addison-Wesley. In it he outlines an alternative to the software factory model behind much of traditional software engineering thinking. He proposes a collaborative model with small teams, where the software coder is seen as a craftsman in constant dialogue with the customer. Sound familiar? It should, this is a cross between a methodology and book of advice for career programmers, and fits squarely within the values proposed by the Agile Alliance, and arguably popularised most by XP.
I highly recommend Software Craftmanship, and can think of few authors who are as well positioned to give an analysis of XP as it currently stands.
What is the book about?
Questioning Extreme Programming does just that -- it's the first title in the series to take a skeptical look at the rise of this popular methodology and question some of the key assumptions. Arguably there was material like this buried in Extreme Programming Examined, but it suffered from a fragmented, detailed view, due to it being a bound set of conference papers.
The author tackles XP in a fair way -- he's extremely excited by the methodology, and it's clearly in accord with his own preferred approach. What he does is tackle each of the XP tenets in turn, questioning their validity, and then moves on the compare XP to other Agile methodologies and asks how XP stacks up against the competition. He also has a look at the common mis-conceptions (from both sides) about XP, and tackles the key arguments against its adoption in the same way.
Let's have a look at the contents to give you an idea of the structure:
- Introduction.
XP: Hype or HyperProductive? - What is a methodology?
- What do methodologies optimise?
- What are XP projects scared of?
- What do other methodologies consider important?
- What is important for your projects?
- Questioning the Core XP Practices
- Planning incremental development
- Truly incremental development
- Are we done yet?
- Working at this intensity is hard
- Is that all there is to XP?
- Questioning XP concepts
- The source code is the design
- Test first development
- Large-scale XP
- Is the cost of change really low?
- Setting the dials on ten
- Requirements: Documentation or a conversation?
- Is oral documentation enough?
- Playing to win?
- Understanding the XP community
- ReallyStrangeSayings
- Feel the hostility; experience the joy
- Transitioning away from XP
- Your choice
- Is XP for you?
- Do you have a suitable first project?
What's good?
The whole thing. Let's start with the basics, the high standards of the XP series are maintained, with flawless editing and layout. Moving on, the author's position is admirably neutral -- he is knowledgeable about the field, and although he wants to be converted, he argues only from first principles, and only from the evidence. Similarly, at no point did I think he set up a straw man, or tackled the opposing issues in a different manner. I particularly admired the way he avoided polarising issues -- "All models are lies." -- dismissing them as unhelpful in his current investigation. (He points out that much of the fire in the XP debate has resulted from the use of deliberately polarised opinions as a unambiguous goad to further debate within the XP community. Fine within the gang, inflammatory outside.)
The structuring of the book is of particular interest -- the argument could easily sprawl, but is restrained into very short sub-sections, with each section sporting a clear list of summary bullets. As much as is practical, each challenge to a tenet or practice of XP is discussed independently. (This comes across as simple and straight-forward and you may wonder why I even mention it, but I think it's a fine piece of editing and worthy of praise.)
The sections of the book that I enjoyed most were those dealing with the SmallTalk
culture that XP grew out of -- he presents an interesting analysis of why XP works within that environment but discusses how that environment is NOT typical of most development. I have some bias here due to my own experience, see below, but had to agree strongly with his contention that XP is weakest when it comes to team resourcing, and the on-site customer. In particular, he argues that while XP restores dignity and human rights to the programming team, it does so at the expense of the poor frazzled customer. Similarly, he argues that the pre-conditions for XP, in terms of the programming staff, are so high that almost any methodology could be made to succeed with that team.
Don't get the impression that this is a negative work -- it's not. Most of XP emerges intact, and I felt that the author genuinely wanted only to restrain people from adopting XP in inappropriate situations -- not to persuade people to avoid XP. In doing so, he actually protects XP from bad press due to teams failing when trying to adopt XP, them blaming XP itself, rather than their own inappropriate circumstances.
What's bad?
Er, not much. He sort of pulls in some material re Open Source early on, but fails to particularly build on that comparison, moving instead to a comparison of Agile methods in closed source circumstances. This is a feeble objection -- but really, it's all I've got this time!
Anything to declare?
I should probably give a quick sketch of my background before I finish as I am slightly biased -- most of my work has been in the telecommunications sector, where I either worked with a large code-base (legacy) or a large, distributed team (new development). In no way was I working in the XP style, although I became test-infected easily I found it difficult to even imagine how to apply some of the XP practices to my workplace.
XP changed the way I code and work, for the better, but in a large environment, with no contracting customer, and few experts on a complex domain involving simultaneous hardware development I couldn't see any way to do XP. I'm not saying what we did was good, I'll be the first to admit it was broken (hmm, and I'm unemployed now, time to go and think about cause and effect!). The key assumptions of pure XP just didn't fit the industry I've seen most of. (To be fair, McBreen would have called these projects "systems engineering" and placed them outside of the discussion.) Now that I'm seeking employment again, I'm a lot more aware of methodologies and am much keener to work within an Agile framework, as I believe that all of the methodologies, XP included, offer a much better way of developing software. However, the key point remains -- XP cannot be applied everywhere.
Lastly, I should make it clear that I received a review copy of this title from the publisher and did not pay for it. I paid for my own copy of Software Craftsmanship.
You can purchase Questioning Extreme Programming from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
sacrificial lamb (Score:5, Funny)
Re:sacrificial lamb (Score:5, Funny)
Re:sacrificial lamb (Score:4, Funny)
Tonight L337 1nd33d!
XP explained (Score:3, Informative)
The name attracts geeks: they like 'extreme', they like programming, so XP must be great, right?
Wrong...
In XP, the idea is that two programmers are constantly working together. One of the two types code, the other watches his every move. "Don't forget that semicolon!" "No, don't do it like that!" "You don't need to do that right now!".
Having a slavedriver who puts the whip on you whenever you stare out the window (or browse
Another mantra of XP is "never write anything you do not need right now". As with top-down or bottom-up programming, this tries to force the way a programmer thinks into a narrow pattern.
Personally I've found that I'm at my most productive when I have a good flow going. That may mean writing some support classes first (and completely) and then building something on top, or it may mean going chaotically all over the place adding bits, but it never means doing things precisely in one order.
I've also noticed that it is not possible for two people to sync their 'flows' when they're coding. Yeah, bring forth the lame jokes...
Re:XP explained (Score:4, Informative)
Re:XP explained (Score:4, Informative)
They must have written this using the eXtreme Writing technique.
Re:sacrificial lamb (Score:5, Informative)
Re:sacrificial lamb (Score:3, Informative)
Personally I find that some of its suggested methods are right on the spot while others a bit on the idealistic side. Still, I would like to try it and see first-hand how it works in a proper business environment.
Re:sacrificial lamb (Score:3, Informative)
--grendel drago
Re:sacrificial lamb (Score:3, Insightful)
Don't feel bad. You're not the only one-- probably less than %1 of the slashdot crowd has heard of extreme programming. After all, perl hackers and other non-programmers have no need for it.
Slashdot is not a technology or programming site-- it is a linux fan site. Unfortunately, a surprisingly small number of linux fans are programmers.
If you do decide to start programming (And that kid who's in his 5th year of CS had better get up to speed!) then XP is something very much worth learning, even if you put none of it into practice.
done it, didn't like it (Score:2, Interesting)
I personally prefer to be on my own. I could see how managers prefer it because it forces more work to be done and yeah, it prevents a lot of errors, from my experience.
But I hate it - I hate working right with someone else.
I personally would rather to just be near someone and ask them questions about code if need be, but I hate the XP experience personally.
Re:done it, didn't like it (Score:2, Interesting)
I think instead of XP, it is much more of a benefit to instill some personal desire in your employees for the product to be good and succeed.
And I don't personally feel that forcing them into the XP environment does anything towards that end, it just adds social stress and discomfort to those that don't like social programming - which is a large portion of the coders I know.
I like how I got modded to a "Troll" status slashdot style - if you don't agree with something, you aren't allowed to talk about it
Re:done it, didn't like it (Score:4, Insightful)
in my experience, people who don't work well directly with other people work on software maintenance, not software development. that's where it's easier to not product bugs because there's hopefully slews of regression test suites left over from the guys who put it together.
i'll admit that working on a team project with lots of people doesn't leave much time for reading
one key thing that i've noticed that is missing lately, and the reviewer mentioned it, is team leadership. team leaders have started jumping on this project management kick, and there's really no leadership for the teams. everyone wants to manage, manage, manage. i'm of the thought that a little leadership and the project will manage itself (though the teamwork).
between extremes (Score:4, Insightful)
Strange definition of 'favourable', that. Not an attempt at a troll, but the rest of the review didn't tell me how XP emerged favourably either.
To each his own (Score:3, Insightful)
Xtreme Programming is one of the hot buttons (as is Unix, Java, Linux, OSX, etc. - the only common religion here seems to be the hatred for MicroSatan).
Xtreme Programming has a lot of interesting elements (the only one I'm not keen on is the Pair Programming). But, as with anything, if it doesn't work for you, there's probably something similar else you can try - SCRUM, et al.
The title is provocative enough (at least it isn't inflammatory) that XP fanatics will probably find ways to evangelize their methodology and sell it to anybody who will listen. The book does sound like a good read, because everyone needs a strong dose of perspective now and then.
I just wish it weren't called that (Score:5, Insightful)
However, when I say, "we should apply the extreme programming methodolgies,"
they say,
"coding to the max!" or
"what does this have to do with snowboarding?" or
"the mountain dew commercial was not funny."
and so forth. They think I'm joking and it is impossible to convince them that Extreme Programming is not either a) a joke or b) marketspeak gibberish crap.
Now, b) may be true. However, as long as the method is called "programming.... to the extreme!" it becomes difficult to convince people on the intellectually snobbish periphery of CS that it has even potential merit.
Re:I just wish it weren't called that (Score:2, Insightful)
There is a bit of a catch-22 in introducing new methods: in order to draw people you have to make noise, and that usually scares people to use the method because they think the claims are inflated.
Re:I just wish it weren't called that (Score:2)
Extremely uninterested (Score:4, Insightful)
Planning (Score:5, Interesting)
They'd point towards "the planning game," the XP deliverable for project management. (See Planning Extreme Programming [amazon.com] for details.)
They'd point towards "user stories" (very similar to use cases), one XP deliverable for requirements gathering.
They'd also point to projects where the requirements weren't well defined up front and changed very quickly, and the cost of maintaining detailed requirements deliverables would have slowed the project down enormously.
And what project doesn't fall in that category? It's a fantasy to think, ala classic "waterfall" development, that the requirements can be set in stone before any of the design, coding, and testing is done. Requirements grow and change as the project progresses, in ways peculiar to the "softness" of software development. (No one would start a project to build a footbridge over a creek, then halfway through want a rail bridge over the Mississippi River.)
XP may not be the best way to address this, but it's one way; and even as McBreen concludes, it's a good way for some projects. For all projects? No one's saying it is.
Wow, what world are you living in? (Score:3, Insightful)
If software specifications are not worth formalizing on paper - it isn't worth creating. You can keep your extreme voodoo. It just formalizes the lazy practices of programmers
I'm guessing that you must be self employed or in academia, as it is the domain of management to demand complex solutions to improperly spec'd problems and, oh yeah, we wanted it yesterday. I see this happen all the time where they want a rundown of what are the risks of re-baselining the hardware of our legacy system, and can we get that by Close Of Business today? Oh yeah, and these are the same people who say "BTW, try to follow our Business Practice Process if you can, never mind that we completely violated it already"
Oh yeah, we are a fortune 100 company.
And guess what? I don't gamble. I don't drive too fast, nor sky dive. I don't need drugs to get high. I get my kicks by trying to meet unrealistic deadlines. I love death marches... its the only way to know I'm alive
P.S. XProgramming fits right into this real world model.
Re:Extremely uninterested (Score:5, Insightful)
FYI, XP isn't a "technology", and it isn't fly by night. It's based on successful practices that have existed in one form or another for decades. I have no idea what practices you think are in XP that in any way reinforce laziness. XP actually fights a number of lazy behaviours that programmers have. All it does is bring together a number of successful practices and espouse doing them "to the extreme" in order to combat the naturally lazy approaches of programmers.
Re:Extremely uninterested (Score:2)
Jack William Bell
Re:Extremely uninterested (Score:2)
Of course, a requirements spec is not the same as a set of test scripts, but then XP also has user stories for a more user-comprehensible outline of what's being delivered.
Re:Extremely uninterested (Score:4, Informative)
I've started doing test first for all my programming now and I've found that it helps in several areas:
* Forces you to think upfront about what you're doing and helps catch stupid errors right there.
* Tends you towards a better, more separated design. This is a natural consequence of testing.
-Dom
Re:Extremely uninterested (Score:3, Insightful)
No. 50% to 90% of software projects fail because the requirements, problem domain, and customer expectations change at least 5 times during the course of a one year project. I've been on two failed projects in the last 3 years, both of which failed because the customers continually went back on their own decisions for which we had based our "written and documented plan", long after we had been heavily involved in the code. By the time the "final" decision was made, there was no time to actually implement it.
I'm not saying XP would have saved them (it likely wouldn't), but assuming that a well-documented design and plan will save a project from the curse of changes in requirements and expectations is self-defeating.
Embrace Change (Score:3, Informative)
That is something that should be read by all "Waterfall [c2.com]" developers like you. It is very useful, even if you don't change your opinion.
Damn. IHBT.
Re:Extremely uninterested (Score:3, Informative)
It sounds like you are not managing your customer's expectations very well. I find that a formal legally binding contract with a customer (complete with a product specification) highlights the importance of advance planning and gets the customer involved with the process at an earlier stage to avoid these last minute 'oversights'. When the customer knows there will be a financial penalty imposed when changing the plan (and breaking the contract) they will make damn sure that it is spec'ed out well to begin with. Projects without plans are doomed to fail or cost several times what they were budgetted for. Advance planning helps both you and your customer in the long run. Nevermind the fact that in the absence of a formal plan your customer never feels like the product is completed.
But wait! (Score:2, Funny)
Surely you're not suggesting that something with an 'X' in it's acronym isn't way cool.
Pardon my ignorance but... (Score:3, Insightful)
This is a very valid point, actually... (Score:3, Informative)
Re:Pardon my ignorance but... (Score:3, Informative)
1. Divide your project into a bunch of moduals
2. Make teams of 2 programmers and assign each modual. Program it without worrying too much about how things fit together. Both members work on the same code(2 people to 1 computer)
3. Fit the moduals together
Step 3 is the limiting facter, Large projects suffer from too many hacks, and well defined projects suffer because of unneeded hacks...
It works very well for small projects(under a year), where the requirements change a lot.
That's too simple, way too simple (Score:2)
No, it's not. It's really very structured. The simple definition given above is one of the main reason XP-projects fail.
Basically XP is a bunch (11 or 12?) of well known best practises taken all the way out (if code review is good, then more code review is better, so let's code review all the time).
It's heavilly based on communication, so it will break down with large teams. It's also missing an architecture step, so large projects tends to fail, if you don't "cheat". And it's missing testing. But if the product is rather small, the people on the team communicate well, and your QA-team gets a go at the app occasionally, you'll be doing great.
Probably the best thing about XP is that it brings back the fun in programming. Writing out-of-date documents isn't any fun.
M.
Re:Pardon my ignorance but... (Score:5, Informative)
I read the whole article trying to figure out what he was on about. eXtreme Programming? Can anyone give a definition of it? What exactly is it that XP is, and why does this book challenge it? How did XP change the way he codes and works? What is this "popular methodology?" Because that's what I'm most interested in. The author of the above book review assumes everyone has read the book, or knows all about XP. gets modded as Insightfull?
He is not "cluefull" enough to make a google search?
Anyway: XP is set of about 12 "best habits" you should follow in programming.
Whereas other software developmnet processes focus on a lot of work wich is not programming, XP focuses on doing a lot of programming and incorporate the other work: analizis, design, as good as possible into the programming "phase/workflow".
The most known "buzz words" are programming in pairs and unit tests.
But: there are 12
-- Have your programming team at the customer side, or the customer in your house.
-- refactor, if you see a strange couple of lines of code, refactor it
-- only program what you imediatly need, Saying: "You ain't wanna use it". So don't program overabstraced "framework like" code as it likely will get refactored away or won't be needed anyway
-- use storry boards, similar to use cases, well in fact similar to Scenarios, but a lot of literatue mixes up the difference between Use Case and Scenario
-- imediat feed back: make a story board with the customer, see above, prepare a unit test for it, see above, code it, refactor every existing code in your way to support your new story, run the unit tests of teh old story boards to be sure nothing broke during refactoring, run your new unit test to your new story board, show the result to the customer, adjust storyboard and repeat if needed
-- plan the architecture, "play your way through it", buzz word: "planning game", e.g. use CRC cards
-- short releases, plan a day per "story board" or major feature
-- collective ownership, all code belomngs to the team, ther eis nothing like YOUR file/class or code
-- have a system metaphor, thats an architecture pattern, basicly have an other system you can compare your current work with
-- learn and communicate
Well, read a book, get a consultant and DO it.
You won't be able determine if it WORKS or not by trying it half hearted for 3 weeks.
angel'o'sphere
Another fad runs its course... (Score:5, Insightful)
Stage 1 consists of proof by repeated assertion, and "case studies" that actually describe only how projects using the Methodology were _started_. Lots of detail on how managers and workers were organized and brought on board, etc. Anecdotal success stories where you cannot tell whether the success actually had anything to do with the use of the Methodology or whether they just had a good team that would have succeeded anyway, or whether it was just Hawthorne Effect. No clear evidence that _other things being equal_ using the Methodology instead of some other process actually has a beneficial effect.
Stage 2 occurs when a Methodology has been used in enough real projects by a real-world variety of programmers, then you start to see the articles that say "in order for it to work, you MUST have conditions a, b, c, d, and e." One of the conditions is usually the enthusiastic involvement of upper management. But, hey, if you have the enthusiastic involvement of upper management you can probably get ANY project to succeed. Another is usually the adoption of the entire methodology, no "piecemeal" approaches. Another is usually the provision of adequate training. No real-world project ever meets all these conditions, therefore no failed project using the Methodology is deemed to disprove its efficacy.
Stage 3 occurs when people start to notice that the Methodology doesn't particularly work. Well, actually, it's never phrased that way. Nobody ever _admits_ that the Methodology was a fad which has now been abandoned. Instead, they simply say they are adopting the _new_ Methodology, which it is said, DOES work. Or at any rate WILL work. Provided, of course, that you adopt all of it, have the enthusiastic backing of upper management, and adequate training.
By the way, what SEI CMM level _is_ Microsoft at?
Re:Another fad runs its course... (Score:5, Insightful)
I think XP is great because it was the first system designed to teach how to program responsibly. I'm sure it will be replaced by something better, because AFAIK, no one has pioneered perfection in a new field in their first shot. You can bet the farm that the next "fad" will be based on XP. I think you are afraid to change the programming methodologies you already have; therefore, from your point of view, no programming methodology will be more than a fad, because it's not yours and you will never adopt it.
BTW, I've never heard of anyone saying that peicemeal approaches to XP won't work. I've heard the exact oposite. Some people implemnt pair programming, some have great programmers they can depend on (the reasons for pair programming are so that one can catch the others errors, one may leave and someone will need to take over for him). A lot of people implement the test units because no coder is perfect and the synergy of a large system of object (be they libraries or classes) can cause one small change to break a lot of the system. In a large system, you can't remember every little thing you should test and it would be very time consuming to test them by hand.
All things die to give way for the next generation. That doesn't make yesterday's champions fads, but rather old heros.
Re:Another fad runs its course... (Score:3, Insightful)
You seriously believe that?
The enthusiastic involvement of upper management can help, but it's by no means a sufficient condition.
I've seen lots of anthusiastic managers who don't notice when their teams is saying
It's not about enthusiasm, it's about management being supportive of the development team, and the development team being right.
If you don't have both of those, then you will have problems.
In my experience management can kill a project, and they can help a project avoid death, but they can't make a project actually work.
Re:Another fad runs its course... (Score:3, Insightful)
UML (I yet have to see a company other than Rational do it right)
CMM (ahhh...what level?)
TTM: Time to Market (SW Dev Mgrs love it)
TQM (remember that?)
The V shape model thingie
The SWAT-team approach
XP
Their only purpose is to justify the purchase of books & training programs in large corporations. Small, well-run companies know better than waste time on these things. Instead, they should focus on: people + skills + motivation + ethics.
Re:Another fad runs its course... (Score:3, Insightful)
UML is a kitchen-sink object diagramming standard, not bad, until something a little more concise comes along. I assume you meant RUP (Rational Unified Process, since renamed "Unified Process" to sidestep the folks asking why RUP doesn't have any viral marketshare).
Oh, and if you had used any homegrown Rational software (not purify or clearcase), you'd take it as an indictment of RUP.
Memory Lane (was: Another fad runs its course...) (Score:5, Interesting)
Some IT fads eventually work and some don't. In my observation the success ratio is roughly about 1-in-5. Structured programming (no Goto's) and relational databases seem to have pretty well "stuck". OOP and Client/server are kind of in the same middle-land boat. They seem to work okay in some niches but not others. I remember the tail-end of the CASE craze. Then there was the Expert System craze. In the late 1970's was the "extreme" top-down craze, which was actually the extremist end of "structured". It later mellowed out to being at a routine or module level instead of application-wide. Thus, even good things can be taken too far.
Now we have web-applications, web services, UML, and XML-everywhere fads that are having their try. (Curiously, I just saw part of an article that claimed very UML-like approaches were tried, and failed, in the 1970's IIRC.) Most of these I would not personally bet on lasting in their current form, beyond minor roles. I think B-to-B web applications will be replaced by "remote HTTP-friendly GUI" technology of some sort (like XWT or SCGUI).
Summary (Score:5, Insightful)
For extreme programming to work out, you and your team need to have outstanding ability.
XP(extreme programming) is great, but add into it a shaky designer, a loner in the team, or a delusionned (sp?) manager, and the whole thing will crash down in flames. In traditionnal methodology, the problem would rather settle with a non-optimal development process. With XP, you either fly high or crash badly.
The fact that it is a great development model and the fact that it will not work in most places are not incompatible.
But that's just my experience. Take it with a few tons of NaCl.
J.
Re:Summary (Score:3, Insightful)
I'm not sure it's that black and white.
I would suggest that in XP (and most other agile methodologies) you need the following three roles to be well filled:
I don't think the developers need to be that great. It obviously helps - better people produce better results - but it's not required.
I guess if they're hopeless developers then they won't cope, but I think that's true in all methodologies.
Other methodologies will possibly cope without those roles, but they will still (ultimately) be failures (assuming the project has sufficient complexity).
We took an existing development team that was decent, but not brilliant, an enthusiastic project manager and added a couple of experienced people (an architect and a developer), and the project is working very well. Much better than any previous methodologies we used.
Part of that is due to the people we brought in, but they're really only there because we needed some architectural guidance for this project (we were using some technology that was new to our existing architects) and we wanted a mentor (both for XP and for the technology).
Once we get enough people with experience, we won't need them anymore, and I think we will still be successful - but you don't need people to fill those roles.
Test First Coding (Score:4, Informative)
Initially we took an old project and applied Unit testing to it, which really turned us off the concept. But once we started a new project, and wrote the test cases before our code it suddenly made sense!
Now its instinctive for us to write the test cases first, It also allows cuts down on refactoring later as all our code is at its simplest level always. If our code is changed in the future, any problems will be identified straight away.
I'm sure in the future we'll attempt the other concepts behind XP
Re:Test First Coding (Score:3, Insightful)
Just remember that TFD is a Design method, and really has nothing to do with testing as in testing the requirements. So it will check that you coded what you designed. Whether that has anything to do with what the customer wanted is another matter.
Which should be checked by the functional testing, but that's written by the customer. And most customers don't know what they want...
M.
extreme programming mailing list (Score:3, Informative)
XP has an active and interesting mailing list [yahoo.com].
More information about XP can be found here [xprogramming.com] or here [c2.com].
Re:extreme programming mailing list (Score:2)
testing ideas (Score:3, Interesting)
1. Test it on willing and knowing *volunteers* only.
2. Don't claim it is "better" until it has been road-tested for a while. At least 3 years and preferrably 15.
3. Identify where it works and where it does not, or at least be clear about the domains and situations and scope about where it does work so far.
There are too many credit-cravers and talking heads out there pushing buzzwords into the mainstream before they are tested properly. They should take some clues from the medicine industry. Sloppy pushing may not (directly) kill people, but it can certainly kill the economy and IT credibility, as we have already seen.
A long way of saying "I hate XP" (Score:2, Troll)
Erhm, no, it didn't. Nothing's sexy about XP. IMHO, XP took much of the fun out of programming. The chaos that is open source development brought it back.
People seem to think that pretending programming is always as complicated as particle physics is going to somehow produce better code on time. I don't. Sometimes coding 9-5 in pairs and creating ten AbstractFactoryContainerXYZYourMom objects each time there's a need for a one line getter method just isn't the way to do it. It might be necessary when working on safety critical systems, but I doubt even that, as formal methods is probably what will dominate in those cases anyway, and for your average off the mill app there's just no need. But, as I've already said, what's worse is that it's no fun.
And don't give me that "statistics has proven XP is not only more reliable, but also much faster"-bullshit. I've seen it in action. It just ain't true.
it does work, but everything has to be in place (Score:5, Informative)
We used these four concepts and since the code we put out was so much better than anything our clients had ever paid for, we had more work than we knew what to do with. It was incredible.
Oh-and Boss, take the guys out for a beer at lunchtime every once in a while, and encourage a 5 minute break every hour or so. A happy coder is a good coder.
XP advantage (Score:5, Insightful)
Horrible (Score:4, Insightful)
The bottom line is not to mistake a business model for a work model, and to avoid anything that mixes business with design.
Re:Horrible (Score:3, Insightful)
People like to talk about coding as a "craft", and in a sense, it can be. And sometimes, really gorgeous code (either because it's really well written, or beautifully obfuscated and compressed) can be treated like a work of art.
However, the greatest use of coding isn't for creating masterpieces to hang on the walls of the Met. Instead, it is for businesses so, yes, business has to be mixed in with design.
Starving artists are artists who, because they refuse to commercialize their art in any way, shape or form, are unable to sell it (until they're dead, at which point it sells like hotcakes). Ever heard of the phrase, "starving programmer"? You probably haven't. And there's a reason for that. While not all programmers are poor, those who do it for a profession generally try to make their code into a commercial product, or are paid by a business to create it in the first place.
In my own experience, whenever there is a sense of "ownership" over a project or code within that project, the project suffers. It no longer becomes about the code, it becomes about the personality of the programmer.
I think that valuing individuals is a function of company politics, not development practices. Never underestimate the downside of being "irreplaceable." Right now I work in a firm where I'm the only one who is working on a specific project. I"m desperately trying to get others at my job understand it. Why? So I can go on vacation without feeling guilty or anxious about things going wrong, or about the client needing new features. So I can eventually leave the company and go on to other places, without leaving the company in a lurch.
Programmers aren't becoming robots; they still far exceed computers in being able to translate real-world needs into working code.
I am leery of anyone who feels that they are a guru. If you see Buddha coding on your computer, kill him. But eliminate the "guru" label: Since a pair of fools are better than one [more experienced programmer] under extreme programming, you can fire the guru. Wrong. The more experienced programmer can help manage the project, or can serve as one of the paired programmers. A pair of fools are not better. A pair of good programmers are. If the "guru" is truly wise, he will be glad to work within the team. If he choose to be a loner, he probably has some personal issues to work through, and work is not the place to do it.
Extreme *programming?* (Score:3, Funny)
The only acceptable sport / hobby / whatever for which such a prefix can be done justice: Extreme Ironing [extremeironing.com].
We used XP on a small project and it worked great. (Score:5, Interesting)
(FYI- This was a large T-SQL job on SQL Server.)
We'd add a feature, then add the test of that feature to the unit test, then run the test and fix bugs. Worked great!
We didn't adopt EVERY aspect of XP... but I have never seen such clean code and neat ideas emerge out of one project. We all agreed that the end result was better than any one (or two) of us could have done individually, and the 9 man-hours spent (it all took just 3 coding days) were WELL worth it, in the boss' opinion...
That said, we planned on adopting XP in some larger projects, but it kind of fell by the wayside...
XP is not the only "agile" method (Score:5, Informative)
XP was first out of the gate with a lot of publicity. There are other ideas, though, about how to do effective, lightweight, "agile" software development.
See the "Agile Alliance" website [agilealliance.org] (Google cache [216.239.53.100]), or either of the books titled Agile Software Development, one by Robert Martin [amazon.com], one by Alistair Cockburn [amazon.com] (both intellectual heavyweights in the software development field).
There's a lot of good stuff out there, not all of it being done under the XP banner.
Half XP required... (Score:4, Insightful)
Designing for the next iteration -- not the entire system... In some cases for designs to be useful, the developer must code a portion of it as a prototype to demonstrate that their idea will work and is effecient... If someone says that they can forsee all implementation issues at design time, they are either lying or spending too much time designing :) ... This just can't be done enough... I think that any methodology that calls this to the attention of the development team / project managers is a "good thing".
Regular communication with the end user / customer
On the other hand, some things are not so good/realistic... The biggest thing being pairs programming ... I'm not aware of any organization that is actually doing this... Forget about working from home, putting in long hours, etc if you start using this technique... I'd be curious to hear about organizations doing this, with success...
Finally, I agree that change in requirements is inevitable, but I think that it has to be properly managed... You can't keep getting new and potentially radically different requirements from the client every two weeks, without seriously burning out the development team... and you can't tell me that requirement changes don't affect costs... Like everything in a project, changes must be managed and negotiated... The development team can work hard to implement software, but can't bend time and space to do so...
My 2 cents... And yes, I definitely practice what I preach :)
Chris
A reveiw of the review (Score:5, Interesting)
It was rather thin. I didn't see much insight into the book's ideas or even the writing style. I didn't come away with any sort of idea if I should buy this book or if it would be of use to me.
I like book reviews. I think this was more like a very short book description and summary of the table of contents. Reviews talk about a view and not just a summary.
The unreachable utopia (Score:5, Insightful)
The only people that write about ideal methodologies and their theoretical applications are academics. I am reluctant to use the term "scholar" on these people.
The key to a successful project is design. Even OSS projects have a design. Anybody can attempt to write for the project but if it doesn't fit with the design or is too far off base to incorporate into the design, that code doesn't get into the next release.
Extreme programming is a ridiculous term. Perhaps a better description is "ad hoc" programming.
Think about evolution itself and you'll see how much damage ad hoc programming can cause. :)
Re:The unreachable utopia (Score:3, Insightful)
A program is a design. It is the formal specification of what the computer (the real construction worker) is supposed to do. Every piece of code written should be a plan and a design.
Of course, that is not always true -- there's a lot of boilerplate and code that requires no thoughtfulness. But it is up to good programmers to eliminate this as much as possible -- to abstract away the parts that require no thoughtfulness, to eliminate portions that are redundant, and to build ourselves tools that will concentrate our effort.
Re:The unreachable utopia (Score:3, Insightful)
If you plan to do a good job on a complex project, coding is engineering. You don't just sit down and start coding a database/compiler/opeating system you think about it first. You consider things like: "This operation is O(n^2) can it be made O(NlogN) and if so what is the tradeoff?" "How fast does this program have to run? Is that feasible?" "Are these data structures efficient?"
People actually go to engineering schools to get degrees in Computer Science for a reason. Knowing how to write good code, is not the same thing as knowing how to write in some particular language. It requires an understanding of what goes on inside a computer. You need to understand things. A good programmer knows that a floating point division by 2 is much slower that a shift right by two and will use that knowledge. Computer Science is a type of engineering.
Re:The unreachable utopia (Score:3, Funny)
Evolution? You mean, how it went and produced humans? Undoubtedly, an embarrassment.
XP is so VASTLY overrated... (Score:5, Insightful)
"write unit tests first."
"leave optimization 'till last."
"develop iteratively."
The importance of XP is exaggerated to an incredible extent. I've heard more than one person compare XP to OO! Consider the vast amount of thinking of research that went into the development of OO. XP is comparable in importance to a "Frequently Asked Questions" file for beginning programmers.
Re:XP is so VASTLY overrated... (Score:4, Insightful)
The thing about common sense is that it isn't very common. If those tips need to be dressed up in some shiny! new acronym to make people follow them then I'm all for it. Just don't expect XP to magically make all projects turn out perfect.
The importance of XP is exaggerated to an incredible extent. I've heard more than one person compare XP to OO!
Oh, I don't think XP's been quite as badly over-hyped as OO.
please move along (Score:5, Insightful)
Yet I have little interest in XP-sucks-XP-rocks flamewars. In fact, because of the good results I've had, I'd really much prefer if my competitors decide that XP is a terrible idea, pair programming is insane, writing tests first is totally backwards, integrating every few weeks is plenty often, and changing requirements are a nightmare. It would suit me just fine if my competitors reject XP completely.
So please, if you're curious about XP, forget about it. There's nothing to see here, please move along.
My eXperience (Score:5, Insightful)
The best team was when one of the programmers was very good at design, documentation and managing how the pieces fit together while the other programmer was good at the 'bits'. Coding an individual section based on what the first programmer told him. That team worked wonderful and churned out alot of work because thier strengths were complimentary.
However, another team just had to programmers who sucked at managing the process, design and documentation and both just tended to write out code. This led to conflict both in how the code worked (each coded a section without thinking how it would work with the other section) and between the two programmers.
We are back to individual programming now, just with freqent code reviews. Also we love to go through CVS checking for bad habits and bash whoever did it (Sucks when you point out a issue and then realize you are responsible for it though).
Summary: I think it all depends on the type of programmers and what they are good at on if any methodology works.
Methodology as religion (Score:4, Interesting)
I wrote a white paper on software methodology which you can download here [shtull-trauring.org]. I am an agnostic when it comes to methodologies, but there is alot you can learn from what's out there.
XP from a survivor... (Score:5, Interesting)
I mean, here I am, coming into a compiler-and-assembler design team and I'm being told that we have to
But to my surprise, it worked. We each had our own 'personal space' computer for e-mail and everything else, and when we were working we went into our lab as a group. We'd look at the board of current 'stories' (overall larger tasks) and pick a 'task card' from the story. (Literally, taking an index card off the corkboard and clipping it into a little holder by our computer.) And then you sat down at a computer with two monitors, two keyboards and two mice and you pair programmed. If there were an odd number of people, you had to have someone else go over your code with you before you checked it in. All code had to have tests written for it
And to my surprise, it worked. With two people looking at code, the little mistakes were harder to make. Design problems were more easily tackled. Because we all shifted around and changed partners a lot, we all learned all the areas of the code and had a better understanding of the system as a whole. The way tasks and suchnot were partitioned out worked very well. Meetings didn't interrupt the flow of things, because almost all meetings
BUT...this also became a story in how Extreme Programming can
So, I actually would probably agree with the book's assessment; XP is well-suited for certain situations (small team, active customer feedback and support, quick dev cycles), but will fail miserably (and I do mean miserably, as in ruining the morale of the team) if you do not have the full support infrastructure.
Admittedly, some of XP's practices -- tests written before code, meetings held standing up to keep them from dragging on indefinitely -- work pretty well even outside XP. But the system as a whole works well only within a specific target range.
A big problem with XP (Score:3, Insightful)
OO isn't the only way to program. It isn't even the best way to program, in certain situations.
XP, Design Patterns, and fads like these are all nice in that they reflect certain practices which make for good software. But they are the CS equivalent of "How to Draw Comics the Marvel Way": great at what they do, good at expressing the concepts behind a particular style/method, not very useful when you want to cross over into other styles/methods.
Upgrade Treadmill? (Score:3, Funny)
Extreme Programming Explained (Beck)
Planning Extreme Programming (Beck & Fowler)
Extreme Programming Installed (Jeffries et al)
Extreme Programming Examined (Succi & Marchesi)
Extreme Programming in Practice (Newkirk & Martin)
Extreme Programming Explored (Wake)
Extreme Programming Applied (Auer & Miller)
Extreme Programming Debunked (Archie D. Bunker)
Extreme Programming Filters Into Academia (Fileas Snodgras, PhD)
Learn Extreme Programming in 21 minutes (QUE Books)
Extreme Programming Departs And Thanks You For All The Fish (Sqeeeeeek sqk sqk sqk)
Designing, Touting And Debunking Methodologies For Fun And Profit (Popular Science Press)
Extreme No Money Down Real Estate (Carlton Sheets)
Re:As a developer, XP slows me down (Score:5, Funny)
Re:As a developer, XP slows me down (Score:5, Insightful)
That's not the way pairing is supposed to be done. Pairs are supposed to rotate among the team. People who smell bad, or simply can't learn to perform well, are supposed to be asked to leave -- not the capable folks like yourself.
> I've not met someone who can keep up with me when writing code.
So there are people on your team whose abilities are not on par with yours. You don't think that you owe it to these junior team members to mentor them and help bring them up to your level? That's a good chunk of what pair programming is all about. Also -- what happens if you are offered a better job/quit in a huff/are hit by a bus? Isn't it better for the whole team if some of those junior folk have experience with "your" code? If you work a little slower, but your knowledge gets spread around, the benefit to the whole team is much greater than if you work fast in isolation.
>And really, that's not the time for 2 heads, the time for having multiple people looking at a problem is in the design phase - not the implementation.
So the projects you work on have requirements that are frozen in stone, and designs that can be implemented in only one way, without change, with no thought involved? OK, then there are no decisions that could stand to be reviewed in real time. Everybody else could use some advice.
Re:As a developer, XP slows me down (Score:2, Insightful)
And mentoring junior people is a pain in the ass. You have no time to do your job because you're spending it all trying to do yours. Unless you LIKE working 16 hours a day, in which case, you should be shot, not modded up.
Re:As a developer, XP slows me down (Score:3, Interesting)
A person gets 6 to 8 tasks assigned per day.
One who can not cope with 6 to 8 taks in 8 hours is overworked, overstressed in relation to his abilities.
The guys who COULD do 10 to 16 of the taks because they are faster are oblieged to help/educate the guys who fail.
Pretty easy. Someone who is not able to share his knowledge by "helping" is asked to write a how-to and to give a 30 minutes talk about it.
The missing hours in the 6 to 8 tasks above are spend in meetings, email or at customer side, or: in making how-to's and giving talks.
If one thinks he is giving to much og his knowledge away, he is at the wrong place.
If one can not explain what that is he had just done/made he should make it in a way wich does not need explanaition.
angel'o'sphere
Re:As a developer, XP slows me down (Score:2)
Re:As a developer, XP slows me down (Score:2)
One of the ideas behind XP is that the process you've described really doesn't work that well. Requirements can and will change. Design usually cannot be properly understood until you're in the middle of the implementation. XP takes those things into account.
Re:As a developer, XP slows me down (Score:3, Insightful)
Kent Beck, the guy who started the XP thing going, moves *very* quickly when he's programming... indeed, he does things that really you can only do in a Smalltalk environment in terms of jumping around. Still, he is eminently easy to follow. If you can't be followed, then my guess is it's not about your pace but the clarity of your code, and that *is* something that should be addressed when you're coding.
Generally speaking, programmers working on their own are lucky if they only introduce a bug every couple of hours. With paired programming you can easily go for days without doing so. Not having the bug in the first place saves you far more time than any perceived benefit that comes from "being free to be on your own".
Re:As a developer, XP slows me down (Score:4, Insightful)
Then I simply got up and left.
As far as the clarity of my code, if someone didn't pay attention in class or doesn't have the foggiest notion about what the STL can do, then why is it my problem? If they don't understand "Hungarian Notation" or MFC or even the base Win32 API, then again, why is it my problem? The goblin I was paired with supposedly had 5 years of Windows programming experience. Methinks he lied on his resume...
If I'm on a tight deadline to ship code, then the last thing I have time for it so break down the logic into small words for little goblins who don't understand the programming language. No, I'd much rather have a code review to where I can explain everything in great detail then trying to remember my place in my thought process and continually getting annoyed at the interruptions.
As far as your third paragraph - that really depends on the bug. If it's a trite little bug that takes 5 seconds to fix, then the time is far better then it takes to explain in small words to a goblin.
Pair programming is not Extreme Programming (Score:5, Informative)
Re:Pair programming is not Extreme Programming (Score:2, Insightful)
Just because Amazon sells two books with different titles does not mean that they are not about the same thing. Pair programming is one of the RULES [extremeprogramming.org] of extreme programming, but in my opinion it is the only thing that makes it distinct from any discussion of an ideal customer to production cycle.
Re:As a developer, XP slows me down (Score:2)
This is my main argument against XP and why I refuse to submit to pair programming. It prevents me from being "in the zone".
Too easy... (Score:3, Funny)
36-24-36?
Haha... only if she's 5'3"
Re:I use XP and love it (damn fine troll!) (Score:2)
The funniest thing is that mods took you seriously: you got moderated 'insightful' and 'interesting'. I'd say you'd deserve 'funny' or 'troll', but eh...
You have trolled, you have won, have a nice day!
Come on moderators (Score:5, Insightful)
"new languages like Smalltalk"?
"stop using Object Oriented techniques and move to XP"?
"revenue stream increase of the order of Olog(n)"?
Whoever modded this interesting should be ashamed of themselves: it's not like those gibberish-flags are subtle...
Re:I use XP and love it (Score:2)
I don't understand your comparison between OO techniques and the XP methodology. Seems like apples and oranges to me. Can't you write OO code using an XP method? And isn't the use of the XP method *supposed* to result in good, well encapsulated OO code?
Troy
Re:Working in pairs is a bad idea (Score:4, Interesting)
(to paraphrase, since I don't have the original text handy):
A manager approached a programmer and asked how long it would take to build an important project. The programmer said, "Six months."
The manager said, "that's too long. What if I assigned two programmers to it?"
"Then the project will take a year."
"That's terrible. I'll give you four programmers!"
"Two years."
"Aigh! I'll give you a hundred!"
"Then the program will never be completed."
Dig?
Re:Working in pairs is a bad idea (Score:3, Interesting)
So, you would like to know how a team should figure out what the interface between functional modules of their system should be?
Here's what worked for my team (Yes, I was the team lead, and, no, you're wrong, no one was fired, in fact the company took us to Atlantic City and then, dinner, to thank us for the work we did).
First, the team lead comes up with an overall design. He discusses the overall design with the team in a brainstorming session, and improvements are incorporated in the design. There may be arguments, but they're limited to this initial speccing out session.
The project is broken up into modules, and each module is broken up into function calls. The parameters and the return values for each function call are then agreed upon. You might say, "function foo will take three strings, fooey, hooey, and spam, and will return a properly formatted URL as a string." The programmers each take the modules they are most interested in. People agree on the overall plumbing, then go their separate ways with their modules, to code them without interference.
As each module is completed, it is integrated with the greater whole by the team lead. Debugging is done with driver programs and function stubs, and everything is separately unit tested. Programmers are responsible for their chunk of the system, and its interface. They don't have to put up with a lot of baloney like having to justify what they're doing to a partner who's looking over their shoulder. The overall design is handled by the team lead, who keeps an eye on how the individual modules are going together.
Modules can be built by internal staff, or by outside agencies. They can even be purchased and just integrated in. The point is that everything is modular, and everyone is responsible for his/her chunk, without interference.
Overall, this results in the least amount of argument, and the fastest overall forward progress because everyone is working in parallel, simultaneously. Projects can be completed very quickly at minimum expense if everyone pulls their weight.
I think that my point was that whenever programmers have to collaborate on a single stretch of code, they will inevitably disagree on implementation details and algorithms, and that this will lead to unproductive debate that will bog down a project. You missed the point entirely. For any given piece of code, there should be one programmer who writes it as well as he can without interference.
My joke about the Tao of programming was just a joke. But the basic idea is valid. Too many cooks spoil the broth. So you have one cook doing broth, another doing steak, another doing salad... And, the restaurant owner or head chef determines the menu.
Respond if you must. But I have said all I wish to say. You're too judgemental for my tastes.
Re:Working in pairs is a bad idea (Score:3, Insightful)
Really though...all else being equal, is it better to have a company full of developers who can cooperate, or a company full of developers who can't? You've got to be a goddamn moron to pick the former.
As for the design part of things...this is just my experience successfully using XP for real business software development: Do you need design? Yes. Do you formal design? No. Do you need to design everything ahead of time? Absolutely not. XP came about in part because enough people found that BigDesignUpFront just doesn't work well enough.
As for my tone...this is some of the nicer stuff I post on Slashdot. Karma to burn.
Re:Working in pairs is a bad idea (Score:5, Interesting)
- the pairs spent a lot of time talking to each other about off-topic things.
- it lead to the formation of "expertise" domains, where one developer would do a specific task because he was treated as the expert, when the other just sat nearby and stared.
- the number of bugs was not significantly reduced
- bad design was not eliminated
So what we do know is, we build small groups of programmers and give them a modular task. They can do as many meetings and talking and planning as they like, but then they distribute the work amongst themselves and get it done alone. The code is then later reviewed by a "review partner" from the same group. It works nicely!
Re:Working in pairs is a bad idea (Score:2, Interesting)
I mean, you are very convinced that it does not work: the slower on drags the pair down
I get it now, you tested it and While they are wasting time coordinating with each other is just becaue one was using the keyboard and one the mouse?
Did you ever wonder why every commercial aircraft of a certain size has a captain AND a co pilot?
Because the co pilot might realize an error or a danger the pilot did not realize.
Same for programming in pairs. One person is more the organizator, planner, black board, defect and error finder while the other one codes.
How many compiler errors do you usaly correct after a compiler run? How long does it take to get 10 lines changed/eddited/added and compiled successfull?
How long does it take to get 10 lines into production?
And furthermore: what is more productive?
A pair creating 100 lines of code distributed via 3 classes in one day and getting it into production another day or having to single programmers coding 200 lines of code where 50 lines from each one are similar to the other ones code resembling the same concepts expressed by different people?
Now you have 200 lines to test, to maintane to debug, to refactor to zip compress and install.
Please stop bashing something you have not at least used/applied for a couple of years, and don't call yourself an expert if you have not used it at least for 10 years.
angel'o'sphere
Re:Working in pairs is a bad idea (Score:3, Insightful)
Because the co pilot might realize an error or a danger the pilot did not realize.
And missing an error in the plane is a tad bit more important than in a program. And it's not like if the copilot could go fly -another- plane instead of co-piloting that the airline would get any benefit. They don't get more money for being able to fly more planes.
How many compiler errors do you usaly correct after a compiler run? How long does it take to get 10 lines changed/eddited/added and compiled successfull?
Far, far less than 50% of my time. For each hour I spend coding, only a few minutes will be spent fixing compiler errors.
Anything less than 50% means that XP is a loss, not a gain.
A pair creating 100 lines of code distributed via 3 classes in one day and getting it into production another day or having to single programmers coding 200 lines of code where 50 lines from each one are similar to the other ones code resembling the same concepts expressed by different people?
Forget that lines of code are a horrible method of measuring productivity, and the slanting assumption that 1/2 of each programmers work would be redundant. Actually, don't forget that. If you can't divide work in such a way that your programmers aren't doing more than half non-redundant work, you have problems XP won't solve.
But anyway -- the question is which is more efficient. While I believe that with XP the two-person programming unit is more efficient than a single-person unit, that isn't enough. If the increase in efficiency isn't more than 100%, then you would be better off having the programmers work separately.
Please stop bashing something you have not at least used/applied for a couple of years, and don't call yourself an expert if you have not used it at least for 10 years.
I have a new programming method. I call it Jabbing a Stick into Your Eye. Don't knock it until you've tried it for a few years.
Thank God the rest of us can recognize a bad idea without doing it for years first.
Re:Working in pairs is a bad idea (Score:4, Insightful)
I don't think that's a useful comparison. Aviation is quite different from programming. In particular,
So there are more reasons for having two pilots than your simple explanation suggests. Not too long ago, an engineer in addition to the two pilots was standard in commercial jet liners. Perhaps we should introduce triple programming, with one person doing all the typing and the others the actual programming?
Also don't overestimate the gain of having more than one person involved for safety. There are countless reports of social problems within the flight crew contributing to fatal accidents. Some captains do not listen to their co-pilots, some co-pilots don't dare speaking up against their caiptain even if the captain is wrong, and even a crew of three might forget to check the altimeter while trying to investigate a problem with the landing gear. Not to mention communication problems between crew members, distraction by crew members, etc.
Give pair programming a try. (Score:5, Informative)
What are the basic mechanics? Usually, one programmer is typing and thinking out loud about what needs to be done. The other sits and offers suggestions. Sometimes, the keyboard changes hands.
The first few times are not typical. You will spend time discovering tricks with editors and discussing personal work habits. You will find it exhausting, and neither will be unable to type for more than half a day each. Remember to pass the keyboard back and forth, and keep your paired days short.
After the novelty has worn off, you find that every partner is different. Nevertheless, the benefits seem not to depend very much on whom you work with.
What is one guaranteed benefit? All code written by two people is at least understandable to two people. Two people can maintain it, so others are more likely the find the code maintainable as well. Upgrades and bug fixing will always consume more of your time than the negligible first draft of a program. If your code can't be maintained, then you really cannot afford to ship it, no matter how useful the functionality.
Better, the two of you are thinking about the code in different ways. While the typer is thinking about one screenful of code, the companion is thinking about the effects on other code. Maybe this bit of functionality belongs elsewhere. Maybe this information can be encapsulated. Maybe we're making a bad assumption here. You catch many opportunities to simplify your code and improve flexibility.
It's hard to think about the big picture and the details at exactly the same moment. While you're thinking about one, you mess up the other. With twice the brain capacity, one of you can focus on the details, while the other checks the context and adjusts priorities.
I also find that we get more than twice the work done of either of us working alone. A speed-up isn't guaranteed, or even necessary, but there are good reasons why it happens.
Much of the time you spend in front of a terminal is wasted by context switching. "OK. Where was I?" You decide something must be fixed or refactored before you can make any progress. You spend twenty minutes making the extra change and you lose the thread. Your original idea goes cold. Or you postpone and never get back to the necessary refactoring. Worse, you may spend an hour restructuring code, then realize it was not necessary after all. There was a simpler way to solve the same problem, or you misunderstood the problem. Two people will stop each other from wasting many hours this way. One or two such insights can justify the entire session.
Pair programming is also constant code review. You get to discuss and and explain the design at the most optimum moment, when it is being written. Alone, you might get ninety-five percent of a design perfect, so that no one could possibly improve on it. But that stupid five percent could have been avoided by almost anyone you pull in from the hallway. You could have avoided it yourself on Tuesday, but today is Thursday, and you were using a different part of your brain. Two people are less likely to have the same blind spots.
Each programmer has a high tolerance for complexity in certain types of code. Certain strange idioms are second nature to you, but to no one else. You won't know for sure, unless someone is sitting next to you asking "What the heck is that?" Then you'll break the one clever line into several readable lines, and move on.
You'll like your work better, others will like your work better, and you'll get more done. That should be enough reason to give pair programming a try. Maybe it won't work for everyone, or everyday. Don't force yourself or others to participate. You must be relaxed and receptive. As with any new skill, it works better with practice. Try with different partners and different problems. If you find yourself staring blankly at the screen, then surely you can't do any worse with someone else in the room. Try it right then.
What if your programmers work in different cities? Try using an instant messenger, such as IRC, Jabber, or Yahoo's. These allow you to pass files and snippets of code back and forth. You can archive your conversations.
Re:Give pair programming a try. (Score:3, Insightful)
Troll You lika? (Score:3, Interesting)
What happens when the single progammer is sick or leaves, yeh I can see how productivity is going to sky rocket.
How about the cross training that goes on when you have more than one person working on a project, that's useless of course.
Social aspects to working with someone else are a right pain, I wan't to work for a company that sticks me in a hole and leaves me there, that'll get the most out of me, and I'm sure to stay.
"Windows vs. Linux", Ok I'm no windows fan but has anyone noticed all the bickering that goes on in the Linux comunity,
I can see the productivity gains apearing right before my eyes (are there still atleast two VM's kicking around?)
Re:Working in pairs is a bad idea (Score:4, Interesting)
I've been involved with pair programming for about 2 years now, and while we don't do full XP style development, it has been extremely beneficial. We are both expert programmers, but I do all of the typing. The benefits are the ability to have conversations about issues the moment they are encountered. Rather than coding a workaround or the first thing that comes to my mind, we discuss it and the results are spectacularly better. We decide upon a solution and code that, generally much better than what someone would come up with alone. Ideas are questioned and assumptions are challenged.
He is also able to be giving me a constant just-in-time code review. We catch dumb mistakes that the compiler wouldn't, simply by having more eyes looking at the code. When writing test cases, we both come up with test scenarios that the other hadn't considered... as a result, the test suite is far superior to what it would have been.
Additionally, working in pairs means that more than one person knows the code. This is good for lowering the "bus count". (That is, how many people can get run over a bus before your project is seriously in jeopardy.) With more people understanding the code, I can go on vacation without worry of a critical bug being discovered, and trying to tell them how to fix it from a phone halfway across the state.
Yes, it does slow us down a bit, but I wouldn't consider it a waste whatsoever. It's an incredibly bug-free, totally reliable system. That means little to no time wasted trying to figure out crashes. The time is more than made up for when you consider debugging time.
My experience with non-paired programming does not have as good of results. Even if you threw out everything else about XP, the testing and pair-programming have been the two most valueable ideas it offers.
Re:Working in pairs is a bad idea (Score:3, Informative)
Actually, check out this paper [computer.org] for an experimental that shows that the extra time you spend in pairing will increase the quality of the resulting code. So you have a choice: program alone and get buggier code faster, or pair and get less buggy code a bit more slowly (but the quality gains are larger than the speed loss).
Re:ESPN's Extreme programming (Score:2, Funny)
Re:But what is XP ? (Score:3, Interesting)
Except for the Pair Programming [extremeprogramming.org] I don't see these as anything other than a verbose idealistic approach to the customer --> product cycle everyone knows well.
Re:Xtreme Stupidity (Score:2, Insightful)
Re:One slight drawback of the whole series (Score:2)
You know, what we used to call 'cut-and-paste'.
Seriously, cruft is not just for code and UIs anymore