The problem
Every new customer meant a developer standing up a fresh deployment and hand-editing config for that company's approval chains and org structure. Two years in, the company was maintaining dozens of near-identical deployments that had each drifted slightly from the others.
What we did
- Multi-tenancy. Consolidated every customer onto one codebase and database, with tenant isolation enforced at the data layer rather than by separate infrastructure.
- Configurable workflows. Replaced hand-edited approval-chain config with a workflow builder customers configure themselves — roles, approval order, and escalation rules, no deploy required.
- Identity. Moved authentication to Auth0 with SSO per tenant, so larger customers could plug in their existing identity provider.
The outcome
New customers now onboard themselves in hours instead of waiting on a bespoke deployment, and the engineering team maintains one codebase instead of dozens of forks that used to need individual patching.