// Upgrades

Magento Upgrade Readiness: What to Check Before You Upgrade

Before you upgrade Magento, audit the blockers: unsupported versions, incompatible extensions, and how far your custom code has drifted from core. That drift, not the version jump, is what makes the estimate a lottery.

Before you upgrade Magento or Adobe Commerce, the most useful thing you can do is measure how far your store has drifted from core. Upgrade readiness is not about the version number - it is about the blockers hiding in your custom modules, unsupported extensions, patched core files and brittle integrations. Check those first and the estimate stops being a lottery; skip them and every quote is a guess that reality corrects at the worst possible moment.

Why the upgrade estimate feels like a lottery

A Magento upgrade is not a package-manager bump. A single minor version can change public APIs, deprecate methods, ship new database schema, tighten dependency injection and swap out third-party libraries. Whether any of that hurts depends entirely on how much of your store sits on top of core and how tightly it is coupled to internals that Adobe is free to change between releases.

Two stores on the same version can be a two-day job and a two-month job. The difference is readiness, and readiness is measurable before you commit a budget. That is the whole point of assessing it up front: you replace "we'll find out when it breaks" with a scoped, ordered list of work.

The upgrade-readiness checklist

These are the checks that decide whether an upgrade is boring or brutal. Run them before anyone touches composer.json.

CheckWhy it mattersRisk if skipped
Current vs. target version & EOL statusOlder starting points need more intermediate steps and compound API changesJumping past unsupported versions blind means untested schema and security gaps
Custom module inventory & code driftThe main cost driver - more custom code means more to reconcile with coreEstimate is a guess; hidden breakage surfaces mid-upgrade
Third-party extension compatibilityEach paid/community module must have a version that supports the targetA single unmaintained extension can block the whole upgrade
Core modifications & patchesEdited or patched core files are silently overwritten on upgradeBehaviour vanishes with no error; regressions in production
Data & schema migrationNew releases add/alter tables and declarative schemasetup:upgrade fails or corrupts data with no rollback
Integration & API contractsERP, PIM, WMS and payment flows depend on stable endpointsOrders, stock or payments break after go-live
Test coverage & QA scopeDetermines how much manual regression the upgrade needsUndetected regressions ship straight to customers
Rollback & release planAn upgrade that cannot be reverted is a bet, not a deploymentExtended downtime when something goes wrong at 2am

Code drift from core is the real cost driver

If you take one thing from this article: the number of custom modules and how far your code has drifted from core is what drives the cost, not the version jump itself. A near-vanilla store on supported extensions upgrades in days. A store with dozens of custom modules, preferences that rewrite core classes, plugins stacked on deprecated methods, and hand-patched vendor files upgrades in weeks - because every drift point is a place the upgrade can break.

Drift accumulates quietly. Someone edits a core template "just this once", a rushed feature uses a preference instead of a plugin, an extension gets patched in place instead of via a proper override. None of it shows up until the upgrade re-applies core and your changes evaporate. An honest readiness assessment counts these drift points and weights them - that count, more than anything, is what turns a vague range into a defensible number.

Module and extension compatibility

Every third-party extension is a separate compatibility question with its own answer. Before upgrading, resolve each one:

  • Supported target version - does the vendor ship a release compatible with your target Magento version, and is it still maintained?
  • Abandoned or EOL extensions - an unmaintained module with no compatible release is a hard blocker; you either replace it, fork it or drop the feature.
  • Overlapping rewrites - two extensions that both modify checkout or pricing often collide harder after an upgrade than before.
  • License and paid-upgrade costs - some commercial extensions charge for the compatible version; that is real budget, not a rounding error.

The compatibility matrix is tedious to build and non-negotiable to skip. One unmaintained extension in the wrong place can hold the entire upgrade hostage.

Data migration, integrations and infrastructure

Upgrades change more than PHP. New releases add and alter database tables through declarative schema, and a failed setup:upgrade on production data is exactly the scenario your rollback plan exists for. Test the migration against a real copy of production data, not a slim fixture, so volume and edge-case records surface in staging.

Integrations deserve the same scrutiny. ERP, PIM, WMS, CRM and payment providers depend on stable API contracts, and both Magento's own APIs and the platforms you connect to can shift underneath you. Confirm that every outbound and inbound integration still speaks the same protocol after the upgrade. Finally, check the stack itself: PHP, MySQL/MariaDB, OpenSearch/Elasticsearch, Redis, RabbitMQ and Composer all have version floors and ceilings per Magento release, and an incompatible platform version blocks the upgrade before your code even runs.

Testing scope and the rollback plan

Your testing scope is a direct function of your drift: the more custom code and integrations, the more regression surface you have to cover. Map the critical paths - catalog, cart, checkout, payment, order export, account - and decide what is automated versus manual before you scope the work, not after. This is also where a performance check pays off, because upgrades can quietly change query patterns, cache behaviour and Core Web Vitals.

How an upgrade-readiness audit removes the guesswork

An upgrade-readiness assessment is part of the comprehensive Magento audit (from $2,700). It inventories your modules and quantifies code drift, builds the extension compatibility matrix, flags EOL versions and core modifications, sizes the data migration, checks integration and infrastructure compatibility, and defines the testing and rollback scope. The output is not a vague "it depends" - it is a costed, ordered picture of the real effort and the real risk.

That is the difference between spending your engineering budget on the changes that matter, in the right order, and discovering the blockers one painful surprise at a time in production. Diagnose first, then upgrade.

Get an upgrade-readiness audit
FAQ

Frequently asked questions

Upgrade readiness is a measured picture of how much stands between your store and a clean upgrade: unsupported (EOL) versions, incompatible third-party extensions, custom modules, patched core files, schema and data migrations, and integration changes. Assessing it before you commit turns a guessed estimate into a real one.

The number of custom modules and how far your code has drifted from core. A near-vanilla store on supported extensions upgrades in days; a heavily customised store with patched core files and preferences over rewritten classes can take weeks, because every drift point is a place the upgrade can break.

Check whether your version still receives security patches. Once a version reaches end-of-life it stops getting fixes, and jumping several minor or major versions at once compounds API changes, schema migrations and extension incompatibilities. Older starting points mean more intermediate steps and more testing.

You can start blind, but the estimate will be a lottery. An upgrade-readiness audit inventories the blockers first, so you know the real effort, the real risk and the right order of work before you spend the engineering budget.

Want this checked on your own store?

Start with a free 30-minute call. Tell me about your Magento and I’ll tell you honestly whether and how I can help.