Killing a Feature Is a Graph Problem, Not a Product
Sunseting low-usage software features can cause six-figure damages if teams rely solely on MAU metrics instead of building a dependency graph.

Stock photo for illustration only, not from the actual event
- Deciding to kill features based solely on usage metrics carries high risks.
- Low adoption features can still serve as load-bearing infrastructure for internal systems.
- Comprehensive dependency mapping requires technical, contractual, and tribal data.
Discussions in late-night communication threads often revolve around the claim that you cannot decide whether to sunset a feature merely by looking at its usage metrics. Usage metrics only reveal who interacts with the front door, offering zero insight into what acts as a load-bearing pillar in the basement. Teams have previously sunset features with a monthly active user rate of just 2 percent, only to inadvertently take down three internal tools, a partner integration, and a compliance report reviewed quarterly by the finance department, none of which appeared on any analytics dashboard.
The counterargument suggests that low adoption itself is sufficient evidence, assuming that if almost nobody uses a feature, its blast radius must naturally be small. This exact assumption costs companies six-figure sums in incident cleanups. Adoption and dependency are orthogonal concepts. A feature can exhibit terrible end-user adoption while remaining structurally load-bearing because the dependent entities are not end users, but rather other systems, automated pipelines from different teams, and legacy contracts that nobody reviews anymore.
Consider a mid-size B2B SaaS company that featured a Custom Export Templates tool built three years prior. It was accessed by 1.4 percent of active accounts monthly while costing an estimated 140 engineering hours per quarter in maintenance, bug fixes, and on-call incidents. By standard adoption scoring, this represented a textbook zombie feature, and the product team had their presentation ready for its removal.

Stock photo for illustration only, not from the actual event
Fortunately, someone performed a dependency trace prior to the deprecation rather than afterward. The actual graph revealed a total blast radius encompassing one UI surface, a dependent feature utilized by 9 percent of accounts, an undocumented internal script tied to revenue recognition, and two active contracts worth 380,000 dollars in annual recurring revenue. None of these elements were visible on a usage dashboard, yet all were clearly exposed through a proper dependency graph.
"A blast radius needs to be assembled from at least three sources before a deprecation date goes on a roadmap."
Dev.to
In contemporary software development, tackling technical debt often creates pressure to quickly prune unused components. Relying exclusively on surface-level usage statistics provides an incomplete picture. Implementing a dependency graph analysis allows engineering and product teams to evaluate codebases, business agreements, and operational workflows simultaneously, successfully averting catastrophic business disruptions caused by premature deprecation decisions.
Armed with this insight, the team revised their strategy. Instead of completely eliminating the feature, they removed the direct user interface to save roughly 20 percent of maintenance costs while preserving the template engine as an internal-only dependency with a leaner maintenance contract. This achieved a net savings of approximately 30 hours per quarter, avoiding a nonsensical 140-hour saving projection that would have actually triggered a lost enterprise renewal cycle and an emergency billing hotfix.
Source: Dev.to
Found something wrong in this article? Report an issue with this article
Comments
Leave a Comment