Provided services
Client
Cost management solution provider, the Netherlands.
Product
An application for estimating and managing the project implementation cost in the oil and gas and energy spheres allowing to manage costs within a project timeframe and budget, perform in-depth analysis of projects, compare estimates with benchmark projects and industry standards. The company’s clients using this application are large industrial corporations.
Business challenges
For the convenience and satisfaction of needs of clients using the company’s software, it was necessary to develop and implement a multiuser mode that allows several users to open and edit the same document simultaneously. However, the task of adding this component was non-trivial and complex: the system had a huge amount of the legacy code, so the implementation of new functionality required serious re-engineering with the use of a separate framework.
JazzTeam specialists took over the implementation of this framework, which was a definite technological challenge for them: it was necessary to master a large volume of the codebase without help from the customer’s team, to apply experience in R&D and propose an architectural solution, and implement a new framework in the system’s legacy code. The second major challenge was the problem of the long and difficult involvement of new developers in the project because of the product’s features.
Product’s technological features
- The system had a huge amount of the legacy code (more than 50,000 classes).
- It was necessary to apply the newly developed framework to the already existing functionality.
- After adding the new functionality, the process of transferring the system to the Web should be started.
Project features
- Ambiguity of requirements, work on which required constant close interaction with the customer’s team and mutual adoption of the best and most acceptable solutions.
- Working in a distributed team environment, constant synchronization with the customer’s specialists.
- Long project duration (more than 4 years).
-
1Researching (R&D) similar ways to find a solution to the task Developing a multiuser mode architecture Designing and prototyping the framework architecture
-
2Implementing and applying the multiuser mode framework Creating the framework using OOP principles, design patterns, and implementation of mandatory Unit testing Moving the application from pessimistic to optimistic locking for simultaneous work of multiple users Re-engineering the system’s Ul part, legacy code refactoring
-
3System quality assurance Introducing mandatory code reviews Creating test documentation in the form of checklists Expanding the manual testers team and involving them in testing Creating a training reference project, documenting the team’s experience
-
4Working according to Agile methodologies Optimization of the planning process, regular retrospectives and weekly demos with the customer
-
5Optimization of new employees immersion in the project Creating a training reference project, documenting the team’s experience Introducing the Mentor Hour practice for quick and successful immersion into a real project
-
The application's multiuser mode was implemented in time
-
All stages of user acceptance testing were successfully completed
-
The implementation of advanced functionality allowed the customer to migrate the system from the desktop to the web infrastructure
-
A stable team was formed
-
Prompt immersion in the project with a large volume of the legacy code
Approaches and solutions
- Researching similar ways and tools to find a solution to the task. At this stage, JazzTeam specialists formed visions for a new architectural solution for implementing the multiuser mode. In the process of work, such engineering practices as design and prototyping were successfully applied. The created diagrams and prototypes were discussed with the customer, approved, and modified, if necessary.
- Implementing and applying the multiuser mode framework:
- In the creation of the framework we used the OOP principles and design patterns. Also, all developed functionality was covered with Unit tests to ensure its stable operation.
- JazzTeam specialists moved the application from pessimistic locking to optimistic locking for simultaneous work of several users, added three new locking levels, and implemented conflict resolution through the Last Write Wins strategy.
- Implementation of the framework into the existing application. For the implementation of the multiuser mode, a part of the software was re-engineered. The system’s UI had been built within a closed library, which made debugging much more difficult. While working on the tasks, engineers found that after the framework had been implemented many components of the application didn’t work as originally planned. Some parts of the legacy code were deleted and rewritten from scratch. All work performed as part of refactoring was coordinated with the customer. In the process, the customer helped and provided technical advice and assistance to the JazzTeam developers. Important architectural decisions on product development were made jointly.
- Quality assurance and modification of the manual testing process. Initially, the project had virtually no testing base: there was only generalized documentation and 14 test scenarios. Over time, during knowledge accumulation, JazzTeam QA engineer created test documentation, namely, checklists for regression testing. Each item on the checklist had a link to test cases to verify the multiuser mode. To keep track of dependencies between the system’s modules, we created tables, which helped to track them easily and not to forget them during verification. Also, during the work on the framework, we expanded the testing team and introduced a mandatory code review.
- Working according to Agile methodologies. JazzTeam specialists participated in establishing Agile practice on the project: optimized the planning process, introduced the professional use of Jira, regular retrospectives, and weekly demos with the customer. The Scrum approach to project management, strong management, and clear processes allowed the team to sufficiently deal with the existing code, which had been created over many years, independently and within a short time.
- Optimization of new employees immersion in the project. A huge codebase made the process of immersing new employees in the project rather long and labor-consuming. To optimize it, we applied the following measures:
- We created a training reference project, the process of work on which was identical to that of the main project. With the reference project, a new developer can get acquainted with the basic technologies and tools that will be useful to him/her on a real project (Java Swing, Multithreading, ActiveMQ, Multi-user Framework, Lock system). The essence of the reference project is to develop a small application using all above-mentioned technologies and tools. In addition to creating the application itself, during the reference project execution, an engineer also performs other tasks, such as creating diagrams, writing Unit tests, implementing Continuous Integration, and code reviews by more experienced developers. Also, the reference project processes follow all the basic Scrum artifacts and meetings.
- Implementation of the Mentor Hour practice. After the successful completion of the reference project, a new developer begins combat missions. For successful immersion of engineers in the project we applied the Mentor Hour practice — meetings during which new developers ask questions about things they find difficult, and a more experienced developer answers them. These communications are recorded. Thus, in the future, new developers will be able to get answers to their questions by watching the video, rather than taking up the time of more experienced developers.
- Documenting the team’s experience in creating the solution in Confluence.
- Preparing detailed documentation on the implementation of the collaborative editing mechanism.
All of this allowed the team to maintain a consistently high pace of work throughout the entire cooperation period.
Results and achievements
- A multiuser framework was implemented successfully. As a result of this work, several users can simultaneously edit the document in real time. All stages of user acceptance testing were successfully completed. In solving this problem, JazzTeam specialists successfully applied an engineering architectural approach to system development and professional experience in re-engineering, working with CI/CD and Unit testing. Work on the project was built in accordance with the company’s practices of proactivity, decomposition of tasks and open discussion of all nuances and complexities of the project.
- The functionality implemented by our team allowed the customer to migrate the system from the desktop to the web infrastructure. The new functionality was issued in the new application release. Now the application is actively developing: it is gradually migrating to the web, it is planned to develop REST API, as well as implement new functional modules of the app.
- During the creation and implementation of the framework we formed a stable team, the backbone of which has been engaged in this project for a very long time. Also, we optimized the process of new developers adaptation by creating and applying various practices (reference project, mentor hour), which have shown their high efficiency. New developers are now adapting much faster, as they initially learn the project’s technologies, tools, and engineering practices in more comfortable conditions.
- JazzTeam specialists immersed in the project with a large volume of the legacy code in a short time without the need for the additional knowledge transfer and sessions at the customer’s office, collaboration via video conferences was enough. We researched the problem as thoroughly as possible, developed a new framework for the multiuser mode, and consistently implemented it in the project for several years successfully adopting new technologies to almost the entire codebase.