A readout to a client's leadership team
Case study

Suvretta Capital halved manual fixes in its daily data pipeline

The fund's daily data runs needed people to step in by hand too often, putting each morning's data at risk.

Suvretta Capital

50%fewer manual interventions in daily data runs

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#

MeasureBeforeAfter
Manual interventions in daily runsRoutine, several per weekAbout half as many
Failure handlingFound and rerun by handAutomatic retries, clear alerts on the rest
Bad inputsDiscovered downstreamStopped 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.

ShareLinkedInEmail

Scope covered the Python ingestion and processing code and the dbt project running on Snowflake, orchestrated by Airflow. The audit catalogued manual touchpoints, failure modes and untested assumptions in each job.

Refactoring focused on idempotent loads, dbt tests on sources and models, explicit dependency ordering, and Airflow retry and alerting configuration. A failed step either recovers on retry or stops the run with an actionable message.

Next step

Let's build the case study we tell next.