POS Platform — AWS Managed Hosting
A UK client operating a point-of-sale management platform needed it moved onto AWS and kept running afterwards. We designed and delivered a mixed estate — Windows Server for the {{TODO: which components run on Windows, e.g. .NET POS services and reporting}} tier, Linux for the {{TODO: which components run on Linux, e.g. API and integration services}} tier — backed by PostgreSQL on Amazon RDS, then stayed on as the operations team: patching, backups, monitoring, and day-to-day server management under an ongoing support agreement.
The situation
The platform was running on {{TODO: where it ran before — e.g. on-prem servers, a single co-located host, another provider's VPS}}, and the client had no infrastructure team of their own. The application could not simply be lifted onto one operating system: the {{TODO: Windows-bound component}} tier depends on Windows Server, while the {{TODO: Linux-bound component}} tier is Linux-native, so any target platform had to carry both and let them talk to each other and to one shared database. POS is unforgiving about downtime — {{TODO: business constraint, e.g. tills across N sites transact during trading hours}} — so the migration needed a cutover plan rather than a maintenance window, and the client needed someone to own the estate afterwards rather than being handed credentials and a runbook.
The platform runs on AWS under a managed support agreement, with {{TODO: headline outcome — e.g. defined RPO/RTO and a monthly patch cycle}}.
How we worked
Stabilise delivery early, then build the foundation that keeps it stable once we hand it back.
Inventoried every component of the running platform — {{TODO: list the services, their OS, and what talks to what}} — then mapped each one to a target on AWS and sequenced the move so dependencies migrated ahead of the things that call them. Produced a cutover plan with a rollback path at each step.
Built a VPC in {{TODO: region, e.g. eu-west-2 (London)}} with public and private subnets across {{TODO: N}} availability zones, NAT for outbound traffic from private subnets, and security groups scoped per tier so the Windows, Linux, and database layers only reach what they need. Administrative access runs through {{TODO: access method, e.g. SSM Session Manager / a bastion}} rather than public RDP or SSH.
Provisioned Windows Server {{TODO: version}} instances for the {{TODO: component}} tier, joined to {{TODO: AD/domain arrangement, or 'standalone'}}, with {{TODO: how deploys reach these hosts}} handling application deployment. Licensing was {{TODO: license-included vs BYOL}}.
Deployed the {{TODO: component}} tier on {{TODO: distro and version}} behind {{TODO: load balancer arrangement, e.g. an ALB with TLS terminated at the edge}}, with {{TODO: deployment mechanism}} for releases and configuration held in {{TODO: config/secret store, e.g. SSM Parameter Store / Secrets Manager}}.
Migrated the platform database onto Amazon RDS for PostgreSQL {{TODO: version}}, sized at {{TODO: instance class and storage}}, with {{TODO: Multi-AZ or single-AZ}} for failover and automated backups retained for {{TODO: N}} days. The migration itself ran via {{TODO: method, e.g. DMS with change data capture / pg_dump during a low-traffic window}}, keeping the source live until the cutover was verified.
Put both tiers on a defined patch cycle — {{TODO: cadence and window, e.g. monthly, Sunday 02:00–05:00 UK}} — with instance-level backups via {{TODO: AWS Backup / snapshot schedule}} alongside the RDS automated backups. Restores are tested {{TODO: cadence}} against a scratch environment rather than assumed to work, and the recovery procedure is documented to an agreed {{TODO: RPO}} / {{TODO: RTO}}.
Instrumented both operating systems and the database with {{TODO: tooling, e.g. CloudWatch agent, custom metrics}}, covering host health, disk and memory headroom, RDS connections and replication state, and application-level checks on the POS endpoints. Alerts route to {{TODO: where alerts go, e.g. an on-call rota via PagerDuty / a shared channel}} with defined severities.
We run the estate rather than hand it over: patching, backup verification, capacity and cost review, certificate renewals, incident response within {{TODO: response SLA}}, and change work as the platform evolves. {{TODO: describe the support arrangement — hours of cover, ticketing route, review cadence}}.
Handover
Stack
Afterwards
Measured after handover, once the client's own team was running the system without us.
Tell us what you are trying to move, migrate or automate and we will reply within one business day with an honest read on the work — including the parts we think you should not do.
More engagements
Release lead time reduced by ~50% with fewer failed deploys.
Read the case study SaaS platform migrationImproved response times and reduced monthly compute spend.
Read the case study