// success cases · 2019 — 2026

Seven years turning slow processes into systems.

Six projects across five companies. Every one started the same way: something critical was slow, manual, or impossible to trust. Here's what I built — and what changed.

6 cases · 5 companies · 2019 → 2026
Case 01

Geospatial automation at national scale

Esri Colombia · Technical Marketing Engineer · GIS Advisor · Feb 2019 – Sep 2021
The problem

Colombia's national census arrived as raw, inconsistent extracts that had to be hand-cleaned and joined to cartography before anyone could put it on a map. Each delivery took weeks, and every refresh started from zero. COVID-19 raised the stakes: case data had to reach a public map every single day.

What I built

Python pipelines that normalized the census tables, validated every record-to-geometry join and published map-ready layers automatically — built on ArcPy and the ArcGIS API for Python, with R and Bash handling the heavier reshaping. For COVID-19, a scheduled job read the daily case feed, reshaped it and pushed it straight into a REST feature service with no human in the loop.

Result
Weeks → 1 day
Census processing
15 h → 15 min
Daily COVID-19 update
0
Manual steps in the refresh
PythonArcPyArcGIS API for PythonArcGIS OnlineREST APIsRBash
Case 02

From NiFi to Spark: a six-hour batch in twenty minutes

Rappi · RappiPay · Data Engineer · Oct 2021 – Dec 2022
The problem

Batch ingestion ran on Apache NiFi. A full cycle took around six hours, which meant the business opened its day without fresh data — and the flow-based setup was hard to scale, hard to observe, and hard to reason about when a run failed at 4 a.m.

What I built

I migrated the batch path to Apache Spark jobs on AWS Glue, orchestrated by Apache Airflow. That brought partitioned and incremental loads, dependency-aware scheduling, retries, and real visibility into every run — feeding the Snowflake data marts used by BI, Data Science and Operations. NiFi came out of the batch path entirely.

Result
6 h → 20 min
~18× faster ingestion
~60 GB
Processed per day
~150M
Rows on peak days
Apache SparkAWS GlueApache AirflowApache NiFiSnowflakeAmazon S3Python
Case 03

The data behind a banking license

Rappi · RappiPay · Data Engineer · Oct 2021 – Dec 2022
The problem

RappiPay was applying for a banking license in Colombia. That meant regulatory reports in exactly the formats the regulator expects, on a fixed calendar, assembled by hand every cycle — and cardholders who needed their credit-card statement records in near real time, not the next morning.

What I built

I modeled the regulatory reports in Snowflake — dimensional models plus stored procedures — and automated the whole chain end to end: generation, formatting, and delivery of the report files into the government's shared folder. Alongside it, a streaming path built on Apache NiFi and Apache Kafka delivered credit-card statement records in near real time.

Result
Manual → scheduled
Auditable regulatory reporting
Near real time
Card statement records
A licensed bank
Still operating today
SnowflakeSQLApache KafkaApache NiFiApache AirflowPythonDimensional modeling
Case 04

A lakehouse that feeds a client-facing app

Globant · Semi Senior Data Engineer · Dec 2022 – Mar 2024
The problem

A conflict-of-interest application needed to answer questions spanning around ten disconnected sources — Oracle, PostgreSQL and flat files — with relationship traversal between entities and instant per-company lookup. None of that infrastructure existed yet.

What I built

The first end-to-end pipeline on the account: ingestion from every source into a multi-layer data lake on Apache Iceberg — raw, curated and consumption — processed with Spark on AWS Glue, queried through Athena and orchestrated with Step Functions, Glue and Lambda. From the consumption layer I bulk-loaded into Amazon Neptune for the relationship graph and OpenSearch for fast per-company lookups: the two engines the .NET application reads from.

Result
~40 GB/day
Ingested from ~10 sources
Graph + search
Serving a live product
First of its kind
End-to-end pipeline on the account
Apache IcebergApache SparkAWS GlueAthenaStep FunctionsLambdaAmazon NeptuneOpenSearchOraclePostgreSQLAmazon S3
Case 05

A services model built — and traceable — inside Snowflake

Globant · Semi Senior Advanced Data Engineer · Mar 2024 – Nov 2025
The problem

A consultancy's services business had no shared data model. Every report was rebuilt from scratch, a full reporting run took around ten hours, and when a number looked wrong nobody could trace where it came from.

What I built

I designed and developed the facts and dimensions for the services model natively in Snowflake — roughly 20 models across ~50 tables — with ingestion automated through Airbyte, orchestration in Airflow, and transformation in Snowpark scripts and stored procedures, all inside the Snowflake ecosystem. Then I built a Streamlit app that renders lineage, so an analyst can trace any metric back to its source table instead of asking an engineer.

Result
10 h → 5 min
Reporting run time
~3 TB
Largest tables consolidated
50M+
Rows loaded per day
SnowflakeSnowparkStreamlitAirbyteApache AirflowSQLPythonDimensional modeling
Case 06 Current

Glue scripts out, governed ELT in

EPAM Systems · Senior Data Integration Engineer · Nov 2025 – Present
The problem

A business-critical platform ran its ELT as hand-written Spark jobs on AWS Glue, with legacy SSIS packages still sitting in the path. It was expensive, memory-bound, opaque when it broke — and one critical pipeline took eight hours to finish.

What I built

I completed the migration to a governed ELT stack: Airbyte for extract and load, dbt for transformation, Amazon Redshift as the warehouse — infrastructure deployed with Terraform and everything orchestrated by Airflow. Around 10 GB/day now flows in from Oracle, SQL Server, OpenEdge and IBM DB2. SSIS packages were replaced with Airflow DAGs, and the Spark pipelines that stayed were re-engineered to eliminate memory bottlenecks.

Result
8 h → 30 min
16× faster critical pipeline
~10 GB/day
From 4 source systems
Fully as code
Infrastructure via Terraform
Amazon RedshiftdbtAirbyteApache AirflowTerraformAWS GlueApache SparkOracleSQL ServerIBM DB2

What repeats across all six.

01
Migrations that pay for themselves

NiFi to Spark, Glue to dbt, SSIS to Airflow. The pattern isn't chasing new tools — it's finding the bottleneck that costs hours every day and removing it, then proving the number.

02
Models people can trace

A pipeline nobody trusts is worse than no pipeline. Dimensional models, tested transformations, lineage an analyst can read without opening a ticket — that's what makes the data a product.

03
Automation that removes the human

Census cleaning, COVID-19 publishing, regulatory filings, infrastructure deploys. If a person does it every cycle by hand, it's a script waiting to be written.