10 Sep 2020
8 reasons why software development projects fail
Lots of software development projects fail; that’s the hard truth. Statistics clearly show that many projects miss the deadlines, budget, or even are being resolved, and all the money invested is wasted. Since you can’t prepare for all the black swans, it’s best to address at least the most common difficulties that frequently complicate the work. That’s why we selected eight most common problems that might put your work in danger and combine these with solutions that would help you to address these issues since most of them could be handled if only considered beforehand. But even if you are far in the process of development and one of the problems occurred, some adjustments might still boost the chances of success. Keep reading and find what might put your work in danger and how to handle these risks.
Lack of vision/real problem that your idea would solve
Let’s start with what is the foundation of every software development project. The idea, which drives all following steps. But if your vision work’s only on paper and your final product won’t be useful for the end-users, even if you will meet all deadlines and budget assumptions, your project will fail when introduced to the market. Therefore it’s best to check your idea multiple times before and during the SDLC. To make it clear – we’re not assuming that your vision needs conceptional improvements, but undoubtfully we’ll all agree it’s better to be safe than sorry. Before you start the work you need to have a defined roadmap and know exactly where you will land after the project is finish. You simply need to know where you want to get in order to plan how to do it. What’s more you should discuss it not only with your business partners but also with development teams since they would be able to assess what can be developed and how much effort will be required. If you decide to outsource, choose an experienced partner and never be afraid to benefit from their experience. Apart from technical and process improvements that external partners might suggest, they could also see loose ends in your vision and help you tie these up. Looking at your idea from different points of view by people with diverse backgrounds is a great way to decrease the chances of developing a product that won’t be useful.
Your team doesn’t suit the project
Nowadays, software development requires a high level of specialization, and unfortunately, we have seen many teams that didn’t fit the project. Firstly – team size. Consider what skills you need for the development and how many people should be involved. For example, if the team is too big for MVP development, it might create unnecessary bureaucracy, but when the team is understaffed, too much work will be on each person’s shoulders. Secondly – competencies. You can’t expect that developers skilled and experienced with one particular technology would be able to use different ones just because your project needs it. We all heard stories about team mismatch, yet still many projects fail due to these problems. To minimalize this risk, you need to analyse what skills you would need, define the size of projects, the corresponding number of specialists working on it, and finally build a team that fits these conditions. However, it is common sense that you can’t plan everything, and during the project life span it will require some flexibility. Here outsourcing might come with help – if what you need is to expand your internal team with specialized developers or benefit from flexibility of delegating the whole project to be run externally outsourcing makes it much easier to always have the team suitable for the job.
Communication issues and insufficient soft skills
This one we want only to touch briefly, cause although its importance in undisputable, we focused on communication and soft-skills many times already. The technical skills alone are not enough to get the job done as projects are getting more and more complex and the need for interaction, collaboration, and communication growths. According to PMI study, US$75 million is at risk for every US$1 billion spent on a project due to ineffective communication. When it comes to internal communication, make sure that your team has established ways of spreading knowledge and information, and have the necessary skills and tools to share those effectively. For external communication, we have in mind the connection between dev and business teams in case of internal development projects or outsourced developers and clients when running the project with an external partner. And that leads us to the next problem…
Not enough buy-in from the business
Carrying on the communication-related issues it’s time for the buy-in from the business. Since most software development projects are run due to business departments demand, their input is necessary to succeed. Unfortunately, statistics show that’s business people often only present the requirements (which usually are not clear enough) and are not engaged in distant parts of the process. In the study “Doomed From the Start? Why a Majority of Business and IT Teams Anticipate Their Software Development Projects Will Fail” conducted by Geneca, we can find that 78% of participants feel the business is usually or always out synch with project requirements and stakeholders should be more involved and engaged in defining requirements process. And not only involved but also evident since the same study shows that 55% of respondents find the business objectives of the projects not clear. To avoid problems related to this reason is best to engage business people in every stage of the development. A proven method is to utilize the iterative approach and involve them in planning’s and backlog refinement sessions. It not only enables the developers to inquire about unclear requirements and confusing aspects but also allows the business representatives to keep the hand on the pulse, verify if the project is moving in the right direction and whenever needed make adjustments in almost real-time to ensure the highest value is being created.
Unrealistic expectations and inaccurate estimation
Clients non-familiar with software development often require the work to be done “as fast as possible”. Being not aware of the SDLC inside outs is not their fault, so this is the place where experience and, most importantly, reliable providers should present the possible scenarios for the project to be delivered rather than accepting the impossible deadlines to win the project. Development takes time, and longer your deal with software development better you can estimate how much of the time is needed. To accurately estimate tasks, its best to divide them into small ones, that wouldn’t take tons of time. According to the Chaos Report prepared by Standish Group, the bigger the project gets higher the chances are that it would not succeed. Still, the same rule applies when it comes to dividing huge project parts into smaller tasks and estimating the time needed to develop them. The importance of that is reflected in McKinsey’s study, which found unrealistic schedule and reactive planning second highest cause for cost overruns. It’s recommended to split the work into small tasks that could take no more than 16 hours. Now you may wonder how to do it. Although there are some best practices and tools that might help, such as planning poker for example, these only work in the hands of experienced developers. That’s why it’s best to work with a well-educated specialists that have already delivered several projects. Once the Product Owner, or other business representative, presents the requirements your developers will be able to divide the work into small tasks and estimate how long these would take. In the end no one can predict how much time is needed for the development more accurately than the person responsible for it.
Doing post-mortem analysis instead of continuous improvement
The traditional approach to project management usually assumed that time for summing up the work and learning the lesson comes once the project is finished. Although that’s 100% correct and you should always analyze the work and search for improvements, in this article we focus on what should be done to achieve the desired result when it comes to the actual project, not the following ones. Adapting continuous improvement culture, through hosting regular retrospective meetings, would allow adjusting your development processes “in real-time” and as a result boost the chances of success. Whatever your project is about (software development in traditional or agile methodologies, R&D, or even work not related to software development as sales or marketing projects), retrospectives can be exploited and the way you work can be improved even before the job is finished. Waiting for the analyses and introducing improvements till the end of the project not only decrease the chance of success but also lower the team morale in case of any troubles – we all feel more motivated working in environments where everything works seamlessly and each day is a step forward.
Lack of project manager
Now we’d like you to use your imagination. You already have a brilliant idea that impresses everyone who has a chance to hear about it; the developers are well selected for the job and highly motivated. There’s buy-in from side to side, the processes are prepared in the way that would fit your project perfectly, and the communication schemes are flawless. What can go wrong, you may wonder? The moment the work starts, your assumptions will meet the real life. Maybe issues with time or budget management will come up and put the success of your project in danger. Or different obstacles that could not be predicted beforehand would appear. Whatever this is, in the imaginary scenario, we purposely omit one role, that’s sometimes overlooked but plays a crucial part in successful delivery. Project Manager. A person that will be responsible for tying up all the loose ends in real-time, someone who keeps the track of work, motivates the team, and as a result, drives everyone involved into the set goal. Even though PM might not have the skills to execute the project, without his/her guidance and support for the team, even the best might struggle to succeed. You should always work with well-seasoned PM, who preferably knows the team and his ways around them, so in good and bad times his/hers work would be effective.
Not enough test coverage
We left this one for the end, not without reason. We did it because it’s not unusual to leave the tests for the final round of the project. And that’s a tremendous mistake. Although the reasons for it are obvious, let’s run a quick recap – the later you’ll find a bug, the higher will be the cost of fixing it. If you detect an error in final parts of the SDLC fixing it would require rewriting the parts of the source code and verifying not only if that solved the issue but also weather the changes did not affect different parts of the software – if so, you’ll need to change more and more. That’s why it is best to test simultaneously to the development whenever possible and find/fix bugs in real-time. Quality should be simply built into the development. Furthermore, to boost the effectiveness of the testing process and shorten the feedback loop is best to utilize automated testing – we already wrote about its benefits, so if you wonder how it can help your project click the link and learn more.
Boost your chance of success
Like we said at the begging, you can’t prepare for everything, but following carefully established workflow would help. The dangers we described are the most common complications that could be minimized if only you will take the time to meticulously prepare before the work starts. What we advise is never to assume that “something would just work” and always consider how exactly that would happen. Since 1999 we delivered lots of successful projects and encounter different obstacles that now we can efficiently deal with. We know how significant the preparation is, but also that something that wasn’t expected would probably occur ;). Whether you’re about to start a new project or just run into a stone wall with your current software development, we’re happy to help and share our experience or partner up and help you deliver in a way that would land your project in “successful ones” basket. 😉