How I Audited a SaaS Application and Found 16 Dead UI Elements

SaaS products grow feature by feature. Over time the UI accumulates buttons, menus, and settings that no longer connect to working backend logic. Users still see them. Clicking them does nothing useful — or worse, opens half-broken flows.

During a recent SaaS audit I found 16 dead UI elements still visible in production. This post explains the method I used so you can run the same audit on your own app.

What Counts as a Dead UI Element?

I treated an element as dead if any of these were true:

Step 1: Inventory Every Interactive Control

I started from the rendered UI, not the design file. For each authenticated role I walked the main navigation, settings, dashboards, and entity detail pages. I logged every button, link, dropdown item, and icon action into a spreadsheet with columns for:

Step 2: Trace Click Paths in the Codebase

For each control I searched the component tree for the click handler, then followed calls into hooks, services, and API routes. Patterns that kept showing up:

// Looks interactive, does nothing useful
<Button onClick={() => console.log('TODO: export')}>Export</Button>

// Handler exists, API route deleted
onClick={() => api.post('/v1/reports/legacy-export')}

// Feature gated forever
{featureFlags.oldBilling && <MenuItem>Legacy invoices</MenuItem>}

Step 3: Cross-Check Network Traffic

Browser DevTools Network tab caught several “working” buttons that only hit analytics events or returned empty 200 responses with stub JSON. If the UI celebrated success while the database never changed, I marked it dead.

What the 16 Dead Elements Looked Like

How I Fixed Them Without Breaking Live Flows

  1. Hide or remove UI first when the backend is gone for good.
  2. If the feature is planned, replace the dead control with clear copy (“Coming in Q4”) — never a fake button.
  3. Add integration tests that click critical menus and assert a real API call or navigation.
  4. Document retired routes in a changelog so support stops pointing users at them.

A Lightweight Audit Checklist

[ ] Walk UI as every paid role
[ ] Log every interactive control
[ ] Trace handler → API → DB side effect
[ ] Confirm Network tab shows real work
[ ] Search repo for TODO / FIXME / coming soon
[ ] Remove or relabel dead controls
[ ] Add regression tests for survivors

Final Thoughts

Dead UI is a trust problem, not just clutter. Users assume every button works. A short quarterly UI audit — inventory, trace, network check, remove — keeps a SaaS product honest as the codebase ages.


Written by A.M. Rinas · Published September 7, 2026

A.M. Rinas

Written by A.M. Rinas

Full-Stack Software Engineer working on web applications, DevOps automation, and databases. More about me on the about page, or say hi through the contact page and LinkedIn.

← Back to all articles