The client’s software system had been built years before; its architecture had become legacy and the technologies used obsolete. The client asked INSART to overcome the following challenges:
- Analyze the system to compile a list of improvements needed to accelerate the system’s development and facilitate maintenance.
- Update technologies and language versions to improve the system’s stability and performance.
- Optimize the database to make the system support a wide range of databases to be exploited by the system users.
- Provide further software development of the system.
Analyze the system
Business value: The existing system didn’t meet the needs of rapid technological progress, which led to poor performance and complicated maintenance. Deep analysis of the system’s architecture and source code revealed the problems causing the performance and maintenance issues.
Details: The analysis was provided by INSART’s expert, who had in-depth knowledge in software architecture and enterprise systems.
Result: A list of required improvements was prepared. The system already provided a number of services and had existing corporate users, so its architecture could not be significantly changed. INSART suggested that the system reengineering include the following changes:
- Upgrade the source code language version to facilitate further development.
- Update the technologies used to improve the system performance, scalability, and stability.
- Optimize the database used and the logic of working with the database.
Update technologies and language versions
Business value: The language version used was poorly maintained, and its libraries didn’t allow the easy addition of new features. Using new technologies instead of the aging ones would make the system cross-browsing, and improve its performance, security, and usability.
Details: To retain the system’s operability, INSART created a local replication of it and used this as the groundwork for all future changes.
Originally, the system was developed as a Java Enterprise solution. The INSART team upgraded the language version in two stages: from Java 5 to Java 6, and then to Java 7. To facilitate development, we used the Spring framework instead of Java Enterprise and Servlets. This enabled us to use enterprise solutions, which can be deployed for various application servers without the need for additional code modifications.
Process: As a development methodology, elements of Scrum and Kanban were combined. The following Scrum elements were used: daily meetings, estimates, planning, releases. According to the Kanban methodology, developers selected tasks not from the whole scope, but from the list assigned to each of them by the team leader.
Result: Integrating the enterprise knowledge-management system with new technologies made it possible for INSART’s engineers to adapt it to today’s demands and requirements, and boost system performance and scalability. In addition, more than 400 bugs were fixed; these bugs concerned system performance, and mistakes within the servers and on the client-side. The system work was stabilized, and the number of regressions was significantly reduced since, due to changes in the development process, the code quality was improved.
Optimize the database
Business value: The system users exploited different databases, and new and prospective users might have other databases. The system had to support all of them, so the system database required optimization of the schemes to simplify this support.
Details: Selection of databases depends on the end-users’ requirements: the databases used by the end-users had to be supported by the system. When the INSART team started working on the project, the OracleDB and MySQL databases were already in use. While the development was being performed new users were integrating with the system, and this required the system to support the MS SQL database. As a result of the INSART team’s work, any relative database can now be added to the list of supported databases. The system design does not allow for support of nonrelative databases.
Result: Reengineering databases enabled the INSART team to redesign the data structure, which contained about 450 schemes: they added some columns and removed others, and cut all essentials that had been designed incorrectly, adding improved essentials instead. Reorganizing the data structure allowed us to increase performance, simplify data processing, and improve data security.
Provide further software development
Business value: As the system was updated, its rapid further development became possible. New features could make the system more useful for existing users and more attractive for prospective users.
Details: The following business processes were added or updated:
- Notification tools and Growl messages: The system sends a notification of every action via email or Growl message.
- New modules for working with charts: Existing modules were modified. A new flowchart module was created from scratch. The data preparation process and the engine for building charts were improved, and the charts were made dynamic.
- Creating and exporting report tools: The new tools allow the customer to customize reports and export them in the most convenient form.
- Customization possibilities: Every user can customize the system according to various activity-specific rules and initiatives to be implemented and used corporationwide.
- Multimedia tools: Users can customize the list of allowed file formats by adding new ones. The process of uploading multimedia files has been significantly modified.
- Log system: The modified log system logs all changes at run-time. Error, fault, and debug logs can be customized for each module.
Process: As the project was being developed, the number of developers increased from one full-stack developer to a dedicated team containing the following experts:
- One front-end developer;
- One back-end developer;
- Four full-stack developers.
As a development methodology, elements of Scrum and Kanban were combined. The following Scrum elements were used: daily meetings, estimates, planning, releases. Retrospectives and iterations were used, though in a different way than is described in the Ideal Scrum:
- Retrospectives were conducted after each release;
- Iterations were only conducted during the integration projects.
The system was released once a year. For each release, a certain time and budget allocation were planned for every end-client in order to implement new features on the end-client’s side and teach the client’s representatives how the features can and should be used.
Results: During development the INSART team suggested numerous enhancements, and more than 60% of these were accepted by the customer; ideas concerning functionality were always coordinated with the customer, while technological enhancements were decided by the INSART team. In addition, we significantly optimized the development process through the whole distributed team, improved the overall team discipline (review board, issue management), worked out the principles so that everyone knows how they should work and for what they are responsible. As a result, the development process became transparent and in case of any failures it is obvious where the fault lies.
The project was developed using the following set of technologies:
- Programming language: Java 7
- Framework: Spring (MVC, ioC Container, Dependency Injection, RMI, JDBC)
- ORM: Hibernate
- Security: Apache Shiro
- Server-side: JSP, Servlets; Tiles (deprecated)
- Databases: OracleDB, MySQL, MS SQL
- Web servers/app servers: Tomcat, WebShpere, WebLogic
- Cluster, distributed caches: Echcache
- Cloud solution: Amazon
- Continuous integration tool: Jenkins
- QA tools: UnitTests, Selenium Tests
- Code review: Review Board