Webneuron
Representative Case Study — Cloud Migration

A cloud migration built for peak season, not the test plan

Cloud migration services applied to a retailer whose data centre could not absorb Black Friday: three commerce brands were moved to a cloud-native platform in waves, with autoscaling proven against replayed peak traffic before a single customer request was routed to it.

3

Commerce brands migrated in sequenced waves, none in a single cutover

11x

Peak-to-baseline traffic absorbed by autoscaling without manual intervention

44%

Reduction in annual infrastructure run cost after right-sizing

0

Unplanned outages during the first peak trading period after migration

The Challenge

The group ran three retail brands off a shared estate in two leased data centres. Capacity had been sized for peak, which meant the group paid all year for hardware it needed for roughly eleven days in November and December, and still ran out of headroom in two of the previous four peak seasons.

Scaling was a procurement exercise. Adding capacity took a quarter, so every peak plan was a forecast made in July and defended in December. When the forecast was wrong, the response was to disable features — personalisation, recommendations, live inventory — to protect checkout.

The three brands shared infrastructure but not architecture. A release for one brand required a change freeze across all three, because the blast radius of a bad deployment was the whole estate.

A prior lift-and-shift proposal had been costed and rejected. Moving the same architecture to rented compute would have preserved every scaling limitation while adding cloud pricing on top — a common way for cloud migration programmes to spend money without buying capability.

One data centre lease was expiring in nineteen months, which set the constraint that mattered most: the migration had a fixed end date that could not be renegotiated, and it ran straight through two peak trading seasons.

The objectives were: exit the expiring data centre inside the lease window, make capacity elastic rather than procured, decouple the three brands so releases stop being estate-wide events, hold or improve page performance at peak, and reduce annual run cost.

The Solution

The migration was sequenced by risk, and the sequence deliberately did not start with the most valuable brand. The smallest of the three moved first, which meant the platform, pipeline, runbooks, and on-call model were all exercised against real production traffic before the flagship brand went anywhere near them.

Each application was assessed individually rather than migrated wholesale. Stateless web and API tiers were containerised and moved largely as they were. Batch pricing and inventory jobs were re-architected as event-driven services, because those were the components that had actually broken during previous peaks. A small number of legacy systems with no viable cloud path stayed put, connected over a dedicated link, and were scheduled for replacement separately.

Session state and caching came out of the application tier and into managed services early. Until that was done, horizontal scaling was theoretical — instances could be added but traffic could not be freely distributed across them.

Autoscaling was validated the only way worth trusting: by replaying the previous year’s peak traffic profile against the new platform at full volume, then at one and a half times that volume, before any customer request was routed to it. The first two runs found configuration limits that would have caused an outage in December.

Cost control was engineered in during migration rather than reviewed afterwards. Right-sizing, scheduled scale-down of non-production environments, storage lifecycle policies, and committed-use pricing for the stable baseline were all in place before the final wave.

Each brand landed in its own account boundary with shared platform services underneath, which is what ended estate-wide change freezes. A release for one brand now carries a blast radius of one brand.

Architecture Highlights

The target was a cloud-native platform rather than a hosted copy of the data centre. Compute runs as containers on managed Kubernetes, with separate node pools for web, API, and batch workloads so a heavy overnight repricing run cannot compete with customer traffic for resources.
Autoscaling is driven by request latency and queue depth rather than CPU utilisation, which matters in commerce because the system is usually memory and I/O constrained before it is CPU constrained. Scale-out is deliberately faster than scale-in.
A content delivery network sits in front of everything, with cache rules tuned per content type. Product imagery, category pages, and static assets are served at the edge; only genuinely personalised and transactional requests reach the origin, which is what reduced origin load enough to make the peak numbers achievable.
Inventory and pricing updates were moved onto an event stream consumed independently by the storefront, the order system, and the analytics warehouse. Previously these ran as sequential batch jobs where a delay in one delayed all of them.
Each brand occupies its own cloud account with its own network boundary and its own deployment pipeline. Shared services — identity, secrets management, logging, observability, and the CDN configuration — live in a platform account managed centrally with infrastructure as code.
Payment card data was kept out of the migrated scope entirely through tokenisation at the edge, which kept PCI-DSS scope narrow and meant the migration did not require a full re-assessment of cardholder data environment boundaries.

Timeline

Weeks 1–10

Assessment and migration sequencing

Application-by-application assessment producing a per-component disposition: rehost, re-architect, replace, or retain. Sequencing set by risk, with the smallest brand first and the flagship last.

Months 3–7

Landing zone and first brand

Account structure, networking, identity, observability, and deployment pipelines built as code. The first brand migrated and operated through a full trading month before the next wave started.

Months 8–13

Peak validation and second wave

Previous peak traffic replayed at full and one-and-a-half times volume against the new platform. Configuration limits found and fixed, then the second brand migrated ahead of the trading season.

Months 14–18

Flagship migration and data centre exit

Flagship brand migrated after a proven peak, remaining workloads moved or retired, and the expiring data centre decommissioned inside the lease window.

Technology Stack

KubernetesDockerAWSTerraformAmazon CloudFrontApache KafkaPostgreSQLRedisNode.jsNext.jsGitHub ActionsOpenTelemetryGrafana

Everyone sells you a migration. What we needed was someone willing to replay last year peak against the new platform at one and a half times volume and tell us what broke. It broke twice. That is the whole reason December was quiet.

Group IT Director, A Multi-Brand Retail Group

Let's build the system your business will run on next.

Tell us where it hurts. We'll bring the architects, engineers, and delivery model to fix it — and scale it.