| YEARS IN PRODUCTION | ENGINEERED REPOS | TESTS, ALL PASSING | DECISION RECORDS | CLOUD CERTIFICATIONS |
A parity check cannot say which side is wrong. A Terraform plan cannot contain a loss its dependency graph has no edge for. A threshold on a small golden set cannot separate a regression from noise. A byte that has been sent cannot be recalled. Every repository on this profile supplies what the usual artefact cannot, and leads with the number it would rather not publish.
Three roles, and the shape of the move matters more than the dates.
2017 ──────────────► 2020 2022 ──────────► 2024 2024 ──────────► now
Wells Fargo, Data Engineer Adobe, ML Engineer Meta, AI/ML Engineer
ETL/ELT, Spark, Hadoop, feature pipelines, GenAI ranking and
Snowflake, cloud migration MLflow, productionising recommendation, RAG,
for risk and fraud analytics models behind FastAPI real-time inference
│ │ │
└── moved the data ─────────────┴── then moved the model ──────┴── now moves the decision
The pivot is not "data engineer becomes ML engineer". It is that each step kept the previous discipline instead of replacing it. The MS in Computer Science (2022) is the hinge: pipelines first, then models on top of pipelines, then generative systems that are only as trustworthy as the pipeline and the monitoring underneath them. That is why the repositories on this profile are about the plumbing of AI, not about model architectures: skew between training and serving, cost attribution per prompt version, what a guardrail lets through, what a plan actually destroys.
|
At Meta, now
|
In the open, now
|
Levels are self-assessed against one test: could I debug it in production at 3am, or have I only shipped with it?
| Python | ████████████████████ |
Senior. 8 years, every repository on this profile |
| SQL | ███████████████████░ |
Senior. Warehousing, as-of joins, query tuning |
| Apache Spark / PySpark | ██████████████████░░ |
Senior. Event-log forensics, skew, shuffle behaviour |
| MLOps (MLflow, Kubeflow, SageMaker) | █████████████████░░░ |
Senior. Registry, monitoring, CI for models |
| Databricks / Delta Lake | █████████████████░░░ |
Senior. Feature store, transaction log internals |
| Kafka / streaming | ████████████████░░░░ |
Advanced. Exactly-once, idempotency, watermarks |
| LLMs / RAG / prompt engineering | ████████████████░░░░ |
Advanced. Retrieval evaluation, guardrails, cost |
| AWS (S3, Glue, EMR, Lambda) | ████████████████░░░░ |
Advanced. Certified, plus IaC blast-radius work |
| Airflow / dbt | ███████████████░░░░░ |
Advanced. Production orchestration and models |
| PyTorch / TensorFlow | ██████████████░░░░░░ |
Intermediate. Fine-tuning and NLP workflows |
| Terraform / Kubernetes | ██████████████░░░░░░ |
Intermediate. Deployed with both, audited both |
| Scala / Java | ██████████░░░░░░░░░░ |
Intermediate. Read fluently, write when needed |
Each one exists because of something the usual artefact cannot tell you. The bold number is what it measured.
|
|
Diagnoses a Spark stage from the event log Spark already wrote, and separates key skew from stragglers, spill and too-few-tasks. Then benchmarks the fixes against each other: salting won 0 of 16 cells, broadcast 6.51x, salting 0.81x, slower than doing nothing. |
|
|
Turns 123,417 LLM traces into an owned bill by team, feature and prompt version. 1.2% has no owner and is reported rather than spread. Finds a prompt version that tripled a team's input tokens two days after it shipped, at a robust z-score of 10.17 where a 3.5-sigma rule sees 2.90. |
|
|
Exactly-once split into three promises that are checked separately, then proved by killing real processes mid-transaction: 24 of 24 converged from 24 kills and 72 restarts. The offset design everyone writes first leaves 193 rows wrong while reporting zero lag. |
|
|
Blocks a pull request on a real retrieval regression and refuses to fire on noise, using a tolerance plus a 95% paired bootstrap. Catches a 6.8 point recall@5 drop; reports a borderline case as WARN because the interval contains zero. |
|
|
Names which of 11 corruption modes a Delta table has rather than reporting that it differs, then
bisects the transaction log to the commit that caused it. A naive float sum gives 27 different totals
over 200 shuffles; |
|
|
Parity says the two paths differ and cannot say which is wrong, so this implements the declared feature semantics a third time and arbitrates: 16 of 16 causes named against 13 without it, with a side blamed on 12. Severity is measured in decisions changed, not mismatch counts. |
|
|
|
|
|
Reports what the guardrail let through. 16 characters of a detected key reach the client at a lookback of zero. A false positive rate of zero over 34 samples caps precision at 1.34%, leaving 3 of 3 blocking actions unsupported by the evidence, and 24 letters switch a fail-open route off. |