Library/Builder Teardown

Build Log: 15 Spreadsheets to a HIPAA Warehouse in Under Three Weeks

The week-by-week build log of a healthcare data warehouse: EHR, PM, and billing unified in Snowflake in under three weeks — what each week actually contained, what the timeline driver really was, and the two surprises that cost days. Public excerpt; the full log lives in the Builder library.

The build, week by week

This is the log of the build behind a number we cite a lot: one client group, 15 disconnected spreadsheets, to a live Snowflake warehouse with real-time Tableau dashboards, in under three weeks. The point of publishing the shape of it: the timeline is reproducible, but only if you spend the weeks on the right things.

Week 1 — Access and landing. No modeling, no dashboards. The entire week is data access: API credentials for the EHR and PM system, export paths for billing, and the compliance envelope stood up first — BAAs, encrypted transport, role-scoped service accounts, audit logging. Then raw data landing on schedule. Rule of thumb: the calendar risk in a healthcare warehouse build is almost never engineering. It's credentialing and vendor access queues, so you start every one of those conversations on day one.

Week 2 — Identity and modeling. Patient and provider identity resolution across systems, then the definitions layer: one modeled meaning each for "patient," "visit," "collection." This week also contains the spreadsheet autopsy — every one of the 15 gets an interview with its maintainer, because spreadsheets in clinics are never just data. They're workflow systems wearing a data costume.

Week 3 — Dashboards and cutover. Tableau on the modeled layer, reconciliation against the numbers finance already believes, and the cutover ritual: the old spreadsheet process runs in parallel for one cycle, both outputs side by side, discrepancies explained line by line. Trust is built in that meeting, not in the pipeline.

What cost us days

A vendor API with an undocumented export ceiling. The EHR's API paginated cheerfully up to a point, then silently truncated historical pulls. Row counts against source-system reports caught it; nothing in the API response did. Standing rule since: every extraction job asserts expected volumes against an independent source count, and a silent truncation becomes a loud alert.

The spreadsheet that was also a to-do list. One "data" spreadsheet mixed records with reminders — rows that were tasks, not patients, distinguishable only by tribal knowledge. Migrating it as data would have seeded the warehouse with ghosts. The maintainer interview caught it; the schema didn't and couldn't.


The full build log — the day-level sequence, the credentialing checklist that protects week one, the parallel-run reconciliation template, and the spreadsheet-autopsy question list — lives in the Builder library.

The Full Teardown Is in the Builder Library

Implementation detail, checklists, and the parts we'd rather not have public — for members.

Unlock with Builder