2014-02-13

“How much will it cost, when will it be delivered and what do I get?”

- Said by every client I ever met before starting a software development project.

It’s not an unreasonable question, is it? “How much time, how much money and what do I get?” The same can be said for any major investment or purchase a person contemplates making. If we buy a house or a car or a business, we pore over the details, compare options, scrutinise the market and consider the competition. We would be silly not to and people who jump into large purchase decisions without doing their homework take on inordinate amounts of risk and invariably are worse off for their low levels of due diligence.

So why do we expect software development to be any different?

The degree to which software clients, whether they are large corporations, groups of investors or single-person entrepreneurs, need to scrutinise their investment remains the same. The difference lies in the product they are purchasing.



Unlike constructing a building or assembling a car, software development is often a highly variable process containing a large number of unknowable factors. This is because, unlike construction or automotive manufacture, a large majority of software development projects are speculative in nature – either pushing the boundaries of a particular business model or pushing the boundaries of a particular technology, and often both!

Add to that the time critical nature of some software development projects and now we have a highly unstable and volatile project!

This being the case, the degree to which a software development project pushes these various boundaries determines the degree of accuracy and risk associated with estimates and plans.

Enemy Contact

“No plan survives contact with the enemy”

- Field Marshal Helmuth Graf von Moltk

The biggest unknowable factor in any software development project is the person who wants the software developed. That would be you, the client!

Note: If you are a person (or persons) about to embark on a software development project then you are probably the biggest risk to your project.

This is because, unlike houses or cars or businesses with assets, software is largely invisible. The part that people think is software is what they see, which is the user interface of screens, buttons, text fields and images. This is like saying that a car is just the glossy paint and some wheels; or that a house is the bricks, windows and doors.



Good work, but I think we might need just a little more detail right here.

In most software applications the user interface, while extremely important, is often an extremely small portion of the total software project – the tip of the iceberg. There are often thousands of lines of source code executing behind the scenes to process complex business logic, store data in databases, communicate with remote servers, handle network connectivity, etc…etc… and the list goes on.

Click here to watch video on Agile Software Development

“Aha!” Moments

Software development companies expect that, as the software project progresses, the people wanting the software developed (i.e. you – the client) will have “Aha!” moments. These are moments when you realise that, contrary to what you originally thought, that something is different and that, as a result, something needs to change.

These “Ah hah!” moments might be around the way you thought the software should work and then realising how it needs to work.

Also, an “Aha!” moment might be when you realise a competitor has released a competing product early, or market conditions have changed or there has been a major change in your circumstances. In short, these are unknowable unknowns that can dramatically affect your software project.

“Prediction is very difficult, especially about the future.”

- Niels Bohr, Danish physicist

This is why… At the very beginning of any software project, when we know the least about what needs to be developed and what unknowable factors we will encounter, it is impossible to provide a truly accurate estimate of cost and time.

So… if this is the case, then what do software companies do?

This is what most software development companies used to do and many still do.

Create a document, which details “everything” about the software project. This takes a lot of time (which you pay for) and is called a “Requirements Definition” or a “Scope”.

Get you to sign-off on this document as the complete definition of everything you want.

Spend a lot of time calculating how much they want to charge you for it and how much time it will take.

Provide you with a Fixed Cost & Fixed Time contract.

The challenge with this approach is that, once the project starts….

The aim of the software company is to finish the project as quickly as possible with as little effort as possible to maximise their profit and get on to the next paying customer’s project;

The aim of the client (i.e. you) is to make sure that the software company delivers on their promise and gives you everything you want for the price they promised within the time they promised.

Therefore, at the very beginning of a project, before even a line of source code is written, the Client – Software Developer relationship is immediately adversarial.

Click here to watch video about Aha Moments



Invariably, as the project progresses, you will realise that there are aspects of the software project that needs changing. These are the “Aha!” moments we mentioned earlier.

If you do this, and you cannot show it was part of the “Requirements Definition”, then the software company will call this a “Change Request” and charge you a premium price for the privilege.

Change is Inevitable, Change Requests are Optional

“Change Request my a***! You should have known I needed that!”- Said by every client I ever met after being told, “It’s a Change Request”

This is where the fun begins. Now you and the software development company are locked in more negotiations, more arguing to determine how it was missed and more analysis to determine what the impact will be and how much more you need to pay them.

Certainly some companies put buffer into projects (that is, deliberately charge you more than they know it costs) to allow for unknown factors. Other companies charge you the bare minimum (in order to win your project from competitors) but then ruthlessly charge you for every modification that even remotely looks like a Change Request.

Either way, you are paying more than you need to and there will be a lot of angst along the way.

“There’s no sense in being precise when you don’t know what you are talking about”

- John von Neumann, Mathematician

Avoid the Inevitable

So, how do you avoid this situation?

1. Find an Agile Software Development Company

Companies that use proper Agile Software Development practices expect and embrace change requests as an inevitable and welcome part of software development. The Agile practices help ensure that they deliver working software quickly and with minimum waste. No lengthy “Requirements Definitions” that often turn out to be incorrect or incomplete!

2. Make sure you sign an Agile Agreement

We’ll cover Agile Contracts in detail in later posts but an Agile Agreement allows change requests without charging additional fees! Agile Agreements fix the cost of the project OR fix the timeframe of the project but not both. Agile Agreements expect “Aha!” moments and they fit nicely with Agile Software Development practices. Agile Agreements allow you to finish projects early and avoid paying the full cost of the project if you don’t need it!

Note: There’s a lot more to Agile Contracts and we’ll post more articles about these shortly.

3. Do your homework

This is kind of obvious but many clients think they can find a cheap offshore developer on a freelancing web site, or with an offshore provider, and receive quality software. If you go this route and do not know about software development then be prepared for a long and arduous journey. Remember that there’s a big difference between cheap software and working software! Find a software company with a proven track record of delivering working software and making other clients happy.

Click here to find out more about Agile Software Development

Show more