Contents
Before large construction projects can begin, much work is completed behind the scenes using construction planning software to work out the details on 3D design, budgeting, timelines, and workforces. For our client, a construction planning company, this digital foundation had to be just as strong and reliable as the real-world projects their clients brought to life.
But as their platform grew, so did the cracks beneath it.
In the beginning, it was easy to manage. Over time, this changed. Deployments were slow and manual, and systems became more fragile. Furthermore, infrastructure costs kept rising. And with every new client environment added, the complexity only deepened.
The team knew their product had the power to shape massive industrial projects, but their infrastructure was starting to hold them back. That’s when they decided it was time for a change.
What does it really take to transform a growing, complex platform into one that can deploy updates faster, scale smoothly, and stay reliable under pressure?
Meet the Client
Our client provides construction planning software to major industrial projects. Their platform allows companies to plan everything before construction starts, using detailed 3D models, cost estimates, timelines, and workforce allocation.
In an industry where an error or delay may cost millions, their software allows teams to test, alter, and identify problems before arriving at the construction site, which is crucial.
As more customers utilized their software, more expectations began to arise. More customers meant managing more data and more environments. The platform had become vital to how major construction projects were planned and delivered.
But with this growth came new challenges that the existing system wasn’t built to handle.
The Tech The Client Came With
Even though the client’s platform initially provided them with a competitive advantage, the underlying technology was beginning to show its age.
The original architecture was built using a complex structure made entirely of virtual machines within Azure. To provide data isolation, the client cloned the entire environments for each customer, creating a hybrid architecture with single-tenant and multi-tenant setups. While the architecture worked for a small number of tenants, it quickly became unmanageable as the number of clients and services increased.
Every client, every new feature, every new service added an entirely new layer to the system.
The deployment processes the client utilized were entirely manual. The development team would prepare an update, and then it was up to the operations teams to execute the deployment. This added a level of risk to each deployment.
Testing was yet another area with significant weaknesses. Many of the code assessments were performed manually, which made it difficult to keep up with frequent code changes. Bugs and vulnerabilities could easily slip through unnoticed.
And then there was downtime. Virtual machines didn’t always perform consistently, leading to unexpected service disruptions. These interruptions didn’t just affect performance — they directly impacted the client’s business and made costs harder to predict.
The verdict was that the product had outgrown its architecture.
Our Solutions
We focused on rethinking how everything was built and delivered. Together with the client, we worked step by step to modernize their infrastructure, automate key processes, and bring more visibility and control into the system. Here’s what we did.
Rebuilding the Foundation, Starting with Containerization
The first step was making sure the platform was ready to move at all.
The client’s applications had been built to run on virtual machines. So before Kubernetes could even come into play, everything had to be carefully reworked. Our engineers started by repackaging each service, making sure it could run reliably in a containerized environment without breaking existing functionality.
Making the Shift from Windows to Linux
One of the key goals was to reduce costs and make the platform more flexible. The client’s infrastructure relied heavily on Windows, which meant ongoing licensing fees. Moving to Linux offered a more cost-effective alternative — but getting there wasn’t simple.
The client’s services had been built with Windows in mind, so running them on Linux wasn’t immediately possible. Instead of treating it as a quick switch, we approached it as a hands-on collaboration.
Our team worked closely with the client’s developers, diving into the codebase and making the changes needed to support Linux environments. Step by step, we adapted services, resolved compatibility issues, and ensured everything continued to run reliably. It took careful work, but the result was worth it. The client reduced licensing costs.
Establishing CI/CD
Another big goal was to speed up releases and remove the risks that came with manual deployments. So, we introduced automated CI/CD pipelines.
As a result, instead of relying on manual steps, every code change now moves through a structured flow, from build to testing to deployment, automatically. Once developers push updates, the system takes over, ensuring everything is tested and delivered in a consistent way. This shift made deployments faster, as well as more predictable and less stressful.
Bringing Everything into View
With the expansion of our platform and the migration of additional services to Kubernetes, the team required the capability to monitor activities throughout the entire system as they happened.
Before that, visibility was limited. Issues could go unnoticed, and understanding what was going wrong took time and effort. To solve this, our engineers introduced a unified observability setup.
We implemented Prometheus to collect key metrics, from resource usage and traffic to overall performance across containers and services. To top this off, the Grafana dashboards translated this data into a usable format.
Currently, our client’s team can proactively address system issues and assess the context and consequences of their decisions.
Building Confidence with Test Automation
Another important goal was to reduce the risk that came with frequent changes. The manual testing model was obsolete and created the potential for bugs and weaknesses to appear.
The solution was to implement automated testing throughout the entire development cycle.
As part of this process, we set up automated code analysis for every change, which helps us identify potential problems to resolve issues before they grow.
At the same time, we implemented automated functional testing. Now, every update goes through a series of checks to make sure existing features still work as expected. These tests run continuously, without slowing down the team.
With these systems in place, the client can move faster without sacrificing quality. Each release is backed by automated checks, giving the team more confidence in every change they make.
Results
The migration to the Kubernetes platform allowed the client to gain significant resource management functionality. Each service is able to provide the required amount of resources allocated, enhancing efficiency and simplifying management.
At first, the cloud costs did increase. But this wasn’t wasted spending; it was an investment in stability.
The reduction of service downtime allowed the real value of the system to be realised. Operational downtime, emergency fixes, and customer-facing service interruptions were all reduced.
On top of that, with automated pipelines in place, the client can now run over 250 deployments per month, releasing changes faster and with far less effort.
Conclusion
By rethinking the foundation, automating what used to be manual, and bringing clarity into a complex system, we helped the client improve their platform and change how their team builds, deploys, and operates.
Today, they can release new features and updates faster, scale with confidence, and rely on a system that supports their growth.
If your infrastructure is starting to slow you down, it might be time for a change. Contact us, and our team will help you create a system that actually supports your growth!

I am an IT professional with over 10 years of experience. My career trajectory is closely tied to strategic business development, sales expansion, and the structuring of marketing strategies.
Throughout my journey, I have successfully executed and applied numerous strategic approaches that have driven business growth and fortified competitive positions. An integral part of my experience lies in effective business process management, which, in turn, facilitated the adept coordination of cross-functional teams and the attainment of remarkable outcomes.
I take pride in my contributions to the IT sector’s advancement and look forward to exchanging experiences and ideas with professionals who share my passion for innovation and success.