Agile Software for One

topic posted Mon, November 10, 2003 - 11:17 AM by  Dave
Share/Save/Bookmark
Advertisement
Here's something I haven't seen addressed much. In a one person development environment, what subset of the Agile/XP canon is helpful?

I'm doing a personal project on which I am the sole developer. I've got a task management system which is much like the cards, I'm making efforts to get close to 100% unit test coverage of my system, I'm looking at using Fitnesse to actually set up final acceptance tests of the full working system (it is web-based). Does anyone have references to an "XP for one" source (or am I going to have to write it?) Even more importantly, how can you organize and comport yourself as the lone developer so that you can add additional ones with the lowest cost? That's what it is all about, after all.
posted by:
Dave
South Carolina
Advertisement
Advertisement
  • Re: Agile Software for One

    Tue, November 11, 2003 - 6:49 AM
    Dave: the yahoogroups extremeprogramming group may be a good place to get an answer to this question.

    As to the question of how to carry yourself I would simply write the code and tests (and any useful docs) to be readable by a newcomer. If your goal is to include others then you need to build output that does that.

    One thing I've been looking at on an open source project is updating a cookbook document so that the "recipes" can be successful for newcomers. I find it requires describing, as much as is practicable, the system, environment, and supporting tools requirements. It's hard to remember all those environment variables that are required for success.

    Bill
    • Re: Agile Software for One

      Wed, November 12, 2003 - 3:16 PM
      Bill, thanks.

      To answer some of my own question, I found this link:
      xp.c2.com/ExtremeProgrammingForOne.html

      This page has some decent information, and some of the stuff that puts me off of XP. The part I have a hard time swallowing is the bit about "always do the simplest thing that works, don't plan for the future." I just plain don't like that. I like to have a plan. I find it very stressful to work without one.

      It seems like in the core XP canon, there is very little middle ground. The strawman argument is always that design takes 4 months and that guys are sitting around jerking off with UML diagrams rather than doing the real work, which is coding. In my particular career history, I have seen much more harm done by people jumping into coding without thinking than by people over designing. The most time I ever spent on design led to the most succesful project I ever had, where we had a 3 month development plan and we were never more than two days off the pace. We charted a course and flew the box, and the day the project was due we delivered it, on time and under budget. We spent 2 months thinking and then 3 months building, and I guarantee if we had just jumped into code we wouldn't have finished in 5 months.

      Last night at the Chicago Java Users Group, the presentation was on J2EE Patterns, and one of the things touched upon was that XP decreases the use of patterns, because people are discouraged from building in things that aren't being used and often patterns requires thinking a step more abstractly than the immediate problem at hand.

      I'll buy some of the canon - unit testing, short cycles, project always in a working state, frequent builds, automated smoke tests. If I have to buy in that design is bad, I'd rather forget the whole XP thing. I'll accept that maybe the design is a mutable thing, written in pencil rather than etched in stone. However, I want it there. It's the context I use to do what I do, to know whether the current solution to the task at hand makes sense. Maybe I'm letting the personalities color my opinion of the philosophy and taking too much stock in the most strident members of the community. Isn't there also an XP corrolary along the lines of "any of this that doesn't work for you, don't use it?"

      d
      • Re: Agile Software for One

        Thu, November 13, 2003 - 6:33 AM
        Dave: thanks for your thoughtful comment. I should have thought of the website also.

        I agree that planning for the future is a sensible thing to do. And I don't think that XP practitioners say you shouldn't do it. What I've read and what I've seen is that teams (customers and users) need to do whatever upfront work is needed to understand the problem and the potential software solutions. XP is very much about understanding that all work is situated (these customers, this business need, this systems environment, etc.) and keeping the solution grounded in the specifics. XP doesn't say "don't plan." It just suggests keeping planning activities grounded around what users need and keeping it to a minimum.

        My experience w/ XP folks is not that they eschew design for coding. It's more like they don't want to spend time solving problems that aren't understood or needed. My experience is that in the face of req'ts that are uncertain (the customers and users don't know), or that are likely to change, the quickest way to discover what's wanted and needed is to put something into the hands of users. To me that doesn't mean to ignore the fact, for example, that a database is a component needed for a final solution. But one can get very useful feedback from users without a database being deployed.

        (I also had a very good work experience that spend 3 mos. on design creating interface specs and after coding to the specs the system ran the first time. Of course then we had some changes, but the basic architecture and design remained for 3+ years of the project.)

        Patterns are interesting to me in two ways. First they do help with refactoring and design. But I also think that people are spending a lot of time prematurely abstracting patterns before really understanding what this system needs to provide to these people. I'm calling this premature generalization -- jumping to an abstract conclusion before knowing all the facts.

        But I do believe that good program design and development is supported by the XP guidelines. Doing the simplest thing first is usually easy and it provides learning. Larger design patterns do emerge.

        However, if you already know that you need a specific architecture, design, and components, then the work is that of systems integration. And for that to be successful I believe you do need reliable, reproducible, preferably automated unit, system, and acceptance testing.

        WLA
      • Re: Agile Software for One

        Thu, November 13, 2003 - 10:08 AM
        Hi Dave:

        The site is a great find. Thanks.

        Architecture design is, in my opinion, totally ignored by XP. If you are designing a complex distributed system for example, you cannot build it incrementally and refactor your way to the solution. You do have to spend time upfront and figure out where your objects lie, how they communicate, what APIs you provide to the outside world, how you meet performance specs, etc. You have to prototype it and test key functionality and performance objectives.

        To me, XP concerns itself with the development phase in the project, after you have proven your architecture.

        The topic of patterns is akin to the "letter of the law" vs the "intent of the law". The two main principles that Jeffries emphasizes are simplicity and testing. Well, using a known pattern that has been tested does simplify your life and meets the testing requirements.

        I do however, strongly subscribe to the principle of *not* future proofing your project -- for the simple reasons that if you are adding code and not testing it, then you are simply adding "crud" -- this is an official technical term :-). You have more code, that produces no benefit to the end user (you cannot expose it, since you did not test it) and complicates your life (since it deals with future stuff).

        So, on balance, I would still use patterns -- because they are tested and they simplify my life by saving me from writing code.

        Bernard.
        • Re: Agile Software for One

          Thu, November 13, 2003 - 11:38 AM
          Bernard, I agree a lot with what you say. I wonder if it wouldn't make sense to have a 2-cycle XP process, where there is an architecture and a code component of each iteration. For the very first one, a general architecture is worked out with whatever level of specificity is appropriate and allows people to begin work. In a simple system, this might be nothing. In a distributed system, this could be significant and involve specing protocols, etc. After the first design cut, coding begins on iteration #1. Every iteration after that begins with a new design cycle, which is really just addressing whether the design from iteration N-1 still seems appropriate and is doing what it needs to. If it needs to change, it does now. When this is close, move on to the coding for that iteration. It's not a huge difference, and maybe defacto it happens like this anyway, but this approach goes a long way to addressing my concerns with the XP lack of design without sacrificing the agility. An inordinate amount of effort is not spent up front, just enough to make sure that every bit of work in this iteration won't be refactored out of existence next iteration. This is where patterns could come into play, not with each developer hacking away to solve their individual problems but in the pre-coding design phase (that all developers would participate in) and at which common problems could be abstracted and patterned.


          For the building ahead, here's an example from my current self-directed project (the one about which I started this thread). I'm learing Struts for it, and also Hibernate. I have a data schema that I have arrived at over years of thinking and sketching and I finally felt like pursuing this project. The XP way says that when I was making my JDO style objects to hold the data, I don't build the ones that I don't need now. Maybe it turns out later that I don't need them at all. What I did was to build every data object I thought I would need later on. They were all unit tested and since they interact, by the time I got to the later, more highly derived ones the fundamental ones had been well tested. Before I ever touched the web end with Struts, I had my data objects down solid.

          When it came time to start with Struts, like any Struts beginner I was highly frustrated. One of the saving graces of gutting out that part of it was that all my JDO had already been built, all worked and I could take it as a given that they were there and performed correctly. I got an economy of scale for doing them all at once while I was thinking in that mode, which made each one more efficient to develop. Later on I got an efficiency by not having to context switch from the web end back to the Hibernate end to build a new one. I think my approach was sensible, or at least it worked well for me. As I read the XP canon, what I did violates the precept. True, I could have found out that some of the JDOs were not needed from the web end, but by doing all that work at once I got an efficiency that negated that risk. By not having to do them later, it reduced the frustration load at a point where I needed it as low as possible.

          That's just an example, but a very current one. I work on this project every day so all the details are fresh. I think I'm working in a way optimized for the way I think. If I can squeeze more efficiency out of it, I want to, which is why I'm looking to see what XP can offer me. I'm beginning to think that I may have already mined everything out of it that I will find useful.

          Thanks for your reply.

          d
          • Re: Agile Software for One

            Mon, December 8, 2003 - 8:59 AM
            Dave-

            Great thread! Your recap of the development process you followed and how it applies to XP makes me wonder if XP in and of itself is not the answer, but rather XP and the proliferation of tools like Struts, Turbine, JDO, Hibernate, etc. With these low lying tools in place, it is much easier for development projects to get on with the business of coding business logic. It is the business logic that is the ultimate deliverable of this whole thing after all...

            The purest XP project that I have worked on benefited greatly from compact development cycles and the encapsulation of design into User Stories. It too is a Struts project that uses JDO as an access layer, and at the point that I left the project it had suffered from the shortcoming that you mention - the fact that architecture can sometimes take a back seat to the pressing needs of end-user requirements. However, the solution that we were in the process of implementing when I left that project (and have since heard that it worked quite well) was to incorporate "Stories" about architecture, giving engineering a couple of weeks to refactor some of the cut&paste inheritance that we had been doing into a more rational model.

            I think the biggest takeaway for me from the whole exercise is that there is a lot of value in releasing early and often, because it keeps all levels of the company engaged - everyone sees results. If this results in less than optimal code, then the most important battle to be fought is over the inclusion of an "Architecture Story" in your process to give a little quality time for non front-end but still critical development.
            • Re: Agile Software for One

              Tue, December 23, 2003 - 8:27 AM
              This was an awesome thread. Thanks.
              For what it is worth: I find Micheal Jackson "Problem Frames" a great way to incorporate user input into the system's solution. I have not kept abreast with the XP stuff but I will look closer into it. But the use of "stories" for architecture surely makes sense and the early release of a prototype to the user definitely gives you something the user can get his hands on and determine if it is close or just not what he desires.

Recent topics in "Agile Software Development"

Topic Author Replies Last Post
I hate Microsoft Project Unsubscribed 0 October 22, 2007
Project Management tools Michael 3 October 20, 2007
Dev Advice, if anyone may. Please. qb 1 June 8, 2005
Free Downloads rotem 0 December 23, 2004