The workflow before#
Suvretta Capital is an investment firm, and its people expect fresh data every morning. The daily runs were built on Python scripts and dbt models, orchestrated by Airflow into Snowflake. The pieces worked, but many steps quietly assumed someone would be watching. When a load failed or an input came in wrong, a member of the data team had to notice, figure out what broke, then rerun the job or patch the data by hand. Several times a week, the morning started with cleanup. The pipeline was fragile in ways nobody had written down, and the team's time went to keeping it running instead of improving it.
What we built#
We rewrote the daily pipeline so it can look after itself. First we audited the Python and dbt code end to end and mapped every point where a person had to step in. Then we removed those dependencies one by one. On most days the pipeline now runs unattended, and when something does go wrong, the team hears about it clearly and early.
A map of every manual touchpoint
The audit catalogued each place someone had to intervene, each way a job could fail and each assumption no test checked. We started there because you can't automate a fix nobody has written down. The map also gave the team a shared list to work through.
Loads that are safe to rerun
We rebuilt the loads so running a job twice gives the same result as running it once. A failed step can simply run again, with no one cleaning up half-loaded tables first. Airflow now retries on its own, and most failures recover without a person touching them.
Bad data stops the run, loudly
We added dbt tests on sources and models, so a bad input halts the run with a clear error instead of flowing into the morning's numbers. We chose to stop the run over letting it continue with a warning, because for an investment team a wrong number is worse than a late one.
How we delivered it
We worked inside the fund's existing stack, with no new tools and no migration. The audit came first, then refactoring in order of how often each issue caused a manual fix, so the most common interruptions went away earliest. The fund's data team owns the codebase and runs it day to day.
Before and after#
| Measure | Before | After |
|---|---|---|
| Manual interventions in daily runs | Routine, several per week | About half as many |
| Failure handling | Found and rerun by hand | Automatic retries, clear alerts on the rest |
| Bad inputs | Discovered downstream | Stopped at the source with a clear error |
What's next#
A dependable daily pipeline into Snowflake is the base for AI work. The natural next step is giving investment and operations staff data they can query directly, including asking questions in plain language, knowing the numbers underneath were tested before they arrived.





