Provided services
Product Development, Backend Development, Frontend Development, Test Automation Services, Manual Testing Services, IT Consulting, Project Management, Early-Stage Innovation, R&D Services, Software Reengineering, Refactoring and Modernization. Cloud Migration
Client
One of the leading software development companies in the field of cost estimation and project management for capital repair of industrial facilities. The company has more than 15 years of experience in project cost engineering. It is also professionally engaged in consulting, training and certification of cost estimation engineers.
Product
For several years our team has been actively involved in the development of a comprehensive system for industrial project management. This system allows a user to control every stage of a project, from planning to execution. With its help, you will be able to prepare accurate estimates, efficiently allocate resources, optimize procurement and cost management processes, as well as monitor risks, analyze data and forecast results, and much more.
The system has been implemented and has become a part of the production processes of world leading companies in the oil and gas, development, and transportation industries.
In the course of our successful collaboration, we have developed several additional projects, including a multi-user framework for collaborative document editing in real time, similar to Google Docs. For more details on these initiatives, please refer to the respective project description here: https://jazzteam.org/portfolio/application-for-estimating-and-managing-the-implementation-cost-of-large-scale-industrial-projects/

Challenge
Our client has a proprietary product that has been developed over more than 10 years and has a significant number of regular users. Throughout the product’s evolution, the company has received feedback from both its customers and internal product development consultants. At some point, the client began receiving numerous requests from users for the development of a new but extensive functionality. Consultants analyzed the market and suggested that this innovation could interest not only current users but also attract new, larger clients.
As a result, the client faced the task of developing a large module for optimizing and managing complex engineering projects in the industrial sector. Preliminary estimates indicated that development would take several years. Consequently, the client encountered the following challenges:
- Creating the module by a strict deadline: Timelines were critically important as business expectations and potential clients demanded a rapid market release to avoid losing interest and sales.
- Increased non-functional requirements: The module needed to be ready for deployment and operation by larger clients. This imposed additional requirements to ensure a high level of scalability, performance, and security.
- Addressing performance issues of the old application: The project had a large codebase developed over a long period. The use of custom frameworks and outdated technologies significantly hampered its scalability and integration. These factors required special attention and complicated the addition of new functionality.
- Developing under uncertainty: The new module did not have fully developed requirements. A product concept was created, business logic was elaborated, and necessary integrations and other aspects were considered. The product was developed and evolved dynamically, receiving early feedback from internal consultant engineers who tested it independently and with the involvement of loyal users. This added complexity, as changing requirements demanded constant adaptation and flexibility from the developers.
- Stable and timely deliveries: In a rapidly changing business environment and market dynamics, it was critically important to deliver preliminary versions of the product on time to maintain the interest of current clients and “warm up” potential clients.
- Maintaining team stability: The team needed to work consistently, cohesively, and with high productivity. This placed additional pressure on management to maintain a stable team composition, high quality levels, and motivation throughout the development period.
JazzTeam Challenge
The COVID-19 pandemic introduced additional challenges to our team’s operations.
All Scrum activities were transitioned to an online format, significantly increasing the burden on the management team. This forced the implementation of new tools for each event. Maintaining the team’s focus during discussions became particularly challenging. Managers also had to learn new practices to sustain high levels of motivation and productivity within the team. This necessitated the development of new management strategies and the implementation of additional tools for monitoring and assessing performance.
The team also encountered several difficulties. Previously, we worked in an office where we used a whiteboard for sketching and task discussions, which facilitated problem-solving. For architectural discussions and technical briefings, we gathered in a conference room, where we could conduct brainstorming sessions and draw diagrams on the board. The shift to remote work required adapting to new online tools and practices.
Solution
To meet the project challenge, our team applied some approaches which will be discussed in detail below.
Addressing performance issues of the old application. We have done a deep system audit to identify bottlenecks and problems that could arise. To find problem areas more precisely, we performed load tests on a regular basis, assessing the capabilities of the system under high loads and determining the need for process optimization.
During the development of the new module, we encountered the necessity of reusing previously written legacy components that no longer met modern performance requirements. We invested additional time in refactoring these components to enhance their performance. The best practices consisted of deep application profiling in order to precisely detect bottlenecks, optimization of queries and database structures to reduce treatment times, implementation of caching mechanisms to lighten database loads.
Parallelism and asynchronous operations greatly enhanced the system’s multitasking and responsiveness. We also actively employed containerization and container orchestration, ensuring flexible scalability and simplifying system updates.
Modular approach in architecture. To ensure seamless integration with the external applications, a modular approach in architecture was developed. Each application module was designed in such a way that it could easily connect to various external systems through standardized APIs. This not only simplified the integration process, but also improved the scalability and upgradability of the system.
For example, we replaced our self-written file and folder management system with the third-party solution, Alfresco. It gave us a lot of unique features: customizing rules for automatic document processing according to business processes, managing document versioning, etc. This step became one of the successful and illustrative examples of our strategy to replace self-written solutions with more functional third-party products.
Processes Improvements
Developing under uncertainty. Our team worked with agile development methodologies and two-week iterations, which allowed stakeholders to get rapid feedback on intermediary versions of the product. During the product development process, we modified our approach to releasing updates by providing a new version of the application for testing daily and an updated stable version for consultants weekly. Despite two-week iterations, this organization of work significantly accelerated the process of collecting and implementing feedback and facilitated more precise and timely product adjustments.
During development, we also revised the requirements creation model for tasks. Instead of simply working on tasks with ready-made requirements created solely by product owners, developers began to actively participate in refining the requirements. Refinement meetings became a platform for discussing the technical aspects of tasks and selecting the best solutions at earlier stages. This approach allowed us to reduce the amount of technical debt, decrease the number of rejected user stories, enable deeper interaction between developers, product managers, and analysts, and ensure more productive sprint planning.
Remote work and team stability. Remote work that started with the COVID-19 pandemic brought a number of difficulties to our team in communication and cooperation. In this respect, management elaborated and then implemented an action plan comprising the following steps:
- Utilization of specialized online collaboration tools:
- Video conferencing tools (Google Meet, Microsoft Teams) with recording, along with white board features to allow participants to revisit important discussion points.
- Collaborative tools like Miro, Draw.IO, and Xmind for visualizing ideas and plans.
- Training the team in new practices:
- Organizing training sessions and seminars on using new tools.
- Conducting workshops to improve online communication skills and productive remote working practices.
- Maintaining team engagement and motivation:
- Regular one-on-one online meetings for individual feedback and discussion of current tasks.
- Implementing virtual team-building activities, such as virtual coffee breaks, online games, or quizzes.
- Scrum meetings and events optimization:
- Reducing meeting time and structure so as not to overload participants.
- Using a timer to control time, moderators who keep the discussion channeled to key issues.
- Introducing the practice of preparing for meetings by sending out agendas and discussion materials in advance.
- Monitoring and evaluation of performance:
- Regular retrospectives to discuss what went right and what did not work out so well.
- Running retrospectives online using online tools such as Figma.
- Providing a favorable working environment:
- Creating flexible schedules of work, enabling each employee to organize time independently.
- Prompt feedback through one-on-one communications allowed for an understanding of needs and support in the necessary way.
These activities helped management handle increased workloads, enhance team engagement and motivation, and ensure productive and efficient work in an online format.
Development Approaches
We applied certain development techniques to the project to optimize workflow and speed up tasks, which was critical to meeting deadlines.
Parallel work. Special attention was paid to parallel work in the development team within one task. For example, one developer could work on domain model creation while another developer worked on the user interface. A third team member could work on test development and date generation. This approach allowed us to use resources efficiently and speed up the development process because each team member could simultaneously work on a specific part of the project without waiting for others to finish their work. To speed up the development of the interface, we used so-called “skeletons” of classes – basic, temporary structures that allowed us to start working on the user interface before the domain model was completely ready. To improve coordination of developers’ work and manage dependencies between different parts of the system, we actively used UML diagrams. These tools allowed us to visualize the structure and interaction of the project components. Especially important was the use of these diagrams to visualize business logic, which facilitated the development of functionality that precisely meets business requirements. Also, the availability of clearly structured UML class diagrams simplified the onboarding process for new developers and facilitated the rapid creation of technical documentation for the project, which reduced the time required for onboarding new team members.
Automated testing. Additional attention was paid to automated testing, which became a key element of regression control and overall product testing. The developed testing strategy included unit tests, integration tests, system tests, and UI tests, which were developed for additional regression control of the application user interface. All types of tests ran overnight, and their results were available for the team in the morning, which provided timely notification of possible problems and thus allowed the team to respond promptly to the detected defects. To speed up the testing process and improve the quality of testing new features, each development task was supplemented with subtasks for test data generation. This allowed automating the preparation of test scenarios, significantly reducing the time for testing and detecting bugs. This approach allowed for early detection and quick elimination of bugs, reducing risks and potential problems when implementing the system. These measures not only increased the efficiency of testing, but also significantly improved overall reliability of the product, minimizing the number of bugs in the released version and speeding up the development process.
Result
The first version of the product was successfully accepted by the customer, which confirmed our ability to work under time constraints with high quality and security requirements. This success not only strengthened our position on the market, but also gave us valuable feedback for further improvements. Inspired by the initial success and feedback from the customer, we made a number of improvements to the product, which led to the development of a second version. This version of the product was successfully introduced to another customer who appreciated the improvements and innovations implemented.
Technologies
Databases: MS SQL
Backend: Java 17, Groovy, WebSwing, REST API, Active MQ, Elasticsearch, Logstash, Kibana, Alfresco
Test Automation: JUnit, QFTest
CI/CD and DevOps: Jenkins, Maven, Azure Devops, Ansible, Kubernetes, Docker
Software Engineering and Management Tools: Git, BitBucket, Jira