Another project, in which JazzTeam engineers are participating, is an international B2B software platform for inventory and order management. It is intended for distributors and wholesalers, as well as for e-commerce. The basic configuration of the product includes:
The project includes several subprojects:
Stack: Java 7/8, Java Servlet & JSP, Apache Tomcat, MySQL, JDOM, REST API, XML/XSLT.
Frameworks: Avalon Framework, XML-RPC, dbPool, JasperReports, MyFaces, JavaMail, PD4ML, PayPal, Gdata, jQuery Mobile.
Architecture: Model-driven development, event-driven architecture, CI/CD.
Testing (integration and load): JUnit+own framework.
Infrastructure: AWS, Bitbucket, Jenkins, Liquibase, CloudWatch.
The history of the project goes back to the early 2000s. At that time, quite a successful architecture, based on XML modeling of business processes and entities, was designed. This architectural concept withstood the test of time, as well as scaling the product to millions of completed transactions and providing access to hundreds of customers.
JazzTeam engineers joined the project in 2019. By this time, numerous technical debts and shortcomings appeared in the project, which blocked the obvious advantages of the established architecture:
On this project, JazzTeam company acted simultaneously as:
In terms of the incremental evolution of the product’s functionality — JazzTeam engineers have developed and delivered dozens of new epics and user stories. At the same time, a deep refactoring of the existing code was carried out and the coverage of the developed functionality with tests (GUI autotests and unit tests) was provided.
In terms of consulting — partnership relations with the project stakeholders were established, the structure and processes in the development team were reorganized. Also, Agile development principles were implemented and maintained, and a transparent reporting process was provided (incl. financial).
In terms of closing the technical debts — a product version without the .NET layer was implemented. It allowed the team to focus on the Linux platform, thereby significantly reducing the cost of hosting and technical support. Complete CI/CD processes were implemented, which accelerated the frequency of product delivery and improved the quality of delivered functionality.
We have implemented a full-fledged QA phase (testing, quality assurance) in the life cycle of the project. Before JazzTeam came in, testing on the project was done spontaneously, with the role of QA performed by the developers themselves and one of the product owners.
JazzTeam representatives analyzed the current quality of product development, the composition and speed of the team and other criteria. Based on our findings, we advised the product owners to add several professional QA and QA Automation engineers from JazzTeam employees to the team. The offer was approved, and after a few months it became obvious how the quality of the product had improved.
The task estimation process (estimate) was implemented. We have introduced an analysis of the potential labor costs for each project task, which is mandatory for the developers. It requires them to break down their tasks into subtasks and take into account the risks (see below). The availability of labor cost estimates allows you to streamline the development planning process, and to make planning more transparent to all team members and stakeholders.
A risk analysis also occurs during the estimation of tasks. At the end, we get a reasoned estimate based on risk analysis results. It allows the product owners to see an objective picture of labor costs, take steps to possibly reduce risks and optimize development costs.
An Agile-transformed development process was implemented. We introduced agile development rituals that were missing on the project:
To perform automatic builds, regular quality checks and product deliveries, we implemented CI/CD. The project uses partial code generation from templates. The code generator was originally not optimized for automatic building of the project with Maven. The team did a deep refactoring of the project core to exclude manual building.
A framework for writing BlackBox-tests has also been created. These tests are written by the developers themselves and allow them to check the complex chains of actions of the system. While doing this, there is no need to dive deep into the internal structure of the code. Tests run as part of regular project builds: on schedule and on demand.
All new code and most changes to existing code are covered by Unit-tests. Legacy code is regularly refactored so that it can be covered by tests.
Complete and regular coverage of almost all system functionality by GUI-autotests. We have created a framework for quickly writing and supporting a lot of GUI-autotests at minimal cost.
The UI and usability of the product have been refreshed considerably – the users and stakeholders have been satisfied.