Background animation: a simulated data pipeline. Records arrive from SFTP, APIs, webhooks, apps, SharePoint and Microsoft Graph, land in a bronze layer, are deduplicated, quality-checked and PII-masked in silver, modeled in gold and served in batches to analytics, apps and reverse ETL, with simulated incidents, automatic retries and deploys.

What the animation shows

id,amt · {"id":7} · POST
Raw records arriving in each source's own format
Bronze
Landed as-is: mixed sizes, still loose
Silver
Duplicates fade out; records with a red corner failed a quality rule and get fixed (✓) or quarantined; PII is masked (🔒 ███-██-6789)
Gold
Modeled into rows and shipped to consumers in batches
Chat thread
Pops up every so often, bottom right: an incident (alert, retry, recovery), a deploy with passing tests, or a reconcile run replaying quarantined records into bronze
Hover
A source or destination to trace its lineage

Simulated. Each behavior mirrors work I've done on production platforms.

Jonathan Thomas

Principal Data Engineer · Data Platform Architect

  1. 2006 Operations
  2. 2019 Analytics
  3. 2022 Engineering
  4. 2026 Principal

I design and own enterprise data platforms end to end, from ingestion and modeling to CI/CD, governance, observability, and the dashboards leaders act on. Today that means a lakehouse unifying 40+ systems at Mutual of Omaha Mortgage, built on Microsoft Fabric and now extending onto Databricks.

Focus
Technical lead on an enterprise Databricks migration spanning SQL Server, Snowflake, and Microsoft Fabric
Based
Costa Mesa, CA
Certified
Microsoft Certified: Fabric Analytics Engineer Associate (through 2027) · CompTIA A+
  • Systems integrated

    40+

    Unified into governed medallion layers

  • Saved per year

    $120K

    Offshore team replaced in 90 days

  • SQL Server data

    10 TB+

    Managed through the move to a lakehouse

  • Power BI dashboards

    40+

    Executive, operational, and migration reporting

Hands-on, every week4,005 GitHub contributions in the last year · active 53 of 53 weeks, 213 days

OctNovDecJanFebMarAprMayJunJulAugSepNone · Sep 21None · Sep 225 contributions · Sep 233 contributions · Sep 242 contributions · Sep 253 contributions · Sep 26None · Sep 27None · Sep 281 contributions · Sep 29None · Sep 30None · Oct 12 contributions · Oct 21 contributions · Oct 3None · Oct 4None · Oct 5None · Oct 62 contributions · Oct 712 contributions · Oct 82 contributions · Oct 93 contributions · Oct 101 contributions · Oct 11None · Oct 121 contributions · Oct 131 contributions · Oct 141 contributions · Oct 15None · Oct 16None · Oct 17None · Oct 18None · Oct 191 contributions · Oct 204 contributions · Oct 212 contributions · Oct 22None · Oct 23None · Oct 24None · Oct 25None · Oct 26None · Oct 27None · Oct 281 contributions · Oct 291 contributions · Oct 304 contributions · Oct 31None · Nov 1None · Nov 2None · Nov 33 contributions · Nov 4None · Nov 57 contributions · Nov 6None · Nov 7None · Nov 8None · Nov 91 contributions · Nov 103 contributions · Nov 113 contributions · Nov 122 contributions · Nov 132 contributions · Nov 14None · Nov 156 contributions · Nov 162 contributions · Nov 1711 contributions · Nov 186 contributions · Nov 198 contributions · Nov 20None · Nov 21None · Nov 22None · Nov 23None · Nov 241 contributions · Nov 256 contributions · Nov 26None · Nov 27None · Nov 28None · Nov 29None · Nov 30None · Dec 12 contributions · Dec 24 contributions · Dec 35 contributions · Dec 44 contributions · Dec 5None · Dec 6None · Dec 7None · Dec 83 contributions · Dec 91 contributions · Dec 104 contributions · Dec 111 contributions · Dec 123 contributions · Dec 13None · Dec 14None · Dec 152 contributions · Dec 16None · Dec 172 contributions · Dec 18None · Dec 19None · Dec 20None · Dec 211 contributions · Dec 221 contributions · Dec 23None · Dec 24None · Dec 251 contributions · Dec 26None · Dec 27None · Dec 281 contributions · Dec 291 contributions · Dec 301 contributions · Dec 31None · Jan 12 contributions · Jan 2None · Jan 3None · Jan 44 contributions · Jan 52 contributions · Jan 61 contributions · Jan 7None · Jan 85 contributions · Jan 9None · Jan 10None · Jan 115 contributions · Jan 124 contributions · Jan 13None · Jan 143 contributions · Jan 156 contributions · Jan 162 contributions · Jan 17None · Jan 181 contributions · Jan 19None · Jan 20None · Jan 211 contributions · Jan 222 contributions · Jan 23None · Jan 24None · Jan 25None · Jan 261 contributions · Jan 278 contributions · Jan 28None · Jan 298 contributions · Jan 30None · Jan 31None · Feb 1None · Feb 25 contributions · Feb 36 contributions · Feb 42 contributions · Feb 57 contributions · Feb 6None · Feb 7None · Feb 8None · Feb 93 contributions · Feb 106 contributions · Feb 117 contributions · Feb 12None · Feb 13None · Feb 14None · Feb 15None · Feb 161 contributions · Feb 17None · Feb 183 contributions · Feb 19None · Feb 201 contributions · Feb 21None · Feb 22None · Feb 236 contributions · Feb 241 contributions · Feb 25None · Feb 262 contributions · Feb 27None · Feb 28None · Mar 11 contributions · Mar 2None · Mar 31 contributions · Mar 4None · Mar 52 contributions · Mar 6None · Mar 7None · Mar 82 contributions · Mar 91 contributions · Mar 10None · Mar 111 contributions · Mar 12None · Mar 13None · Mar 14None · Mar 15None · Mar 162 contributions · Mar 173 contributions · Mar 183 contributions · Mar 191 contributions · Mar 20None · Mar 21None · Mar 22None · Mar 233 contributions · Mar 243 contributions · Mar 257 contributions · Mar 265 contributions · Mar 27None · Mar 28None · Mar 294 contributions · Mar 301 contributions · Mar 312 contributions · Apr 14 contributions · Apr 2None · Apr 3None · Apr 4None · Apr 5None · Apr 65 contributions · Apr 71 contributions · Apr 82 contributions · Apr 9None · Apr 10None · Apr 11None · Apr 121 contributions · Apr 134 contributions · Apr 147 contributions · Apr 15None · Apr 16None · Apr 17None · Apr 18None · Apr 194 contributions · Apr 201 contributions · Apr 213 contributions · Apr 221 contributions · Apr 232 contributions · Apr 24None · Apr 25None · Apr 26None · Apr 273 contributions · Apr 28None · Apr 29None · Apr 30None · May 1None · May 2None · May 3None · May 41 contributions · May 5None · May 62 contributions · May 7None · May 8None · May 9None · May 10None · May 11None · May 122 contributions · May 132 contributions · May 141 contributions · May 15None · May 16None · May 171 contributions · May 18None · May 191 contributions · May 20None · May 21None · May 22None · May 23None · May 24None · May 25None · May 262 contributions · May 274 contributions · May 281 contributions · May 29None · May 30None · May 311 contributions · Jun 1None · Jun 2None · Jun 3None · Jun 4None · Jun 5None · Jun 6None · Jun 71 contributions · Jun 83 contributions · Jun 9None · Jun 10None · Jun 11None · Jun 12None · Jun 13None · Jun 143 contributions · Jun 1522 contributions · Jun 1615 contributions · Jun 1715 contributions · Jun 18None · Jun 19None · Jun 20None · Jun 2131 contributions · Jun 2263 contributions · Jun 2343 contributions · Jun 2440 contributions · Jun 2511 contributions · Jun 26None · Jun 27None · Jun 288 contributions · Jun 2921 contributions · Jun 3018 contributions · Jul 121 contributions · Jul 2None · Jul 3None · Jul 4None · Jul 55 contributions · Jul 622 contributions · Jul 726 contributions · Jul 819 contributions · Jul 938 contributions · Jul 1021 contributions · Jul 1177 contributions · Jul 1249 contributions · Jul 1365 contributions · Jul 1472 contributions · Jul 1547 contributions · Jul 1659 contributions · Jul 1736 contributions · Jul 1835 contributions · Jul 1965 contributions · Jul 2038 contributions · Jul 2149 contributions · Jul 2271 contributions · Jul 2351 contributions · Jul 2443 contributions · Jul 25None · Jul 2625 contributions · Jul 2758 contributions · Jul 2810 contributions · Jul 2965 contributions · Jul 3082 contributions · Jul 3137 contributions · Aug 121 contributions · Aug 242 contributions · Aug 346 contributions · Aug 446 contributions · Aug 551 contributions · Aug 652 contributions · Aug 762 contributions · Aug 87 contributions · Aug 920 contributions · Aug 1054 contributions · Aug 1135 contributions · Aug 1253 contributions · Aug 1320 contributions · Aug 146 contributions · Aug 15None · Aug 1623 contributions · Aug 1720 contributions · Aug 1850 contributions · Aug 1960 contributions · Aug 2077 contributions · Aug 2199 contributions · Aug 2215 contributions · Aug 2339 contributions · Aug 2458 contributions · Aug 2565 contributions · Aug 2680 contributions · Aug 2744 contributions · Aug 289 contributions · Aug 29None · Aug 30None · Aug 3130 contributions · Sep 132 contributions · Sep 217 contributions · Sep 322 contributions · Sep 42 contributions · Sep 5None · Sep 6None · Sep 731 contributions · Sep 8113 contributions · Sep 971 contributions · Sep 104 contributions · Sep 114 contributions · Sep 1223 contributions · Sep 1370 contributions · Sep 1492 contributions · Sep 1546 contributions · Sep 1622 contributions · Sep 1712 contributions · Sep 18None · Sep 1913 contributions · Sep 2047 contributions · Sep 2113 contributions · Sep 2266 contributions · Sep 23139 contributions · Sep 24146 contributions · Sep 252 contributions · Sep 26

Mostly private work repositories, so GitHub shows counts only. Snapshot Sep 26.

Selected work

Platform-scale builds where the engineering changed how the business works with data. Select one for detail.

Migration Validation Tool

Compares migrated tables row by row after normalizing schemas, keys, types, and casing, then has Claude agents write the root-cause analysis and a report for analysts.

  • React
  • Databricks Apps
  • DataComPy
  • Hashing
  • Claude

Decisions

The calls behind the platform: what I chose, what it cost, and what it bought. Select one for detail.

Add a Corporate layer above Gold

Context
40+ operational systems feed one lakehouse, and many teams build on it. Stopping at Gold would leave each team to define its own metrics.
What I chose
Extended the Bronze/Silver/Gold medallion with a Corporate serving layer that enforces semantic consistency and governance, backed by a tenant-wide data dictionary.
What it cost
One more layer to model and maintain, and changes to a shared definition go through one owner instead of each team.
What it bought
Downstream teams consume one definition of a metric rather than negotiating their own.

From billing desks to data platforms

One bar per employer; each segment is a role I held there. Select an employer to see what I delivered.

  • Operations
  • Analytics
  • Engineering
  • Each segment is a role

Mutual of Omaha Mortgage

Jun 2022 – Present · 4 yr 3 mo · 4 roles

  1. Principal Data Engineer Mar 2026 – Present · 6 mo
    • Technical lead for the enterprise Databricks migration, directing three data engineers in a 10+ person program.
    • Own Unity Catalog governance for the Databricks platform, including catalog and schema design, grants, and data access and security design.
    • Keep one set of architecture, pipeline, and governance standards across four production platforms: legacy SQL Server, Snowflake, Microsoft Fabric, and Databricks.
    • Still own the Snowflake platform after the re-org, including its Terraform infrastructure and GitHub Actions deployments.
    • Built a reconciliation app (React, Databricks Apps, DataComPy, row hashing, Claude agents) that automated migration validation and root-cause analysis.
    • Wrote reusable validation code that normalizes schemas, composite keys, data types, strings, and casing so tables compare row by row.
    • Set team standards for PySpark, Git workflow, CI/CD, notebook structure, and data quality.
    • Databricks
    • Snowflake
    • Delta Lake
    • PySpark
    • Spark SQL
    • Microsoft Fabric
    • SQL Server
    • React
    • DataComPy
    • Claude
  2. Data Warehouse Manager Mar 2025 – Mar 2026 · 1 yr
    • Led the Microsoft Fabric data warehouse build with a two-person team while running the legacy reporting platform.
    • Took a Snowflake platform from concept to production (~250 tables, 10+ TB, the largest dataset in the environment), merging a vendor data share with SQL Server history and feeding Databricks through CDC and query federation and Microsoft Fabric through mirroring.
    • Set up Snowflake users, SSO, RBAC, streams, tasks, and stored procedures, plus budgets, spend alerts, and a metadata feed into Fabric that tracks spend, job failures, and daily runs.
    • Managed Snowflake environments and access as code with Terraform, deployed through GitHub Actions.
    • Architected a lakehouse integrating 40+ operational systems into Bronze, Silver, Gold, and Corporate data products on Microsoft Fabric, Delta Lake, and PySpark.
    • Designed PySpark pipelines for financial, CRM, marketing, telephony, identity, and security systems.
    • Wrote Airflow DAGs in Python for internal and vendor file exports, Power BI snapshot reports, and data freshness checks.
    • Added near real-time pipeline monitoring and anomaly alerts using Azure Log Analytics.
    • Introduced source control, environment promotion, and CI/CD for Fabric, SQL Server, and Power BI using Azure DevOps and GitHub.
    • Designed Direct Lake semantic models that need no scheduled refreshes.
    • Tuned workloads and SQL Server performance to meet SLAs, and reported platform spend by department.
    • Owned Power BI governance, including workspace structure, Entra ID access, lifecycle management, and a tenant-wide data dictionary.
    • Replaced an offshore team within 90 days, saving about $120K a year.
    • Managed 10+ TB of SQL Server data through the move to the lakehouse.
    • Microsoft Fabric
    • Snowflake
    • PySpark
    • Delta Lake
    • SQL Server
    • Power BI
    • Apache Airflow
    • Azure Data Factory
    • Azure DevOps
    • GitHub
    • Azure Log Analytics
  3. Data Warehouse Administrator Mar 2024 – Mar 2025 · 1 yr
    • Same scope as the Data Warehouse Manager role above; title changed March 2025.
    • Microsoft Fabric
    • Snowflake
    • PySpark
    • Delta Lake
    • SQL Server
    • Power BI
    • Apache Airflow
    • Azure Data Factory
    • Azure DevOps
    • GitHub
    • Azure Log Analytics
  4. Marketing Data & Analytics Manager Jun 2022 – Mar 2024 · 1 yr 9 mo
    • Led an analytics modernization that improved data process efficiency by roughly 300%.
    • Architected ELT and Reverse ETL pipelines with Python, PySpark, Azure Data Factory, SQL Server, and Microsoft Fabric to centralize operational and marketing data and sync it back to business systems.
    • Hired and mentored a data team while staying hands-on.
    • Delivered 40+ Power BI dashboards and semantic models for executive reporting, operations, and migration validation.
    • Built real-time operational reporting on Salesforce and other systems for monitoring and security.
    • Set team practices for data quality, modeling, version control, and automation.
    • Python
    • PySpark
    • Azure Data Factory
    • SQL Server
    • Power BI
    • Salesforce
    • Azure DevOps
    • Reverse ETL

Stack

What I build with, and the systems I've integrated.

Data Platforms
Microsoft Fabric, Databricks, Delta Lake, SQL Server, Azure SQL, Snowflake, ADLS Gen2
Languages
Python, SQL, T-SQL, PySpark, Snowpark, Spark SQL, DAX, Power Query M, C#, TypeScript, PowerShell, Pandas, VBA
Pipelines & Orchestration
Apache Airflow, Azure Data Factory, Fabric Data Pipelines, SSIS, SQL Server Replication, Snowflake Streams & Tasks, Change Data Capture (CDC), Batch & Streaming, Azure Event Hubs
Architecture & Modeling
Lakehouse Architecture, Medallion Architecture, Dimensional Modeling, SCD Type 1 & Type 2, Source-to-Target Mapping, Data Modeling, Data Warehousing, Distributed Processing, ETL / ELT, Data Products, Materialized Lake Views, Corporate Serving Layer
Governance & Compliance
Data Governance, Data Quality Engineering, Metadata Management, Data Cataloging, Entra ID RBAC, Snowflake RBAC, Unity Catalog, SSO / SAML, PII / NPI Handling, FCRA, SOX, HIPAA, Data Dictionary, Data Quality Rules
Cloud & DevOps
Azure, Azure DevOps, GitHub, Git, CI/CD, Environment Promotion, Release Governance, Terraform, Infrastructure as Code, GitHub Actions, YAML, Entra ID
Integration
REST APIs, SOAP APIs, Webhooks, SFTP / File Ingestion, Microsoft Graph API, OAuth2 / Service Principals, Reverse ETL, Salesforce Integration, Secure Data Sharing, Query Federation, Database Mirroring, Power Automate, Zapier, XML, SharePoint
BI & Analytics
Power BI, Direct Lake, Semantic Modeling, Row-Level Security, Executive Reporting, Self-Service BI, Power Apps, SSRS, Databricks Apps, Self-Service Apps
Observability & Reliability
Azure Log Analytics, Pipeline Monitoring, Anomaly Alerting, Performance Tuning, SLA Management, Cost & Capacity Management
AI Engineering
Claude, LLM Workflows, AI Agents, Prompt Engineering, DataComPy
Leadership & Delivery
Hiring, Mentorship, Engineering Standards, Vendor Management, Jira, Confluence
Systems integrated · 40+
Encompass, nCino, SimpleNexus, LoanCare, DMI, CoreLogic, TransUnion, NMLS, Salesforce, Relcu CRM, Velocify, Total Expert, Five9, ADP, Emburse / Certify, Microsoft Defender, Microsoft Entra, Cofense, JAMF, Azure DevOps · sample of 20
Managed ELT & iPaaS (POC and short-term production)
Fivetran, Airbyte, Estuary, Talend, TIBCO

Let's build data people trust.

Always glad to talk data platforms, lakehouse modernization, and hard data-quality problems.

  • ✓ Microsoft Certified: Fabric Analytics Engineer Associate (through 2027)
  • ✓ CompTIA A+