Back to notes

July 12, 2026 · 5 min read

Technical Debt a Client Inherited From Three Previous Agencies

Three agencies, three different tagging philosophies, zero documentation handed between them. Untangling it taught me more about technical debt than any codebase ever has.

Case StudyAudits

The GTM container had four different naming conventions for the same event type, three competing consent frameworks partially implemented and never fully removed, and two entirely separate GA4 properties quietly collecting different slices of the same traffic. Three agencies had worked on this account over five years. None of them had documented a handoff to the next.

This wasn't incompetence from any single agency — each one's work, viewed in isolation, was defensible. The problem was that each agency built as if they were the only one who'd ever touch the container, which is a reasonable assumption for any single engagement and a disaster compounded three times over.

What the layering actually looked like

Agency 1 (2021): GA3-era event naming, snake_case
Agency 2 (2023): migrated to GA4, camelCase naming, left Agency 1's tags live "just in case"
Agency 3 (2024): added server-side container, routed some events through it,
                 left client-side duplicates firing for events they weren't sure were safe to remove
Result: triple-counted conversions, two naming conventions active simultaneously,
        nobody sure which tags were load-bearing
Nobody inherits technical debt on purpose. Each agency just assumed they were the last one who'd ever need to understand this container.

How we actually untangled it

  • Built a live traffic diff before touching anything, to see which of the duplicate tags were actually firing and which were already dead weight
  • Froze new work for two weeks specifically to document the current state before adding anything else on top of an undocumented mess
  • Picked one naming convention and migrated everything to it in one coordinated pass, rather than layering a fourth convention on top
  • Deleted, not disabled, anything confirmed dead — a disabled tag is just debt with a pause button

The actual fix took about six weeks. Understanding what needed fixing took almost as long, because nobody before us had left a map. If there's one habit that would have saved this client years of accumulated mess, it's simple: whoever touches a tagging setup should document it as if they're about to be hit by a bus, because eventually, functionally, they are — they're the next agency to leave.