Slashdot Mirror


Extreme Programming Refactored

fancellu writes "Extreme programming (XP) first hit the mainstream programmer consciousness a few years ago, with the publication of Kent Beck's Extreme Programming Explained. XP was controversial back then (and still is), because it argued in favour of hitting the 'reset' button on accepted software development practices." fancellu reviews below Extreme Programming Refactored: The Case Against XP, and offers this disclaimer: "I should point out that I get a couple of small mentions in this book (the authors quote an email from me), and I also happen to agree with a lot of what the authors say. But I'll try to be as impartial as I can with this review." Extreme Programming Refactored: The Case Against XP author Matt Stephens and Doug Rosenberg pages 400 publisher Apress L.P. rating 9 reviewer Dino Fancellu ISBN 1590590961 summary Bold critique of extreme programming - at last someone is prepared to say "The emperor is buck naked."

The Previous Extreme - What XP Set out to Fix It had previously been accepted practice to spend months (years, even, on large-scale projects) gathering requirements, then another year or two on design, before a single line of production code had been written. The infamous "big bang delivery" occurred when this gigantic monolith of a software system was finally delivered to the customer, only for the customer to retort that this was nothing like what he wanted.

It was also accepted practice to divide the system into separate subsystems, and attempt to integrate them after several months. By this time, each subsystem would have taken on a life of its own, and integrating these disparate monoliths together gave a whole new meaning to "plug and pray."

How XP "Fixes" It XP takes the development process to the other extreme, by shortening the "waterfall" lifecycle to weeks, days, even minutes. In fact, Kent Beck describes XP as a "waterfall run through a blender." Iterations typically last for a week or two; there is a high emphasis on code quality via unit testing; and code is integrated "constantly" so that it never becomes out of synch with the rest of the project. Beck is often quoted for saying that the XP practices "turn the dial all the way up to 10" -- that is, if something is good (testing, integrating, pair programming etc), well then, let's do it all the time.

There's a lot to be gained from learning about XP, and agile practices in general. However, many feel that XP has taken things too far. By taking things to the opposite extreme, we're just introducing a fresh set of problems. The optimum solution, then, must lie somewhere between these two extremes. That is fundamentally what Extreme Programming Refactored (XPR) is about.

Optimizing the Process There's been a lot of controversy surrounding this book. It grew out of an equally controversial article that appeared on the author's website. XP advocates were arguing on Yahoo! Groups over XPR's good and bad points, miraculously, months before the book was even available. XP zealots were even posting messages telling others not to buy the book, before they'd even had a chance to read it for themselves and find out what it's all about.

It's important to note that XPR isn't the anti-XP slam piece that some people had been expecting. It does rip into the XP practices in plenty of detail, but importantly it also describes alternatives, and talks about the good aspects of XP.

The authors make the argument that "turning the dial up to 10" mostly isn't such a good thing, and that to achieve our "holy grail" development process, we just need to turn the dial down a little bit -- let the milk simmer rather than boil over. We can do this by adding in some additional practices that take the burden off the overloaded, heavily interdependent XP practices.

For example, not everyone likes to pair program (with two people sitting at one computer). It just isn't for everyone. However, XP relies on everybody in the team pairing all the time. So if you don't like to "pair up," what choice do you have but to leave the project? XPR adjusts the other practices, placing a bigger emphasis on up-front design and documentation, so that pairing up doesn't have to be mandatory.

XPR also argues that it is possible to achieve a decent design before writing the code. The authors don't want a return to "BDUF" (Big Design Up Front), but instead to achieve an ideal middle-ground. The result is more akin to the monthly Sprints found in Scrum (www.controlchaos.com).

Similarly, XPR argues that the customer (and users) usually do have a pretty good idea what they want from a new system, and that they don't have to see a live system first before realizing that they wanted something entirely different. The authors argue in favour of interaction design as a way of achieving this goal.

XPR achieves all of this with more than a mild dose of satire. It's important to realize this -- the book is essentially "taking the piss" out of the more extreme XP practices, and the quasi-religious Extremo culture that has quickly grown up around XP. It has lots of serious things to say, but has a slight danger of that being lost "in the chuckles." There again, the danger is less to do with the book, and more to do with the reader.

XP sealots will never be swayed by such a book, naturally, but they are not the audience. It is for those undecided, or the cowed XP skeptics who know something is very wrong at the heart of the beast, but haven't have the words to say it. Even for zealots, I'd hope they'd put the hatred for long enough to at least temper their XP actions, to turn the dial down a little, to read the contents with the possibility in their minds that XP isn't the final perfect expression of all programming methodologies. Just for a while...

If you are scared of the contents, a favorite XP accusation, then of course you'll point out the 'needless humour,' blah blah, anything rther than address what the book says. Form will be far more addressable than content. It's the old "ignore this man, he wears a colourful tie" excuse, pick on some small detail that you feel is a weakness and totally ignore all the embarrassing questions you'd rather not address. If you like the contents, then the humour will be seen as a playful, court-jester like addition to what is a seriously analytical book

In conclusion, this book is well written, thought provoking, and above all entertaining (an aspect which seems to be proving almost heretical among some XP advocates). I found this to be a fun read, unlike some books, it was never a chore. It's extremely conversational, like having a cynical, wise-cracking guide. It's a pity more computer books aren't this fun. A spoonful of sugar and all that...

In fact this book is pretty damn wonderful. I know, it may sound a bit gushing, but before you review my review, give the book a read yourself. It's a thing of beauty, a rare mix of positive and negative, sweet and sour, opinion, and XP's favorite emotion, courage, courage enough to say "the emperor has no clothes." I can't see how you could read this book from beginning to end and not see XP in a different light.

In fact, XP programmers would do well to read this book, as it presents the negative path, something other than sunny-day scenarios. Using these warnings and guidelines, they'd have much more successful projects, as this book points out the dangers of lack of XP discipline, fragility and so on.

The truth is that I couldn't do justice to this book in such a short review. There is just so much evidence, so many contradictions pointed out, endless damning words from XPer's own mouths. It was supposed to be a small book to start of with, 150 pages or so, but due to the sheer body of evidence and submitted real life stories from those in the trenches, it bloomed to 400+ pages.

As Doug Rosenberg says "I don't want to be nearby when somebody decides to deploy an air traffic control system or some missile-targeting software that has been developed with no written requirements, and where the programmers made the design up as they went along." At least don't say you weren't warned!

You can purchase Extreme Programming Refactored: The Case Against XP from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

70 of 444 comments (clear)

  1. Uh-oh by jbellis · · Score: 2, Flamebait

    That's almost as bad as reviewing a book titled "Linux isn't always the answer."

  2. Some refinement is always welcome by 192939495969798999 · · Score: 2, Interesting

    I am delighted to see that XP has now been revisited and is being shown to not be the end-all of development styles. Perhaps with the slightly less "extreme" version, more managers will be willing to accept the changes. I have never had a boss accept XP, simply because they were scared of it (IMHO).

    --
    stuff |
  3. Absolutely Hopeless and Clueless by mihalis · · Score: 2, Insightful

    The Previous Extreme is pure fantasy. It has been well known for a long time that big bang or waterfall models don't work well. For example see the Ian Sommerville Software Engineering book - it's mentioned the 'spiral' model (iterating out from the core of a small well understood system) for at least ten years. I couldn't read any more of this "book review" after such a bunch of nonsense.

    1. Re:Absolutely Hopeless and Clueless by AJWM · · Score: 5, Insightful

      Q: What do you get when you combine the waterfall model with the spiral approach?

      A: The flush model.

      On a more serious note, the waterfall model does work for certain problem domains, notably those where the requirements are well understood in advance and unlikely to change significantly over the course of development, and where reliability of the final product is critical. This assumes you have the resources (time and people) to do it properly -- and this is why the waterfall method has gotten a bad reputation -- it's been applied where there is insufficient time/resources or the requirements aren't well understood.

      Most business applications, for example. The waterfull method is wonderfully suited to something like spacecraft control software, where the spiral approach (we called it "stepwise refinement" twenty-five years ago when I was in college -- there's nothing new) just wouldn't work. But businesses are both constantly changing and adaptable -- a business app that only implements half the requested features is probably still more useful than not, where as software to control complex hardware that's only half done is nearly useless (except that some testing can be done, perhaps).

      As always, it's a matter of picking the right tool for the job, rather than picking up your hammer and treating everything as a nail.

      --
      -- Alastair
  4. Ask Slashdot: Have you used Extreme programming by kilroy_hau · · Score: 2, Interesting

    Well, have you?

    I'm about to start a project using pair programming (not exactly Extreme, but something like that) and I don't like it one bit

    Pair programming is uncomfortable on our reduced space. And it's noisy.

    Are the inconveniences worth it?

    --


    Kilroy was here!
    1. Re:Ask Slashdot: Have you used Extreme programming by bokelley · · Score: 4, Insightful

      I would have to say that pair programming isn't really worth it. I personally can't stand the lack of productivity that is inherent to having two programmers sit around and watch each other type.

      My version of pair programming is to have one developer write a test harness while the other one develops the actual code to be tested. This forces each of them to communicate with each other, generally via a very informal spec or direct communication with the client.

      This ties two people closely together with the immediate need, but it doesn't require complete overlap. I'm not convinced that two brains are better than one - typing is an inherently blocking process, and whiteboarding happens either way.

      Anway, what good hacker wants to watch someone else type? Or play a game? Or do anything? Coding isn't a spectator sport.

      --
      warning: epoll_wait is not implemented and will always fail
    2. Re:Ask Slashdot: Have you used Extreme programming by sbrown123 · · Score: 3, Insightful

      Yes, its worth it. Take two programmers: one more skilled then the other. Give the less skilled one the keyboard. Force the skilled guy/girl to have to communicate all typing through the less skilled guy/girl. Less skilled guy/girl not only gets a good understanding of what went into the code (they typed it) but also learns new things from the smarty. Eventually you have two smarties. Repeat.

      Who hates the idea of pair programming? Smarties ofcourse. They dont want to lose what they feel makes them special. They are bad for business anyways.

    3. Re:Ask Slashdot: Have you used Extreme programming by pmz · · Score: 5, Funny

      Pair programming is uncomfortable on our reduced space. And it's noisy.

      Are the inconveniences worth it?


      If your partner is really hot, then yes.

    4. Re:Ask Slashdot: Have you used Extreme programming by e40 · · Score: 2, Insightful

      You said "about to" but then say you don't "like it one bit". Hmmmm, sounds like you made up your mind *before* trying it. Tsk, tsk.

      The truth about pair programming is that only the right mix of personalities and skills will work. I've done it with people where it worked great. With others, really badly.

    5. Re:Ask Slashdot: Have you used Extreme programming by javatips · · Score: 3, Insightful
      The concept of pair programming already exist in a good team. No need to force people to work all their time in pair.


      When you have a good and balanced team, pair programming will occur naturally. At some point someone is having stuck on some problem (design, bug, ...). In genral, the person will ask one of his fellow team member help to solve the problem. Natural Pair Programming! This is much more effective than having 2 persons work on the same problem (which is trivial 80% of the time).


      I believe that Natural Pair Programming with mentoring and code review are a lot better than full-time pair programming. This will help junior developer get up to speed more quickly without having to have two brains waisting their time on trivial problems.


      I also like the idea of the other poster saying that you can have one developer write the Unit Test while the other write the business code (you should inverse roles often though). This also benefit having two brain work on different thing while maintaining synergy and increasing the odd of catching bugs.

    6. Re:Ask Slashdot: Have you used Extreme programming by pong · · Score: 2, Interesting

      I think that is an incredibly simple and extremely powerful idea!! Sometimes when you have been programming for a while you just need the mental rest you get from working on your own. I think that the next time I feel like a break while pair programming, I will try to suggest to my pair-programming partner that we split up and one of us focus on the tests while the other is doing the production code.

      I think it could be especially useful when you are working on a problem that you are not really sure how to solve. The one person can write a test suite, which is a really good way to work out the most flexible and useful interface, while the developer does some prototyping/sandboxing.

      Thanks for the great idea!

    7. Re:Ask Slashdot: Have you used Extreme programming by Don+Calamari · · Score: 3, Insightful

      How true. Everybody knows the most profitable companies are run by drooling troglodytes. I'm just kidding, I'm sure you mean the prima donnas who nobody can stand...

      Anyway, I've found you simply cannot get 2 good coders by shackling one good and one poor coder together. The bad one generally doesn't learn anything and the good one just gets frustrated and angry.

      Pair programming might work if the poor coder had a desire to learn, but it's been my experience that this usually isn't true. Learning to be a good coder does not happen by proximity and osmosis.

    8. Re:Ask Slashdot: Have you used Extreme programming by bunratty · · Score: 4, Insightful
      The point of pair programming is not to force programmers to communicate with each other. Pair programming is "the knob turned to 10" on code reviews... if code reviews are good, then do them all the time, as a programmer is first writing the code.

      If you don't do pair programming, you need to replace it with a less extreme version of code reviews, such as simply reviewing each patch before it is checked in. The type of pair programming you describe involves no code reviews, and therefore is no substitute for pair programming.

      --
      What a fool believes, he sees, no wise man has the power to reason away.
    9. Re:Ask Slashdot: Have you used Extreme programming by bokelley · · Score: 3, Insightful

      Right. Also, I forgot to mention how incredibly important it is to switch between being the tester and being the coder. If you don't do this then it's too easy for both parties to be lazy, and there's no way to check or enforce the quality of code.

      At my current job, I've actually outsourced the implementation of the tests (because we're a very small shop) but I'm making the product manager the only interface with the test developers. This keeps me honest, and has the "nice" side effect of making me document all of my interfaces and APIs since the other developer isn't even in the office.

      One benefit of doing this with two programmers on-staff, as I prefer, is that when somebody leaves a project, there shouldn't be a huge drop in knowledge. I left a project a few months ago that was done this way and the remaining programmer, who was quite junior, was able to keep on going without much trouble since she had been exposed to both the testing and development aspects of the project.

      --
      warning: epoll_wait is not implemented and will always fail
    10. Re:Ask Slashdot: Have you used Extreme programming by bokelley · · Score: 2, Interesting

      That is a good point. I forgot to mention the other important part of this, which is that people switch roles often on the same component. This is my version of turning the dial up to 10. If you think about it, the point of a code review is to make sure that code is clean and legible (and more or less efficient) so that maintenance is easier. What better way to do this than force people to modify each others' code on a regular basis?

      --
      warning: epoll_wait is not implemented and will always fail
    11. Re:Ask Slashdot: Have you used Extreme programming by AJWM · · Score: 5, Insightful

      Who hates the idea of pair programming? Smarties ofcourse. They dont want to lose what they feel makes them special.

      More likely they're just driven insane by having to wait on the other person. Depends on how bad an impedence mismatch you have. Programmer productivity can vary by an order of magnitude or more between individuals (so called "superprogrammers", although the term is silly). If you have one of the latter, no amount of "skill transference" is going to bring the former up to the same speed, any more than teaming someone with an IQ of 150 with someone with an IQ of 110 is going to raise the latter's IQ to 130. (It might, through frustration, lower the former's though ;-)

      On the other hand, if you're just talking about a couple of average programmers, one of whom has a couple of years more experience, then yeah, it makes sense.

      They are bad for business anyways.

      Depends. Nobody needs prima donnas, of course (well, except ballet companies, I suppose ;-) but do you just want a stable of predictable but average programmers, or do you want to hold on to those "smarties" who, in a pinch, can deliver good code faster than any eight other programmers put together?

      (Of course, you may not have the choice. Superprogrammers aren't nearly as prevalent as the number of average programmers who think they're "super" would indicate ;-)

      --
      -- Alastair
    12. Re:Ask Slashdot: Have you used Extreme programming by chromatic · · Score: 2, Insightful
      What I don't like about pair programming as a methodology is that it hides incompetent programmers, reduces the learning that comes from failing at a certain approach, and discourages leaps of faith.

      I'm not sure I follow your reasoning.

      How does pair programming hide incompetent programmers? If you're switching pairs often, everyone will have the chance to work with everyone else.

      Do you prefer a learning style that requires everyone to make the same mistakes? In my teams, I prefer not to make mistakes at all. In practice, I'll settle for making a mistake once then letting everyone know what it was and how to avoid it. Given experienced programmers, it's pretty handy to start down a path and have your pairing partner say, "Wait... we did something like this before. Here's how we solved it then."

      I don't know what you mean by "discourages leaps of faith" at all. That sounds like a positive thing to me. I'd rather go by the empericism of the test suite than mystical intuition that can't be verified. XP's pretty firmly in the realm of "solving the customer's actual problems" than any Kierkegaardian philosophy.

      Admittedly, I'm a fan of pair programming. I've used it on a couple of projects and plan to use it on several more in the future.

    13. Re:Ask Slashdot: Have you used Extreme programming by Nept · · Score: 2, Funny

      except if one programmer doesn't like slashdot, it will make the other more productive...

      --
      "Teachers leave us kids alone ..." - Roger Waters, Pink Floyd
    14. Re:Ask Slashdot: Have you used Extreme programming by nullard · · Score: 3, Interesting
      At my current job, we have three developers. We work on projects as a group, on three seperate machines near each other.
      The steps we follow:
      1. We are all involved in project design.
      2. One of us writes up the requirements.
      3. The others review it.
      4. Two of us write the code while the other designs tests.
      5. The tester tests the system then works with the coders to fix the problems.
      6. Repeat last step until the bugs are gone and the project is ready for beta
      7. Beta testers test.
      8. All three developers work on the final bug fixes

      The client approves a demo app after step 3. The client approves the beta version before the testers see it. The client is involved in beta testing.

      This system seems to work well for us. The 3-way version of pair programming is beneficial to stringent testing. The fact that we use our own machines (but are free to walk over to any of the other developers) lets us parallelize the development project. Since adopting this system at the suggestion of our manager, our turnaround time has dropped dramatically. Aditionally, our code is better before we hit the beta stage. The last project we did had almost no bugs turn up in beta. The constant black box testing durring development followed by white box testing and fixing before the beta ensured that the code was really good before the testers saw it.
      --


      t'nera semordnilap
    15. Re:Ask Slashdot: Have you used Extreme programming by Cederic · · Score: 2, Insightful


      >> it hides incompetent programmers

      Actually, it exposes them quicker, as their incompetence becomes immediately apparent to their partner.

      Further, it gives the partner an opportunity to improve them and reduce their incompetence.

      If that doesn't work, then they're hopelessly incompetent, and you're no worse off than had you not programmed (and indeed, much better than if you'd found out 8 months into development when you did your first code review)

      >> reduces the learning that comes from failing at a certain approach

      Actually, it increases the learning - that learning is spread around the whole team in short order. The team learn collectively from their failures, instead of each individual having to make them all in turn.

      >> and discourages leaps of faith.

      I'm not sure what you're getting at here. I have been sat with a partner while he's said "go with me on this one for ten minutes, I want to try something". I shut up, I watch, I learn, I see how he's intuitively solved a problem or implemented a mechanism and saved a ton of work.

      Or I've been driving, and I've asked my partner, "I know we should methodically trace through this bug, but I reckon I can find it by guesswork - gimme a couple of minutes to have a go". Two minutes later, bug fixed, several hours of painful tracing averted.

      It's about building good communication within the pair, in having faith in each others abilities. What you've been describing is not pair programming.

      ~Cederic

    16. Re:Ask Slashdot: Have you used Extreme programming by iroberts · · Score: 2, Insightful
      Pair programming is not only less efficient, it is 4 times less efficient. Every time you interrupt a programmer's train of thought you are losing time more certainly than when he picks up his Coke for a drink.

      I've done some pair programming, and I have to disagree here. It's true that the "passenger" will interupt the "driver", but it will not necessarily interrupt the train of thought. Indeed, frequently comments will be along the lines of "why not just do instead?". Moreover, the "passenger" can often help keep track of the big picture, allowing the "driver" to focus on details without getting lost.

      This is not to say that pair programming is perfect. For certain drudge work, it's definitely not efficient. Even with two coders who respect each other and get along well, it can be very emotionally draining. But I've almost never felt that my pairing partner and I could have developed *and debugged* code more efficiently by working separately. Indeed, we tended to write remarkably bug-free code when we had a "second pair of eyes".

      One thing that I think is necessary for pair programming to work well - both developers need to be as "egoless" as possible. Only when each person can truly listen to and fairly evaluate the others comments while in "the heat of battle" will pair programming work well.

    17. Re:Ask Slashdot: Have you used Extreme programming by koreth · · Score: 2, Interesting

      Enabling two people to interact with a single computer isn't the problem. Enabling two people to interact effectively with each other is. VNC and speakerphones are fine if one person sits and silently watches over the other's shoulder until they see a typo. But effective pair programming, as I've observed it, is a much more interactive process with lots of "hang on, let's take a step back here" moments that seem to happen a lot more readily in person.

  5. You put your chocolate in my peanut butter by Anonymous Coward · · Score: 5, Funny

    XP and refactoring. Two over-blown buzzwords that go great together.

    the customer (and users) usually do have a pretty good idea what they want from a new system

    This a most telling quote as most developers have never talked to an actual customer in their entire career.

    I think the next programming movement should be called XTTFC for Extreme Talking To a Fucking Customer.

  6. Definition of a review by sphealey · · Score: 4, Insightful
    Perhaps I have been reading the New York Review of Books too long, but when I read a "review" I like to see some quotes from the actual book, some arguments for and against, some footnoted references to counter-arguments (it is fine if the reviewer considers the counter-arguments weak, as long as they are noted). In other words, something more than a prose advertisment.

    sPh

  7. Factual errors by linuxislandsucks · · Score: 3, Informative

    there are numerous factual erros on what xp is in this book..

    One example..if using xp must pari program..

    wrong! XP like any software process allows you take and use only those features that work with your project something this book author forgets to point out...

    --
    Don't Tread on OpenSource
    1. Re:Factual errors by tcopeland · · Score: 4, Insightful

      > XP like any software process allows you take
      > and use only those features that work with
      > your project

      Sure, you can do whatever you want. But XP without pair programming isn't XP, it's.... something else. "Pretty Adventuresome Programming", maybe.

      Some folks don't like XP because it's hard - it's hard to write unit tests, and it's hard to pair program and share knowledge and so forth. That's fine... but if you're rejecting XP because you don't like doing those things, don't blame XP.

    2. Re:Factual errors by tcopeland · · Score: 2, Informative

      > I've watched people code before

      That's not pair programming, though. If you're pair programming and you're bored, say so and drive for a bit.

      > Having someone standing staring at my work

      Hopefully they'd be doing more than just staring... hopefully you and the other person would be discussing the code.

      > when I can take micro breaks

      Yup, ain't much time for Slashdot when you're pair programming.

      > music

      Unless you turn it down to be somewhat quiet.

      > I will be spending large amounts of time
      > discussing what Im doing, or clarifying
      > suggestions

      And what would be the result of that? Maybe some good stuff - i.e., improving the communications skills, getting better at teaching, etc? No harm done there.

      > I'm a private person

      Yeah, but the code is public - at least within your project. You don't have to talk about your inner feelings, just discuss method naming and such. In other words, be business-like.

      > every time I need to go to the washroom

      You: "I gotta take a break".
      Other person: "See ya in 10 minutes".

      No problem.

      > pair programming does not work for me

      It does for me - the interchange of ideas, the focus, benefitting from the other person's ideas and such - it's good stuff.

      > I'd change careers rather than put up with it.

      Think some more about why you hate it so much. Maybe there's something to it :-)

      > anyone irl who has ever enjoyed
      > pair programming

      Chalk me up as one who does.

      On the other hand, I don't pair program all day long - just in little segments of time. So hey, what do I know.

  8. Middle ground? MIDDLE GROUND?!? by burgburgburg · · Score: 4, Funny
    Have you not been paying attention? This is the land of EXTREEEEEMMMMEEEE!!!!.

    Reasonable, well thought out, non-extreme methods mean the terrorists have won. Oh, wait. That's a different article.

    Anyway, how do you scream at the top of your lungs "MIDDLE GROOOOOUUUND"?

  9. Balance by randall_burns · · Score: 3, Interesting

    The XP guys _have_ made a mark in the world. Now, how that is going to work out longer term, remains to be seen. XP _is_ influecing stuff like IBM's Rational Unified Process.

    I tend to like XP. I haven't worked in an XP shop, but I have used it in class projects and some project of my own.

    Right now, lots shops have processes that are non-existant or chaotic--that is what XP really needs to be compared against. XP isn't "the emperor" more like an upstart prince edging in on the territory of being eyed(but not governed) by Emperor RUP.

    My gut is that was is motivating books like this:
    is the fact that XP is being adopted in places where stuff like RUP just would never get a toe in the door in its present state.

    The major stages of the opponents of an invention:
    a) it won't work
    b) its evil
    c) its not really new
    d) we invented it

    This stuff strikes me as somewhere between stage a-b.

  10. Sheesh. by Earle+Martin · · Score: 3, Insightful
    "I should point out that I get a couple of small mentions in this book (the authors quote an email from me), and I also happen to agree with a lot of what the authors say. But I'll try to be as impartial as I can with this review."

    If there was a book called "Why Linux Sucks", and I contributed to it, and I agreed with it, would that make me a fair reviewer for it? You can find links to some possibly less biased reviews at softwarereality.com. It's also worth reading the comments on the Case Against XP article on the same site, by one of the authors of the book.

  11. Nothing beats... by boomgopher · · Score: 5, Insightful

    having a team of programmers who:

    Like to program,
    are properly trained and schooled,
    who are paid enough,
    and are given enough time to do the job right.

    Everything else is fluff or a fad.

    --
    Your hybrid is not saving the environment. Its purpose is to make you feel good about buying something.
    1. Re: Nothing beats... by Black+Parrot · · Score: 2, Funny

      having a team of programmers who:

      Like to program,
      are properly trained and schooled,
      who are paid enough,
      and are given enough time to do the job right.
      Heh. I thought you were serious until I got to that last one.
      --
      Sheesh, evil *and* a jerk. -- Jade
  12. Is this a review or a rebuttal? by Maclir · · Score: 3, Interesting

    I would have like to have seen less of the pre-emptive rebuttal and more reviews on some of the findings and recommendations.

    Drop the dogma and theology, and give us the hard core, nitty-gritty, down and dirty facts.

  13. Maybe he shouldn't have reviewed it... by matchlight · · Score: 3, Insightful

    After reading the disclaimer "I should point out that I get a couple of small mentions in this book (the authors quote an email from me), and I also happen to agree with a lot of what the authors say. But I'll try to be as impartial as I can with this review." I was a little skeptical. It's pretty easy to enjoy a book that uses your ideas for content. I know it's not an entire book written around one e-mail but it's always a nice stroke to the ego to be found printable. That aside I think that although he did point out that the the writer is fair in his addressing the good and bad of XP and that the review is likely close to the truth, I feel as though the reviewer has taken more than great lengths to defend the book against the nay-sayers and "zealots". I'd like another review before running out to pick it up.

  14. Bollocks to "software development practices" by Boss,+Pointy+Haired · · Score: 2, Informative

    Look,

    Nobody should shun any alternative aproach to software development in favor of established "software development practices" when a huge percentage of projects, very very close to 100%, come in late and massively over budget .

    1. Re:Bollocks to "software development practices" by Gwala · · Score: 3, Insightful

      Prehaps that has something to do with the fact that most budgets and deadline's are horribly out of proportion to begin with?

      -Gwala

      --
      #!/bin/csh cat $0
    2. Re:Bollocks to "software development practices" by erioshi · · Score: 2, Interesting
      That's exactly on target! A good example of this is a project I was asked to become involved with a couple of years ago. The client needed a small, not-too complex database to track and report on customers going through a training program that included a social services component.

      When I was first asked into the project I was shown a "waterfall" application that another firm had developed for them that was over budget and significantly failed to meet the business need. I was asked to re-estimate the project and determine between saving and scrapping the failed code. Considering the falied app only aligned with about 30% of the specified need, we chose to dump the app.

      Of course by now alarm bells are going off inside my brain (how can a vendor land that far off target, etc.) and I start to do some digging. It turns out that the vendor they selected was fairly inexperienced, but more importantly the product had been produced using an estimate of about 1/4 the cost estimated by a far more experienced firm, and much closer to my own expectations. Even further digging turned up that the client didn't even have a firm grip on the details of internal the process they were trying to automate. Process changes and adjustments were ongoing, and asside from a few key elements, virtually everything else was subject to "interpretive need"; meaning the rule was whatever best suited the audience or need at the moment.

      Of course the new client was hoping I could find a magic wand and produce their project while meeting the unrealistic proposal of the less expensive vendor in this environment. Eventually I was able to develop a product that met the bulk of their need; but it was done with the understanding that until they clearly defined their needs, development and adjustments would need to be ongoing.

      The project has been ongoing for almost 2 years now, and meets about 95% of the business needs. About 35% of the development has been part time, as we have figured out what they really want (and need). The remaining needs have been defined and are being developed for as they define the busniess rules.

      The point to all this being that many times the client doesn't understand their own needs well enough to provide a spec that can be developed to. If you can't understand the problem fully, it's tough to produce an estimate for a solution.

      I've seen plenty of methodologies that say something similiar to "at point X you can estimate to Y hours (or dollars), +/-100%"; that may be true, but it's a tough sell. In the world of small business, most customers would call that "bunk".

  15. XP v the Engineer by MosesJones · · Score: 2, Interesting


    I'm one of those people who have seen XP tried and failed, and to be honest I never found it a suprise. I was educated to be a software engineer, and that the best way to deliver software effectively is to understand the problem domain. Iterative models like RUP or DSDM are great ways of delivering functionality quickly... XP is not... however there are some ideas in XP that are completely un-original that can work

    1) Pair programming - first seen in the "Surgical Team" idea from the mythical man month

    2) Unit Tests upfront - first seen in the 60s with the moon landing and space programmes.

    3) Iterations - First seen during the 80s with the rise of object oriented systems

    The ONE original idea in XP is simple...

    You don't need requirements before you start coding. For godsake that is a friggin DILBERT cartoon.

    XP assumes the John Wayne school of hacking, just hack hack and your talent will get you through. The reality is that if you are brilliant ANY process would be okay, and if you aren't you need more process to make sure you don't FUBAR things.

    I loathe XP, its a strong word but to me it represents the Microsoft view of software in its documented form. Quality doesn't matter, it isn't engineering...

    Its just lobbing together some-stuff.

    I'm an engineer... what are you ?

    --
    An Eye for an Eye will make the whole world blind - Gandhi
    1. Re:XP v the Engineer by tcopeland · · Score: 4, Insightful

      > the best way to deliver software effectively
      > is to understand the problem domain

      That's part of the process, yup. And there's a lot of other stuff, too.

      > You don't need requirements before you
      > start coding

      What about the planning game? What about user stories? Read this for better information on XP requirements gathering.

      XP has the concept of figuring out what customer want... but XP doesn't demand that you and the customer pretend that every detail of the system is in a bunch of white binders filled with stuff like "the system shall...". Instead, you and the customer work together to develop a system that meets the customer's ever-changing requirements.

      > if you aren't you need more process to
      > make sure you don't FUBAR things

      That's the beauty of XP - it assumes that we aren't geniuses and thus we use unit tests, refactoring, pair programming to keep the code under control.

  16. My experience by OYAHHH · · Score: 5, Interesting

    I cannot attest to actually having been involved in any project which used XP as defined but I can say the following about what I consider similar:

    I used to work at a company that strangely enough fostered both getting things done quickly for some projects while fostering a long drawn out method for other projects.

    The company was a consulting firm which always needed an answer yesterday for this or that problem.

    They also wrote fairly large simulation packages for the FAA. Some of these projects would go up to three years. Lots of planning etc. was usually done.

    Regardless of which type project I worked on I always tended to be the type who would get something working quick and then iterate over it several times if necessary.

    Others tended to be going at what I considered to be a snails pace mode. They would plan for days, weeks, months on something that I never considered worth that much planning.

    I could usually have a pretty good prototype working with a couple of major revisions made before the "planning types" could even get out a initial prototype.

    But, over the years I noticed that I (and those like me) tended to get "officially finished" in about the same amount of time that the annoying guys who planned everything out to the Nth degree got finished.

    Was my product any better than their's? No not really.

    Which methodology was better? It's hard to say, I know I certainly always liked to utilize new methodologies that worked well while they liked to stick with the tried and true.

    About the only thing that I can say is that my internal company clients usually appreciated that they had something to work with earlier rather than later.

    They knew it was a rough version, but hey, if you need it now, you need it now. And two years from now may not pay the bills.

    So, lots of times I came out looking like a hero.

    But, looking back on it now I'd have to say that my own personal version of XP wasn't any better than my counterpart's long drawn out process, at least in terms of a final product.

    My $0.02 worth.

    Sorry if I was too far off-topic...

    --
    Caution: Contents under pressure
  17. Re:XP Programming by inertia187 · · Score: 2, Insightful

    But "real design" doesn't work, at least, not very well.

    "Real design," as you call it, requires that you keep to yourself, code code code in secret and hope what was defined in the beginning is still what the customer wants.

    XP requires everyone to stretch beyond the "standard" development method. But for some reason, developers don't think they need to stretch.

    The lack of future planning in XP is not a flaw, it's like that on purpose. I believe that hacking is the best most ideal way to code. XP facilitates hacking on a company wide scale, so even non-developers understand the progress being made.

    --
    A programmer is a machine for converting coffee into code.
  18. Loverly Staw Man you have there. by MacGabhain · · Score: 3, Insightful
    As Doug Rosenberg says "I don't want to be nearby when somebody decides to deploy an air traffic control system or some missile-targeting software that has been developed with no written requirements, and where the programmers made the design up as they went along." At least don't say you weren't warned!

    XP, like any other process, fits some places and doesn't fit others. While some XP nut-cases may claim otherwise (just like people who market Rational products may claim that RUP should be used for everything), I've never seen the claim made in the pro-XP literature that XP was good for everything.

    XP is appropriate for projects where:

    Requirements are likely to change or are not well understood.

    The customer is readily available

    The team is reasonably experienced in the tools being used

    etc

    Air traffic control and missile guidence, while hopefully satisfying the third item up there, don't satisfy the first two. The customer is generally unavailable (I'm guessing here), and the requirements are understood remarkably well. Further, since these would be critical government projects, you wouldn't even have the choice to use XP. Heavy up front documentation is the only way to go on them.

    Perhaps a better statement would be "I'd hate to be around when a major company decides to deploy an accounting system that has been developed with written requirements that aren't in the form I'm used to (user stories) and where the programmers modified the design to suit shifting requirements as they went along." Except, of course, that that is exactly how XP got started and it worked just fine (on a project that had previously been failing).

  19. Definition of a review Review by thrillbert · · Score: 3, Funny

    I don't think he want's to review his own book, that would mean too much reading. He's opting for the easier way out, which is to review the review.

    So to continue the trend, I will review the review of the review:

    I feel the author was self serving while complaining about the original review. Although this review may not have been a "New York Times" quality review, the substance of the book was aptly reviewed, making the review of the review quite useless.

    ---
    Tomorrow we review the review of the SCO code by SGI.

  20. Pairing works...sometimes by AFirmGraspOfReality · · Score: 3, Insightful

    I've been though a lot of XP. I feel pairing is one of the more crucial aspects of XP. In other words, if you don't pair, you're not doing XP. Make no mistake, pairing is not for everyone. Do you have a cranky,maverick,social misfit who writes brilliant code? Let 'em...don't try to force 'em to pair. Pairing works when a) the people want to pair, b) the people are socially compatible. Pairing forces you to code...no surfing or other dicking around. One coder grabs the keyboard/mouse and does some work, say throwdown a new class or method. Or, more likely, code the test class first. Keep going until you feel "empty" or tired, then pass the torch. The other coder watches and contemplates the code, and offers advise. They are an instantiation of YOUR coding conscience. Coding alone, you may say to yourself "fsck it..i'll clean it up later", but while pairing, the other coder's duty is to say "why are you doing it that way? How about this?" and so on. It has to be COLLABORITIVE, not COMBATIVE..although that happens. If you pair, make sure pairs are always rotating...don't let the same folks always pair. Keep the pairing times short...half day is plenty. Pairing helps to eliminate "hot spots" in the skill set...i.e. experts in one area. It will not eliminate it...people will naturally gravitate to the things they like. Pairing will tire you out, as you tend to "go hard" (==productive) for the day. I think some of the best code I've written was while pairing...if I factor in time spent/unit coded. I've written some brilliant stuff alone, but it took longer. REMEMBER: the other half of the pair who does not have the keyboard must stay involved...question the codier, try to find flaws. They are not just sitting there watching the other half. If you see a pair talking to each other and looking at the screen and pointing, and passing the keyboard back and forth, and just cranking...you've got a good pair. Pairing works, if the pairs work. read this too: http://www.objectmentor.com/resources/articles/xpe pisode.htm

  21. Major problems with this book by HenryFlower · · Score: 4, Informative
    The XP advocates are not as far out or as hard line as one would think reading this review, or the book to which it refers (disclaimer: I've not read the book, but have read much of the source text which appeared on the authors web site). There are debates on the extremeprogramming Yahoo group constantly about how far to push emergent design versus design up front (one of the major advocates of XP, Martin Fowler, takes a dissenting view on this matter), about pair programming and how to manage people who don't pair well, etc. There is also a fair bit of self-directed humor by the major advocates for XP. XP needs thoughtful critique, and books (such as Pete McBreen's) that do this are well received.

    The web-posted material on which this book is based is not a thoughful critique. It is parody, yes, but not a critique. One of the central points made is that XP requires, e.g., strong unit testing and refactoring to work. Yep. If you don't do that, XP doesn't work well. Yep. These are points no XP advocate denys. The material ends up making the claim that if you don't do XP you can't do XP. This is quasi-interesting, if utterly obvious, but not the basis for a book-length attack on XP.

    Skip this book and buy McBreen's if you want to read a critique. Join the Yahoo group and state your critique thoughfully, and read how some of the major thinkers in XP respond. Then make up your mind.

  22. Extreme Programming XP by maxconsulting · · Score: 2, Funny

    I think Extreme Programming XP made some significant improvements over Extreme Programming 2002, but it will be better when the .NET framework comes in the box in Extreme Programming 2003

  23. A place for everything by DaveAtFraud · · Score: 2, Interesting

    The "waterfall" was great for determining exactly what the user wanted but then ended up delivering it five years later after the requirements had changed.

    "Use-case" analysis was great for determining how the user would interact with the system but tended to automate the existing processes instead of figuring out how automation could make the process unnecessary.

    OO was great for implementing the non-reusable objects determined to be needed by "use-case" analysis (see previous item).

    Too many shops implement XP as an excuse for not understanding the user requirements but just bashing out a bunch of high quality code that solves *the wrong problem* in a short amount of time. This isn't a criticism of XP so much as a criticism of the way it is misused (as has every other innovative software development technique).

    The basic problem is and always has been that inventing the future is difficult mainly because the future has a habit of changing while we're busy trying to invent it. No technique other than a time machine will ever solve this problem because it is inherent in the invention process.

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
    Ben
  24. It's just an excuse by curtlewis · · Score: 2, Interesting

    Extreme Programming or Rapid Application Development is just an excuse to bypass solid process in order to ship faster. Does it do the job better? No.

    General problems with the approach:

    Design on the fly. You get less features, more hastily implemented. Code is less maintainable.

    Without a plan up front, you have QA scrambling to keep up. Testing is full of gaps in coverage. Product is more buggy as a result.

    The only real benefit is shipping faster. You make everyone work harder and get an inferior product as a result. I suppose Marketing will be happy with that as long as the customers will pay for it.

    Personally, I prefer doing the job WELL, not just doing the job, but I seem to be in the minority in the development industry these days. I know a lot of engineers would prefer to do the job well, but go along for whatever reason.

    Having been involved in development for about 10 years, I've seen product quality decline over the years. Products in general have become more complex, but defects have increased substantially. I'd like to see a lower level of defects maintained and value to customer in stability, reliability and functionality/features increased.

    Call me a dreamer.

    1. Re:It's just an excuse by chromatic · · Score: 5, Insightful
      I'd like to see a lower level of defects maintained and value to customer in stability, reliability and functionality/features increased.

      How would you achieve this? I'd probably do things like:

      • Set coding standards and follow them.
      • Work on a small piece at a time and get it right.
      • Get the customer involved in making sure every piece is right.
      • Deliver working code to the customer every couple of weeks.
      • Have every piece of code reviewed for cleanliness, correctness, and good team style.
      • Have a comprehensive test suite at the programmer level.
      • Develop a comprehensive test plan at the feature level by working with the customer.
      • Revise the design and code as necessary to meet the customer's current needs.
      • Make sure that architects code and coders do architecture have every technical person participate in the whole project, design and coding.

      Of course, by the time you do all that, you've got the heart of XP.

  25. Re:XP Programming by AKAImBatman · · Score: 3, Interesting

    > But "real design" doesn't work, at least, not very well.

    Says who? Works pretty well for me. My team and I are generally *more* productive when we design *before* we code. Ever hear the saying, "Measure seven times, cut once"?

    > "Real design," as you call it, requires that you keep to
    > yourself, code code code in secret and hope what was
    > defined in the beginning is still what the customer wants.

    *cough*bull*cough*shit*cough*

    A development *team* usually consists of a point person through whom the specs are communicated, an architect who puts together the high level system design (including interfaces if possible), coders who take their cue from the architect, and testers who make sure that the code meets the specifications - thus closing the loop. There is a LOT of communication going on there. However, your team is only as strong as its weakest link. I'll give anyone the boot who can't accomplish their job (as is all to often the case from "wanna get rich, but don't know how to program/test/communicate" kids coming out of school these days).

    > The lack of future planning in XP is not a flaw, it's like
    > that on purpose. I believe that hacking is the best most
    > ideal way to code.

    Dear Lord. You people are INSANE. When the f**k are managers going to stop hiring people who actually know more than themselves about programming? No self respecting manager should EVER allow juniors like this guy to decide how development should progress.

  26. anyone who says "don't read this book" by dbrower · · Score: 4, Insightful
    has questionable intellectual honesty. One of the best things you can do to validate your belief in something is to occasionally understand the criticism of it by people who really do question it, not the quibbles of fellow believers.

    It's why Liberals need to listen to Rush now and then. It's why neo-cons should read Franken.

    So anyone using XP who says "don't read this book" is probably delusioinal in several respects.

    As another poster remarked, though, it's a bit annoying to read a review that does not include snips of key points and some analysis. This is endemic in /. reviews. Reviewers, please go look at the form of articles in the Sunday Book Review and follow it!

    -dB

    --
    "It if was easy to do, we'd find someone cheaper than you to do it."
  27. "On-Site Customer" by Joseph+Vigneau · · Score: 2, Informative

    This a most telling quote as most developers have never talked to an actual customer in their entire career.

    "On-Site Customer" is one of the tenets of XP.. Of course, this isn't always practical, but having instant access to the customer is one of the things that makes XP work...

    1. Re:"On-Site Customer" by kelzer · · Score: 2, Informative

      "On-Site Customer" is one of the tenets of XP.. Of course, this isn't always practical, but having instant access to the customer is one of the things that makes XP work...

      Can't remember which XP book it was in but one of them stated that if necessary you can use a proxy for the customer. I think they gave an example of an internal project manager or business analyst. Obviously, the more the proxy knows about the customer's business, the better.

      --

      ---------------------------------------------
      SERENITY NOW!!!!!!!!!!!!!!!!
  28. Pair programming == punishment by Ars-Fartsica · · Score: 4, Insightful
    The bottom line is that no exceptional programmer is ever going to be forced to have someone watching everything he types.

    You know, sometimes we just want to pick our noses or read a news story on the web. Pair programming makes this impossible as there is always some idiot practically sitting on your lap. This is why it will always be perceived as punishment.

    1. Re:Pair programming == punishment by Cederic · · Score: 3, Interesting


      Have you ever actually tried pair programming?

      I'm not an 'exceptional programmer' - I'm just a fucking good one.

      When pair programming, I benefit from the expertise and experience of another developer. I avoid making silly mistakes, because he spots them for me. I don't write as many bugs, because he spots them. I don't dither about variable names, or whether to refactor a method, or which algorithm to use - because I have someone to help me keep focussed, someone that helps me make swift decisions, that keeps me on track and moving forwards.

      Sure, sometimes I want to read a news story on the web. That's why when pair programming we take a break every hour or two. It depends on the progress we're making, how focussed we are, whether we've got the code to compile and pass all its tests.

      Pair programming is not punishment. It's an enlightening experience, a joy to participate in, something I want to do more often.

      Nobody is such an exceptional programmer that they can't learn from someone who still needs to look up the language syntax. Lose your ego, open your mind, and actually try PP.

      ~Cederic

  29. "Definition of a review Review" reviewed by dillon_rinker · · Score: 3, Funny

    While the ad-hominen attack against the parent meta-review's author was on target, and the increase in the level of abstraction was intriguing (though not entirely original), this meta-review was too short to be informative.

  30. Re:XP Programming by stemcell · · Score: 2, Funny

    I always thought that extreme programming was like, jumping out of an airplane with a laptop.

    Oh well, another dream shattered.

    Stem

  31. No True Scotsman Fallacy by jjohnson · · Score: 3, Insightful

    Every time someone here said "I've seen XP, and it didn't work," the XP defenders say "what you saw wasn't XP".

    Does that mean that a necessary requirement for XP to be XP is for it be successful? In other words, the failures disqualify a process from being XP?

    Isn't that a rather self-fulfilling condition?

    --
    Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    1. Re:No True Scotsman Fallacy by chromatic · · Score: 2, Informative

      That's a good question.

      XP requires quite a bit of discipline, just like any good process does. The real power, I believe, comes from the interaction of the processes. For example, tt'd be crazy to refactor all of the time, unless you had a comprehensive test suite. It'd be crazy not to design ahead for features you will need in the future, unless you let the customer choose which features to add and when and if you can keep the cost of changing the code low.

      A lot of projects adopt a couple of the easier practices without really understanding why they're important and how they fit into XP as a whole. (Extreme Programming Pocket Guide spends most of its time talking about these interactions.) Without either tremendous skill and discipline or other supporting practices that provide what the unpracticed XP practices do, you're bound to crash and burn eventually.

      It's okay to pick and choose from the XP practices that your team needs most, but you have to understand what they can and cannot provide.

      I think what you're seeing is a lot of teams who like the idea of not doing a lot of up front design and getting rid of a lot of process but who aren't replacing that with the appropriate XP practices or equivalents.

      That's why when someone says "We tried XP, but our code turned into a big ball of mud", people who've used XP successfully will ask "How well were you testing?" and "Were you refactoring?" It's not that XP is always appropriate for every situation and every team. It's that if you just copy a few practices without thinking about why they're important, you can get in a lot of trouble.

  32. Re:XP Programming by pmz · · Score: 2, Funny

    No self respecting manager should EVER allow juniors like this guy to decide how development should progress.

    Unfortunately, most managers were either junior programmers who weren't any good at it or non-programmers with MBAs.

  33. Why stop at 10? by greenhide · · Score: 4, Funny

    Beck is often quoted for saying that the XP practices "turn the dial all the way up to 10" -- that is, if something is good (testing, integrating, pair programming etc), well then, let's do it all the time.

    Nigel: "All the numbers go to 11..."
    Director Marty Dibergi: "I see, and most amps go up to 10. Does that mean it's louder?"
    Nigel: "Well, it's one louder, isn't it? You see, most blokes will be playing at 10...you're on 10 on your guitar. Where can you go from there?...Nowhere, exactly. So when we need that extra push over the cliff, you know what we do?"
    Marty: "Put it to 11."
    Nigel: "Exactly. One louder."
    Marty: "Why don't just make 10 louder and make 10 the top number and make that a little louder?"
    Nigel (chewing gum, pauses while he considers the question, then states confidently): "These go to 11."

    --
    Karma: Chevy Kavalierma.
  34. Re:Two idiots don't make a genius by royalblue_tom · · Score: 2, Insightful

    Nope, pair programming takes two hackers and attempts to turn them into one disciplined programmer.

    Perhaps this way, the code will be commented, have tidy layout, and be readable. Meaningful (to more than one person) variable names might be used. Boundary checking done. Good test cases written, and used. Other programmers may be able to work on this code at a latter date. The code may do what was specified (for this particular task) as the one programmer keeps the other one focussed on the job in hand.

    If the developer is *that* senior, he should be capable of explaining what he is doing to the lesser minds in the company. Treat it as a mentor slot. And of course, that's only for 50% - the other half of the time is watching the other guy, advising, perhaps teaching, and guiding.

    The question the developer should ask himself, "Is he really a malodorous jerk, or am I so socially inept that I am unable to work with people who may not be as skilled as I am?".

  35. The Emperor has a relatively decent suit by Get+Behind+the+Mule · · Score: 4, Insightful

    Unit testing, especially as a foundation for refactoring; continuous integration, read hourly builds; and the flexibility to revise design decisions when the need becomes obvious -- all of these principles are absolutely indispensible in any modern software project. Failing to do any of these things is an outrageous, inexcusable lapse. But these ideas are better understood and more obvious now than they were before Kent Beck came along with XP.

    I see all the other posts in the thread so far claiming that some or all of these concepts were known earlier, before they were emphasized by XP. But that does not discredit the approach. Frankly, there's rarely anything new under the sun, but sometimes someone has to come up with a kind of philosophy just to help us realize how effective certain ideas can be. I think all programmatic software methodologies are like this -- they try to emphasize methods that are known to have worked well in the past, and try to draw useful generalizations about them.

    Nowadays, most of the UP people are adopting many ideas emphasized by XP -- I attended a tutorial by Craig Larman last year in which he argued that no conflict between the UP and XP exists at all. But no one was saying these things before XP was articulated.

    Incidentally, I think it's clear that the waterfall is an unmitigated disaster. I was once in a project that was managed that way, a big fat loser of millions, the worst nightmare of my career, took down a whole dot-com agency. Those were the days.

    I don't agree with all of XP -- a complex system has to start with a fairly sophisticated analysis and design (but it better be designed flexibly enough to change over time if necessary). And I can't imagine pair programming, never tried it and don't want to. But even if the Emperor is not wearing purple and crimson ermine minks with linings of silver and gold, he's not naked either. On the contrary, his suit is fairly presentable.

  36. honest reviews?? by jlangr · · Score: 2, Interesting
    As usual, one can read the above review of Extreme Programming Refactored and the ones at Amazon, and note that the bulk of the reviews are either 5 star (like this one, claiming that the book is "wonderful"), or 1 star.

    The unfortunate thing is that most reviewers have lost all sense of reality. One would think a 5-star review represents a classic for all time--maybe something on par with Shakespeare, or (dare I suggest) Design Patterns. A one-star review represents something absolutely worthless and/or dishonest, like the half-made-up Bellisiles' book "Arming America."

    Extreme Programming Refactored is neither a classic, nor is it a complete waste of money. There are some good insights in the book, as it points out some of the pitfalls in the application of XP. It is for the most part well-written, but it also resorts to cheap shots and name calling. There are some serious problems with the book as well, including incorrect information and ignorant testimonials.

    Most honest people would agree with this assessment of the book. Unfortunately, the bulk of the reviewers aren't. Honest, that is. XP haters rate it five stars, XP lovers rate it one star. [I fall on the pro-XP side of the fence, in case you cared.]

    Even big-process bigot Steve McConnell chirps in with a 5-star review. Gosh, Steve, does that mean you think the book is a software development classic, on par or even better than your book Code Complete, which only gets 4.5 stars on average?

    In any case, I did write a review of the book at Amazon, complete with quotes and such, and I didn't give it 5 stars, nor did I give it 1 star. But I guess my review sucked, because McConnell's review got more happy-popularity-votes than mine did.

  37. Re:Someone help clarify? by Fizzog · · Score: 2, Interesting

    Extreme Programming =
    1. User department has some idea of what they want.
    2. Users sit down with you and give feedback while you develop the system for them.
    3. Regression tests are created early to ensure that changes don't break anything.
    4. Another developer works with you to help eliminate coding errors, etc.
    5. Users get exactly what they *really* wanted since they were there driving the development and evolution of it.

    Non-Extreme Programming =
    1. User department has some idea of what they want.
    2. Business Analyst manages to interpret 80% of this and puts it in a Requirement spec.
    3. Systems Analyst manages to interpret 80% of the Requirements spec and puts it in a Functional spec.
    4. Coders manage to produce 80% of the features they sort of understood in the Functional spec.
    5. The users test something not at all resembling what they expected, but they are happy to *finally* get something to look at.
    6. Users end up with an incomplete, out of date piece of junk that is nothing like they *really* were hoping for in the first place.

  38. Re:XP Programming by Sparks23 · · Score: 3, Insightful

    A very good point... it's interesting that many of the same people who argue against Extreme Programming being sloppy are also the sort who are die-hard supporters of the Open Source/hacker methodology of development. If it's so bad to adapt the code as requirements change, how many Open Source projects follow a large formalized design document as opposed to accepting useful patches as they come up?

    However, there's a lot more to XP, and there are some definite weaknesses in it...I say this as an XP supporter. I'm also going to make the same argument I've made in most of the previous XP articles on here; XP is absolutely great /when it works/, but it's very easy for it to fall apart, and then it is more harmful than helpful.

    I was part of an Extreme Programming team that saw both ends of the spectrum. We had internal support, we met with our customer every two weeks and had an iteration planning meeting, and we were productive beyond all reason. When the requirements for part of the project changed, we were able to adapt quickly; our code was small, reusable and modular, so we were able to quickly make adaptations when the end-goal target changed. The code was largely bug-free because of pair programming, where one would work on design while the other coded, and we caught errors much more easily. Meetings were held standing up so that no one wanted them to go on for too long, and it kept them short. Our team was responsible for our own hires, which meant we picked folks who could fit into the pair-programming model well. We took a break every two hours to keep from burning out, we had separate 'personal' spaces as opposed to the pair programming computers...

    It was one of the most rewarding development experiences I have ever been part of. Every bit of glowing, golden praise I had heard about XP working well seemed to be true.

    But things changed inside the company when management changed hands. We lost the support for two-week iteration planning meetings, and had to work in six-month intervals. We lost the ability to hold stand-up meetings and were stuck in long conference calls. Our team got too large and fragmented into smaller bits, and the pair programming model broke down. Trying to stick to XP became an exercise in frustration and warfare with management. And as we let go of bits and pieces of XP, under pressure, the remaining pieces were weakened. Iteration planning only works if you can actually interact with the customer at an iteration-level, for instance... and so our targets became less easily defined since they were set out months in advance. Made it easier and easier for specific people to concentrate on tasks than having to swap around per-session... which ended up meaning instead of knowing all the code as we had before, anyone able to take over any area, we became specialized in specific areas of the project. And so on...watching XP collapse around us. And it was depressing, really, to see what had been a productive, active environment be stifled.

    So that's my first-hand experience. When XP works...it /really/ works. But if you throw the balance off slightly, if you can't have all the prerequisites for XP, it rapidly becomes more frustrating and damaging than normal development methods are.

    And more and more, it's harder to find the support for the XP procedures in a corporate environment. Bits and pieces that are in XP -- such as making modifications as they're needed rather than trying to plan overly far ahead for goals that might change, or writing test-suites for your code, and making clearly-understood code -- are of course sensible procedures. But the overall conglomerate only works if you have certain things...support within the /whole/ company being the big one.

    --
    --Rachel
  39. Re:XP Programming by dubl-u · · Score: 2, Interesting

    Says who? Works pretty well for me. My team and I are generally *more* productive when we design *before* we code. Ever hear the saying, "Measure seven times, cut once"?

    Having done things both ways, I'd say that incremental design improvement is the way to go.

    Having done XP for a few years, I spend about 20% of my design time up front, about 30% while coding, and the rest while refactoring.

    I like this a lot more than trying to do 100% of the design up front. Why? Because your design is only as good as the information you have at the time you do the design. For non-trival projects, it's impossible to have all the information you need up front; even if users never changed their minds once they saw the result (ha!), any good developer learns things as they go.

    It also turns out to be much more productive. If I have to do all my design up front, I'm much more likely to overdesign; much better to have too much than too little. But if I do my design on a just-in-time basis, I can avoid a lot of needless work.

    And as a bonus, my designs end up being better. The product may be version 1.0, but because I've been iterating over my architecture along the way, the architecture is version 5.0.

  40. Another Fad... by jxa00++ · · Score: 2, Insightful

    Apologies to the previous Slashdot poster who originally posted the below text, but I though it was so on the mark that I copied and kept it. It bears repeating:

    I've seen SO many of these come and go. You can never question them while they're in the ascendancy.

    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.

  41. Domain versus Range by anothermuse · · Score: 2, Interesting

    There is an interesting interview between Alan Cooper and Kent Beck at http://www.fawcette.com/interviews/beck_cooper/def ault.asp Cooper was testing his ideas on goal centered design through his "Design+Fun" workshops. I offered up the opinion to Alan that software design is a bi-directional search: with firmware on one end and wetware on the other end. Alan and Kent start from either side of this search. From XP, I gather that there is much exploration of the domain of APIs to deploy a solution. Writing code immediately helps document the search in such a domain. From Goal centered design, there is much exploration of the range of a customer's goals. Writing designs helps document the search in such a range. Using both: Goals help prune unnecessary features, while XP helps prune unrealistic expectations. While using either method could get the job done, perhaps using both is more efficient.

  42. No free lunch by YouHaveSnail · · Score: 2, Insightful

    I don't care if it's structured programming, OOP, Smalltalk, Java, RAD, use-case analysis, XP, or XPR... no language, tool, methodology, or management style can provide a quick fix for the difficult problems of organizing, designing, implementing, and maintaining a significant software project.

    By all means, read this book (or any other) if you feel it might bring something positive to your development process, and adapt what you can to your own project. Just don't fall into the trap of thinking that XPR (or anything else) will solve all your problems, and if it doesn't that you must not have done it right.