~ By Duncan Haughey
Sometimes I wonder: after years of software development, has the way we work developed apace? Sure, technology has evolved, but has our approach to running software development projects?
Users remain baffled by techno-speak. Developers prefer to invent rather than reuse, and think they know what is best for you before you tell them what you want. Projects often miss deadlines and exceed budgets.
Just look at the Ministry of Defence, who wasted nearly £30m on two IT projects alone. The first project, a communications system for the RAF, was abandoned because of problems integrating it with other systems; £21m was already spent, and thus was simply written off. The second project, a pay system for the Navy, was closed when it became apparent the project would cost three times the budgeted amount of £18.9m. By then, £8.7m had been spent, and this too was written off. ¹
Avoiding the common pitfalls of software development is not rocket science; it's simply a case of taking a few sensible measures. Identified here are five killer mistakes made by software project managers:
One of the cardinal sins in software development is rushing into a project without taking the time to understand what the customer wants. This is one of the most common mistakes and is responsible for more failed software development projects and unnecessary rework than anything else.
Get the customer requirements first and then fit the solution to those requirements. Avoid the "we know what you need" syndrome that still exists among some developers.
It's a good idea to use a business analyst to gather the requirements, as they take an objective, non-technical view of what the customer wants.
It's all too easy to get railroaded into coding before fully understanding the requirements, but time spent up front with the customer will prevent much pain and rework later.
Have you ever stood next to a group of software developers and wondered what on earth they were talking about? It sounds like a foreign language, and to non-IT people it often is. The pitfall comes when the customer and IT think they are speaking the same language when, in fact, they are not. This confusion leads to a problem when the IT department delivers what they understood the customer wanted but not what the customer actually wanted.
Communication problems are the hardest to resolve, as you often only see the problem after looking back. Regular communication and a close working relationship with the customer will help. What you need is a person with a foot in both camps; someone who understands the business and IT equally well. If you can identify this person, make sure you keep hold of them; they are hugely valuable. If you are unable to find this person, the next-best alternative is to have two people, one from the business and one from IT. By working closely together and sharing information, they can mitigate any potential communication problems.
Often there is the expectation that IT is like a magic wand: you wave it, and suddenly a miracle occurs. During a software project, expectations can inflate to a ridiculous degree. It is the role of the project manager to manage expectations.
One way to avoid inflated expectations is to break a project into smaller pieces or phases. I equate this to a sausage machine, where you feed in the raw material at one end and it emerges at the other end as small, perfectly formed packages or sausages. The same can happen with software projects: you take small packages of requirements and push them through the machine, producing several deliverables over the life of a project. This way you manage expectations by making frequent deliveries that demonstrate what the technology can accomplish. This approach ensures the project meets the customers' expectations by giving them early visibility of what you are building.
Customers often find it hard to articulate their requirements; many people are only able to clearly state what they want once they see something to kick start their thought processes. Building a system when you are not clear on the requirements is a grave mistake. If the developer does not understand the requirements, it is likely that this discrepancy will not become evident until late in the development cycle.
When there is a lack of clarity about the requirements, prototyping is an effective technique. A non-functional prototype can be produced quickly and cheaply in order to help you elicit more detailed requirements from the customer. This allows the developer to test their understanding of the requirements and avoids waste and rework later.
If the customer tests the software and finds a high number of bugs, however minor, you will lose their confidence, and it is always harder to rebuild customer confidence once they have had a bad experience. It is easier and more cost-effective to test the software thoroughly for bugs before giving it to the customer.
Use professional testers to test the software, as these testers will look at the software from a user's perspective. Never ask the person who developed the software to do the testing; they already know how the software is intended to work, and they will not be objective. You need someone that comes to it fresh and asks: is this logical, is it intuitive, does it work, and does it meet the customer's requirements?
You can demonstrate the software to the customer before testing it, but do not give them unfettered access before you have completed the testing.
Research in April 2003 for Unilog, the independent pan-European IT consultancy and services company, found that 100 percent of IT managers had experienced a project that failed to meet all of its objectives. The three primary reasons for these failures were:
If nothing else, concentrating on these three aspects alone will give you a good chance of success.
Don't become the victim of a failed software project; put measures in place that will ensure your success. After all, it's not rocket science!
¹ MoD Wastes £30m on Failed IT Projects, Jane Wakefield, ZDNet UK.