IT product company.
A system for behavior modeling of a physical object under specific conditions.
The most complex product with a huge amount of functionality that was not covered by automated tests. Changes in one place caused bugs in other ones, which made it difficult to build up new functionality. The customer couldn’t be sure about the quality of every delivery due to a large number of bugs in the product. Releases carried out once a year with delays of up to 4 months. The rarely updated product was not always able to meet the end-users’ requirements.
Project technical characteristics
The product had to enter the market as quickly as possible, so a number of important practices and approaches that were considered unproductive in the short term were not used. Accordingly, the principles of continuous integration and delivery (CI/CD) were not implemented.
Creation of Unit tests was a rare practice and was used ad-hoc: the code coverage was about 18%, any code changes led to lots of bugs. There was no automated UI testing, too, since its implementation was an even more complicated and labor-consuming task that required a separate framework.
Manual testing was carried out unsystematically, regression testing was not conducted, test management was not organized, which resulted in the absence of necessary quality control processes.
The product was a desktop solution, where each distributive kit was unique and supplied for a specific customer’s workplace. Before we joined the project, each build was created manually, which slowed the delivery of new product versions down a lot.
Approaches and solutions
- Organizational, managerial, and technical consulting on improving and optimizing the product development processes. At first, the owner of the customer company had to see the situation realistically (there is no work with technical debt, unimplemented CI/CD, absence of test management and automated tests, and as a result, no value approach in the team).
- Process setting. Engagement of our company manager:
- Implementation of continuous integration and delivery (CI/CD) to reduce the human factor impact and improve the testing process.
- Introduction of the practice of obligatory Unit test creation by developers. The Data Driven Testing approach was applied in Unit testing, which simplified the input data entry. It was especially important for a modeling system with a large number of calculation modules.
- Daily UI testing of critical product functionality in the build that was as close as possible to production (with software and hardware protection overlaid). That approach allowed us to change the current product code with minimal risk of missing regression bugs.
Results and achievements
- Thanks to the complex work, the customer was able to release new product versions 5 times more often without fear of unstable builds. As for now, the product has no barriers to further functionality development. Automation allowed for performing releases and delivery safely and efficiently.
- The owner of the customer company realized the importance of team self-organization and the necessity to transform the values of developers, approved the continuous work with the technical debt, decided to invest in CI/CD, and became a constant driver of new automated UI tests. We managed to get the full support of the product owner.
- Thanks to the CI/CD culture introduction, the process of creating product distributives has become fast and safe. This allowed increasing team productivity to create new functionality and establish more frequent releases.
- The testing process was organized:
- The value-based approach to the development process was formed in the team. Before we joined the project, the main goal of the team was rapid functionality implementation. Engineers did not think about product quality and support. After 3 months from the cooperation started, the customer’s development team began to reduce the technical debt, use and accumulate the best engineering practices, and maintain the necessary documentation, while increasing the speed of delivering new functionality. That improved the psychological climate in the team and increased motivation to overcome learned helplessness.
- The implementation of the Scrum methodology and professional use of Jira accelerated the development process and made it clear, transparent, and manageable for the customer.
- Budget saving by reducing the cost of the product build. Automatic build greatly stabilized, simplified, and accelerated the process of creating different versions to deliver to the clients. This freed up additional development time and also removed the dependence on previously irreplaceable team members.