A Pragmatic System for Chipping Away at Design Debt
Design debt doesn’t arrive with a bang. It creeps. One misaligned component, a couple of “we’ll-fix-it-laters,” and before you know it, UX starts to feel like a rental car with too many dings—technically functional, but eroding trust.
In one of my recent product stints, I noticed an all-too-familiar pattern: a growing pile of internal UX complaints, unstructured designer observations, and no clear home for either. There was feedback—plenty of it—but no mechanism for decision-making or follow-through. So I built one.
The Setup: Feedback, Backlog, Airtable
I didn’t aim for elegance. I aimed for something that could work next week.
Step one: a submission form. Step two: a lightweight backlog in Airtable. The goal was to create a ready-made pool of UX opportunities—low overhead, high visibility—that could slot into sprints when engineering had room or when PM attention shifted.
The idea wasn’t to compete with product work. It was to parallel it. A quiet UX lane running alongside, fed by real feedback and prioritized with intention.
My Prioritization Stack: Lightweight, Human, Intentional
Prioritization is where most good systems collapse. Too loose and nothing moves. Too rigid and nothing breathes.
So I designed a 4-factor model that balances rigor with realism:
Ease of Implementation
Not all hard things are valuable. Not all easy things are trivial. But, when in doubt, start with what's doable this sprint—not next quarter.
UX Impact
How much friction does this remove for the user? Designer-assessed, not because designers have perfect judgment, but because someone has to exercise it.
User Feedback Volume
If five users trip over the same thing, it’s not noise—it’s signal. Each mention adds weight, helping the system surface what matters most to the many.
Issue Type
Bugs with no workaround beat ones with workarounds. Both beat feature requests. Because survival precedes luxury.
The Math (Biased, On Purpose)
In Airtable, I encoded this philosophy into a formula—not to simulate intelligence, but to preserve consistency:
(SWITCH({UX Value}, "Low", 1, "Medium", 2, "High", 3) + SWITCH({Difficulty}, "Hard", 1, "Medium", 2, "Easy", 3)) * SWITCH({Type}, "Feature Request", 1, "Issue", 2) * {Mentions}CopyEdit
It weights for:
High UX value
Low implementation difficulty
Critical issue types
Number of mentions
The result is a dynamic score that adapts as feedback grows. It doesn’t pretend to be perfect—it just tries to be fair, fast, and functional.
The Airtable Anatomy
Here’s what the base includes:
Summary – The short version
Name – Reporter(s), used to tally mentions
Category – Onboarding, Authoring, etc.
Type – Issue or Feature Request
Area – UI, UX, Copy, Implementation
Detail – The full story
Screenshot – Optional, but encouraged
Status – Pending, In Progress, Closed
Date – Auto-generated on submission
UX Value – High, Medium, Low
Difficulty – Easy, Medium, Hard
Mentions – Count of user names using a formula
Prioritization Score – The final rank
The formula to count mentions (assuming comma-separated names):
LEN({Name}) - LEN(SUBSTITUTE({Name}, ",", "")) + 1
Together, this creates a living stack rank of UX debt—visible, sortable, and always ready for the moment a window opens.
Then came the form. Public enough to encourage submissions, simple enough that no one had an excuse not to use it. The result was a steady, low-noise input stream.
What I Took Away
Most teams don’t suffer from a lack of insight. They suffer from a lack of surface area. Good feedback is scattered across Slack threads, hallway chats, usability sessions, and support tickets. By giving it a single structured home, I made UX work more visible, more actionable, and, frankly, harder to ignore.
More importantly, I proved a hunch: design debt doesn’t require a rescue plan—it just needs a lightweight scaffolding, ready for the moment appetite and opportunity align.
Because in practice, that moment is rare. But when it shows up, you want to be ready with a list—not a blank stare.