Project summary
The project represents a system for telecommunications data processing via dedicated protocols over TCP/IP stack. It consists of various products that interact closely with each other and are designed to receive, transcode and store metadata and content. Users can quickly get the necessary information about the content: duration, creation time, source, etc., as well as play and analyze the content.
The essence of the project is to make it possible for a distributed team to delve into the specifics of the work of this ecosystem within a short time, as well as identify the most problematic areas, develop a plan on how to expand the functionality, fix critical bugs, and implement planned changes on time.
The products that make up the described system have a large codebase, complex integration logic and multiple cases for working with various types of data with many combinations.
Technical description of the project
The system is aimed at processing and encoding telecommunications data. Data can be conditionally divided into service data (data source, time, etc.) and the content itself. We were focused on the following three main components that interact with each other.
Primary telecommunications data processing component
Its purpose is to receive packets (data blocks), parse and decode them. Due to the implemented multithreading, the component can simultaneously process data from different sources, create requests for transcoding and saving service data in the database. Then the content gets to the next link of the system.
Transcoding component
More specifically, a media server. Its task is to process data according to certain algorithms. Next, you need to transcode data and analyze the content for additional information. After transcoding, the content is stored in the repository.
Telecommunications data visualization and management center
A complex subsystem that uses a large technology stack. It consists of a frontend and a large backend. The frontend is partly responsible for visualizing all information on incoming telecommunications data. The backend performs many functions: from working with the database to building entire web elements that are transferred to the frontend part. This is where the primary telecommunications data processing component sends requests to save metadata in the database. The path to the future file in the repository, where the content will be recorded later, is created here. All work with the database is concentrated in this component of the system. Also here is a module that can render and play content from the repository using technologies such as WebSocket and Java Script.
JazzTeam responsibilities
- To organize the coordinated work of a distributed team (development, test automation, manual QA, DevOps engineers).
- To learn how apps, codebase work.
- To test the operation of the existing solution, cover applications with automated tests implemented in the Continuous Integration infrastructure.
- To analyze user cases and based on them provide the customer with a decomposed plan and estimations.
- To implement new functionality.
- To fix first-priority bugs.
- Refactoring.
- To expand the current documentation.
Technologies used
Backend Stack: Java 8, JSON, Spring, Gradle, GWT, JUnit, WebSocket.
Frontend Stack: GWT, HTML/CSS, JavaScript, D3.js, Canvas.
Infrastructure: Git, Bitbucket, Jira, Confluence, Jenkins, AWS, IntelliJ IDEA.
Frameworks: Apache Kafka, Docker, gRPC.
Test Automation libraries: Groovy + Java, Selenium WebDriver, Selenium Grid, ActiveMQ, TestNG, REST API.
Other libraries: Slf4j, Lombok.
Project features
The main feature of the project was a large amount of documentation. But unfortunately some documentation was outdated or missing. There was no clear description of the main cases and the logic of the system. We managed knowledge transfer. Our team had to delve into the project and understand what information was missing, arrange its receipt. While maintaining a focus on commercially important deliveries, it had to start the development of the system architecture and simultaneously work on product quality assurance.
Here is another one distinctive feature of the project. The team must have been highly qualified in solving various problems. System failures could be caused by bugs in the source code / functionality of the application, incorrect configuration of the servers and the third-party product that was integrated into the system.
Project results
- Stable work of a distributed team consisting of developers (backend and frontend), auto test and manual QA engineers, DevOps was organized.
- An iterative approach with monthly deliveries was implemented and is successfully applied on the project.
- The documentation was expanded.
- Many improvements were introduced in Continuous Integration / Continuous Delivery approaches.
Company’s achievements on the project
- Quick and effective dive into the subject area and technical details of the project in a very short time.
- To immerse new engineers in the project, a package of documents and a detailed video describing the system, its components and their interaction with each other were created. Using prepared videos, diagrams and guides, as well as being guided by knowledge transfer processes, all new employees were able to dive deep enough into the project and clearly understand the domain area of the product. This made it possible to significantly reduce the time of the initial immersion in the project. At the same time, we managed to keep the focus on production tasks.
- The new development team has the opportunity to carry out the entire range of preparatory activities independently and in the shortest possible time: from understanding the tasks and the domain area to setting up, launching and debugging the system.
- The customer received a specific plan for the qualitative improvement of all parts of the application containing specific deadlines for implementation.
- Under the leadership and with the active participation of the company’s leading architect, a plan for multi-stage refactoring of the system was developed and implemented. Improvements made it possible to increase the readability of the code and the speed of developing new functionality.