The owners of the product were going to expand their client base and move to cooperation with larger companies, however, the product developed by their team has reached a critical amount of technical debts and its consequences:
- it is extremely difficult to scale up a system with a large number of functions and modules;
- it is impossible to control its stability, if no automated testing is applied;
- attempts to make changes and develop the product lead to release delays and bugs that arise at the production stage, which negatively affect the customer’s reputation;
- development and delivery are challenging and stressful for everyone involved.
The situation is further complicated by the fact that the company is managed by a few co-owners having different points of view regarding product development and the strategy for overcoming the crisis on the project.
JazzTeam, represented by its CEO Dzmitry Harachka, held many events within the consulting to the product owners. It was a lengthy process that is still going on.
As the results:
- now the company works with large customers;
- the development time has shortened;
- the quality of the product has increased;
- the development team is harmonized.
- Technological complexities: The system had a large codebase with a non-trivial, confusing architecture and mixed layers of code, which made its maintenance difficult. 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. Product quality checks were not carried out on a regular basis, and only manual testing was used. The system components were not isolated, bugs appeared even in case of the smallest code changes due to the high level of cohesion. The product was very difficult to scale up, and it was extremely difficult to implement new features.
- 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, which negatively affected the speed of product delivery. Unrealistic estimates were another cause of delivery problems. Hard deadlines were set for the engineers to which they agreed, although initially it was clear that the task could not be completed on time. Also, there was no practice of tasks decomposition and risk assessment on the project, which did not allow to realistically assess labor costs required for solving problems.
- Learned helplessness and high toxicity within the team: 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 proactivity and technical leadership from the side of engineers, and the technical debt accumulated over the years. Initiatives aimed at the introduction of new engineering practices that benefit the project in the long run were neglected, so the developers faced learned helplessness.
- 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.
- Personal consulting in a 1:1 format with the company owners.
- Mediation of the conflict between the founders.
- Engaging a manager to implement improvements (set up and manage business analysis, delivery, testing processes).
- Involvement of a specially dedicated manager to manage the process of work with technical debt. This was necessary due to a large amount of technical debt and a large amount of work required to eliminate it.
- Regular involvement of Dzmitry (JazzTeam CEO) in the project to analyze the effectiveness of the improvements made.
Consulting approaches: in the process of consulting, Dzmitry applied a triad of his experience:
- he used his technical background, qualifications of an engineer, architect and CTO to set up the process of work with the technical debts;
- demonstrated the thinking of the IT company owner in the process of consulting, which helped to overcome barriers in communication with the owners;
- used the skills of organizing the delivery process to ensure the systematic improvement work on development processes (business analysis, testing, setting and estimating tasks).
Stage 1 – mediation of the conflict between the founders and the establishment of a common vision of the situation on the project: Dzmitry acted as a mediator – an independent party promoting a consensus among the product owners with different points of view. The owners were aware of the need to improve processes, but the options they proposed did not help eliminate the source of the problem. Each of them was an experienced specialist uncompromisingly defending his own point of view, so it was very difficult for them to achieve a common vision and jointly choose a management strategy.
Stage 2 – processes reorganization:
- Dzmitry qualitatively transformed the business analysis process. Instead of a schematic, stingy and incomplete statement of tasks understandable only to employees with extensive experience on the project it was decided to introduce a unified standard transparent for the entire team. This made it possible to integrate development and testing teams, provide clearer acceptance, significantly improve synchronization with the end customer for the desired result.
- Quality control was to be an essential part of the project lifecycle. Before the customers turned to consulting services, testing of the system was carried out situationally, the role of a testing engineer was performed by the developers and one of the product owners. Dzmitry analyzed the current problems with the quality and instability of the product and encouraged the customers to expand the team with specialists in manual and automated testing.
- To deal with constant release delays, it was decided to revise the task estimation process, so that all team members could realistically understand the current status. In addition to a clearer decomposition of labor costs into types of work (BA, design, development, automated and manual testing, bug fixing, etc.), a unified table of possible risks was introduced. The probability was set for each risk, which influenced the initial estimate. Also, a list of criteria for completing the task (Definition of Done) was created for each type of work, which was necessary to organize systemic acceptance. The development team gradually acquired practical skills in estimating. Having gained experience, the engineers each time more accurately and more realistically estimated the necessary labor costs for the implementation of a specific task. All these measures produced realistic estimates that ensured delivery planning without delays.
Stage 3 – dealing with the technical debt: in the process of improvements, the following technical debts were worked out:
- CI/CD implementation to automatically build the product, regularly control its quality and automate the product delivery.
- Creation of a framework for blackbox testing of the application with which the team was able to start building automated backend tests. Without this framework engineers were not able to create Unit tests due to the large codebase with a non-trivial confusing architecture and mixed layers of code. Tests are run as part of regular builds of the project (on schedule and on demand) to ensure the stable operation of the product when changes are made.
- Full and regular coverage of important system functionality with GUI automated tests. To quickly write and maintain a large number of GUI automated tests with minimal costs, the test framework was created. It helped to create the base of UI automated tests from zero to several hundred in a short period of time (several months).
Stage 4 – implementing the best development practices and generating a value culture: in agreement with the business owners, it was decided to strengthen the role of engineers in the project, to increase the degree of the team’s self-organization. For this purpose, the best approaches of Scrum methodology were used:
- Daily stand-ups increased the synchronization level of the geographically distributed team.
- A demo of the new functionality for the entire team helped to achieve a common understanding of current statuses on the project.
- Misunderstandings and problems were promptly resolved at regular retrospectives. The topic of the importance of a realistic approach to development was constantly raised: the team had to be honest in estimating tasks, assessing their strength. The opinions of all project participants were heard, the product owners began to take into account and handle suggestions and comments of the engineers.
- The systematic transfer of knowledge within the team was established – the practice of regular lectures and meetups on technological or domain expertise was established. All this helped to improve the psychological climate and overcome learned helplessness of the engineers. They became more independent and were not afraid to show the initiative.
- The healthy psychological atmosphere was established in the team, the project participants became more sincere and began to trust each other. Thanks to the constant initiation of communication, the practice of general discussion of topical problems and issues was introduced. When all project participants were honest and did not hide the difficulties that arose, it became possible to find the most optimal solutions, to avoid a large number of risks and conflicts.
Results and achievements
The owners reached a consensus on the development of the product and business, began to openly discuss current problems and act together within the framework of the chosen strategy taking into account the interests and opinions of each party:
- The customers were able to deliver new functionality on a regular and timely basis, thereby developing and scaling up the highly sophisticated product. Degradation of quality at the production level was eliminated. All this opened up opportunities for strengthening the company in the market and cooperating with larger customers.
- Thanks to the implementation of effective practices of processes management and task estimation, the customer’s company switched to the T&M business model and was able to increase the sales revenue.
- The value-based approach to development was established in the team. The product owners began to listen to the team’s proposed initiatives that deliver a long-term value, shifted from short-term goals to a strategic approach to product development. Also, the product owners began to invest in the implementation of the necessary engineering practices (CI/CD, Unit testing, Test Automation). They began to pay attention to technical debt elimination during each sprint and long-term technology research was generated.
- The main technical debts were worked out:
- Thanks to the introduction of CI/CD, the process of building and delivering the product was automated, it has become fast, transparent and secure. This allowed making regular releases.
- The complex codebase of the application was covered with Unit tests; so, it became possible to stabilize the quality of the system when making changes.
- The systemic coverage of code with automated tests made it possible to quickly detect bugs when implementing new functionality. This provided the opportunity for timely development to maintain the competitiveness of the product.
- The synchronization level between the distributed team members and product owners was improved. Engineers were motivated to overcome learned helplessness, to use a proactive approach in the process of working on tasks. The psychological climate in the team improved, the development process takes place in a relaxed atmosphere now without unnecessary stress and nervousness.
- The product owners and development team became more realistic in planning, estimating tasks and assessing risks, which ensured predictability of work for the engineers and reduced team nervousness. Also, the use of composite estimation accelerated the process of introducing innovations and engineering practices on the project.
- Thanks to Dzmitry’s professional approach, all the necessary changes were accepted by the specialists and founders and successfully implemented. At the same time, he managed not only to retain the development team, but also to expand it with new specialists.