19 May 2022
How to avoid 6 software development problems that can doom your project
With the growing importance of software development and technology in general, it’s not a coincidence that more and more companies are establishing development departments and striving to adopt future-proof technologies to make their businesses more competitive and ready for the new, post-pandemic reality.
At the same time, a vast number of software development projects that go over budget or fall behind result in low-quality deliverables or are even canceled before completion, making the dive into the IT world an opportunity but also a challenge. That’s why we want to share our experiences and help you maximize your software development. Recently, Software Mind experts published an article on red flags that indicate your project is in danger. This time we want to describe common project problems, that may not kill your project instantly, but rather slowly drag it down, costing you money, time and market opportunities.
Inability to prioritize tasks and make decisions
The goal of developing software is to produce value, and the sooner the investment starts to pay dividends, the better. At the same time, some tasks may need to be done in a certain order, as parts of the software you’re working on are dependent on each other. All this makes task prioritization an extremely crucial element of effective software development process management. In fact, it may make or break almost any project. Only providing your developers with users’ stories to code, without sharing the bigger picture or a helping hand from experienced product owners, is a straight way to nowhere, even if your team has the best intent and is highly experienced.
This is especially true for projects done in an Agile manner. Maximizing this approach requires constantly gathering feedback, observing the market and pivoting to wherever provides more value for the business. And with a final scope often discovered during the work, having data-based task prioritization is critical to success.
But how to effectively prioritize tasks? This is mostly the responsibility of the product owner, who should be a bridge between the business and development departments; constantly monitoring situations, gathering feedback and observing market changes to point the project in the right direction at all stages. What’s more, it’s critical for the development team to closely cooperate with the business side – the more people who know and understand the technical requirements and the project business environment, the easier it will be for them to make the right calls, and work in a way that allows them to create as much value as possible at any particular moment.
The work quality and tempo depend mostly on the skills and knowledge of your development team, but even the best specialists won’t perform well in an adverse environment. The most reoccurring problem I’ve seen, that can be easily solved, is context switching. Studies show that 45% of people state context-switching makes them less productive, and 43% of respondents feel that it causes fatigue. So, what is context switching, and how can you avoid it? Basically, context switching is exchanging what you’re working/focusing on for something else, which forces you to leave your “deep focus” zone. Returning to this zone takes time and the interruption to workflow can be significant. In the case of software development, it could be, for example, taking a break from coding to attend a meeting or being asked to work on a completely different part of the system.
Unfortunately, many managers don’t see the problems that follow an unexpected call and set project meetings throughout the workday at random, or force people to work on different and disparate parts of a project. All of these make work less effective and impact both the tempo and quality. And that’s exactly the opposite of what we all should try to achieve.
Thus, when planning the work of the development team, all project meetings should be set in a way that does not destroy entire workdays, preferably at the beginning or end of the day, and the tasks people are meant to deliver should be related to each other, allowing them to get the most out of their ‘deep focus zones’. This is highly connected to what we covered before – planning and prioritization – but this can’t be highlighted enough. Since almost all elements of the software development process permute, making mistakes with one may hinder another and create a snowball effect.
Treating the symptoms, not the disease
Problems in software development happen, period. And the longer and more complex the project, the higher the chance that something problematic will occur. While it’s impossible to have a flawless process, what every manager should keep in mind is that sweeping the problem under the rug is never a good choice.
Let’s examine a common situation – a project launched under intense pressure to release as fast as possible forces a team to rely on manual tests only, not automated ones. Yet as time flew by, and the app increased in size and scale, the QA process started to take extremely long and slowed down the work. What sometimes happens is that companies decide to hire more manual testers or, simply don’t test everything to somehow deal with the obstacle at lower costs. But is that a solution? Well, no. With each release, the problem only gets bigger and might grow to a point that jeopardizes the entire project. But testing is just one example. What if the architecture designed at the beginning stopped suiting current needs? Of course, developers could use some workarounds and spend more time developing new features to make it work but altering the architecture would be much more effective in the long run.
The list of such cases goes on and on, we can even use one of the simplest known to everyone – tech debt, but at this point, you surely know what we mean. When problems occur, the most critical element is to find the root cause and solve it. All actions that are meant only to treat the symptoms, not the cause, are highly likely to backfire over time and cause potential damage. Also, the longer you wait, the more expensive it will be to solve the real issue.
Bad team structure
As this topic is described in our ebook “5 steps to successful software development project” rather than elaborate I will describe it briefly, and I encourage all of you who want to learn more about this topic to download the ebook. While everyone knows that selecting people familiar with the required technologies and frameworks is crucial, so too is the willingness to learn new methodologies, strategies and tools. Some managers fall into the trap of trying to have all members at the same seniority level and underestimate the importance of mixing experience with a curiosity to learn new things. And while having only senior engineers in a team may seem tempting, it’s not only extremely costly, but ineffective.
Having a team that combines seniors, mediors and juniors enables you to assign the right people to the right task (a senior creating a simple CRUD might result in overengineering and cost more than necessary, while leaving a junior with complex tasks may lead to the creation of tech debt), enables you to combine years of experience with a fresh, unbiased view and gives everyone involved a chance to grow – juniors can learn from seniors, and seniors can broaden their soft skills and mentoring abilities. Rather than trying to cut as many costs as possible by hiring only juniors or forgetting about expenses and working with extremely experienced specialists only, managers should focus on effectiveness and build a well-balanced team that matches the tasks to be done.
Lack of metrics and analysis
The popular saying “you can manage only what you can measure” is not another cliché used in social medial posts, it’s completely true. And while there is no need to bury yourself in metrics and force PMs to spend all their time in excel or Jira, measuring key indicators, analyzing them and then drawing data-driven conclusions is crucial to effectively managing software development. Relying on “gut-feelings” might work for a small and simple project, but when there’s more to do, there’s more to be analyzed. This way, if any problems occur it will be easy to locate their source – the infamous bottleneck – and deal with the root cause, not the symptoms.
Moreover, metrics are useful not only when the project is going sideways. The more you know about your team performance and capacity, the more precisely you can plan the work and make the most out of it. So how to start if, up to now, all decisions had been based on developers’ own predictions? You can, for example, read “The best metric to start with” article, implement a cycle time, and then dive deeper into this topic to map out more elements. We’re currently working on a whitepaper dedicated to this topic so make sure to check back in with us!
However, too many metrics can be harmful, as teams can become overly focused on meeting arbitrary, or unrealistic benchmarks, at the cost of focusing on developing a viable solution. If teams are bogged down in analyzing measurements that detract from the time that can be spent crafting software, the result will be slower software delivery processes, missed deadlines and frustrated clients. Metrics, while undoubtedly useful, should be used in a practical, balanced way. Teams should define metrics that support their work, as opposed to having metrics that define their work.
Wrong ways of working
Lastly, we want to explore wrong ways of working. Unfortunately, this problem is so wide that it’s simply impossible to describe every possible scenario. But illustrating a few examples should do the trick.
So, what do we mean by “wrong ways of working”? It could be, for example, having a leader who is authoritative and forces his/her ideas on other team members without giving them a chance to speak up and who ignores their suggestions about solving a particular challenge. This not only limits the value a team can create but it also causes developers’ burnout and loss of motivation, which may ultimately lead to specialists walking out on you, saddling you with open positions, new problems and costly project delays.
Or maybe the development team is only turning user stories into code without knowing and understanding the business environment and requirements? Following the technical requirements is crucial, yet without knowing the full picture the team may choose inadequate solutions, or simply won’t be able to see room for improvement. After all, the product they are working on is not art for art’s sake, but a solution designed to solve concrete end-users’ problems, and only knowing the full scope of the work makes it possible to achieve this.
While we could go on and on with a list of “worst practices”, we don’t want to turn this article into a wall of text that requires hours to be read, so let’s examine a final example – lack of an inspect & adapt approach. As the goal of Agile is to be able to adjust to changing conditions, provide as much value as possible and maximize work effectiveness, it’s clear that analyzing a situation and adjusting, whether that means pivoting the direction or simply altering the process, is crucial to getting the most out of software development. All of us have seen, at least once, an “agile team” that spends retrospectives looking for someone to blame for all the problems, rather than considering it a chance for improvement or even having tunnel vision that only focuses on the requirements at the start and isn’t open to evolutions.
These are only examples, but wrong ways of working will gradually endanger your project, which in the best-case scenario will only cost you money and time, but in the worst might even force you to hide the results in the proverbial drawer after everything you invested has been burned and the results don’t match your needs. So how to deal with that? Since the list of potential problems is ever-expanding, we cannot provide you with a silver bullet solution, but from our experience, cooperation with an experienced software development partner is a great way to obtain a “breath of fresh air” that enables you to notice such problems and come up with solutions, as happened in this case.
Handle software development problems before it’s too late
Software development can provide extreme value to companies across the board, but at the same time it requires extensive experience so as not to be a ravenous money-eater. While the described software development problems are the most common, the list of potential issues is almost endless, as no one can predict the future. So, what can you do to best protect yourself? Reach out for the helping hand of specialists that have seen their fair share of projects, know how to deal with the challenges and have battle-tested methods to maximize value delivery. Such a dedicated development team can draw on their cumulative experience and notice things that you miss due to their fresh, unbiased perspective. If you want to learn more about such cooperation, or simply discuss your situation, use the contact form below – we’re eager to share our expertise and our specialists are happy to help you find the best solutions.