Coding is like gardening...

Archive for January, 2009

Billing with Integrity (part 3)

More likely with fixed price projects...

More likely with fixed price projects...

(You may want to read parts one and two first).

This time we’ll look at four variables of software development which always apply to any software project. We’ll see how they interact with each other, how a fixed price project model is affected by them, and a potential end result which is often a reduction in quality and more bugs.

So what are these four variables of development? Briefly, they are:

  • Scope – the size of the project.
  • Time – the amount of time taken to get a project done
  • Cost/Resources – the amount of money the project is costing
  • Quality – the end quality of the project (i.e. how robust it is)

You can fix two or three of these variables but it isn’t possible to fix all four.

For example: suppose a feature will take four days to do properly. If you want to take two days over it, then you can either:

  • Increase cost/resources (add more developers, not generally a good idea)
  • Reduce scope (cut the requirements for the feature in half)
  • Rush the work (stay up late, or just code too fast) which then litters the code with bugs, reducing quality.

Fixed price projects try and fix all four of these: “I want this spec, by this date, costing this much. Oh, and no bugs.” So when the inevitable happens and project scope changes, what can be done? The cost is already fixed, or only changeable through a long-winded change process, and there may simply be no money to throw at the project. The deadline could be extended (increase time), but that then leaves the developer out of pocket if the cost stays the same, and the client is unlikely to be happy.

Often the only option is that a developer will revert to rushing the work, to try and get it done as quickly as possible. This leaves a project that looks just great on the outside, and may work ok when delivered to the client, but after a few months it becomes obvious that it only just hangs together. The client might request a change that appears simple on the outset, but because the original work was rushed, the work takes much longer than the developer thought and exposes underlying bugs. Automated tests are often skipped when work is rushed, which further reduces confidence in the codebase when something needs to change.

Conclusion: Don’t fix project price and scope

So, in conclusion, a long fixed price project for a fixed spec is counter-productive. As we’ve already seen, it can allow developers to take advantage of clients, it pits the client and developer against each other, and in practice it fosters bugs in software. Change is the natural state of a software project, and by definition, this model is incompatible with change.

Next time we’ll look at variable billing, by charging for small increments of time. We’ll see how this model interacts with the four variables discussed above, and some of the advantages and disadvantages it poses to both clients and developers.

Tune in next time for a discussion on variable billing (you may want to subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :) Thanks to Kent Beck’s excellent essay on Optional Scope Contracts (PDF) for many of the ideas in this series and to Ngọc Hà for the photo.

Billing with Integrity (part 2)

Should have written a clearer spec...

Should've written a clearer spec...

(You may want to read part one first).

We left off saying that fixed price projects had a number of disadvantages. One other problem with these types of projects is that they’re implicitly set up to pit client and supplier against each other. This wastes valuable project budget on working out what to do when the project changes.

Imagine a client and developer have come to an agreement and spent a lot of time writing the spec for a project. The contract is signed for a developer to deliver the spec for £4,000. Immediately we have two contrasting forces at work:

  • The client is wanting the maximum amount of features that the developer will give him, so he gets the best return on investment.
  • The developer is hoping to spend the minimum amount of time on the project to get the work done, so that he can cram as many projects in and make as much money as possible.

Good developers and good clients will mitigate these forces, but each party will always need to protect their interests to some extent, or they’ll go out of business.

There’s enough tension in the above relationship as it is. What happens when the client wants to add in another couple of features? The client might argue that the new features aren’t really new, but part of the original spec, so that he can try and get as much as he can for his money. The developer is likely to argue that everything that differs from his interpretation of the spec is new, and therefore should be charged for. The result is usually a fight, hopefully a compromise, but always a big waste of time and energy. Who wants to plough through a huge change process just because the original spec wasn’t clear enough? That time could be better spent actually delivering more features and providing more value to the client.

In practice, specs are never clear enough, and always require changing. Therefore at the beginning of the project you are committing to spending a fair amount of time arguing about the spec. If the change is a big one, then you’ve got a big problem: a lot of time has been spent already getting this spec “right”, and now it’ll need to be thrown away or rewritten significantly. There’s also more pressure to rush this new spec, which results in a worse spec the next time, causing more problems down the road.

The net result of all this is less efficient and more costly projects, bad feeling between clients and developers, and an overall reduction in the success of the project. Forget that ‘ongoing high quality relationship’ both sides wanted at the beginning: for serious failures often the only priority is to escape without a lawsuit.

It’s not all doom and gloom: some fixed-price projects do go as planned, but setting up projects in this way makes it all that much harder to see them through. I’m also not against specs: clearly it’s important for the client to communicate what they want! I’ll discuss how we use specs (although we call them something different) in a later post.

So take heart: there are more modern project management methodologies which ensure that there’s that much more chance that projects succeed and that everyone gets along. Next time we’ll look at some fundamental laws of software development in the search for a better way.

Tune in next time for the four variables of software development (you may want to subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :)

Billing with Integrity (part 1)

Billing is a thorny issue for most developers. At Eden we’ve billed via various means over the last few years, and have recently settled on a new method which is worth me taking some time to explain. If you’re in software development, it might help you to rethink the way you’re charging your time to clients – our new billing method has made our lives much easier, and improved communication with our clients.

But first, a bit of background on various ways developers bill clients for their work.

Fixed price – Billing per project

Are you sure you want to do this? There is no undo.

Are you sure you want to do this? There is no undo.

As a developer, I have an aversion to billing a fixed price for a whole project. In my opinion it pits the client and the supplier against each other, especially when parts of the project change (as they inevitably do).

The fixed price concept is borrowed from traditional engineering, when costs and requirements had to be worked out fully in advance as things were hard to change. Imagine you are a building contractor, you’ve just poured the concrete for the foundations, and your client pops over to ask for the building to be moved slightly to the left?! Because things are difficult to change after the work has been done, it costs a lot to do so. Therefore it makes sense to work out the costs fully in advance, and charge a fixed amount. If things need to be changed after the fact, there’s a rigorous (and expensive) process that is worked through, usually costing the client a bunch of money.

Some software developers behave as if the same was true of writing code. They put together a brief, build a website, possibly as a cut-price deal. Then they charge a fortune to change the homepage text, or add an extra button. We often get calls from clients who are fed up with being charged for four hours of time to change the wording round in one sentence. Ultimately, unlike in the construction industry, software (especially web-based software) isn’t and shouldn’t be hard to change. Why do we behave like it is?

Sure, expertise is valuable, and one argument for this sort of charging had made the round in various forms and is often used as a defense for this practice. However, I’m more concerned with communication: let the client know what the ongoing bills are likely to be before you start. Otherwise they have no way of measuring how much your expertise is actually going to cost, and therefore no idea about the true cost of the project. Because all projects change, a so called ‘fixed price’ gives clients less information that they would normally have.

Tune in next time for more discussion on why fixing prices for whole projects is also bad for project quality (subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :)

Rails and Merb to merge: an opinion

The announcement page on the official Ruby on Rails website.

I’m glad Rails and Merb have decided to merge. Rails is the framework we use every day to build systems for our clients, and having the benefits of Merb without having to support two frameworks is a big win for us.

Merb was created originally because of some well known shortcomings of the Rails framework, most notably surrounding uploading files to a website. Since its creation it grew into a full framework in its own right and became a sort of ‘Rails done right’ in the eyes of many. Now, the best bits of merb will become Rails 3, and some of the best ruby coders in the business will be working on the framework we use every day. That’s a great thing for Rails users everywhere.

Despite the claims of some, it’s not about one set of people ‘winning’ and one ‘losing’. Ultimately the combined codebase is the real winner, and therefore the people that use it, such as companies like ourselves. We’ll certainly do all we can to support the move here.

This sort of behaviour is almost unprecedented for open source software: often open source communities are more characterised by petty infighting than bipartisanship. It’s shown that those on both sides of the fence are pretty big people, and willing to put aside personal differences. The result (I hope) will be a combined framework that’s leaner, meaner and with a clearer future in front of it. We’ll be watching with interest in the coming months.