person sitting beside plastic stool

Classic problems in software development

person sitting beside plastic stool

Software engineering is a discipline that has been refined for years. Over time, specialists have gathered experience and lessons learned from millions of projects and work teams. Below we summarize the main problems a software development project may face.

1. Unrealistic time estimation

Making a good calculation of the resources, time, and costs needed to carry out the project is a task that is sometimes not approached the right way. No one wants to hire a service with a certain time and cost budget in mind, only to discover that it will actually take twice as long and the costs will multiply.

Although estimation is largely a process based on experience, there are also techniques to get quite close to a good quote. Therefore, setting realistic expectations around these two topics, thanks to proper planning and analysis, is essential.

A technique that allows us to get an idea of how a project was estimated is to check the following:

  • Did the provider meet with me to carry out a preliminary analysis?

  • Did they contact me to resolve any questions?

  • Did they ask me for documentation to help them estimate?

  • Did they state what I need, to verify whether they understood me?


If any of these points were absent during the process, it may be an indication that your project carries some risk of not being well estimated and quoted.

2. Poor risk management

It is vital to carry out a good analysis of the project risks and the actions to mitigate them, so that the work plan does not stop or get delayed because of unforeseen risks in the analysis. It is therefore necessary to identify at least the known and foreseeable risks, whether they involve technology, people, context, the market, competitors, and/or the government, so that we are prepared and have an action plan in case some of the identified risks occur.

Doing this planning exercise makes it possible to align expectations so they are more realistic, depending on the likelihood of certain risks occurring and their criticality. If many risks are identified with a high probability of occurrence and high criticality, it is necessary to establish a broader framework for action. On the contrary, if the probabilities are very low and their impact is not very high, then the plan can proceed as estimated.

3. Insufficient quality control

Quality assurance is a fundamental stage in your software project, because it is during this stage that all critical breakpoints in the operation of a given business, and those toward which the software is geared, can be validated.

It is recommended to allocate at least 30% of the total development time to the tests carried out by the quality department. Estimating less time is not advisable, since according to experts it is not really possible to guarantee that the software can do everything expected in the correct way, even when the functionality to be validated is already well known.

As a client, you are fully entitled to ask for results (documents that support their execution) for at least the following operations performed in this phase, whether in waterfall projects or in SCRUM: test plan, test case design, execution of test cycles, validation of integration tests, and automated tests.

4. Technical debt

Technical debt is the accumulation of design or coding shortcuts that can cause problems in the future. The classic problem is that technical debt is often ignored or not managed properly, which leads to increased maintenance costs, reduced performance, and limited scalability. To mitigate this problem, it is essential to identify technical debt early, prioritize it, and allocate resources to pay it down.

5. Requirements management

Requirements are the foundation of software development, and managing them is crucial to the success of the project. The classic problem is that requirements are often poorly defined, incomplete, or constantly changing, which leads to unexpected scope, missed deadlines, and additional costs. To mitigate this problem, it is essential to involve stakeholders early in the process, establish clear communication channels, and use collaborative tools such as user stories, prototypes, and mockups.

6. Not involving the end user or customer

Their participation is essential so that developers receive constant feedback that allows adjustments to be made during the execution of the project. This way, you avoid getting to the end only to realize that much of it has to be rebuilt. The sooner issues to be corrected are detected, the less time and money will be wasted.

Additionally, the customer is the one who determines the success of the software, because if the user does not approve it or considers that it does not solve the identified need or desire, then the project has been in vain.

Another essential aspect is not only involving the user so that the software fulfills its purpose, but also doing so in the best possible way, considering the interaction the user will have with the system so that it is the best possible experience.

7. Not communicating "what is going to happen"

A common situation is to omit "telling what is going to happen" during the execution of the project. This goes against the customer's expectations and can generate feelings of frustration that could be avoided. It is useful from the outset to address what commonly happens throughout your project's life cycle by communicating it clearly:

  • All projects can experience delays, some due to the provider and others due to the client. That does not mean it will not be successful in the end.

  • You may find it tedious to be repeatedly asked for details about the requirements, but this is important to eliminate ambiguities ("the devil is in the details").

  • You may have to participate in many meetings, even after telling your provider everything they need to know.

  • And you will be annoyed when new requirements come up in those meetings and you are told they are not within the original scope, requiring additional costs and time.

But if the above is not communicated and agreed to in advance, unnecessary friction will surely be generated because expectations are not aligned.

At Suris Code we help our clients avoid these situations and obtain a pleasant project experience without surprises.