PompeiiData Engineer / Data Analyst · May 2019 – Mar 2021
Joined to build the data function from zero. Turned a sprawl of operational and marketing systems into one clean warehouse every business team could self-serve, then layered activation and data science on top of the same model.
Operational systems
Sales and the web store ran on two operational systems — Odoo and Shopify — each holding numbers the business couldn't easily see.
Every marketing channel
On top of that, the brand lived across Instagram, TikTok and a stack of ad platforms — each with its own dashboard and its own truth.
Ingest in parallel
The key move: every source — operational and marketing — pulled in concurrently, each on its own connector, all landing at once in AWS. No single feed could bottleneck the rest.
One clean model
A pipeline in SQL, pandas and Spark reshaped the mess into a normalized fact + dimension warehouse — designed for non-technical users.
KPIs, no SQL required
Every team got a dashboard of their own KPIs that auto-refreshed the moment the pipeline finished. No tickets, no waiting, no data knowledge needed.
Everything off one model
The same clean model drove email-marketing campaigns, customer clustering / segmentation, and sales forecasting — activation and science the business could act on.
Making ScienceData Engineer · Mar 2021 – Jul 2021
Built the pipeline for a very high-load ad-optimization system: ~1.4 TB of ad data a day fanned out across ~1000 Cloud Functions into BigQuery, crossed against the business team's threshold mappings, then written straight back to the ad platforms as optimized bids.
1.4 TB, every day
Every day the project dropped ~1000 files of ad data into a GCS bucket — same structure, keyed by bid_id, about 1.4 TB per load.
The business playbook
The marketing team's rules lived in Excel mappings: thresholds that said, as an ad's return moved up or down, how much to raise or cut its spend.
Watch, then fan out to ~1000 functions
A watcher on the bucket fired the instant files landed, fanning out ~1000 Cloud Functions in parallel. They processed until they hit the function time limit, then spawned the next 1000 — chewing through the whole load in waves, straight into BigQuery.
Cross it in BigQuery
In BigQuery the ad data is crossed and transformed against the mappings — every bid scored against the business thresholds to decide where spend should move.
A cut for the analysts
A smaller, curated version drops into a datamart — the layer the analysts dig into for their own models.
Bids back to the platforms
And the optimized bids go straight from BigQuery back onto the ad platforms — spend gutted from high-CPC, low-ROI ads and pushed toward the winners. A closed loop, 1.4 TB a day.
AccentureData Engineer · Jul 2021 – May 2022
Accenture had gone all-in as a Google Cloud partner and needed its on-prem apps rebuilt on GCP. Recreated four applications — three Hadoop / Spark-Scala / Hive pipelines scheduled by Oozie, plus one with an ML layer — as an event-driven GCP architecture: files land in Cloud Storage, Pub/Sub fires, and a Cloud Composer (Airflow) DAG runs the PySpark job on Dataproc while monitoring it, writing out to BigQuery.
The old architecture
On-prem: Hadoop / HDFS storage and Spark in Scala writing Hive tables, all scheduled by Oozie — the shape of all four applications.
Rebuilt on GCP: files land, Pub/Sub fires
We recreated it natively on GCP. Files land in Cloud Storage, and Pub/Sub fires the instant they do — no waiting on a schedule.
Pub/Sub calls Cloud Composer
Pub/Sub kicks off a Cloud Composer (Airflow) DAG — the orchestrator for the whole run.
The DAG: run + monitor
The DAG branches into two tasks in parallel: launch the PySpark job on Dataproc, and monitor it end to end.
Write to BigQuery
The Dataproc job writes its results to BigQuery. Four apps rebuilt — one with an ML layer — running native on GCP.
UnipolData Engineer · Jun 2022 – May 2023
Unipol had no data platform — so I built one from the ground up: a full dbt setup on AWS with best practices from day one, and Airflow scheduling every run to automate the pipeline end to end.
Built from the ground up
Unipol had no data platform. Job one was building the whole thing from scratch — starting from the raw source systems.
Land it on AWS
Raw operational data landed in S3 and loaded into Redshift as the warehouse.
Model it with dbt
A full dbt setup — models, tests, best practices from day one — turned the raw tables into clean, analytics-ready data marts.
Automated end to end
Airflow scheduled every dbt run, automating the whole pipeline end to end — no manual steps left.
LoeweData Engineer · Jun 2023 – Nov 2023
Set up Loewe's data pipelines in Dataform and automated large-scale data transfers in Python — a clean, repeatable path from sources into the warehouse.
Scattered sources
Loewe's data was spread across systems with no reliable path into a warehouse.
Automated transfers
Automated the large-scale moves in Python — repeatable, hands-off.
Modeled in Dataform
Set up the pipelines and models in Dataform.
Analytics-ready
Landing clean, analytics-ready data in the warehouse.
NovartisAI Engineer · Jun 2023 – Oct 2023
Made Novartis's internal GPT tool actually useful: built an efficient embedding pipeline and vector database so it could retrieve and answer from the company's own content instead of guessing.
A GPT tool with no grounding
Novartis had an internal GPT tool that needed to answer from a large body of internal content — but couldn't reach it.
Embed everything
Built an efficient embedding pipeline to turn that content into vectors.
Vector retrieval
Stored them in a vector database tuned for fast, relevant retrieval.
Grounded answers
Now the GPT tool pulls the right context and answers grounded in real internal data.
AirbusData Engineer · Nov 2023 – Jan 2024
Built the AWS data pipelines feeding a chip-failure prediction model, putting reliable failure analysis in the hands of Airbus's in-house scientists.
Why do chips fail?
Airbus needed to predict chip failures from mountains of test and sensor data.
AWS pipelines
Built the pipelines on AWS to ingest and prepare that data reliably.
Feed the model
The clean data fed a failure-prediction model.
Scientists in control
Which put failure analysis directly in the hands of Airbus's in-house scientists.
SanofiData Engineer · Jan 2024 – Jan 2025
Led Sanofi's migration from AWS to Snowflake — designing the new architecture and engineering an automated, bidirectional transfer layer so legacy systems on AWS kept running throughout. Zero operational downtime, reporting never interrupted.
Infrastructure on AWS
Sanofi's data infrastructure lived on AWS, with legacy systems depending on it — nothing could go dark during a move.
A bidirectional bridge
The key move: an automated, bidirectional transfer layer between AWS and Snowflake, keeping both sides in step in real time.
New home: Snowflake
Data migrated into a new Snowflake architecture, while the bridge kept the AWS legacy systems working both ways.
Reporting never stopped
Reporting ran uninterrupted through the entire transition — zero operational downtime.
XingData Engineer · Jan 2025 – Mar 2025
Migrated Xing's on-prem Hadoop / Hive pipelines to Snowflake — rebuilt the transformations in dbt and orchestrated the whole thing with Airflow on Astronomer.
On-prem Hadoop / Hive
Xing's pipelines ran on-prem: Hadoop clusters feeding Hive tables.
Rebuilt on Snowflake
Everything moved to Snowflake as the new warehouse — no clusters to maintain.
Modeled in dbt
The transformations were rebuilt in dbt — models and tests — landing clean analytics marts.
Orchestrated on Astronomer
Airflow on Astronomer scheduled and orchestrated every run.
AdevintaData Engineer · Mar 2025 – Oct 2025
During Adevinta's split into independent companies, led technical delivery for the housing vertical (Fotocasa / Realia). Built an algorithm that migrated every Adobe Analytics report — bespoke logic and all — into GA4, with zero loss of data or business-critical metrics.
Adobe, and a split looming
Adevinta was splitting into independent companies; the housing vertical needed every Adobe Analytics report moved to GA4.
What actually matters
Paired with a business analyst to interview report owners and pin down exactly which metrics were essential.
An algorithm, not by hand
Built an algorithm that migrated every report automatically — including the bespoke, report-specific logic no template covered.
Into GA4, zero loss
Every report rebuilt in GA4, owned end to end, with zero loss of data or business-critical metrics.
PermiraData / AI Engineer · Oct 2025 – Jul 2026
Built an LLM analytics agent on Snowflake that lets non-technical stakeholders self-serve financial metrics in plain English, querying real production tables. Collapsed a 6-role, multi-week request pipeline into one real-time query, grounded in the finance team's real source files for full auditability.
Six roles, weeks of waiting
A single financial metric used to run a 6-role, multi-week pipeline: analyst → scrum → engineering → product → QA → production.
Just ask
I built an LLM agent that takes the question in plain English — e.g. 'what was Adevinta's EBITDA in 2025?' — no SQL, no ticket.
Query the real tables
The agent queries real production tables in Snowflake, live — not a sample, not a cache.
Grounded and auditable
A v2 grounds every answer in the finance team's real source files with source attribution — the difference between a demo and a production-trusted system. One query, real time.