The challenge
Adstream’s product, an advertising management platform, was growing and they aimed to optimize the delivery time of future iterations. They also needed to modernize the legacy code while keeping their platform operational. Any downtime, or service interruptions could affect their clients, such as marketing agencies from Australia, Japan, Europe, and the USA who were using this platform 24/7.
With the limited number of experienced Scala developers onboard, Adstream was unable to achieve their required standard of optimization works. That is why they decided to find a technology partner.
The solution
Our engineers already worked with Adstream on a successful project that involved Scala language. Impressed with their expertise and work ethic, Adstream trusted them to lead the optimization efforts.
VirtusLab’s approach was to avoid completely refactoring the functioning platform to maintain service availability for clients and to prevent detachment from user feedback. Instead, their cooperation with Adstream focused on five key areas:
- The development process
- Planning
- Implementation
- Live releases
- Reacting to production problems
Every live release brought about a series of incremental changes to the Adstream platform. Also, each update was integrated with a continuous feedback loop.
VirtusLab introduced data-driven project management to the implementation process. It added quarterly goals that stakeholders use to measure the progress of each update.
A large monolithic service has been split into smaller ones. Each part has its own defined boundaries to reduce the dependency between different teams. VirtusLab automated and optimized several processes, including:
- End-to-end (e2e) testing
- Unit and integration tests
- Automatic generation of release notes
- Integration of custom monitoring into the release process
- Streamlined rollbacks to address issues swiftly
Now, one team works on their service without waiting for another team. It makes the release process smoother and faster as the smaller services are being updated quicker and more frequently.
The results
In two years VirtusLab transformed the software implementation process at Adstream. Splitting monolithic service into two pieces made the platform easier to manage, faster to update, and less reliant on coordination between multiple teams. It gave Adstream a more efficient release cycle for new software updates.
With each quarter the number of live releases increased, without disrupting clients. The delivery time for releases went from three months to two weeks. Adstream also noticed:
- Enhanced feedback loops, allowing for quicker identification and resolution of issues.
- Improved platform resilience, with greater tolerance for potential issues and team changes.
- Increased system performance, leading to swifter and more efficient operation.
- Better-defined responsibilities among teams, fostering clarity in duties.
- Reduction in work in progress, optimizing team focus and productivity.
Tech stack
Languages: Scala
Containerization: Docker
Cloud services: AWS
Frontend frameworks: Angular, React
Backend frameworks: NodeJS
Databases: MongoDB, ElasticSearch
Automation: Ansible