Article
Technical Debt in Adobe Commerce: How to Measure and Cut It
What technical debt is in Adobe Commerce, how to measure it with Adobe's own tools, how to prioritize it and a plan to pay it down before it forces a rescue.

On this page
- What is technical debt in Adobe Commerce
- Where technical debt in Adobe Commerce comes from
- How long your Adobe Commerce version is supported
- PHP: the date that usually comes first
- Adobe Commerce on Cloud: dates with consequences
- How to measure technical debt in Adobe Commerce
- Official tools and their status in October 2026
- Inventory of extensions and customizations
- Production data with New Relic
- How to prioritize technical debt
- How to reduce technical debt without slowing the business
- Reserved capacity in every sprint
- Small, frequent upgrades
- Remove what you don't need
- Replace preferences with plugins or observers
- Move customizations out of process
- Automated testing
- How to explain technical debt to the business
- When technical debt justifies a rescue or a replatform
- Common mistakes when managing technical debt
- How we do it at WolfSellers
- Frequently asked questions about Adobe Commerce technical debt
- What is technical debt in Adobe Commerce?
- How long is each Adobe Commerce version supported?
- How do I know how much technical debt my store has?
- Does the Upgrade Compatibility Tool work on Magento Open Source?
- What happens if my PHP version goes out of support?
- Is it better to upgrade often or make one big jump?
- Does moving to Adobe Commerce as a Cloud Service eliminate technical debt?
- When does a rescue make more sense than paying down the debt?
- Related services
Every upgrade costs more than the last one. An extension nobody remembers installing blocks the PHP upgrade, a "temporary" patch from three years ago breaks on the next release, and the team spends more hours firefighting than building. That's technical debt in Adobe Commerce (formerly Magento): it doesn't show on the storefront, but you pay for it every sprint. And in 2026 it has hard due dates, because Adobe has published when support ends for each release and what happens on its cloud to stores that don't upgrade.
At WolfSellers we provide support, maintenance and upgrades for Adobe Commerce stores, working nearshore from Mexico City. This article comes one step before a rescue: what technical debt is, where it comes from, how to measure it with Adobe's official tools, how to prioritize it and how to pay it down without slowing the business. If your project is already in crisis, the path is different, and we cover it in our guide to rescuing and replatforming Adobe Commerce projects. Everything we say about Adobe features comes from Adobe's Experience League documentation, reviewed in October 2026.
What is technical debt in Adobe Commerce
Technical debt is the future cost of decisions that save time today: a patch instead of a fix, an extension nobody maintains, a customization that replaces Adobe code instead of extending it. Like financial debt, it accrues interest: every new change costs more, every upgrade takes longer and security risk grows until you pay it down.
In Adobe Commerce it builds up in three layers:
- Platform: the Adobe Commerce version and its dependencies (PHP, database, OpenSearch, cache, message queues) are nearing end of support or are already past it.
- Code: customizations that stray from Adobe's practices and third-party extensions nobody reviews.
- Operations: misconfigured cron and indexers, piled-up patches, tables that grow unchecked, fragile integrations and missing tests.
Why does it pile up? Adobe's upgrade guide explains it: the platform's flexibility is an advantage, but customizations that don't follow best practices raise the cost of every upgrade, and deferring upgrades builds up debt that makes the next one more expensive. On top of that, Adobe doesn't patch third-party dependencies such as PHP or MariaDB: your Adobe Commerce version can be supported while the stack underneath it isn't.
Not all debt is bad: shipping in time for Black Friday with a documented shortcut can be the right call. The problem is debt nobody logged and nobody plans to pay.
Where technical debt in Adobe Commerce comes from
| Source | Symptom | Risk |
|---|---|---|
| Outdated 2.4.x release | Upgrades pushed back year after year | Once support ends, security patches stop |
| PHP and services out of support (MySQL or MariaDB, OpenSearch, Redis or Valkey) | Your Adobe Commerce version ties you to an old PHP | Unpatched vulnerabilities; for PHP, Adobe flags it as a PCI risk |
| Abandoned third-party extensions | The vendor ships no release for the new 2.4.x or the new PHP | They block the upgrade and pile up vulnerabilities |
| Preferences | An Adobe class replaced wholesale | Conflicts with other modules; they block core improvements |
Unneeded around plugins |
Plugin chains that are hard to debug | Performance: they lengthen the stack trace of every call |
| Core modifications | Direct edits under vendor or custom patches never removed |
They break or get lost on every upgrade |
| Logic in templates | .phtml files that query data or create objects |
Hard to test and to carry over to another storefront |
| Piled-up patches | Dozens of quality and custom patches | Adobe warns they complicate upgrades |
| Point-to-point integrations | Checkout calls the ERP, OMS or payments directly | An outside outage stops sales |
| Misconfigured cron and indexers | Indexers on Update on Save, cron failing silently | Overloaded database; stale prices and inventory |
| Tables growing unchecked | Multi-GB logs, old carts or indexer change logs | Slow writes; longer deployments |
| Heavily customized Luma theme | Hundreds of overridden templates and JavaScript files | Every upgrade touches the frontend; Adobe Commerce as a Cloud Service doesn't support Luma |
Adobe's guides back three of these rows directly. They describe preferences as a "greedy" way to change the application that can conflict with third-party modules and block core updates. They ask you to avoid around plugins you don't need, because they lengthen stack traces and hurt performance; since 2.2, an after plugin already receives the method's arguments. And they warn that changing a large table delays deployment by minutes or hours.
How long your Adobe Commerce version is supported
Adobe provides three years of standard support from each release's general availability (GA), with quality and security fixes. Several releases get an extra year of extended support at no additional cost, and 2.4.4, 2.4.5 and 2.4.6 have a final security-only period that Adobe asks you to treat as migration time. Dates from its lifecycle policy, updated September 18, 2026:
| Release | Generally available | End of standard support | End of extended support | End of security-only period |
|---|---|---|---|---|
| 2.4.9 | May 12, 2026 | May 31, 2029 | TBD | N/A |
| 2.4.8 | Apr 8, 2025 | May 31, 2028 | TBD | N/A |
| 2.4.7 | Apr 9, 2024 | May 31, 2027 | May 31, 2028 | N/A |
| 2.4.6 | Mar 14, 2023 | Aug 11, 2026 | Aug 31, 2027 | May 31, 2028 |
| 2.4.5 | Aug 9, 2022 | Aug 12, 2025 | Aug 11, 2026 | May 31, 2027 |
| 2.4.4 | Apr 12, 2022 | Apr 12, 2025 | Apr 14, 2026 | May 31, 2027 |
Adobe also now ships monthly isolated security patches on Patch Tuesday, the second Tuesday of the month. They aren't cumulative: you apply them in order, and they're only tested against the latest security patch release (-pN) for your line. If you're behind on the -pN releases, you can't apply the monthly ones.
PHP: the date that usually comes first
Cross-referencing Adobe's system requirements with PHP's official calendar:
| PHP | Active support until | Security fixes until | Used by the latest patches of |
|---|---|---|---|
| 8.1 | Ended | Dec 31, 2025 (already unsupported) | 2.4.4, 2.4.5 and 2.4.6 |
| 8.2 | Dec 31, 2024 | Dec 31, 2026 | 2.4.6 and 2.4.7 |
| 8.3 | Dec 31, 2025 | Dec 31, 2027 | 2.4.7 and 2.4.8 |
| 8.4 | Dec 31, 2026 | Dec 31, 2028 | 2.4.8 |
| 8.5 | Dec 31, 2027 | Dec 31, 2029 | 2.4.9 |
A typical case: a store on 2.4.6 has Adobe extended support until August 31, 2027, but its newest PHP, 8.2, stops getting security fixes on December 31, 2026, and Adobe's policy warns that running PHP past end of life puts PCI compliance at risk. Services move too: in the latest patches of 2.4.5, 2.4.6 and 2.4.7, the requirements already list Redis as not supported and call for Valkey.
Adobe Commerce on Cloud: dates with consequences
For Adobe Commerce on Cloud (the PaaS offering, versions 2.4.4 through 2.4.9), Adobe has published mandatory deadlines:
- Dependencies (PHP, MariaDB, Elasticsearch, OpenSearch, Redis and RabbitMQ): depending on the service and version, the deadline is October 30, 2026 or May 31, 2027.
- Adobe Commerce version: 2.4.4 and 2.4.5 must upgrade or migrate to Adobe Commerce as a Cloud Service by June 1, 2027; 2.4.6 and 2.4.7, by June 1, 2028.
- Consequence: Adobe may suspend Admin access or inbound traffic, and in the latter case the storefront goes offline.
Adobe notes that moving from Elasticsearch to OpenSearch or from Redis to Valkey is a change of software, not of version, and that custom code and extensions may need updates. These deadlines don't apply to Adobe Commerce as a Cloud Service or to on-premises installations, where keeping everything supported is entirely on you.

How to measure technical debt in Adobe Commerce
Measuring turns "everything is expensive" into a list with owners and dates. We use three sources: Adobe's tools, an inventory of what's installed and production data.
Official tools and their status in October 2026
| Tool | What it tells you | Where it applies |
|---|---|---|
Upgrade Compatibility Tool (bin/uct) |
Issues against the target version, percentage of modified core files and an upgrade complexity score | Adobe Commerce only (requires a license) |
| Site-Wide Analysis Tool (SWAT) | Site health, extensions, available patches and stack end-of-life compliance | Adobe Commerce on Cloud; decommissioned for on-premises on April 23, 2024 |
| Quality Patches Tool | Quality patches available and applied for your version | Adobe Commerce |
Commerce Version Tool (vendor/bin/patch-status) |
Missing monthly security patches and the CVEs you're still exposed to | On-premises and Magento Open Source |
| Security Scan Tool | Malware and security risks: over 21,000 tests, scheduled or on demand | Adobe Commerce and Magento Open Source, free |
phpcs with the Magento2 standard |
Magento Coding Standard violations in your modules | Your own code |
bin/magento setup:di:compile |
Compiles dependency injection and interceptors: a broken di.xml or constructor fails here |
Any installation |
composer outdated and composer audit |
Outdated packages, packages with security advisories, abandoned or flagged as malware | Any installation |
Magento Open Source has no Upgrade Compatibility Tool: analysis there relies on the coding standard, Composer and manual review. And the UCT's --vanilla-dir option compares your core against a clean copy of your version; Adobe asks you to clean up those modifications before upgrading.
Inventory of extensions and customizations
Adobe calls reviewing custom modules the most time- and resource-intensive part of an upgrade. For each module we log its origin (Marketplace, another vendor or in-house), installed versus latest version, compatibility with the target version and with PHP, actual usage, what it intercepts (preferences, plugins, templates) and who owns it internally. Adobe Commerce Marketplace's policy requires listed extensions to be compatible with the latest release within 30 days of its GA.
Production data with New Relic
Tools tell you what's wrong; production data tells you what it costs. On Adobe Commerce on Cloud, New Relic APM is included: slow transactions, the most expensive database queries, external services that slow down checkout and the impact of each deployment. We explain it in our article on Adobe Commerce monitoring and observability with New Relic.
From those sources we build a dashboard. The thresholds are our recommendation:
| Indicator | Where it comes from | Warning sign |
|---|---|---|
| Months to end of support (Adobe Commerce and PHP) | Lifecycle policy and PHP.net | Under 12 with no approved plan |
| Pending security patches | Commerce Version Tool or -pN level |
Any |
| Upgrade complexity score | Upgrade Compatibility Tool | Rising between runs |
| Abandoned packages or advisories | composer audit |
Any in production |
| Corrective work in the sprint | Your ticketing tool | More corrective than new work |
| Lead time for a small change | Repository and deployments | Growing quarter over quarter |
How to prioritize technical debt
You don't pay it all at once. We sort each finding into one of four categories:
| Category | Question it answers | Examples |
|---|---|---|
| Security | Does it expose us today? | Pending patches, unsupported PHP, package with a security advisory |
| Upgrade | Does it keep us from reaching a supported version? | Extension with no compatible release, preference on a class that changed, modified core |
| Performance | Does it cost sales or infrastructure? | Indexers on Update on Save, around plugin on the cart, multi-GB table |
| Maintainability | Does it make every change more expensive? | Logic in templates, duplicated code, untested modules |
Then we place it on an impact-versus-effort matrix:
| Low effort | High effort | |
|---|---|---|
| High impact | Next sprint | Project with a date and a budget |
| Low impact | Bundle with work in the same area of the code | Log it and review it every quarter |
One rule we don't negotiate: security and end-of-support dates come first, even when the effort is high. They don't wait for the matrix.
An illustrative example of the resulting backlog:
| Finding | Category | Impact | Effort | Decision |
|---|---|---|---|---|
| Pending monthly security patches | Security | High | Low | Next maintenance window |
| 2.4.6 on PHP 8.2 (fixes until Dec 31, 2026) | Security and upgrade | High | High | Upgrade project with a date |
| Indexers on Update on Save | Performance | High | Low | Next sprint |
| Shipping extension with no release for 2.4.8 | Upgrade | High | Medium | Replace it before the upgrade |
| Preference on a cart class | Upgrade | Medium | Medium | Rewrite as a plugin or observer |
| Price calculation inside a template | Maintainability | Medium | High | When that page is redesigned |
How to reduce technical debt without slowing the business
Reserved capacity in every sprint
Our recommendation: set aside a fixed share of every sprint for debt, agreed with the business and visible in the backlog. As a starting point we suggest about one fifth and adjust it with the indicators. It's cheaper than the "debt project" that never finds a budget.
Small, frequent upgrades
Adobe recommends upgrading every patch release cycle and reminds merchants that staying PCI compliant requires being on the latest patch or security patch. Its upgrade guide frames it as a cost issue: regular upgrades take less total effort than infrequent ones, because changes stay incremental; when upgrades are deferred, they grow and drag in extensions and integrations. A big jump bundles everything, PHP and services included, and usually arrives with the end-of-support date looming.
Remove what you don't need
- Unused extensions: uninstall them with Composer. Disabling a module leaves its code and dependencies in the project.
- Custom patches: Adobe treats them as temporary and recommends replacing them with a permanent fix within the following two to four weeks.
- Quality patches: the Quality Patches Tool documentation warns that applying many of them complicates your code and the next upgrade.
Replace preferences with plugins or observers
Adobe's guide to modifying core and third-party code asks you to always choose the option with the smallest footprint. The order we follow:
- Observer, if the core dispatches an event where you need it.
beforeorafterplugin, to change the arguments or result of a public method.aroundplugin, only if you must stop the original method from running.- Preference, only if none of the above works, and logged as debt.
For extra data, use extension attributes instead of new columns in core tables.
Move customizations out of process
With out-of-process extensibility, custom logic runs as an application on Adobe Developer App Builder and connects to the store through APIs, Adobe I/O events and webhooks, without adding PHP to the Commerce codebase. API Mesh, on App Builder, combines several APIs into a single GraphQL endpoint. Adobe recommends this model for new apps and for modernizing existing customizations, because the app ships on its own cycle, independent of upgrades. Not everything should move: in-process code still gives you deep, synchronous control. The best candidates are ERP, OMS or CRM integrations and heavy processing.
It matters even more if you plan to move to Adobe Commerce as a Cloud Service, the SaaS offering. There, Adobe applies updates (with 30 days to test them in sandbox), guarantees backward compatibility for customizations that follow the API-first model, comes with App Builder preconfigured and doesn't support Luma storefronts. Its lifecycle policy presents it as the recommended long-term destination for Adobe Commerce on Cloud customers. We explain it in Adobe Commerce as a Cloud Service and Edge Delivery Services.
Automated testing
Without tests, every debt payment is a gamble. We start with the flows that move the most revenue (checkout, cart, search, payments and invoicing) and add unit tests to every module we touch. It's part of our QA and testing service.

How to explain technical debt to the business
Leadership doesn't approve budget to "refactor." It approves budget to reduce a risk with a date or a cost it's already paying. Here's how we translate:
| What the tech team says | How we present it to leadership |
|---|---|
| "We're on 2.4.6 with PHP 8.2" | "Starting January 1, 2027, our PHP gets no security fixes and PCI compliance is at risk" |
| "We have a lot of preferences" | "Every upgrade takes longer and can break the cart" |
| "There's an abandoned extension" | "A vendor that no longer responds can block our next upgrade" |
| "We're on Adobe Commerce on Cloud 2.4.5" | "If we don't upgrade by June 1, 2027, Adobe can take the store offline" |
Besides the dates, two arguments work. The first is security and PCI: Adobe reminds merchants that assessing compliance is their responsibility, with their qualified security assessor (QSA); we cover what PCI DSS 4.0 requires of a checkout today in PCI DSS 4.0 for ecommerce. The second is the cost of every change: how long a small change takes to reach production and how much of the sprint goes to corrective work are numbers leadership understands, and a planned upgrade usually costs less than an urgent one.
When technical debt justifies a rescue or a replatform
Paying debt down sprint by sprint works while the foundation is recoverable. These signs say it no longer is:
- The version is unsupported and there's no realistic path to a supported one before the deadline.
- The Upgrade Compatibility Tool reports critical issues across much of your custom code and the core is modified: the upgrade amounts to a rebuild.
- Several quarters in a row with more corrective than new work, even with reserved capacity.
- Critical extensions abandoned with no replacement on the market.
- A Luma storefront so customized that changing the frontend costs as much as rebuilding it, especially if you're heading to Adobe Commerce as a Cloud Service.
- Magento 1 or a platform with no upgrade path.
In those cases, paying interest costs more than restructuring. How to choose between a refactor, a rescue, a replatform or starting over is in our guide to rescuing and replatforming. If you're coming from Magento Open Source, read our guide to migrating to Adobe Commerce and our Adobe Commerce vs. Magento Open Source comparison.

Common mistakes when managing technical debt
- Treating it as a one-off project for "when there's time."
- Watching only the Adobe Commerce version and forgetting PHP and other services.
- Letting temporary patches become permanent.
- Solving everything with preferences because it's faster today.
- Upgrading without regression tests for checkout and integrations.
- Paying down debt that doesn't matter, like cosmetic refactors, while end of support approaches.
- Not logging new debt: every shortcut without a ticket is invisible debt.
How we do it at WolfSellers
We start with an assessment: an inventory of extensions and customizations, the Adobe tools that apply to your edition and production data. We deliver a debt backlog with category, impact, effort and deadline, plus an upgrade calendar aligned with Adobe's. Then we pay it down sprint by sprint, with reserved capacity and the indicators visible to the business.
To avoid creating new debt, every module we write follows the same standard:
- An Admin toggle to turn it on and off without a redeploy.
- Its own log, separate from the general logs.
- Permissions (ACL) for its configuration.
- Unit tests for its configuration and logic.
- A README with verification and rollback steps and its cache impact.
- Validation with
phpcs(Magento2 standard) andbin/magento setup:di:compilebefore every PR. aroundplugins only when justified; observers,beforeandaftercome first.
We're an Adobe Solution Partner at Gold level, with a team of 135 people working nearshore from Mexico City. Our support and maintenance service provides 24/7 coverage on the Business and Enterprise plans (Starter is 8x5). If the store needs more than maintenance, our rescue and optimization or Adobe Commerce migration services come in. If you'd like us to review your case, get in touch.
Frequently asked questions about Adobe Commerce technical debt
What is technical debt in Adobe Commerce?
It's the future cost of decisions that save time today: outdated versions and PHP, abandoned extensions, preferences, core changes and temporary patches. You pay for it with pricier upgrades, slower changes and security risk.
How long is each Adobe Commerce version supported?
Three years of standard support from general availability: 2.4.7 until May 31, 2027, 2.4.8 until May 31, 2028 and 2.4.9 until May 31, 2029. 2.4.6 and 2.4.7 add a year of extended support.
How do I know how much technical debt my store has?
Run the Upgrade Compatibility Tool against your target version, check your security patch status, composer audit and phpcs, inventory your extensions and review New Relic data. The output is a backlog with category, impact, effort and date.
Does the Upgrade Compatibility Tool work on Magento Open Source?
No. It requires an Adobe Commerce license. On Magento Open Source, analysis relies on the coding standard, Composer and manual review; the Security Scan Tool and the Commerce Version Tool are available for that edition.
What happens if my PHP version goes out of support?
PHP stops receiving security fixes and Adobe doesn't provide them. Its lifecycle policy notes that this puts PCI compliance at risk. PHP 8.1 reached end of life on December 31, 2025, and PHP 8.2 reaches it on December 31, 2026.
Is it better to upgrade often or make one big jump?
Often. Adobe recommends upgrading every patch release cycle and documents that regular upgrades take less total effort than infrequent ones.
Does moving to Adobe Commerce as a Cloud Service eliminate technical debt?
It eliminates platform debt, because Adobe runs and updates the application, but not your code's debt: Adobe only guarantees compatibility for customizations that follow its API-first model, and it doesn't support Luma storefronts. Pay down debt before you migrate.
When does a rescue make more sense than paying down the debt?
When there's no path to a supported version before the deadline, when a modified core makes the upgrade amount to a rebuild, or when corrective work outweighs new work for several quarters.
Related services
If this topic is relevant to your business, these services from WolfSellers can help you implement it:


