In 2023, we partnered with an online retail business to migrate their infrastructure from Fly.io to AWS. The client had initially chosen Fly.io for its simplicity and rapid deployment during early development. As they prepared for their official launch and anticipated increased traffic, they wanted to ensure their infrastructure was production-ready. This meant moving to a more robust and scalable platform. Our objective was to deliver a seamless migration with minimal downtime, while enhancing performance, observability, environment consistency, and CI/CD pipelines.
The Client’s Challenge
The client operated a Phoenix LiveView application backed by a PostgreSQL database on Fly.io, with two environments—staging and production—and several integrated third-party services. Fly.io had supported rapid iteration during development, but as the team prepared for their production launch, they wanted greater confidence in their infrastructure. In particular, they sought advanced monitoring capabilities, fine-grained networking controls, and mature tooling for continuous integration and deployment—features that AWS could provide out of the box.
Our Approach & Solution
To ensure a smooth transition, we followed a structured migration plan:
-
Assessment & Strategy Development: We began by thoroughly analysing the client’s existing infrastructure to understand dependencies, third-party integrations, version mismatches, and other technical requirements. As part of this phase, we aimed to reproduce the entire setup locally—as we always do—to validate assumptions and catch potential issues early. We also worked closely with their team to lift any blockers as they came up, ensuring steady progress throughout the migration.
-
Infrastructure Preparation & Deployment: With the migration strategy in place, we built a robust and scalable AWS architecture using infrastructure-as-code principles. Defining AWS resources with Terraform ensured consistency across environments and enabled full environment reproducibility and disposability.
Recognising the client’s need for improved DevOps practices, we implemented both automated and manual deployment workflows—providing flexibility while ensuring reliable, repeatable releases. For observability, the client was already using Sentry for logging and monitoring, so we opted to build on top of that. We extended their existing setup by enabling additional metrics, helping the team stay within familiar tools while gaining deeper visibility into their system’s performance.
-
Data Migration & Application Transition: Migrating the client’s PostgreSQL database wasn’t a critical risk at this stage as most users were still family and friends. We performed a straightforward database dump and restored it in the new environment. After importing the data, we updated the domain records to point to the new AWS-hosted infrastructure
-
Cost Planning & Optimisation: With the new infrastructure and application successfully deployed on AWS, we focused on helping the client understand and manage their ongoing cloud costs. We worked together to optimise resource allocation for a scalable and cost-effective setup, while also providing clear ways to track and anticipate cost variations over time.
Results & Impact
The migration was completed successfully over the course of a few weeks, aligning with the client’s tight timeline for their official launch. Key outcomes included:
- Environment Reproducibility: With infrastructure defined in Terraform, the client can now spin up identical environments—staging or production—with confidence and ease.
- CI/CD Foundations: Deployment workflows were implemented to support both automated and manual releases. This gave the team flexibility while improving reliability and the overall developer experience.
- Cost Awareness: We helped the client better understand their cloud spend, enabling them to track cost changes and right-size infrastructure for their needs.
- Launch Readiness: By the end of the engagement, their Phoenix application was live on AWS, supported by better observability, structured deployments, and a scalable setup.
This migration highlights how even early-stage teams can benefit from AWS’s flexibility and mature tooling. If you’re preparing for a launch and want your infrastructure to grow with you, we can help you get there.