Internal Tool & Custom CRM Development

Ops consoles, custom CRMs, and workflow tools for the processes your business actually runs on. Built for the moment the spreadsheet stops scaling and off-the-shelf stops fitting.

What We Build

Ops consoles

A single surface for the operations team: queues, states, actions. Replaces the tab-switching ritual across five tools that never agree.

Custom CRMs

Pipeline and relationship tracking shaped to your process, not a vendor’s template. Only the fields you use, with validation on all of them.

Approval workflows

Requests, reviews, and sign-offs with an explicit state machine underneath. Who approved what, when, and what changed — recorded by default.

Reporting dashboards

Numbers pulled from the systems of record, not pasted into slides. Every figure is traceable to its source query.

Data-entry tools

Forms with validation at the edge and at the database. Bad data is rejected on entry, because cleaning it downstream costs ten times more.

How Internal Tools Fail

Internal tools get less scrutiny than customer-facing software and hold more privilege. That combination produces a specific set of failures.

ADMIN_ACTION_WITHOUT_AUDIT_LOG

Someone edits a critical record in production. Nobody knows who, when, or what it was before.

Counter: Every privileged mutation writes an audit entry — actor, timestamp, before and after. Built in phase one, not retrofitted.

PERMISSION_LEAK

The intern’s account can see payroll, because internal tools “don’t need” roles. Then a screenshot leaves the building.

Counter: Roles are defined in Discovery and enforced at the data layer. Internal does not mean trusted.

BULK_ACTION_NO_UNDO

An operator selects 400 rows and hits the wrong button. There is no undo, and last month’s export is the only backup.

Counter: Bulk actions run a dry-run preview first, execute in recoverable batches, and are reversible — or explicitly confirmed as not.

SPREADSHEET_STATE_DRIFT

The tool reads from a sheet that three people edit by hand. Reality and the sheet diverged weeks ago.

Counter: The tool becomes the system of record, with validated writes. Migrating off the sheet is part of the build, not an afterthought.

REPORT_ON_STALE_DATA

A dashboard shows last Tuesday’s numbers under today’s date. Decisions get made on them.

Counter: Every figure carries its freshness. A failed sync surfaces as a visible staleness warning, not as silently old numbers.

Questions

Should we build a custom internal tool or buy off-the-shelf?
Buy when a vendor tool matches your process closely and you can accept its constraints. Build when the workarounds, seat costs, or missing permission controls start costing more than a build would. Discovery makes that math explicit before anything gets built. Read the build-vs-buy breakdown
When does Retool or Airtable stop scaling?
Usually at the point where you need real permissions, audit logs, or logic the platform fights you on — and per-seat pricing has spread across the whole company. Those platforms are good at version one. The ceiling appears around the time the tool becomes critical.
What does a custom internal tool cost?
Smaller consoles and dashboards typically land in the $10k-$25k range; custom CRMs and multi-workflow systems run higher. Discovery produces the number before the build starts, so the decision is made on a real figure.
Who maintains the tool after handover?
You own the code and the infrastructure. Most clients keep a monthly retainer for changes and monitoring; others hand it to an internal developer with the runbooks left behind at launch.
Can it connect to the systems we already use?
Yes. Internal tools usually earn their keep by sitting on top of existing data — databases, spreadsheets being retired, CRMs, and third-party APIs. Integration boundaries and sync failure handling are mapped in Discovery.

If the spreadsheet is now load-bearing, that is the signal. Discovery maps the process before any tool gets built.