Rula · 2024 – 2025
One source of truth for provider data
Replaced a spreadsheet with a service, and found roughly a quarter more available providers in the states that needed them most.
Sanitized- +25%
- provider supply
- 3 → 1
- onboarding flows unified
- 12mo
- architecture roadmap
The situation
Provider data — who a clinician is, what they are licensed to do, and where they are allowed to do it — lived in Airtable. Three separate onboarding flows each kept their own copy of it, and each had quietly grown its own idea of what a provider was.
The consequences were not subtle. Matching, credentialing, and the public directory could each give a different answer about the same clinician on the same day, and reconciling them was somebody's manual job.
The constraints
- Licensure is per-state and genuinely complicated. A clinician licensed in three states is not three clinicians, but they are also not one undifferentiated record — what they can do differs by state, and the model has to hold that without collapsing it.
- Nothing could go dark. Onboarding ran continuously throughout, so the new service had to be correct alongside the old system before anything cut over.
- Airtable was not just a database — it was an operations tool people used daily. Replacing it meant replacing a workflow, not only a store.
The call
Build a dedicated provider data service and make it the source of truth, rather than nominating one of the three existing copies as canonical. The existing copies each encoded assumptions from their own flow; promoting any one of them would have carried those assumptions everywhere.
Model licensure as a first-class multi-state relationship instead of a per-state duplicate record. This is the decision that produced the supply number: once a provider could be correctly represented as available in more than one state, matching could see clinicians it had previously been blind to.
Sync outward rather than asking every consumer to migrate at once. Pipelines pushed to Airtable, Salesforce, and internal services so teams could adopt the service on their own schedule while drift stopped growing immediately.
How it fits together
What happened
Onboarding for therapy, prescribers, and in-person scheduling ran through one model. Data drift between internal services and the business applications that operations depended on stopped being a recurring incident class.
Available provider supply rose by roughly 25% in states that had few in-state providers — not by recruiting anyone, but by correctly representing clinicians who were already there.
Insurance-based matching moved into explicit domain logic with real test coverage, which meant the rules could be changed by reading them rather than by archaeology.
What I'd do differently
I would have written the event contracts before the pipelines rather than alongside them. Syncing outward bought real adoption freedom, but for a stretch the service was the source of truth in principle while several consumers still trusted their own copy in practice — and that gap lasted longer than it needed to.