If you are starting a software project today there is a seventy percent (70%) chance that it will experience one or a combination of delivery delays, budget overruns, or outright failure. Similar to other types of projects, there are a variety of things that cause software projects to fail in the same way that there are numerous things that have to be managed in order to deliver successfully. To make things even worse, it is very easy to derail a software project and have no idea it is derailing until it is too late.
There are 4 things I’ll like to share that I believe lay a foundation for successful software projects, they are:
1. A clear business goal.
2. A set of requirements.
3. Unbiased estimates.
4. A delivery plan.
These things may seem obvious but they are commonly overlooked and done poorly. Let’s examine each one how together they form a foundation for a successful software project.
Software projects exist to achieve a specific goal or set of goals (even if experimental). A software project goal could be to make sure a piece of software is available by a certain date or to deliver some business value within a given budget. This goal is what will determine the end of the project, and this has to be set and made crystal clear at the beginning of the project. It also has to be clearly communicated to project stakeholders. It is ok if the goal changes during the execution of the project but then, everyone needs to know it has changed and what the new goal is.
It is not uncommon to find ongoing software projects that have no clear definition of what the goal of the project is. It is also common to find a lack of shared understanding of the project goals among project stakeholders.
Not knowing the end target or goal exposes a software project to delivery delays, budget overruns, and possible failure.
To achieve the business goal of a software project, several features have to be built (or not built, just as important) and these features make up the requirements of the project. The nature of the software project will determine if how much upfront work needs to go into the definition of the requirements. Exploratory projects may tend to leave the detailed definition of requirements till later on in the project. Software projects that value predictability (this is of concern to business leaders) would need to have more effort put into the detailed definition of requirements early on in the project.
Real-world software projects will have their requirements change before the project is delivered and provision has to be made to manage this.
Poor estimation leads to delayed projects. Mistaking estimates for delivery commitments also leads to delayed projects. When coming up with estimates they need to be unbiased and molded or forced to align with the business goal. In coming up with unbiased estimates, one has to ignore what the business goal is and simply come up with estimates based on the nature and complexity of the requirements. Doing this and coming up with high-quality estimates that are unbiased will assist with the next step. Planning.
Coming up with a plan is what ties everything together and reveals the true state of what can be achieved on the project. The business goal highlights what the end is, the requirements define what needs to get done, the unbiased estimates reveal how much budget and time is required to implement the requirements.
The delivery plan lets you lay out what can be realistically achieved on the project. Most times you may have to forgo a number of requirements. Businesses value predictability as it is better to know early on what will be ready by deadline than falsely expecting to have every requirement ready.
It is important to put in the time and effort required to come up with a business goal, a set of requirements, unbiased estimates, and a delivery plan. Stakeholders on a project need to work together to develop these. As mentioned earlier, these 4 things lay a foundation and do not guarantee software project success. Software projects evolve as they get implemented and managing all those moving parts is just as important as having a good foundation when starting out. (Video below)
Data centers that are online for public use of shared resources. These resources such as storage, networking, compute etc. are available on-demand.(more…)
Clients that need software built always want to know how much it will cost them, and a lot of times (at least as we have experienced at Intellectual Apps) they want to have this information before work begins. In order to get a “realistic” estimate of how much it will cost to build the piece of software, agencies would elicit the requirements and then based on that come up with an estimate of the cost. Client has a cost for getting their software built while the agency is happy they got the project. Great!
Work starts and in a couple of weeks (in some cases days), the client asks for some features to be included in the project. If a change request management process was put in place before the project started then that process kicks in to evaluate the impact of the change and its priority. Long story short, the client will always find a reason to have more features added and will expand the initial scope by several features. In my experience building software systems over the past 12 years, I have never seen a software development project start and end without the scope expanding. In essence, software development is an exploratory journey, things become clearer only after embarking on this journey. This is simply a fact of software development.
The issue with the scenario described above is that the agency hardly ever gets a corresponding expansion in the cost of the project (which determines their income). Since more features mean more time and effort, the agency simply suffers. One may argue that the change request process be tighter in an attempt to discourage clients from expanding the scope but this rarely works. There is a very high tendency for a client to take the features they are trying to introduce more seriously than all the others put together, refusing to let the scope of the project expand is like taking a sweet from a child, they become upset.
Fixed-cost-custom-software-development projects will always be plagued by expanding scope. Software development agencies generate revenue by offering professional time and effort, so the moment a project takes longer to complete with no corresponding payment for that extension, the agency looses.
From how I see it there are two options:
Option 1 hardly works and leads to all sorts of problems. The waterfall approach is closely associated to this way of building software and the fact remains that it is very hard, near impossible to know and freeze all the requirements for any piece of software upfront.
Option 2 on the other hand is best suited to deal with the uncertainties of software development. It does require the client’s trust in the agency and without trust, it just won’t work. With this option the agency asks the client how much they are willing to “invest” in the software rather than how much it will “cost”. Simply using the word “invest” turns things around as this forms a foundation for the client and the agency to work as partners in exploring a software solution to the client’s problem.
Core to this option is the need for the agency to know their burn rate such that, the agency can easily determine how much it costs them to have a team working on a software solution for a short period of time (say a week, two or even a month). Even though the client is willing to invest x amount of money this approach helps in mitigating the financial risks associated with any software development project by requiring that payments be made for short periods of time to work on parts of the scope of the software. If everything works fine to the satifaction of the client, only then will the next set of requirements get dealt with. The client is free to make adjustments as they wish, as long as they can pay for the time spent by the agency.
Determining the cost of a software development project based on “perceived” requirements is more likely to lead to a project failure. The nature of custom software development is such that a lot of the requirements stated at the start of the project turn out to be incomplete, and once clients get a clearer picture of what they want (after work has started) they expect the project to accommodate such. If the cost of the project was determined based on the initial scope then it becomes very hard to convince the client to pay more.
Based on the fact that custom software development is actually a process of discovery and building, the cost of any project is best based on time. Software development agencies will need to know how much is needed to keep the team running for say a month and let the client invest funds into getting them to work for a defined period of time. Within this period of time, the agency works on whatever the client feels is of the highest priority to them.
Cost estimation techniques should not be confused with software development methodologies. For example a client can pay for 12 weeks worth of development time and the agency applies a waterfall software development methodology in developing the solution. Also note that certain approaches to building software work best with certain techniques for cost estimation. In my opinion, Agile software development methodology works best with cost estimates based on time.