Slashdot Mirror


eXtreme Programming (XP) in OSS projects?

ivi asks: "I first bumped into the XP approach to system development, some years ago, on Dr Dobbs' now-defunct Seminar-On-Demand site TechNetCast. XP has some short, simple rules for growing software from Users' Stories, eg, with programmers working in pairs, showing prototypes to Users "early & often" et al. Download this XP site (under 400KB, zipped) for more. So, who's used or using XP, does it work for OSS projects & what have your experiences been with it, so far?"

60 comments

  1. Whaaaa by Anonymous Coward · · Score: 0, Funny

    So, who's used or using XP, does it work for OSS projects & what have your experiences been with it, so far?

    Heh, I'll be the first to say that Windows XP doesn't play well with OSS projects.

    and yes, that IS an attempt to be funny, not stupid.

    1. Re:Whaaaa by Anonymous Coward · · Score: 0

      and yes, that IS an attempt to be funny, not stupid.

      To me, it seems like a stupid attempt to be funny, stupid.

  2. XP in college by lambent · · Score: 4, Interesting

    We tried XP approaches in my college programming classes. More often than not, it caused my partners and I to claw each others' eyes out, and generally despise your partner for the remainder of the project.

    What worked MUCH better was designing the framework from the beginning, outlining how the different functions/processes/data structures etc. would have to communicate with each other, then splitting the programming tasks up.

    After every one made progress, we'd recombine, work out bugs, etc.

    Much more organic and realistic than the XP approach, which always seemed very articifical and limited.

    1. Re:XP in college by Nasarius · · Score: 2, Informative

      The method you describe seems to be the most natural and obvious approach, especially if you're doing OO programming. I don't like pair programming either, but other elements of XP might be useful, like more interaction with customers and frequent milestones. No methodology is perfect for every team and project.

      --
      LOAD "SIG",8,1
    2. Re:XP in college by saden1 · · Score: 2, Funny

      Between you and your partners, who won and what weapons did the winner use?

      --

      -----
      One is born into aristocracy, but mediocrity can only be achieved through hard work.
    3. Re:XP in college by Anonymous Coward · · Score: 4, Interesting

      Much more organic and realistic than the XP approach

      Wow, I have the opposite impression. Designing up front feels inorganic and limiting, because you're making assumptions about the design that you either have to change in the future, or you have to force the problem to fit as you go along.

      I guess in a college course it's easier to conceive the whole thing ahead of time. But for apps where you show it to a customer and he goes "oh wait, there are actually multiple properties per customer, can we go back and change it?" .. XP is wonderful for that kind of unpredictable development.. the customer is actually giving you feedback on every iteration.

      Pair programming is a little difficult for some people, especially really smart people, but if you open your mind to it, it's really helpful. It minimizes bad assumptions, and keeps you from forgetting to write your unit tests first!

      Just hoping you don't completely write off XP because it didn't work in that particular situation. XP is really just programming best practices with a faddish name.

    4. Re:XP in college by Cuthalion · · Score: 4, Funny

      Pair programming is a little difficult for some people, especially really smart people

      Funny. I never had any trouble with it...

      --
      Trees can't go dancing
      So do them a big favor
      Pretend dancing stinks!
    5. Re:XP in college by !the!bad!fish! · · Score: 1
      Pair programming is a little difficult for some people, especially really smart people...
      IANASP (smart person) - Pair programming is difficult for arrogant people. Arrogant doesn't mean smart. I've met plenty of smart folk who listen well and can handle criticism.

      --
      Kids today are tyrants. They contradict their parent, gobble their food, and tyrannize their teachers. - Socrates 400 BC
    6. Re:XP in college by Phouk · · Score: 1

      Oh, yeah, right, with a whole college programming class you are certainly qualified to decree which programming approach is to be seen as realistic and which is artificial.

      You do know XP was developed in the trenches, during a real-life project, by veteran programmers, don't you?

      --
      Stupidity is mis-underestimated.
    7. Re:XP in college by Anonymous Coward · · Score: 0

      It's funny I know of a major software developer that has mandated pair programming and has spent twice as long to do tasks due to the inefficiencies in pair programming, and more importantly inefficiency in the "simplest thing that works" path. This has led them to rewrite code more often than desired (even with refactoring expected and planned for) and led to code design being very short sighted and not scaleable. It will be interesting to see how much longer extreme programming lasts there. The best thing that has come from unit testing everything and consistent code review is that now everyone knows who the losers are and managment can't ignore that issue.

    8. Re:XP in college by Anonymous Coward · · Score: 0

      No methodology is perfect for every team and project.

      Absolutely, and the best approach is to pick and choose ideas from various methodologies that best suit your project and team.

      There are a couple of ideas that XP encourages that I think can be beneficial to a wide range of projects.

      Unit testing and testing-first is an approach that I think is a great way of testing your testing. The programmer writes a test, and then writes enough code to pass the test, then they write the next test, and enough code to pass that, and so on. This is an excellent approach because it ensures that code is well tested, and its less of a chore for the programmer because its all part of the coding and the problem solving process, rather than the thing you have to do after you've done all the interesting stuff. There are various unit testing frameworks to support this.

      I also like the idea of continuous integration. Where every time a change is submitted to source control a complete build of the system is done, all unit tests are run, and any other checks are completed e.g. coding standards etc. The success of this is reported back to the programmer so any errors can be fixed.

    9. Re:XP in college by duffbeer703 · · Score: 1

      s/smart/arrogant/g

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    10. Re:XP in college by Detritus · · Score: 2, Insightful

      So was divination by reading the entrails of a chicken.

      --
      Mea navis aericumbens anguillis abundat
    11. Re:XP in college by Anonymous Coward · · Score: 0

      Hahaha! You are not smart!

    12. Re:XP in college by Anonymous Coward · · Score: 0

      It's possible to take more time with pair programming, but code quality goes up. As for losers, well... it's ok for some to make more mistakes, but if it's exceedingly bad, you show them the door.

    13. Re:XP in college by Jerf · · Score: 1, Interesting

      What worked MUCH better was designing the framework from the beginning, outlining how the different functions/processes/data structures etc. would have to communicate with each other, then splitting the programming tasks up.

      Welcome to 1970.

      There's a damn good reason nobody does that kind of design anymore on a real world system, and that is, in a nutshell, it doesn't work on any but a trivial system... such as you might do for a programming assignment in college.

      If you're serious about becoming a good programmer, you need to be expanding your horizon past school assignments, even now. I'm not far out of college but even when I was in it I was doing extra things that revealed how miserably that design methodology worked.

      (Heck, I even had homework assignments large enough to reveal how that doesn't work; YMMV.)

      You might want to hold off on the design prognostication; if you're in college, odds are you're promoting a design approach that has been obsolete since before you were born. I'd be a little embarrased about such things, especially in this industry.

    14. Re:XP in college by Anonymous Coward · · Score: 1, Interesting

      I really like XP, but I wouldn't recommend trying it unless you have someone there to mentor you who has used it before. Some of the practices of XP rely on others. If you try to ignore one, the others fail as well.

      Take pair programming for example. Many people have problems with pair programming because on guy is always acting as the back seat driver... constantly pointing out typos and blurting out method names as if it helps the other type faster.

      The person who isn't typing is supposed to be looking at the big picture. From that point of view, there really isn't much need for that person to be looking at the screen. When I'm not typing, I have a tendency to get up, write on the white board or sit in a position where I can't see the screen. It helps me focus on the design and the business rules rather than style and punctuation. You have to stay close, however, because peer-review is part of the advantage to pair programming.

    15. Re:XP in college by Rheingold · · Score: 1

      My limited experience with pair-programming was quite the opposite. I felt I developed a stronger relationship with my programming partners, who were nearly strangers to me. Of course, we weren't forced into doing pair-work by some sadistic professor--we were motivated by an interest and curiosity. I've also found pair-programming reduces the Slashdot Temptation--the compulsive reloading of Slashdot and reading e-mail, which can be disastrous to someone with an attention as fragile as mine is.

      --
      Wil
      wiki
    16. Re:XP in college by xenocide2 · · Score: 2, Insightful

      Well I wouldn't say we practiced "Xtreme programming" aka Agile somethingorother, but I did program in pairs for a while. It really isn't that bad of a deal. The trick is to lay out a basic skeleton first, so you know where you're going. Agile techniques aren't a replacement for good design. It's a method to see your design fail faster, therefore costing less.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    17. Re:XP in college by bssea · · Score: 1

      Oh. The "they have more experience than you. Therefore they know better" argument. What a logical and very *stupid* argument!

      Just because someone has been "in the field" doesn't mean that they know what's best - and people who think that need to learn more. Some of the stupidest people I've met have been in the "field" for 20 years. Why are they so stupid? Because they are so set in their "I have experience, therefore I know what works" mentality.

      College students can make very good judgements precisely *because* they are in college! They have been exposed to so many different methodologies that they can usually tell crap from the gems.

      While experience does help, it in itself is *not* a valid argument. You have to take into account how smart that person is.

      And just to let you know. I've *been* on a project where XP was used. And you know what? It was a horrid experience and the project was later reorganized because we couldn't get anything done.

      I've also been on a project where XP actually worked. It all depends on the personalities on the project.

      --sea

    18. Re:XP in college by Anonymous Coward · · Score: 0

      >More often than not, it caused my partners and I to claw each others' eyes out, and generally despise your partner for the remainder of the project.

      This Issue goes away with maturity. We do the framework thing from the beginning, knowing it will change, but at least giving you something to hold on to. Overall we have a hybrid approach.

      We are xp in the sense that we expose the users to lots of prototypes, and let theme get the stimuli to figure out what they "really" want.

      They can't visualize squat and don't care enough to put any effort into it. They would rather put a biz requirements doc on their desk, forget about it for a few weeks, then sign off, then complain after the app is built.

      We go into projects knowing this. Knowing your users and working with them, really goes a long way towards ending frustration everyone's part.

      If you get a spec signed off, and work in a closet until all programming is done, then show it to the user, often, you have wasted a lot of time.

    19. Re:XP in college by dubious9 · · Score: 1

      While experience does help, it in itself is *not* a valid argument.

      er... I think it is, especially in software development. In school, I never wrote anything longer than 5K lines, and never worked with more than 2 other people on the same code base. Since I've started working, I've been on servals projects each with 5+ people and 100k lines.

      The difference in design techniques for the two are utterly incomparable. Unless someone in college had experience designing something that big, then they really don't have enough experience to judge XP when XP is meant to solve problems in big projects.

      You are right in saying that XP isn't good for every situation, as it is just another tool in the toolbox. Experience, however, in the different sizes of code base and team members is necessary in making a good judgement on the effectiveness of XP.

      --
      Why, o why must the sky fall when I've learned to fly?
    20. Re:XP in college by AuMatar · · Score: 1

      Welcome to 2004

      Most software is still programmed this way, because it works. XP is a fad that holds a smaller percent of the industry than Cobol. Of course you're not going to get everything perfect in the design- thats why you change it when it stops meeting your needs. Just make sure you have a reason to do the change first.

      To be fair to XP, it does have some pluses to it- I like the increased emphasis on testing, even if I do think they take it a bit too far. But when you're working on code thats hundreds of thousands or millions of lines of code inside a dozen components without a design, you're fucked.

      Welcome to reality- there is no ultimate process. The best process depends on the size of the project and the skills and personalities of your designers. The problem with XP is that it works very well only with certain personality types and for certain project sizes. Too big or too small and it fails. The reason the top down design is used so much is that it works decently well, even if not optimally, on anything from a large 100 million line project down to a 1Kloc project.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    21. Re:XP in college by FleaPlus · · Score: 1

      I actually had the exact opposite experience. In a programming project-based course I took recently, most students took the approach you described, where tasks were delegated to each partner and they'd recombine their effort. My partner and I decided to be different, and relied on pair-programming for most of our work.

      The pair-programming approach seemed to work much better. Once the deadline came (and passed) other groups were still struggling with trying to get their components to fit together properly, having difficulties tracking down which component a bug originated from. With our code, however, we both understood what was going on, and were able to fix things much more easily.

    22. Re:XP in college by Anonymous Coward · · Score: 0

      I even had homework assignments large enough to reveal how that doesn't work

      That's just because you weren't a software engineer then. The design process is different from the coding process.

      XP is nothing more than a way to get better feedback from the codemonkies to the engineers.

    23. Re:XP in college by Jerf · · Score: 1

      Most software is still programmed this way, ... thats why you change it when it stops meeting your needs.

      Welcome to loud agreement. So you admit that top-down design never works in the real world and designs have to change as circumstances warrent? Why'd you bother posting such a cranky message when you agree with my point?

      Re-read my post and tell me where I was advocating XP. My post was purely negative, as I've never actually tried XP and I'm quite skeptical about it in many ways.

  3. didn't chromatic have an article on this? by Anonymous Coward · · Score: 5, Interesting

    I remember reading an article on O'Reilly about XP and Open Source .. go dig it up..

    I don't have any experience with XP in writing open source projects, but I sure see a lot of projects that can benefit from it!!

    I would love to see more software with comprehensive tests. It's very satisfying when you hack a minor change into a program and all the tests still pass. Then you can send the patch off to the author knowing it won't break anything (well, at least it won't break any of the tests :-).

    In this vein, I believe test-driven development (i.e., write tests, write any code that passes the test, then refactor to clean up the mess) is the most amazing gift from whoever the programming gods are. I'm glad XP has (re-)discovered it.

    It forces much simpler, cleaner interfaces, and complete unit tests. There have been several times when I've wished that a particular open source program was split into many small objects that I could mix and match (i.e., I love this package BUT I need to replace the code that saves files to disk with code that saves files to a database..etc).

    With TDD your design splits into many small simple classes. I think this would be great for OSS projects. A good example of a well-factored library (off the top of my head) is Mime::Tools for Perl.

    Too many OSS developers think "I used Python, I must be doing object-oriented programming" or something along those lines.

    Some other aspects of XP such as continuous integration seem useful.

    Another thing about XP techniques (especially test-driven development again), is you can code in small bite-size chunks and not leave the code in a broken state. I think this is great for projects you might have "on the side". You can work an hour or two and your code will always be working and passing tests, none of these "egg-juggling" 10-hour coding marathons. You know what I mean, when you change something and it ripples to 20 files and you keep all the things you need to do in your head and you go half-insane running from file to file.

    Pair programming, user stories, "Customers", etc., seems less useful.

    But yeah test-driven development is worth trying, at least.

    1. Re:didn't chromatic have an article on this? by Corfitz · · Score: 3, Interesting
      Maybe you're referring to this piece on "Five Lessons Open Source Developers Should Learn from Extreme Programming".

      Well worth the read

  4. Doesn't seem suited for OSS by wayne606 · · Score: 5, Interesting

    My initial impression of XP (I haven't tried it but had it explained to me) is that it takes a lot of the fun and programmer-as-artist aspect out of software development. Also it is good for making a larger number of so-so programmers as productive as a few really good programmers.

    However, most OSS projects seem to be labors of love by groups of individuals working together in their spare time. I would bet most of the largest contributors to OSS projects are very good programmers who don't need to be "managed" to the extent that XP does. I don't see how many of the XP ideas could be applied when none of the developers are in the same room on a regular basis (or even available to meet on-line at one time), their time commitments are unpredictable, and in many cases have big egos and work on what they feel like, not what the customers ask for... After all, programmers have day jobs that are like that!

    1. Re:Doesn't seem suited for OSS by Anonymous Coward · · Score: 0

      My initial impression of XP (I haven't tried it but had it explained to me)

      It shows you haven't experienced it.

    2. Re:Doesn't seem suited for OSS by splattertrousers · · Score: 2, Informative
      My initial impression of XP (I haven't tried it but had it explained to me) is that it takes a lot of the fun and programmer-as-artist aspect out of software development.

      It doesn't take the fun out. It's all about making sure the developers develop exactly what the customer wants. The customer is the person paying for the project (or a duly appointed representative). I'm not sure who the customer would be on a distributed OSS project. Perhaps that role can't exist, and therefore perhaps XP is unsuited to such projects.

      I can take your "programmer-as-artist" comment two ways. The first is that programming is an art, in that you can come up with creative solutions to problems and you can create a working system from nothing more than (sometimes vague) requirements. You can still do this with XP. In fact, it should be easier.

      The othe way one can take "programmer-as-artist" is that the programmer not only decides how to do something, but what to do. In XP, those two roles are separated. However, a programmer could also be the customer. That would make sense on hobby projects and other projects where nobody is paying for the development to be done. If someone is paying for the development to be done, than that person must make quite sure that the programmer really knows what the program should do and isn't wasting time throwing in things that just might be cool.

      Also it is good for making a larger number of so-so programmers as productive as a few really good programmers.

      You say this as if it's a bad thing. It's a great thing. The average programmer is, by definition, average. (Okay, math geeks, you can chime in now about how it's only the mean programmer who's average, or whatever.)

    3. Re:Doesn't seem suited for OSS by dubl-u · · Score: 1

      My initial impression of XP (I haven't tried it but had it explained to me)

      Hi! I'd recommend that you try it. I've done it for a few years, and my impressions are different. In particular:

      is that it takes a lot of the fun and programmer-as-artist aspect out of software development.

      This is certainly not the case on the projects I've been on. Why? A few reasons, I think:

      In traditional proceses, somebody drops a big requirements document on your desk and then comes back in a year to tell you that what you've built is all wrong. In XP, you work in close collaboration with the product manager. The product manager still makes the final decision on what features to build, but you have plenty of opportunity to suggest and question. I feel like there's a lot more of me in the output of the XP projects I've worked on.

      At the level of coding, XP is even better. XP says that design is so important that we should never stop thinking about it. It demands that we, through merciless refactoring, continually maintain the best design possible, with no compromises and no excuses. On an XP project, I rarely feel like I'm doing some bit of boring work. And when I am, it's always a sign to me that I'm missing the chance to automate that drudgery away.

      You know how that when you want to look at somebody's code, they apologize for it being messy? I rarely feel that way on an XP project; XP lets me make code I'm proud of.

      Also it is good for making a larger number of so-so programmers as productive as a few really good programmers.

      That's not correct. First, maximum XP team size is circa 12. Second any XP expert will tell you that no process will give you good software from bad people. However, XP helps you make the best use of what you have, and does really help with cross training, so that junior people become senior people much more quickly than under less collaborative conditions.

      Right now I'm building a new XP team, and I'm not looking for mediocre people. I'm going to get the 6 best people I can. An expert might cost twice as much as a newbie, but an expert is much more than twice as productive, especially in an XP environment, where everybody is encouraged to play at the top of their game all the time.

  5. maybe they already do by ajagci · · Score: 1

    There is really nothing "extreme" or new about XP--it's simply that someone gave a name to decades old practices. Many OSS projects are already using XP, whether they call it that or not.

    Are those practices good? That depends on the specific people, user community, and the project. XP is no more a silver bullet than anything else.

  6. I think this function should be called... by leonbrooks · · Score: 2, Funny

    Something like... M'aud'ib! -ib! -IB! -IB! -*-KABOOM-*- ! (-:

    --
    Got time? Spend some of it coding or testing
  7. Can't see... by smari · · Score: 4, Interesting

    Having participated in a number of OSS projects, and even led/maintained a few, I can't see how Extreme Programming can help - the model is clearly better suited for in-house programming than distributed programming.
    Many of the same techniques are used in OSS projects though. "Release early, release often" is almost biblical to people from what can soon be called a Linux-background, and another rule is "No functionality is added early.", which fits my personal design philosophy pretty well, and a lot of OSS projects: I can't remember the last time I added functionality to a program.

    1. Re:Can't see... by dubl-u · · Score: 2, Insightful

      Having participated in a number of OSS projects, and even led/maintained a few, I can't see how Extreme Programming can help - the model is clearly better suited for in-house programming than distributed programming.

      I was part of a group that tried doing an OSS/XP project. Your instincts about XP are pretty reasonable.

      The main problem we had was getting enough of the team together in one place for long enough to make progress. XP really depends on proximity for communication; that's how it gets away without having any mandatory documentation.

      On the other hand, pair programming really helped keep everybody in sync. People could turn up intermittently and that wasn't a problem; they'd just pair for a while with somebody who had been there the previous week.

      Another piece that worked really well was mandatory 100% test coverage and test-driven development. A newbie could try out changes and find out quickly if they worked well with the rest of the system or not. And if a newbie somehow broke something without a test case catching it, the attitude was, "Well, I guess our test coverage wasn't as good as it should have been." It was nice for new contributors not to feel scared.

      XP teams also have less "truck factor" problems than traditional teams do. A lot of OSS projects really depend on one visionary who does most of the work; on our XP/OSS project it wasn't a big problem if any single person took some time away from it.

      Plus, it was also much more fun having a bunch of people in a room. Doing an OSS project solo can be lonely and disheartening sometimes; it was nice to get beers together after the coding sessions.

  8. XP is just programming by Anonymous Coward · · Score: 2, Insightful

    What happens is a company has a bad experience with programming -- say they fire some old guy to hire a cheaper new guy and discover the new guy can't make head or tails of what is going on. Of course the new guy says this is due to lack of documentation. Or a department realizes that some software doesn't do what they needed, because they never told anyone what they needed and no one asked. Or the realization that a key piece of software that is keeping the whole company running is a mystery to everyone who works there and the source code is long lost.

    Well, managers can't really get paid the big bucks for saying "Hey guys, next time let's try to be smart" which is the real solution. So instead they invent a plan, procedure, or rules to prevent it from happening again. Everything you do must be documented. Tens of thousands of dollars on verson trackers. A flow chart describing a series of meetings to produce a requirements document and another flow chart for modifying the requirements document.

    Well, pretty soon people realize you have a bunch of people filling out TPS reports and one productive guy who is evading all the documentation and requirements procedures and just getting work done, maybe protected and covered for by a few co-workers and a boss. And someone thinks, jeez, if only everyone was like him.

    But you can't just have the managers go out and say, "Alright, bad idea, toss it all out the window, let's just focus on common sense, communication, and being smart." That kind of implies you could hire fewer managers and just spend money on trying to get smart people.

    So you have to package the "common sense" proposal in a bunch of buzzwords that make it sound like it's a new 6 sigma or total quality or some other plan for extracting the most out of dumb people by telling them to do smart things. This way you can slip it in past the Organization Men.

    One of the most pathetic things you can ever see is a stagnant ossified department, which long ago chased away anyone with any ambition, attempting to implement pair programming and other feature of common sense. If you program in pairs, it's harder to say that person X did this and person Y did that, which managers see as a threat. Talking with the final consumer also undermines certain people's positions, so they usually interpret that "show prototypes early and often" as instructions to go through a formal process of beta release, evaluation, discussion meeting, plan for addressing issues, FASTER. Not fewer levels of BS and more communication, just do it harder and more often.

    Open Source projects are usually XP in an extreme way, except for pair programming. Almost all code is written by lone wolfs and casually reviewed by others if at all. Other than that, the quick-release and review, constant prototyping, etc all just naturally happens. Even more so since the programmer is usually the user he is trying to satisfy, which is the tightest loop there is.

  9. XP!?! by CelticWhisper · · Score: 1

    Oh, God, NO! Not in OSS, you can't taint it like that!

    Oh, wait, [i]that[/i] XP! Oh, okay, I feel better now. Phew...you had me scared for a minute there.

    --
    Help protect civil rights from abuse by the TSA - visit TSA News Blog.
    http://www.tsanewsblog.com
  10. st00pid by CelticWhisper · · Score: 1

    Should've been "oh, wait, that XP." Too much time on the phpBB boards. *sigh* There goes my "funny" mod...

    --
    Help protect civil rights from abuse by the TSA - visit TSA News Blog.
    http://www.tsanewsblog.com
    1. Re:st00pid by shfted! · · Score: 1

      Yeah, silly newb! Leave making funny comments to us more experienced slashdotters with much lower uids!

      --
      He who laughs last is stuck in a time dilation bubble.
  11. Way To Complicated by Mork29 · · Score: 1

    From the Download:It is a collection of rules and practices each of which supports several others, and are supported by several others in turn.

    A truly organic approach is the best way to program in a team. The people involved should and usually do develop their own system during a project. Having rules of practices that support and are supported is just way to complicated. No 2 people and no 2 teams will ever want to go at a project the same way, it makes teamwork tough enough. You should find a middleground, not a set of "rules" on how you do things that neither person will like.

  12. Not too extreme... by sbryant · · Score: 1

    My experience, after a good few years at it, is the same as what Lambent said - work on the design together, do tasks separately, and recombine. Pair programming works on certain problems, where one of the two has asked for help, but otherwise it's counterproductive and lets both parties get very annoyed with each other.

    Some of the other rules in the article are nice in theory, but not really practical in real life. For example: customers aren't always available, and often don't want to be either. Involving the customer too much usually ends up in them wanting something other than what they originally agreed to, but within the same time frame and for the same price (and then they get upset when they can't have it).

    Moving people around can backfire too - you can end up with people who have a little knowledge in a lot of subjects. It's not always realistic to expect that everyone knows enough to program every part of the system. Some people really don't have that capacity; if you have a team of top notch people who can, consider yourself lucky.

    Some of the other points listed aren't that extreme at all, and should be part of the normal development cycle. Eg: must pass complete testing before release! They also list the point that the rules themselves need to be flexible, and can be changed. I like this; it's necessary when working with people as they don't produce an identical result each time they get the same input!

    -- Steve

    1. Re:Not too extreme... by splattertrousers · · Score: 2, Insightful
      Pair programming works on certain problems, where one of the two has asked for help, but otherwise it's counterproductive and lets both parties get very annoyed with each other.

      Perhaps it was counterproductive for you, but I really like it and lots of other people do too.

      Some of the other rules in the article are nice in theory, but not really practical in real life. For example: customers aren't always available, and often don't want to be either.

      I would not want to work on a piece of software where the person paying for it refused to be around to help me figure out what it's supposed to do! If I just have to guess, then I'm going to be wrong and nobody's going to be happy.

      Involving the customer too much usually ends up in them wanting something other than what they originally agreed to, but within the same time frame and for the same price

      EXACTLY!! You've perfectly described the whole reason for XP. There's a reason XP's motto is "embrace change". Customers very often change their minds. You can say, "I know you're paying me, but too bad, you said you wanted X and that's what you're going to get." How does that help anyone? I like to say, "Sure I can change it."

      (and then they get upset when they can't have it).

      But they can have it! They are the ones who are paying for the software, and XP is all about letting them get what they want.

    2. Re:Not too extreme... by SuperKendall · · Score: 1

      I would not want to work on a piece of software where the person paying for it refused to be around to help me figure out what it's supposed to do! If I just have to guess, then I'm going to be wrong and nobody's going to be happy.

      Boy are you in the wrong industry. Your guess is correct but it's the universal framework you must work within - try to figure out a process that does make the user happy without them being present often. Don't make a process that requires people to change.

      EXACTLY!! You've perfectly described the whole reason for XP. There's a reason XP's motto is "embrace change". Customers very often change their minds. You can say, "I know you're paying me, but too bad, you said you wanted X and that's what you're going to get." How does that help anyone? I like to say, "Sure I can change it."

      And they also love that you are happy working 80 hour weeks.

      I'm not saying you should not embrace change, but there needs to be a realistic balance between how much they can change vs. the timeframe they want you to finish. Furthermore such thinking can often (very often) lead to "customers" using this freedom of change to use you as a crutch to think less ahead of time and think about what they need while in the middle of building it! Think about how often people in business or management sections have no idea at all of what technology is really capable of and so then end up really using the developers to define the reality of the most basic of requirements - like "it should be web based".

      I think I can sum my motto as, Embrace Smart Change. Don't just embrace ANY form of change as not all change is created equal! That's why there is such a disparity of reports of XP working. Some groups have people giving them good change, others terrible change that rips apart whole projects.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
  13. Probably not a good match by David+Byers · · Score: 4, Insightful

    If your open source project is being developed by a team of people all sitting in the same building, directed by a customer who's paying for the software and who accepts XP, then yes, XP should work just fine.

    If your open source project is being developed by volunteers all over the world in different time zones, then forget it. Getting XP to work in that situation is probably possible, but difficult and probably expensive.

    But if you, like so many others, are using XP as an excuse for shoddy development practices (the "look, we don't need to do requirements analysis or design or documentation because we're using XP" syndrome), then by all means go ahead. It'll work just fine as an excuse.

    So let's get to the details. I understand XP pretty darn well. We deployed it successfully at my shop, making all the classic mistakes (and some of our own) on the way. We finally got everything right, and once we did, it worked really well.

    I'm going to assume that "open source project" means a project with volunteers all over the world (or all over the country), and no paying customer.

    Problem 1: The customer role

    The "customer" in XP is a person who represents the users and can make decisions regarding what to implement and when. It's not necessarily a paying customer or an outside person.

    The customer is a key person in XP. If you don't have a customer, you can't do XP and if the developers don't do what the customer requires, you can't do XP.

    Developers don't make good customers. They're too involved in the technical side of the project and rarely prioritize well. You really need an outsider who is focused only on the end result.

    Developers have to listen to the customer. The customer decides what gets done. The developers have no choice in the matter. They can tell the customer how much it will cost to get something done, but in the end they have to do what the customer wants.

    Do you have a customer on your project? Will your volunteer developers do what the customer wants? If either answer is no, forget about XP.

    Problem 2: Pair programming

    Pair programming gets left out of a lot of XP projects. That's unfortunate, because pair programming is a key ingredient of XP. Without it, the process hobbles along.

    There are lots of reasons why people give up on pair programming. The poster mentions one: not leaving that big programmer ego at home (it's just programming, not personal). There are others.

    What you need to understand is that pair programming is how knowledge and skills are communicated in an XP project. Pair programming compensates for lack of formal design and documentation. Pair programming cuts down on both trivial and serious bugs (the brain not writing the code is usually thinking about the big picture). We found that code written by pairs was consistently better by all subjective and objective criteria we used.

    Can you do pair programming in your open source project? If your developers are all in one place and work at the same time, then it's easy. But if they're not, you'll find it very difficult. Instant messaging or even speakerphones don't really help much. And remember, pairs are supposed to be unstable. If you always work with the same person, you'll lose a lot of the benefits of pair programming.

    Problem 3: Communication

    XP developers tend to be pretty chatty, in my experience. At our shop, verbal communication was a very important component, and to ensure that it was easy, we all worked in the same room (no partitions at all).

    How easy is it for your developers to communicate? Instant messaging helps, but isn't all that good since you can't count on instant feedback. A phone works pretty well, but it should be a speakerphone (a headset is OK, but less effective). Are your developers working at the same time? If they're not, how are they going to talk to each other while they work?

    In conclusion . . .

    T

    1. Re:Probably not a good match by splattertrousers · · Score: 1

      I completely agree.

      I think that some of the XP practices can still be very helpful though. Test-driven development and short iterations seem like they'd work with a distributed team. Same with refactoring. Collective code ownership and continuous integration might work well too.

      But certainly, if you did all those things it still wouldn't be XP without the pair programming and the on-site customer. But that's okay.

    2. Re:Probably not a good match by David+Byers · · Score: 1

      Yes, test-driven development should work OK with a distributed team. I'm not so sure about refactoring. Refactoring is changing the design, and it's the practice that lets hard-core XP-ers get away without doing detailed design.

      But if single programmers can do unlimited refactoring, where are you? With XP you have your pair-programming buddy to keep you in check; to stop you from making changes that shouldn't be made. But who's going to keep that lone guy in Sweden from messing up the structure?

      Collective code ownership is great and should work fine in a distributed environment if you make sure that developers talk to each other, communicate their changes and check in their code early and often. The nice thing about collective ownership is that it cuts down on pissing contests and ego trips, and that's quality-enhancing.


      Speaking of testing, we had some interesting experiences with that.

      Some people have claimed that it's better to write tests after the code is ready. That way you know what functions to call and what your data structures look like.

      Wrong.

      If you write the tests after the code, you'll end up with tests that avoid dodgy bits of code and not even notice it. If you write the tests first (and do a good job of it), that won't happen.

      We found that our testing was at its most effective when we divided our module test into low-level tests and module-level functionality tests. The developers of a particular functionality would write the low-level tests, but we'd schedule the functionality tests as a separate task and have someone else do them.

      The other thing we realized early on was that writing tests is no different from writing code, so we developed tests in pairs too. As with the other code, pair-developed tests vastly outperformed long-programmer-developed tests.

  14. No customers by Anonymous Coward · · Score: 0

    I think one of the main points about XP is that everything is customer-driven. In open source projects, there are no customers, which in my opinion explains the bad usability of lots of free software.

  15. XP practitioners on XP and Open Source by Anonymous Coward · · Score: 0
    One of the definitive sources on XP is WardsWiki, which is an incredibly cool site to browse even if you're not an XP practitioner.

    They have a page Combining Open Source And XP, which I reproduce here to avoid hammering their server. Posted anonymously because this is a total karma whoring.... not that it'd matter, I've been capped for years, but hey... style matters.

    This is mostly musing, rather then a "how to", and assumes a lot of context you may not know unless you know XP, but following the links (like UnitTest, which I particularly recommend) can fill you in.

    Finally, before I leave you to the page, I'm doing a project right now that I hope will be open source, and while it's currently just one person (so pair programming is right out), a lot of the other ideas work incredibly well; with Unit Test and merciless refactoring I'm staying on top of a project that's already five or six times larger then any I've ever done on my own, it's in good shape and I understand it, and I can easily triple or quadruple the size before panicking, whereas the "competition" for my project... such as it is... blew up long before even getting as far as I have (mostly becoming Big Balls of Mud, and there was one that used a blob). Even if you can't do "XP", Unit testing (and some degree of Test-first development) and Merciless Refactoring alone can be a huge help on open source projects; the better your code quality the more likely it is you might actually get external developers.

    --------------------

    The idea is to develop a site similar to http://www.SourceForge.org or http://www.CoSource.com where, however, where the XP practices provide controlling of the OpenSource development approach. The problem for a potential OpenSource customer is that if they want to pay money to have some product developed by OpenSource developers then they also want a guarantee that the product will be completed on time and within budget and to the quality they require. However, money should not become the sole motivating factor, this risks turning an OpenSource project into a ClosedSource project.

    CoSource does this but doesn't have any means for the customer to check whether progress is being made (although they define a third party to judge when the project is completed). And this is where XP comes in: through UserStories, UnitTest s and ContinuousIntegration the customer can always check progress. Plus after each 2-4 week iteration they can terminate the project and only pay for the work done to that point.

    XP would not be enforced, can't anyway, but the intention is to offer tools which allow the customer and developers to a) communicate and share ideas, b) allow the customer to see whether progress is being made and c) both sides to check the quality. Tools should not be forced upon projects, however, customers would have the right to define which tools should be used for a project (after all they sponsor the projects). However, to a certain extent, a project should be given time to find it's own tools of choice.

    Benefits for customers:

    1. Many potential customers can combine forces and allow a product to be dev
  16. XP worked for us by StarBar · · Score: 2, Informative
    We've used an XP like paradigm for about three years developing a Linux based distribution that rides in a custom hardware. I was comming in late into the project that had no structure whatsoever and a hardware already designed and was just about to migrate to Linux from some in-house OS so the situation were chaotic to say the least. The company I work for were a startup at the time.

    The first thing I did were to picture the whole system as a group of functional boxes with interfaces. The next were to define the interface mechanism. Then I grabbed my nearest bosses and made them customers showing them a new release every two weeks. I distributed the tasks of implementing the functional boxes among the programmers in the group who I placed in the biggest room awailable facing each other. In the group we used nightly builds to always have the CVS build clean. My bosses were forced by us to prioritize among tasks and give us input for the next release. One day over a year later we could experience a decreased pressure and a product that we felt confident about. At that point we started to refactor all bits and pieces that were just implemented the easiest way as well as the build system. Now another two years down the line we have catched up and we have got rooms, some still with two programmers and we are increasingly using a traditional way of programming, with a spec phase, an implementation phase and a QA phase etc. We only kept some featured of XP that we like, nightly builds and refactoring.

    I think that XP has its cons and pros depending on the situation. We could never have delivered all these demos, prototypes and releases during the course of these three years without XP, simply because we had to attract customers and venture capital all along. We didn't use XP to the full extent either, no automatic testing and no true pair programming but that was only because we didn't have time to change ourselfs. If you sit on a fully financed military project for instance I doubt that XP will work for you. If you lack time or funding or simply needs to go extremelly fast to something that works XP might be the way to go, just ensure that everybody in the project agrees.

    Good Luck!

    1. Re:XP worked for us by dubl-u · · Score: 1

      We didn't use XP to the full extent either, no automatic testing and no true pair programming but that was only because we didn't have time to change ourselfs.

      Thanks for being honest about this; so many people say, "We're doing XP!" while leaving those things out.

      When you get the chance, try them. Their contribution to quality is immense. Once a team gets good at pair programming and automated testing, bug rates can get below 1 per month.

      That improves things dramatically. Because you spend less time on bugs, you spend more time on features. Because the system is solid, the people paying the bills are happier. And both of those are great for team morale.

      If you sit on a fully financed military project for instance I doubt that XP will work for you.

      Why would you say that? XP is good at creating an island of sanity in the midst of chaos, but I don't see why it wouldn't work well in a stable environment.

  17. You're all too focused on Pair Programming... by Sheeplet · · Score: 1

    which in my mind isnt' the biggest aspect of XP. Hanging on my office wall is a poster of the main practices of XP, so I'm using that for reference, and it seems to me that a lot of the practices fit.

    Ways OSS and XP mesh very well: Simple Design, Refactoring, Continuous Integration, Collective Ownership, Small Releases, a Sustainable Pace, and Coding Standards. These are things that most successful OSS projects do, and they're pillars of XP.

    However, OSS misses the others, like Test Driven Development, Pair Programming, and Customer tests. In my mind, the most important aspect of XP is Test Driven Development (not Pair Programming), which I have yet to see a single OSS project do.

    XP isn't an all or nothing deal, it's a set of practices. Use the practices, and you'll write good software. I consider OSS development extreme because it follows several of the guidelines, and I think OSS development teams would gain a lot by implementing the rest of the practices. I also think this is a reason why OSS developers write such good software (now imagine what it would be like if we did Test Driven development...)

    --
    -- Breaking Windows: Not just for kids anymore KDE
    1. Re:You're all too focused on Pair Programming... by chromatic · · Score: 1

      Actually, several projects use test-driven design. It's popular in the Perl and Ruby communities, and projects like Subversion and Neon do it too.

  18. kneejerk response to XP by Anonymous Coward · · Score: 0

    I've a few reasoned objections to XP as well, but my gut reaction to it, and I'm not the only one who has it, is "oh please" along with eyerolling.

    I think the real reason is that XP has -- no, XP cultivates -- an image of "Programming for the MTV Generation". Everything about it screamed, well, "EXTREME, DUDE!", from the salesmanship to the cutesy names, all the way down to the methodology itself. Short attention spans seem to dominate the whole XP process. All other methodologies are derided as stodgy and conservative, good only for the Folks Over 30.

    Engineering methodologies are a discipline, and yes, a heavy one can crush a light project that just needs to get out yesterday and basically do the right thing in whatever way it takes. But the point of development methodologies isn't to be fun and cool or even interesting to most people. It's to make your product and your process itself stable, reliable, and repeatable. If that's too much to take, then feel free to hack on your own, maybe you're even good enough that that's all it takes. No one wants to bank the entire company on that assumption though. And no one is saying developers should be forced into the bureacratic tedium that a methodology might impose; that's what development managers are for.

    Personally I find things much easier to handle when they're designed to spec rather than designed so all the test bars turn green no matter how much I had to hack things up to do so. The documentation sort of writes itself in such cases too, it's mostly a matter of chopping out the detailed bits of the spec that are internal function.

  19. Twisted by ameoba · · Score: 1

    Twisted is fairly big on XPish development techniques. They're big proponents of test-first design and, when possible, like to do pair programming.

    The problem is that, generally, pair programming is not really possible for most OSS projects, where developers are spread across the globe & communicating by the net. They've been kicking aroudn the idea of a networked multi-user text editor tho..

    --
    my sig's at the bottom of the page.
  20. Programming in pairs by lonesometrainer · · Score: 1

    No, sorry haven't tested all the other aspects of XP yet (see xplanner.org as a nice example of how support might support you in xp projects)... BUT I could tell you dozens of stories about programming in pairs...

    first option: your old school buddy, roughly same programming knowledge and project experience like you joins you in an XP project. You hang around for hours, drink a beer with him, tell dozens of old stories... and then you get productive. Damn productive. XP _might_ work great in these conditions. I absolutely enjoyed some examples of programming in pairs when your programming partner is of your kind... BUT

    second option: this guy sucks, he's dumb like a piece of shit, has no idea what i'm talking about. You end up doing the whole code and explain to him what you're currently doing. At least that's what you're doing the first two days. You're de-motivated and won't get your work done. That sucks.

    Programming in pairs might work, but the bigger the company/project the bigger the chances are it won't.

    my 2 cents.

  21. Smart by SuperKendall · · Score: 1

    Why the AC post? You have absolutely nailed the corporate experience on the head. It's worked exactly as you describe at every place I've ever worked for, large or small. Common sense is the last thing applied to anything because it's too simple.

    A hint to all those in companies now - if you see a company ossifying as described above, get out!! You owe it to your career and your spirit. I have seen too many fine developers wait years too long to get out of a bad situation, a terrible waste of an excellent mind.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  22. Not at all true by SuperKendall · · Score: 1

    In reality, for most OS projects the developer(s) *is* the customer!! In the ultimate pairing if you will, the developer knows innately what the customer desires because as Pogo said, "We have met the enemy, and they is us.".

    Now what that means is that pretty much by definition an OS project usually has the features that make the "customer" quite happy. The variety of UI quality has nothing to do with there being no customer, it has to do with the "customer" feeling too comfortable with how the features are accessed and not having the usual need for a step back by the developer to think about how a customer will really understand a feature, because the developer is intimately aware of how a feature exists and the means of access. They usually just stop developing once they reach a point of comfort.

    Good OS projects come about when other "customers" step in from the outside and force that nessicary "out of mind" expereince needed to bring forth a better UI.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley