Provided services
IT Consulting, Project Management, Early-Stage Innovation, R&D Services, Software Reengineering, Refactoring and Modernization. Cloud Migration
Client
Software development company, one of the leading providers of solutions for warehouse management, procurement and accounting.
Product
Multifunctional system for the management of orders, products, warehouses, customers.
The product was commercially successful by the start of the project, but the owners were going to expand their client base and move to cooperation with larger companies.
Challenge
For further commercial development of the product, the client wanted to adapt it for use by large retail enterprises. However, the product had accumulated a significant technical debt. The challenge was to seamlessly eliminate technical debt and scale the product without disrupting its functionality.
Additionally, the company was managed by multiple co-owners who had different perspectives on product development and overcoming the project’s crisis. This lack of shared vision among the stakeholders further complicated the situation.
Project context
Technological complexities
The system was difficult to maintain due to a large codebase with a non-trivial, confusing architecture and mixed layers of code.
Unit tests were practically absent. There were no unit tests in the Definition of Done, as well as no requirements for the level of code coverage. Regular product quality checks were not conducted, and only manual testing was performed.
The system components were not isolated, resulting in the appearance of bugs even with the smallest code changes. Scaling the product or implementing new features was extremely challenging.
Delivery problems
The principles of Continuous Integration and Continuous Delivery (CI/CD) were not implemented. The product was built and the servers were updated manually, leading to a slower product delivery.
Delivery problems were also caused by unrealistic estimates. The engineers were given tight deadlines, to which they agreed, even though it was clear that the task could not be completed on time.
Also, there was no practice of task decomposition and risk assessment on the project. As a result, it was impossible to accurately estimate the resources required for solving problems.
Team problems
Constant failures to carry out releases caused dissatisfaction among the business owners and end customers. Nervousness and stress arose in the team in response to the pressure exerted.
The situation was complicated by a lack of proactive behavior and technical leadership from the engineers, as well as the accumulation of technical debt over the years. The neglect of initiatives aimed at introducing new engineering practices that would benefit the project in the long run resulted in a loss of motivation among the developers.
Stochasticity in processes and management approaches
The processes of business analysis, testing, and delivery were not established. There was no clear approach to task estimation and risk assessment on the project. The founders were focused on achieving short-term business goals.
Solution
Phase 1. Mediation of the conflict between the founders and the establishment of a common vision for the project
Dmitry, the founder of JazzTeam, joined the project right from the start to contribute his extensive consulting experience. He acted as a mediator, an independent party tasked with promoting consensus among the product owners who held different points of view. While the owners recognized the need to improve processes, the options they proposed did not address the root cause of the problem. Each owner was an experienced specialist, staunchly defending their own perspective, making it challenging to reach a shared vision and collectively decide on a management strategy.
Dzmitry’s thinking of an IT company founder helped him to overcome barriers in communication with the business owners. Through regular 1:1 consulting meetings, Dzmitry facilitated productive discussions and guided them toward reaching a consensus.
Phase 2. Processes reorganization
Dzmitry used his skills in organizing the delivery process to ensure systematic work on the improvement of development processes (business analysis, testing, and setting and estimating tasks).
Instead of using a schematic, limited, and incomplete task statement that only experienced project employees could understand, a unified and transparent standard was introduced for the entire team. This allowed for the integration of development and testing teams, clearer acceptance criteria, and improved synchronization with the end customer to achieve the desired result.
Quality control was intended to be an essential part of the project lifecycle. Before the client turned to consulting services, testing of the system was performed by the developers and one of the product owners. Dzmitry, after analyzing the current quality and stability issues of the product, recommended that the client expand the team with specialists in manual and automated testing. This would help improve the overall quality of the system.
To address the issue of constant release delays, it was decided to revise the task estimation process. The goal was to provide all team members with a realistic understanding of the current project status. As part of this revision, the labor costs were more clearly broken down into different types of work such as business analysis, design, development, automated and manual testing, and bug fixing. Additionally, a unified table of possible risks was introduced, with each risk assigned a probability that would impact the initial estimate.
Additionally, a list of criteria for completing the task (Definition of Done) was created for each type of work. This was necessary to organize systematic acceptance. The development team gradually acquired practical skills in estimation. With gained experience, the engineers were able to more accurately and realistically estimate the necessary labor costs for implementing specific tasks. These measures resulted in realistic estimates, ensuring timely delivery planning without delays.
Dzmitry was regularly involved in the project to analyze the effectiveness of the improvements made.
Phase 3. Dealing with technical debt
To reduce technical debt, the following measures were taken:
Phase 4. Implementing the best development practices and fostering a culture of value
In agreement with the business owners, it was decided to strengthen the role of engineers in the project and increase the team’s self-organization. For this purpose, the best practices of Scrum methodology were used:
Result
The owners have reached a consensus on the development of the product and business. They have started openly discussing current problems and taking collective action within the chosen strategy, considering the interests and opinions of each party.
The client was able to consistently and timely deliver new functionality, which allowed for the development and scaling up of the highly sophisticated product. The degradation of quality at the production level was eliminated. All of this created opportunities to strengthen the company’s position in the market and collaborate with larger customers.
Thanks to implementing effective practices in process management and task estimation, the client’s company transitioned to the Time and Materials (T&M) business model and increased its sales revenue.
The team adopted a value-based approach to development. The product owners started listening to the team’s proposed initiatives that would deliver long-term value. They transitioned from focusing on short-term goals to adopting a strategic approach to product development. Additionally, the product owners began investing in the implementation of essential engineering practices such as CI/CD, unit testing, and test automation. They also started addressing technical debt during each sprint and conducting long-term technology research.
The main technical debts were worked out:
The synchronization level between the distributed team members and product owners was improved. Engineers were motivated to take a proactive approach when working on tasks. The overall psychological climate in the team was also improved, and the development process now takes place in a relaxed atmosphere, free from unnecessary stress and nervousness.
The product owners and development team became more realistic in their planning, task estimation, and risk assessment. This ensured the predictability of work for the engineers and reduced team nervousness. Additionally, the use of composite estimation accelerated the process of introducing innovations and engineering practices to the project.
Thanks to our professional approach, all required changes were accepted and successfully implemented. The development team was not only retained but was expanded by adding new specialists. We also involved the founders extensively in the technical aspects of the business during the consulting process to enable well-informed business decisions in the future.