Acumatica · Architecture

Acumatica Strangler Fig Pattern

Acumatica Strangler Fig Pattern — a complete, field-tested reference by John Kihiu, Acumatica developer in Nairobi.

John Kihiu12 min read

Acumatica Strangler Fig Pattern is the Acumatica operations topic that you only get good at by doing it badly a few times. The first upgrade is always a surprise; the second is a learning; the third is a process. This guide is the process — the planning, the execution, the validation, the rollback — that turns the upgrade from a high-risk event into a routine maintenance task.

The Acumatica release cadence

Acumatica ships two major releases per year — R1 (around March) and R2 (around September). Each release introduces new features, deprecates old ones, and occasionally makes breaking changes. The customisation you ship today must survive the next 4-6 releases without intervention.

Plan for upgrades, not against them

The customisation that ages well is the one written with the next upgrade in mind. Extensions instead of base modifications. Usr prefixes on every field. Source control with a clear branch strategy. The discipline is small; the payoff is large.

Four weeks out

The first step is reading. The release notes are 50-100 pages; they tell you:

TEMPLATE · UPGRADE PLANNING DOCUMENT
# Acumatica [VERSION] Upgrade Plan

## Pre-upgrade
- [ ] Release notes read cover to cover (twice)
- [ ] Breaking changes identified for our customisations
- [ ] Top 20 screens identified by user count
- [ ] Staging tenant with production data
- [ ] Database backup verified

## Upgrade day
- [ ] Pre-upgrade database backup
- [ ] Apply upgrade
- [ ] Run post-upgrade scripts
- [ ] Smoke test top 20 screens
- [ ] Run regression suite
- [ ] Verify customisation compilation
- [ ] Hand the tenant back

For the broader upgrade checklist, see the upgrade checklist and the customisation upgrade survival guide.

Two weeks out

Apply the upgrade to the staging tenant. Run the test suite. The first wave of issues is usually:

C# · COMPATIBILITY CHECK
// Use conditional compilation to handle multiple versions
#if ACUMATICA_2025R2_OR_NEWER
    var result = Base.NewMethod();
#else
    var result = Base.LegacyMethod();
#endif

One week out

Schedule the production upgrade window. The window should be:

Never upgrade on a Friday afternoon

A Friday afternoon upgrade means the rollback, if needed, happens on Saturday morning when the team is tired and the user base is catching up. Upgrade on Saturday morning instead — the team is fresh, the user base is light, and the rollback is doable.

Upgrade day

The sequence:

  1. Pre-upgrade backup. Database, file share, IIS config. The backup that lets you roll back.
  2. Apply the upgrade. Run the Acumatica upgrade tool. This is the longest single step.
  3. Post-upgrade scripts. Any database scripts that need to run after the framework upgrade.
  4. Smoke test. Walk the top 20 screens. Verify they render, the data is correct, the workflows transition.
  5. Regression suite. Run the automated test suite. Failures are signals.
  6. Hand the tenant back. Communicate to the user base that the upgrade is complete.
SCRIPT · ROLLBACK
# If the smoke test fails, execute the rollback:

# 1. Stop IIS
iisreset /stop

# 2. Restore the database
sqlcmd -S sqlserver -d acumatica -Q "RESTORE DATABASE acumatica FROM DISK = 'C:\Backups\pre-upgrade.bak' WITH REPLACE, RECOVERY;"

# 3. Restore the file share
robocopy "C:\Backups\fileshare" "C:\Acumatica\Files" /MIR

# 4. Restart IIS
iisreset /start

For the broader disaster recovery patterns, see the disaster recovery guide and the backup and restore guide.

Post-upgrade

The 48 hours after the upgrade are the highest-risk period. The monitoring:

Document the upgrade

After every upgrade, document what worked and what did not. The next upgrade is a year away; your memory will not be reliable. The document is the institutional knowledge that makes the next upgrade a routine.

CI/CD for customisations

The customisation that is not in source control is the customisation that will be lost. The minimum CI/CD:

  1. Source control. Git, with a clear branching strategy.
  2. Automated build. Compile the customisation DLL on every commit.
  3. Automated test. Run the unit test suite on every commit.
  4. Automated publish. On merge to main, publish to a staging tenant.
  5. Manual gate. A human approves the promotion to production.
GITHUB ACTIONS · CI
name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-dotnet@v4
        with: { dotnet-version: '8.0.x' }
      - run: dotnet restore
      - run: dotnet build --no-restore
      - run: dotnet test --no-build

For the broader CI/CD patterns, see the CI/CD guide and the pipeline design guide.

Wrapping up

Read the release notes. Test on staging. Schedule the window. Backup before. Smoke test after. Monitor for 48 hours. Document the upgrade. The discipline is the same.