Cloud & Modernisation

Cloud Migration & Application Modernisation: Cloud Migration

We'd move your on-prem servers and hard-to-maintain legacy monoliths to the cloud with the risk managed through strangler-fig: rehost / replatform / refactor, containerisation, CI/CD, and observability.

A legacy application that has become hard to maintain, an on-prem server room running out of capacity, a large investment line item every time the hardware needs refreshing: this is a very common picture in the technology infrastructure of mid-to-large businesses in Turkey. A monolith that has grown over the years runs on a single server; the team that wrote it has long since dispersed, no one dares touch it, and even the smallest change takes weeks. Servers are ageing, UPS and cooling costs are piling up, and the backup strategy is at the "hopefully it works" level. To scale when demand rises, you have to order a new physical server and wait for months. On the infrastructure side of digital transformation, this is the first thing we touch: moving off on-prem and the old monolith into a cloud architecture that migrates gradually with managed risk, scales, is observable, and keeps cost under control.

The Cost of On-Prem plus Legacy Monolith plus Manual Operations

No one wants to touch the old monolith; adding a single field takes weeks, and every release turns into a risky manual night-time operation. The pace of change has nearly stopped.

The on-prem server room is out of capacity; ordering and installing a new physical server takes 2 to 3 months, demand spikes cannot be answered in time, and during a campaign or season peak the system crashes.

When the system goes down, 'what actually happened' is invisible. There is no central logging, no metrics, no alerting; problems are often discovered through a customer complaint, and the root cause is hunted for hours.

Hardware, licensing, electricity, cooling, UPS, and standby staff costs are fixed and high; resources are always paid for at full capacity regardless of real usage, and even servers sitting idle at night get billed.

The disaster recovery plan exists only on paper; backups are untested and there is a single location. A serious hardware failure puts hours, maybe days, of downtime and the risk of irreversible data loss on the table.

Our Approach

On a cloud migration project we'd start not by writing code but by building a real inventory of the existing system. Which applications are running, how they depend on each other, which databases exist, what the real traffic pattern is. Every step taken without mapping these produces surprises later. From that inventory we'd make a decision for each workload within the 6R framework: rehost (move as-is), replatform (improve with small touches), refactor (renew the architecture), repurchase (move to off-the-shelf SaaS), retain (keep on-prem for now), or retire (shut it down). We do not have to refactor every application; in most cases the right call is to rehost quickly and invest where the real bottleneck is. We decide which application deserves which treatment based on a balance of business value and risk.

The second critical decision is gradual migration with strangler-fig. The "big bang" projects that try to turn an old monolith into microservices overnight are the most common failure, in Turkey as everywhere. Instead, we'd put an API gateway / reverse proxy in front of the monolith, then extract one business capability at a time (such as billing, user management, reporting) into a separate service and route traffic over piece by piece. The old code stays as a fallback until the extracted piece runs stably. This keeps every step small, testable, and reversible; the business is never locked into a rewrite that drags on for months. The beauty of this approach is that you see value in production from the first week. You do not wait for the whole system to be finished.

The third layer is containerisation and scalability. We'd containerise the applications with Docker and run them on Kubernetes, so the "works on my machine" problem disappears and deployment is identical in every environment. With Kubernetes HPA (Horizontal Pod Autoscaler) it scales out automatically when load rises and scales back down at low traffic: you pay for real usage instead of renting a fixed large server. We manage the entire infrastructure as code with Terraform (IaC); every resource becomes versioned, reviewable, and reproducible, and there are no more "hand-built servers nobody understands". We'd choose between AWS, Azure, and GCP together with you, based on your existing capability, data residency requirements, and cost profile.

The final layer is CI/CD, observability, and safe deployment. Every change is automatically tested and deployed with GitHub Actions or GitLab CI; instead of risky manual night-time releases, you get small and frequent deployments during the day. We collect metrics with Prometheus + Grafana and distributed traces with OpenTelemetry; which services a request passed through and where it slowed down become clear. For going live we use blue-green or canary deploy: we open traffic to the new version first at 5 percent, then 25 percent if there is no issue, then full, and on any mishap we can roll back to the old version within seconds. Our goal: deployment should be an ordinary, boring operation, not a night-time event where everyone holds their breath.

Process

01

Inventory & 6R Assessment

We map the existing applications, dependencies, databases, and traffic pattern. For each workload we make a rehost / replatform / refactor / repurchase / retain / retire decision based on a balance of business value and risk.

02

Infrastructure Foundation (IaC + Landing Zone)

We set up the landing zone, networking, identity, security, and cost tags on AWS / Azure / GCP with Terraform. Every resource is versioned as code, leaving no hand-built mystery servers behind.

03

Containerisation & Pilot Migration

Applications are containerised with Docker and moved onto Kubernetes. For the database, live sync via DMS + CDC; a low-risk service is migrated to the cloud as a pilot and validated.

04

Gradual Modernisation with Strangler-Fig

Behind an API gateway, services are extracted from the monolith piece by piece and traffic is routed gradually. Every step is small, testable, and reversible; value is seen in production from the first week.

05

CI/CD + Observability + Handover

Automated deployment with GitHub Actions / GitLab CI, monitoring with Prometheus + Grafana + OpenTelemetry, blue-green / canary deploy. Handover is completed with team training, runbooks, and hyper-care.

Our Preferred Technology Stack

We typically reach for the following, adapted per project to your existing stack, cloud provider preference, and workload profile.

Teknik Stack
Docker (containerisation)Kubernetes (orchestration + HPA)AWS / Azure / GCPTerraform (IaC)GitHub Actions / GitLab CIPrometheus + Grafana (metrics)OpenTelemetry (distributed tracing)PostgreSQL (managed database)Redis (cache + queue)Strangler-fig patternBlue-green / canary deployAWS DMS / pgloader (data migration)

Sıkça Sorulan Sorular

No, our goal is a zero-downtime or minimal-downtime migration. We first move the existing system to the cloud as-is (rehost / lift-and-shift), so application behaviour does not change and it keeps running. On the database side we take a full initial copy using tools like AWS DMS, Azure DMS, or pgloader, then keep streaming changes from the live system to the new environment with CDC (change data capture). At cutover, traffic is switched to the new environment at the DNS / load balancer level; if something goes wrong, we can fall back to the old environment instantly. For critical services we open traffic gradually with blue-green or canary deploy: first 5 percent, then 25 percent, then full. Real downtime is typically limited to a few minutes of DNS propagation.

Let's Talk About Your Cloud Migration and Modernisation

Book a 15-to-30-minute discovery call, free, no commitment. We learn your current infrastructure, application stack, and workload profile, then come back with a migration strategy, an architectural direction, and a clear cost range.