MySQL upgrade that cut about $10k a year in AWS costs

An outdated MySQL 5.7 database was quietly adding about $900 a month in AWS Extended Support fees. We planned and ran a safe upgrade to 8.0 around a live legacy application.

−$900 / month AWS Extended Support fees removed
5.7 → 8.0 MySQL upgraded in place on RDS

A medical equipment company runs its day-to-day operations on an internal legacy application hosted on AWS. The system could not simply be rewritten or paused — but its infrastructure had a clear cost leak.

The challenge

Part of the setup depended on MySQL 5.7 on RDS. AWS had moved that version onto paid Extended Support, which added roughly $900 every month for standing still.

A note on the fee itself, because many teams only discover it on an AWS bill: when a database version reaches the end of its standard support, Amazon RDS does not switch it off — it moves it onto Extended Support and starts charging extra for every hour it keeps running. For MySQL 5.7 this began in early 2024, and the same mechanism applies to other engines such as PostgreSQL. The fee is billed per vCPU-hour, so it scales with the size of your instances — and AWS roughly triples the rate after the first two years. Nothing about your application improves; you simply pay more each month until the database is upgraded.

The challenge was not the upgrade command — it was doing the upgrade safely around a legacy application with real users, real workflows and behaviour nobody wanted to break.

What we did

We treated it as a small modernisation project rather than a version bump — and the rehearsal proved that right:

  • Reviewed the AWS and RDS setup and confirmed the Extended Support fees could be removed entirely by upgrading.
  • Cloned the RDS instance and rehearsed the whole upgrade on a staging copy before touching production.
  • The rehearsal caught a real blocker: an older application still ran alongside its newer replacement, and it depended on database constructs that failed on the upgraded MySQL. The old app simply could not work with 8.0 — quite possibly the reason the previous vendor never upgraded at all.
  • Instead of forcing the upgrade through, we dedicated a sprint to bringing the newer application to full feature parity, gave the client’s team a couple of weeks to move across completely, and then stopped the old application — stopped, not deleted, while we watched that nothing was missing.
  • With the old application retired, we cloned and upgraded the staging database once more, tested everything together, took a fresh backup, and upgraded production overnight — the system is internal and sits unused at night, so the risk window was minimal and a rollback path stayed ready.

Around the infrastructure work we kept supporting the application itself — issue investigation, quote and PDF fixes, shipping logic and other operational maintenance.

The outcome

About $900 a month in recurring AWS fees disappeared — roughly $10k a year — from one targeted piece of infrastructure work, with no rewrite and no disruption to the business.

Existing applications often hide recurring costs like this. Finding them is part of what a System Risk Check is for, and removing them safely is what our modernisation and upgrade work looks like.

More case studies

Laravel maintenance for two established travel websites

Maintenance & Support Laravel maintenance for two established travel websites

How we took ongoing technical ownership of two live Laravel travel websites — cutting a key search page from about 17 seconds to about 1 second along the way.

Stabilising an inherited Laravel platform nobody dared to restart

Maintenance & Support Stabilising an inherited Laravel platform nobody dared to restart

A half-finished Typo3-to-Laravel migration, a 15 GB repository and a production server nobody dared to reboot. Audit first — then backups, security fixes, Docker and ~500 tests.

SAP–Shopify sync rebuilt from legacy PHP to Symfony

Modernisation & Upgrades SAP–Shopify sync rebuilt from legacy PHP to Symfony

Six storefronts depended on a fragile black-box sync with SAP. We took it over and replaced it step by step with a Symfony middleware — without stopping the business.

Culinary events platform: years of maintenance and a UK launch

Maintenance & Support Culinary events platform: years of maintenance and a UK launch

We keep a Dutch culinary events platform stable through high-traffic ticket sales — and refactored its legacy Symfony core so the same system could launch in the UK.

300,000-SKU product catalogue: instant search and stable syncs

Maintenance & Support 300,000-SKU product catalogue: instant search and stable syncs

A custom PHP product information system struggled under 300k+ SKUs: slow searches and fragile Shopify and Shopware syncs. We modernised it in place — no rewrite.

REST API on a legacy Symfony app for a headless React frontend

Modernisation & Upgrades REST API on a legacy Symfony app for a headless React frontend

Instead of rewriting a Symfony 3.4 events platform, we exposed its existing business logic through 20+ REST endpoints — unblocking a full React migration at a fraction of rewrite cost.

From no-code prototype to a production SaaS platform

Product Development From no-code prototype to a production SaaS platform

A validated MVP built on Make, Bubble and Replit had hit its ceiling. We re-platformed it into a multi-tenant Symfony + React SaaS with a grounded AI content engine.

An AI legal-training MVP, live in about two weeks

Product Development An AI legal-training MVP, live in about two weeks

Law students practise argumentation against AI judge personas grounded in real legal documents. We designed and shipped the production-ready MVP in roughly two weeks.

Keeping a Symfony 1 / PHP 5.4 website safely in business

Maintenance & Support Keeping a Symfony 1 / PHP 5.4 website safely in business

A property website on Symfony 1 and PHP 5.4 still earned its keep. We maintain it carefully — SEO updates, feeds, cache issues — and brought production changes back under Git control.

The outage that wasn’t the application: a Route 53 DNS story

Rescue & Incident Response The outage that wasn’t the application: a Route 53 DNS story

Internal business systems stopped resolving even though the servers were healthy. We traced the outage layer by layer to incomplete Route 53 delegation and restored access.

Technical SEO cleanup for two Laravel travel websites

Maintenance & Support Technical SEO cleanup for two Laravel travel websites

After a difficult migration history, two travel websites had canonical, sitemap, redirect and indexation problems. We cleaned up the technical foundation as part of ongoing maintenance.

A real-time crypto signals SaaS on Symfony and ClickHouse

Product Development A real-time crypto signals SaaS on Symfony and ClickHouse

Tick-by-tick market data from major exchanges, analysed and delivered as trading signals in under half a second — through a web dashboard and a Telegram bot.

Monetising AI chatbots in WordPress — with no user accounts

Product Development Monetising AI chatbots in WordPress — with no user accounts

Five AI personas, a freemium paywall and Nordic Swish payments — built as a custom WordPress plugin that charges users without ever asking them to register.

industry

Medical equipment

tech stack

AWS RDS, MySQL 5.7 → 8.0

service

Modernisation & Upgrades

system risk check

Want results like these for your application?

Start with a System Risk Check — a fixed-price technical audit of your application with a written, prioritised report. The report is yours, whatever you decide next.