CV

Data engineer and architect, twelve years in. The short version is below: what was built, and the one or two numbers that matter.

Jump to the timeline

What I have built

  1. The data behind the LLM

    Finally, 2026

    labeled training rows
    12.6M
    predictions scored across 5 models
    381K

    The corpus, shadow-run harness, and graduation marts that decide whether an LLM classifier may post journal entries without a human.

    The measurement layer that decides whether an LLM classifier may post journal entries into a customer’s books without a human: a labeled corpus with dual-watermark incremental selection so user edits never leave labels stale, an SCD-2 shadow-run harness, and marts that encode the graduation bars, precision at confidence 0.9 and above, week-over-week drift, a high-confidence volume floor, and a model-collapse canary. One macro defines the eval denominator everywhere, so offline and online scoring cannot drift apart. Authored the retrieval architecture and corpus design for the customer-facing RAG assistant, and built the per-call Bedrock cost and MCP tool-call analytics around it.

  2. Governance built for a regulated fintech

    Finally, 2025 to 2026

    Row access by role membership over an entitlements table, masking split by job, and every service account moved onto the proper user type with rotated keys.

    Snowflake governance from scratch for the company’s LLM surfaces. The plan I was handed called for Oracle-style session attributes, which Snowflake does not have and which a row access policy could not trust anyway, since session variables are spoofable. Isolation is instead a Row Access Policy over an entitlements table checked by role membership, the one primitive that cannot be assumed without a grant. Masking is split by job: a financials reader sees free text and dollar values, an eval reader sees the text and not the dollars. Then the unglamorous half: every service account moved onto Snowflake’s actual service-user type, keys rotated, and SCIM 2.0 discovery work alongside the IT security team. None of it is exotic. All of it is what an auditor asks about first.

  3. Borrowing capacity recovered from the loan tapes

    Finally, 2026

    borrowing base recovered
    ~$500K

    Traced the data-quality defects dropping companies from the lender's loan tape, fixed them upstream, and the borrowing base rose by roughly half a million dollars.

    The card program is funded by a credit facility that advances funds against eligible receivables, computed from a loan tape of every company and its balances. Companies missing from the tape, or present with bad data, do not count. A set of companies had gone missing because of data-quality defects in sources upstream of the warehouse. Traced the root causes to mission-critical spreadsheets and backend data-quality issues, and fixed them all by correcting the data upstream, after backend query approval. The corrected tapes raised the borrowing base by roughly half a million dollars.

  4. A data platform where there was none

    Finally, 2025 to 2026

    dbt models
    438
    tests, up from zero
    326

    Inherited 281 untested replication models and built the entire analytics layer, orchestration, governance, and external reporting above them, solo.

    Sole data engineer for a three-product fintech. Inherited 281 source-replication models with no tests, no documentation, and nothing above the source layer, including a schema-per-tenant source flattened across roughly 1,600 customer schemas of about 120 tables each. Built everything above it, product by product: 157 analytics models, 4 SCD-2 snapshots, 75 native Snowflake procedures, tasks, and report functions, a warehouse holding about 280M rows and materializing 10.6B a year. The real deliverable is the dependency-review checklist in the repo, so the next person can operate it without me.

  5. A corporate card program, modeled end to end

    Finally, 2025 to 2026

    settled card spend modeled
    $448.8M
    transaction lifecycle records
    1.4M

    Spend, interchange, risk, limits, rewards, and loss modeled per company and cohort, with dashboards for exec, finance, and risk.

    Spend and interchange per company and per cohort per month, risk, limits, rewards and loss reporting, and a usage suite with card-program and merchant-category dimensions and business-day weighting from a federal-holiday seed so month-over-month spend is not distorted by calendar shape. Dashboards for exec, finance, and risk, plus the reporting a sponsor bank and compliance require.

  6. The numbers the board reads

    Finally, 2025 to 2026

    companies in one dimension, from three identity systems
    26,627
    platform revenue modeled
    $20.0M

    One company dimension from three identity systems and a versioned paying-customer definition enforced in one place, so the board mart cannot disagree with it.

    One company dimension across every product and two ledger generations, a versioned paying-customer definition enforced in exactly one place so the dimension and the board mart physically cannot disagree, dual-billing-system ARR with its match rate documented rather than hidden, cohort retention on a churn definition that does not allow resurrection, and a rolling thirty-day north-star metric. Hardcoded exclusions became named metric variants so the exclusion is visible in the column, not buried in a filter.

  7. A six-hour credit-risk model, now thirteen seconds

    Finally, 2026

    rebuild time
    6 h to 13 s
    spill to disk
    2 TB to 0

    Five chained recursive CTEs became window functions over a date spine, then the hard part: point-in-time grace periods, cure detection, and a charge-off rule with recovery netting.

    The daily delinquency and balance model behind two lender tapes and the sponsor-bank pack was five chained recursive CTEs, each level multiplying the last. Rewrote every recursion as a window function over a shared date spine, in twelve steps that cut cardinality early. It moved from an X-Large warehouse to an X-Small, measured in query history. Performance was the easy half. The hard half was point-in-time grace periods through an SCD-2 snapshot, cycle-aware cure detection, and a charge-off rule with recovery netting that now produces the company’s $9.8M loss series, all backed by a monotonicity test that insists days past due go up by exactly one or reset to zero.

  8. Warehouse spend cut by nearly three quarters

    Finally, 2025 to 2026

    saved in 2026 to date
    $50K
    less pipeline compute
    72%

    Ninety-two tenant-flattening models were rebuilt nightly when nine were read. Disabling the rest cut query volume 86%, and deleting work beat optimizing it.

    Across Snowflake, dbt Cloud, and tooling, with no loss of reliability. The lever was not tuning. Ninety-two tenant-flattening models were rebuilt nightly when nine fed anything downstream, and each one fanned out across about 120 tenant schemas. Disabling the rest took pipeline query volume from 13 million a month to under 2 million, an 86% drop that tracks a single commit. Deleting work beat optimizing it by an order of magnitude.

  9. Two vendor exits, no data outage

    Finally, 2026

    tables moved off Fivetran
    295
    live VPC peerings adopted into Terraform
    8

    dbt Cloud to MWAA in Terraform with Cosmos and Dataset scheduling, Fivetran to self-hosted Airbyte across four sources, eight VPC peerings adopted into state.

    Replaced dbt Cloud with AWS MWAA provisioned in Terraform: IAM, a versioned S3 DAG bucket, GitHub Actions OIDC deploys, Secrets Manager as the connection backend, and an Okta-gated webserver. Every DAG on it is mine, rendered by Astronomer Cosmos with per-model tasks for retries, Airflow Dataset scheduling so gold never builds on stale silver, Slack alerting, and a manifest-drift check in CI. Separately moved four sources off Fivetran to self-hosted Airbyte, about 295 tables and 34M rows, with least-privilege replication users on Aurora reader endpoints and two weeks of post-cutover repair where Airbyte lands JSON and metadata differently. Left the card source on Fivetran on purpose, since it is on a decommission path. And declined to apply one Terraform plan whose drift belonged to another team and would have replaced their node group.

  10. Regulated reporting that could not be late

    Finally, 2025 to 2026

    rows per daily loan tape
    282K
    metrics in the monthly sponsor-bank and Visa pack
    119

    Daily and monthly GPG-encrypted loan tapes to a credit facility and a 119-metric sponsor-bank and Visa pack, with runbooks so the cycle is reproducible.

    Daily and monthly GPG-encrypted loan tapes to a credit facility via Snowflake tasks, Python stored procedures, and an S3-triggered Lambda and SQS fan-out to SFTP, with a re-runnable backfill and three operator runbooks. Most of the work was correctness nobody sees: KYC entity resolution, credit limits floored at zero, charge-off and recovery columns wired in from the delinquency model, and one afternoon finding commas inside application IDs corrupting the CSV. The monthly sponsor-bank and Visa program pack runs on 345 parameterized queries with a written operating procedure, so the cycle is reproducible rather than tribal knowledge.

  11. The pipeline behind a recommendation model

    Jane.com, 2020 to 2022

    clickstream rows per training build
    1B
    rolling lookback
    10 mo

    Airflow and PySpark on EMR built the recommendation model's training data from a billion clickstream rows and post-processed its output through SageMaker.

    Airflow DAGs running PySpark and SparkSQL on EMR to build the training data for the product-recommendation model, a billion clickstream rows over a rolling ten-month lookback, and to post-process its output through SageMaker, with predictions landing in Redshift every hour for analysts. Data-quality DAGs scanned for anomalies and alerted before bad data reached the model. Along the way, legacy SSIS workbooks were retired for Python pipelines in Airflow and a dozen more were built. Sole data engineer for four months after turnover; mentored two junior engineers.

  12. A reporting platform in six months

    UnitedHealth Group, 2019 to 2020

    analytics-ready data
    2 TB

    Designed the schema and pipelines for a single reporting source on SQL Server, and brought the team onto Git.

    Designed the schema and pipelines for a single reporting source on SQL Server, giving business users one place for dashboards. Brought the team onto Git.

Said about the work

He joined Finally to help us stand up our Data and Data Governance programs, and delivered on that mandate within a tight timeline, in a highly regulated industry.

Ernesto Mancebo, engineering and AI platforms, Finally. October 2026.

Timeline

  1. Jul 2025 to Sep 2026

    FinallyFounding Senior Data Engineer

  2. Nov 2022 to Mar 2025

    The Lifetime Value Co.Senior ETL Engineer II

    Airflow pipelines for secured PII and product data across Redshift, BigQuery, and Elasticsearch. Mentored junior engineers through code review.

  3. Jan 2022 to Sep 2022

    Rent the RunwayData Engineer III

    Object-oriented Prefect flows pulling APIs and MongoDB into Snowflake, with dbt tests that caught data issues before production.

  4. Feb 2020 to Jan 2022

    Jane.comSenior Data Engineer II

  5. Jul 2019 to Jan 2020

    UnitedHealth GroupSenior Data Engineer

  6. Jul 2017 to Jul 2019

    PluralsightAnalytics Engineer II

    Sales and marketing ELT on dbt and GCP, attribution modeling in Hive and Impala, and an Airflow pipeline in Docker.

  7. Oct 2015 to Jul 2017

    OracleTechnical Support Engineer II, Oracle BI

    Where the data career started: BI Publisher data models and visualizations on the Oracle BI platform.

  8. Dec 2013 to Oct 2015

    MasterControlTechnical Support Engineer II

Education