Expanded version · 400 words
Dear Hiring Committee,
I am applying for the Staff Machine Learning Engineer role on the Personalization Platform team. I have spent the last four years owning the recommendations and ranking stack at a two-sided marketplace roughly your size, and the problems described in your job post — slow iteration loops, ranker drift, feature-store sprawl — are the problems I have shipped fixes for.
A few specifics, because in MLE interviews vague claims age badly.
At Mosaic Marketplace I rebuilt the candidate-generation layer from a single ANN index into a two-stage retrieval system: a learned embedding model for the head of the catalog plus a graph-based recall path for cold-start sellers. The change lifted add-to-cart by 4.2% in the holdout AB and, more importantly, cut p99 retrieval latency from 95ms to 41ms, which let the product team add a third candidate source without busting the page budget. Net contribution from the AB readout: roughly $6.4M in incremental GMV over the first two quarters.
On the platform side, I led the migration from a homegrown feature pipeline to a Feast-based feature store with offline-online parity checks. Before the migration, we had a 3–4% training/serving skew on the top features and nobody could quickly say why. After: skew under 0.4%, plus a CI gate that blocks deploys when offline and online features disagree on a sampled traffic slice. That gate has caught two production-bound regressions in the last six months, both before they reached users.
What I want to do next is exactly what your job post describes: own a full surface end-to-end — training pipeline, serving stack, drift monitoring, AB design — not just the model. As Eugene Yan has argued, the MLEs who compound inside an org are the ones who can also write the design doc, run the rollout, and stay on call for the model they shipped. That is the loop I want to keep running.
Two things worth flagging upfront. First, I am not a research scientist; my comfort zone is recsys, ranking, and forecasting, not foundation-model pretraining. Second, I write a lot — design docs, post-mortems, runbooks — because production ML decays without them.
I would love to talk about the personalization roadmap and where my background lines up. Available any afternoon next week.
Best regards,
Tomás Berriault
How to customize
Open the template, then open the job description side by side. Highlight three things in the JD: the team’s stated pain point (often buried in a “what you’ll do” bullet — latency, retraining cadence, feature freshness, model staleness), the primary metric they care about (revenue, conversion, fraud rate, GPU cost, p99 latency), and one named tool or system (Feast, Ray, Triton, Vertex, SageMaker, Kubeflow). Rewrite paragraph two of the template so it hits all three.
Swap the dollar figures and percentages for your own. If you do not have hard numbers, get them — ask your old tech lead, dig into the dashboards you still have access to, or rebuild the calculation from public benchmarks (“our service handled ~80 QPS; a 40% inference cost cut on a $0.0008 per call model is roughly $7K/month”). A rough, defensible number beats no number.
Cut anything that reads like a LinkedIn skills section. “Proficient in Python, PyTorch, TensorFlow, Spark, Kubernetes, Airflow, Kafka” belongs on the resume, not the cover letter. The letter is for one production story your resume cannot tell.
What hiring managers skim for in MLE cover letters
MLE hiring managers I have talked to read cover letters in about 30 seconds, and they skim for four signals in this order.
End-to-end ownership. Did you own a model from training pipeline to live serving, or did you hand off a checkpoint and walk away? Phrases like “I shipped it to production,” “I owned the on-call rotation for the service,” and “I wrote the runbook” all signal ownership. “Trained a model that the engineering team then deployed” signals the opposite. Eugene Yan, who has hired MLEs at Amazon and Anthropic, puts a heavy weight on whether candidates can talk about the boring half of the job — feature pipelines, monitoring, AB infrastructure — not just the model.
Production constraints named correctly. p99 latency, throughput in QPS, GPU memory footprint, feature freshness in seconds, training-serving skew percentage. Naming the constraint (correctly) compresses a paragraph of explanation into two numbers and tells the reader you have actually been on call for an inference service.
Business metric tied to model metric. “Lifted recall by 6%” is forgettable. “Lifted recall by 6%, recovered $1.8M in legitimate transactions over Q3” gets a phone screen. Pair every ML metric with a dollar, a user count, or a latency budget.
Judgment about the team. A line that shows you read their engineering blog, their job post, or a recent talk is the cheapest credibility win in the letter. With LinkedIn’s 2026 Jobs on the Rise report showing AI Engineer among the fastest-growing roles over the past three years, every senior MLE opening pulls 200+ applicants — generic letters are the first cut.
Common mistakes
Listing the tech stack alphabetically. “Airflow, Docker, Kafka, Kubernetes, PyTorch, Ray, Spark, TensorFlow, Triton” tells the reader nothing except that you can use a comma. Embed one or two tools inside a story instead: “I rebuilt the feature pipeline on Spark + Feast so the fraud team could backfill 18 months of history overnight instead of over a sprint.”
“Improved accuracy 3%” with no production context. Three points on what baseline, with what latency cost, against what traffic slice, worth how many dollars? A raw accuracy lift is a red flag to senior MLEs — it usually means the writer either did not measure business impact or never shipped the model. Always pair an offline metric with an online one.
Notebook-only proof. Mentioning a research paper is fine; building your entire pitch on Kaggle medals and class projects is a recruiter-fatigue trigger. MLE roles are 70% systems work, and a candidate who has never run a model rollout, written a runbook, or been paged on drift will get filtered out fast. Use one production story, even a small one, over three competition stories.
Apologizing for what you lack. “Although I do not have a PhD…” is a wasted sentence. If the JD requires one and you do not have it, do not flag it; let your work do the arguing. If it does not require one, you just invented a gap that was not there.
Treating the model as the whole job. The job post for a modern MLE almost always lists drift monitoring, feature stores, AB infrastructure, and inference cost alongside modeling. A letter that talks only about model architecture signals that the candidate has not yet been on the production side of an MLE role — which is exactly the half a hiring manager is paying $180K–$250K base for.
Sources: