The 2 PM Slack message every SaaS founder knows
"Hey, can someone bump this customer's plan back to Pro? They're locked out and support can't fix it."
That message goes to an engineer. Not because the fix is hard: it's a single row update. It's because your SaaS admin panel doesn't have a button for it. So someone opens a Rails console, or runs a raw SQL update against production, types carefully, double-checks the WHERE clause, and hits enter while everyone in the channel holds their breath.
If that sounds familiar, you've got an admin panel problem. It's not glamorous. It won't show up in a board deck. But at 40, 200, or 2,000 customers, it quietly eats your best engineers' time and puts your production database one typo away from a bad afternoon.
Why this happens to almost every SaaS company
Nobody plans a bad admin panel. It just accretes.
Early on, you have ten customers and you know all of them by name. When something breaks, you fix it directly in the database because that's faster than building tooling for a problem you have twice a month. That's the right call at ten customers.
The trouble is nobody goes back and revisits the decision. You hit 100 customers, then 500, and the "just run a script" habit is still there, except now three different people run scripts, nobody remembers which ones are safe to rerun, and half of them live in someone's shell history instead of a shared repo. Your admin panel, if you have one at all, is usually a Django admin or a Rails scaffold that dumps every column of every table onto a page with an edit form. It was generated in an afternoon and never designed.
The real issue is that admin tooling isn't customer-facing, so it never competes for roadmap time against features that show up in a sales demo. Everything gets prioritized above it, forever. Meanwhile support, ops, and finance are all routing around the product through the one channel that always works: pinging an engineer directly.
Why the usual fixes don't hold
Hiring more ops or support staff. This just adds more people waiting on engineers, not fewer requests. You've scaled the queue, not fixed the bottleneck.
"We'll rebuild the admin panel next quarter." This is the most common answer and it's almost always false. Admin panel rebuilds lose to every customer-facing feature in prioritization, every single quarter, because the ROI is invisible on a roadmap slide. We've seen this exact backlog item survive four quarters untouched at more than one client before we started working with them.
Giving ops direct database access. Faster in week one, terrifying by week twelve. No audit trail, no permission boundaries, and a very real chance someone runs an UPDATE without a WHERE clause on a Friday at 5 PM. We've seen this take down production for a full evening at a 30-person SaaS company. One missing clause, no undo.
Buying a generic internal-tools platform and wiring it up in a rush. Tools like Retool or Forest Admin are genuinely good, but bolting one onto a data model that was never designed for external actions just moves the mess somewhere with a nicer UI. If your subscriptions table doesn't cleanly represent "what plan is this customer actually on right now," no tool fixes that for you.
The tradeoff you're actually making
Every SaaS company ends up choosing somewhere on this spectrum, whether they mean to or not:
- Full custom build — most control, matches your exact workflows, but costs real engineering time and needs upkeep as your data model changes. Makes sense once ops actions happen daily and the actions are complex (refunds tied to usage, plan changes with proration, multi-step account merges).
- Internal-tools platform (Retool, Retool-style, Appsmith, Forest Admin) — fast to stand up, good permissioning and audit logging out of the box, weaker when your workflows need custom business logic. Makes sense for most companies under a few hundred employees.
- Framework-generated admin (Django admin, Rails ActiveAdmin, a Node CRUD scaffold) — fine for read-only debugging by engineers, genuinely dangerous as a tool for non-engineers to take action in. If support is using it to change customer state, that's a signal, not a solution.
- Direct database access — only ever appropriate for the two or three most senior engineers, with break-glass logging, and never for routine ops work.
A useful gut check before you build or buy anything: can a support rep, without asking an engineer, change a customer's plan, resend a failed invoice, and see why an account is stuck? And can you tell exactly who did what and when? If the honest answer is no to any part of that, the tool isn't doing its job yet, no matter what it's built on.
What a real internal admin tool needs
Before you pick a platform, write down what "good" looks like. At minimum:
- Role-based access — support can refund up to $100 without approval; anything above needs a manager. Finance can see billing data; support can't touch Stripe directly.
- An audit log tied to a real person — not "the API key," a specific user, timestamped, with the before-and-after value.
- Actions, not raw table edits — a "downgrade to Starter" button that runs your actual billing logic (proration, webhooks, emails), not a field you overwrite by hand.
- Search that matches how support actually looks things up — by email, by Stripe customer ID, by the last four of a card, not just by internal primary key.
- A read-only debug view separate from the action layer — engineers need to see raw data sometimes; that shouldn't be the same surface non-engineers use to make changes.
If you're missing three or more of these, that's your starting checklist, not a nice-to-have list for later.
Fixing it without a six-month rebuild
You don't need to rebuild everything at once. The order matters more than the scope:
Start by listing every action someone currently does by hand in the database or via a script: plan changes, refunds, password resets, account merges, usage overrides. Most teams find 15 to 25 of these once they actually write them down instead of estimating.
Then rank them by frequency and blast radius. Refunds and plan changes are usually both frequent and risky, so start there. A one-off data migration that happens twice a year isn't worth building a UI for; a runbook is fine.
For the top five or six, build or wire up an actual action with validation, not a form that edits raw columns. This is where a platform like Retool earns its keep. You can ship a permissioned, audited action in days instead of weeks, because your data model already exists and you're just putting a safe front end on it.
This is also the point where AI tooling inside the admin panel actually starts to make sense: an assistant that can look up an account, summarize why a charge failed, or draft a refund for a manager to approve. It's a real time-saver, but only once actions are structured, permissioned, and logged. Turn an AI loose on a database that only responds to raw SQL and freeform scripts, and you've just made the 5 PM Friday mistake easier to make, faster, and less obvious to catch. Structure first. Automation second. AI on top of both, not instead of either.
Where to start Monday morning
Pick one workflow: plan changes, refunds, whatever eats the most Slack messages this week. Map it end to end: who requests it, who approves it, what changes, and where that change actually happens today. That map alone usually reveals the bottleneck before you write a line of code.
If you want a second set of eyes on that map, we run a free Process Teardown: a 30-minute session where we walk through one of your painful workflows together and show you, in hours and dollars, what it's actually costing you to run it the way you're running it now. No pitch, no obligation. It's the same exercise we used to help clients turn scattered admin work into one connected system — you can see examples of that kind of rebuild in our case studies.
0 Comment