NEXSUM_LABS
  1. Home
  2. Work
  3. A therapy group practice stopped double-booking its clinicians and its evenings
Book a call

[ Case study ]

Mental healthNode.jsTypeScriptPostgresClearinghouse API

A therapy group practice stopped double-booking its clinicians and its evenings

Scheduling lived in a shared calendar guarded by one office manager; clinicians' availabilities lived in their heads, insurance eligibility was checked by phone, and one canceled slot was rarely refilled.

CLIENT a group psychotherapy practice — FOCUS Clinician-authored availability

Booking Systems & Internal ToolsCustom SoftwareBooking Systems & Internal ToolsMental healthRepresentative example
Client
a group psychotherapy practice
Industry
Mental health
Engagement
10 weeks — systems pod — engineer
Service
Custom Software / Booking Systems & Internal Tools
Headline outcome
All clinicians on published availability, with the office manager out of the booking path: Guarded calendar → clinician-authored scheduling, read from Booking-system audit log

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

Group psychotherapy practices sell one scarce asset: a clinician's hour. This practice runs several clinicians across multiple rooms, with a front desk that manages intake, insurance, and the shared calendar. Clients are ongoing — the same person, same clinician, weekly — so a canceled slot is revenue and momentum lost at once. Scheduling authority had concentrated in one office manager who guarded the master calendar, because every previous attempt to let anyone else touch it had ended in conflicts nobody noticed until a client was standing at the desk.

What it was costing

Scheduling lived in a shared calendar guarded by one office manager; clinicians' availabilities lived in their heads, insurance eligibility was checked by phone, and one canceled slot was rarely refilled.

What they could see

  • Clinicians' real availability lived in their heads; the calendar showed a fixed template that drifted from reality every week.
  • The office manager was the single point of every booking; leave or inbox overload and the calendar froze.
  • Eligibility was checked by phone per client, so it was skipped when the desk was busy and surfaced as rejected claims weeks later.
  • Canceled morning slots went unfilled because nobody had time to work the waitlist between check-ins.
  • Double bookings surfaced at check-in, which is the worst possible moment to learn the calendar was wrong.

The constraints we worked inside

  • Privacy rules mean no clinical details in scheduling data — the system sees appointment types and times, never reasons.
  • Each clinician owns their calendar; the tool must respect their boundaries, not enforce an office ideal.
  • Eligibility checks run through a clearinghouse with per-query costs — naive checking would burn money.

What had been tried before

Bought a group-practice scheduling SaaS and migrated the shared calendar onto it.
The product centered an administrator editing everyone's calendar — the exact bottleneck it was meant to remove — and clinicians never published availability into it.
Assigned the front desk to call insurers for eligibility before each new appointment.
Phone checks took ten minutes each, the desk stopped checking when the week filled, and unverified benefits surfaced as claim rejections a month later.
Ran a paper waitlist at the front desk for clients wanting earlier sessions.
The list went stale within days, preferences lived in the desk manager's memory, and offers went out only when someone remembered to work the list.

What we proposed

We proposed clinician-authored scheduling: each clinician publishes bookable windows that the system fills, so availability flows from the person who owns it instead of being guarded by the desk. Privacy shaped the data model from the first table — scheduling sees appointment types and times, never reasons — and the office manager moved from gatekeeper to exception-handler. Eligibility checks batch nightly for the coming week's new appointments only, with results cached and flagged for front-desk review, because per-query clearinghouse costs punish naive checking. A waitlist with stated preferences gets first refusal on canceled slots by text, turning cancellations into filled hours.

Just as important is what we ruled out, and why:

  • An industry-standard practice-management suite with scheduling includedIts calendars assume administrative control, which recreates the bottleneck; unbundling just the scheduling from such suites costs more than building the narrow tool.
  • Real-time eligibility checks at every booking touchPer-query clearinghouse fees make that a monthly bill nobody approved; nightly batching for new appointments captures nearly all the value at a fraction of the volume.
  • A shared team inbox with scheduling templatesThe practice had effectively run on one for years; another inbox changes the medium of the bottleneck, not the fact of it.

How the work ran

01Clinician-authored availability

Each clinician publishes bookable windows; the scheduler fills within them, and changes propagate without an office-manager bottleneck.

02Batch the eligibility spend

Eligibility checks batch nightly for the coming week's new appointments only, with results cached and flagged for front-desk review rather than checked on every touch.

03Fill cancellations from the waitlist

A waitlist with stated preferences gets first refusal on canceled slots by text, turning cancellations into filled appointments.

Delivered by the systems pod — engineer over 10 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

Node.js
The scheduling engine is mostly business rules over time windows; a single runtime kept the booking API, waitlist worker, and admin tooling in one codebase one engineer maintains.
TypeScript
The scheduling rules get retuned every term and the practice will never employ a developer; typed availability windows made those retunes safe refactors instead of edits whose mistakes surface at check-in.
Postgres
Conflict-free booking needs transactional guarantees — two bookings racing for one slot must resolve atomically, which is a database constraint, not an application hope.
Clearinghouse API
It is the practice's existing payer connectivity; batching nightly over it turned a per-query cost problem into a predictable weekly line item.
Twilio (waitlist texts)
Canceled slots fill or die within hours; texts reach clients between sessions without an app, and replies map back to specific offers.

What went wrong

Obstacle

The first waitlist let clients state any combination of days, times, and clinicians; a week of live use produced combinations no canceled slot could ever satisfy.

Handled: We replaced the free matrix with three preference slots, which matched nearly all real requests, and mapped legacy entries onto the closest slot at cutover.

Obstacle

One senior clinician refused fixed publishing windows entirely — her week reorganizes around client needs, and a rigid schedule felt like a violation of how she works.

Handled: We added coarse windows that she edits from her phone in under a minute; publishing became hers, which was the entire design argument.

Obstacle

Early integration tests against the production clearinghouse endpoint burned paid queries; the projected monthly bill made the office manager stop the testing phase.

Handled: We built a recorded-response harness from the first real responses, replayed it in CI, and gated live calls behind a flag the office controls.

How we worked together

Cadence
Monday morning demo with the office manager and practice owner, fifteen minutes; clinicians saw the tool only in their own calendars, where complaints actually surface.
Client side
The office manager co-designed every workflow and remained the engagement's product owner; one clinician reviewed privacy boundaries and the waitlist's client-facing texts.
Decisions
The owner decided anything touching clinician autonomy; the office manager decided desk workflow on the spot in demos, which kept decisions out of email.
They provided
A redacted export of the existing calendar structure, clearinghouse account access under the practice's agreement, and desk time for workflow pairing.

What changed

The headline: all clinicians on published availability, with the office manager out of the booking pathGuarded calendar → clinician-authored scheduling, read from Booking-system audit log. A second check: canceled slots refilled before the session hour at +26%.

The office manager's Monday no longer starts with calendar triage; the desk's first hour goes to the exceptions the system flags instead. Clinicians publish availability because it is theirs to publish, and the practice stopped discovering conflicts at check-in. The waitlist quietly became the practice's favorite feature: cancellations turn into texts within minutes, and clients who once waited weeks for a reschedule now get offered the next open hour. Eligibility results sit waiting at the desk each morning instead of arriving as claim rejections at month end.

The result was read from Booking-system audit log against the pre-engagement baseline over the stated window, with a guardrail check on canceled slots refilled before the session hour. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • The scheduling repository, database, and hosting under the practice's own accounts
  • Clearinghouse credentials and the batching configuration the office can retune seasonally
  • The recorded-response test harness and CI pipeline protecting future changes
  • A privacy-boundary document defining what scheduling data may never contain
  • Front-desk runbook for exceptions, waitlist offers, and eligibility flags

What we would do differently

We would cap the waitlist preference matrix at launch — the first version allowed any combination, and a week of real use showed three preferences that covered ninety percent of requests.

Custom SoftwareBooking Systems & Internal ToolsMental healthNode.js

Next case study

A marina replaced its whiteboard slip map with a booking tool that bills the right boat