Skip to content

The job description

  • Page 1
  • 7 min
  • Part 1: Read the job description
Page 1 of 9 · Machine Learning Engineer interviewsThe job description

Imagine that a neighbour sends you a message: “Can you help me on Saturday? I need someone strong, with a car, who is good with furniture.” Before you say yes, you ask a few questions. What are we moving? How many floors? Is there a lift? Often the real answer is simple: there is one heavy sofa, and it does not fit through the door. “Strong, with a car, good with furniture” was the neighbour’s guess at the help they need. The sofa is the real problem.

A job description works in the same way. It is a team’s guess at the person who can solve their problem. The list of skills is the “strong, with a car” part. Before you ask “Do I have these skills?”, find the sofa: what problem does this team have? When you know that, you can see which lines matter, which lines are only words, and what to ask.

The posting below is for a company that does not exist. We built it from 13 real Machine Learning Engineer postings at banks, fintech companies, delivery and ride companies, and an online marketplace. We kept their real patterns: the clear parts, the vague parts, and the small problems that real postings have. Then we put everything in one company, so that the whole guide can use the same team and the same problem.

Fennick delivers groceries and pharmacy items in Canada on the same day. It has about 600 people, a head office in Toronto, and works in 14 cities. On a normal day, customers place about 85,000 orders. A courier picks up each order from a partner store and brings it to the customer’s door.

Before a customer pays, the app shows them a delivery time: “Arrives in about 35 min”. That number comes from a machine learning model. The Delivery Intelligence team owns this model and a few others. It is a small team: five ML engineers, two data scientists, a product manager and an engineering manager. This posting is for one more ML engineer.

Job description

Machine Learning Engineer, Delivery Intelligence

Fennick · Toronto, Ontario

  • Hybrid: 2 days a week in the office
  • Full-time
  • CAD 135,000 – 170,000 + bonus + equity

Fennick brings groceries and pharmacy essentials to your door the same day, in 14 Canadian cities. We are a customer-obsessed, data-driven team that moves fast and owns outcomes. Every day, our models help hundreds of thousands of people plan dinner, pick up a prescription, or get diapers before bedtime.

Delivery Intelligence builds the models behind our delivery promise: the delivery-time estimate (ETA) that customers see in the app, the demand forecasts that plan courier supply, and more. As a Machine Learning Engineer, you will own the full ML lifecycle, from problem framing to data, training, deployment, monitoring and retraining. You will help us improve the accuracy of our delivery promises, especially at peak times.

  • Design, train and deploy machine learning models that predict delivery times, demand and courier supply.
  • Build and maintain scalable, low-latency model serving in production.
  • Build feature pipelines, both batch and real-time.
  • Design and run experiments (A/B tests) to measure the impact of model changes.
  • Monitor models in production and improve them over time.
  • Work closely with data scientists, product, engineering and operations.
  • Explore how LLMs and generative AI can improve our products.
  • 4+ years of experience building and shipping ML systems in production, or 2+ years with a PhD.
  • Strong Python and SQL.
  • Solid understanding of machine learning, from gradient boosting to deep learning.
  • Deep experience with at least one deep learning framework (PyTorch or TensorFlow).
  • Experience with MLOps tools such as Kubeflow, Airflow, MLflow, SageMaker, Feast or Tecton.
  • Experience with distributed data processing (Spark, Ray or Dask).
  • Experience with Docker, Kubernetes, Terraform and CI/CD.
  • Proficiency with AI coding tools, such as Cursor or Claude Code.
  • A bias for simplicity: you choose the simplest solution that works.
  • MS or PhD in Computer Science, Statistics or a related field preferred.
  • Experience with LLMs, RAG or fine-tuning.
  • Experience in logistics, delivery, ride-hailing or marketplaces.
  • Experience with causal inference.
  • Publications at top ML conferences.

This posting is for an existing vacancy. Canadian work experience is not required. We use AI tools to help screen applications; a person reviews every application before any decision. If you need an accommodation at any stage of the process, tell our recruiting team.

Composite job description for a fictional company, built from 13 real Machine Learning Engineer postings.

Before you compare the posting with your CV, answer three questions about it. Write your answers down. It takes about ten minutes. Then compare them with ours below.

  1. What problem does the team have? Write it in one sentence, with no tool names.
  2. Who sees what the model produces, and what happens to them when it is wrong? Think of more than one group of people.
  3. Find two lines that do not fit together. A good posting tells one story. Where does this one tell two?
Our answers

1. The problem. Customers see a delivery time before they pay, and at busy times that time is not reliable enough. Fennick needs someone to make the estimate better and to keep it good as conditions change. The clue is one short phrase: “improve the accuracy of our delivery promises, especially at peak times”. That is the sofa. Almost everything else in the posting is a way to move it.

2. The people, and the cost of a mistake. There are at least three groups.

  • Customers see the estimate. If it says 35 minutes and the order arrives in 60, the customer is angry, writes to support, and may ask for a refund. Some of them are waiting for medicine, not only for dinner.
  • Support and operations staff deal with the angry messages, and they plan couriers from the demand forecast.
  • Fennick’s business loses in a quieter way when the estimate is too long. A customer who sees “90 minutes” may close the app and order somewhere else.

So a mistake costs money in both directions, but not the same amount. Late hurts more than early, and “always say a longer time” is not a solution either. The posting says nothing about this trade-off. It is a sign that the interviews will ask about it.

3. Two lines that do not fit. There are a few. Here are the ones that we noticed first.

  • Gradient boosting, but deep experience in PyTorch or TensorFlow. Delivery-time and demand models usually learn from tables: one row per order, with columns such as store, distance, time of day and number of open orders. For this kind of data, gradient-boosted trees (for example LightGBM or XGBoost) are a common, strong choice. So why is “deep experience” in a deep learning framework required?
  • “A bias for simplicity”, next to a list of nine MLOps tools. No team of five engineers uses Kubeflow, Airflow, SageMaker, Feast and Tecton together. The list is longer than the work.
  • “Own the full ML lifecycle”, but no word about data quality, on-call or what happens when the model is wrong. If you own the whole life of a model, these are a big part of the job.

If your answers are different, that is fine. The habit is what matters: start from the problem and the people, then look at the tools. In the interviews, the conversation will be about the delivery estimate, the customers and the data. Tools come up only as ways to solve that.

Look for the interview process in the posting. It is not there. In the 13 real postings that we studied, not one described its interview stages. This is normal, and it is not a bad sign. It means that you ask the recruiter in the first call. We describe Fennick’s six stages in How the interviews run.

On the next page, we read the posting line by line. We say honestly what is really required, what is only a wish, and what is missing. We also say who should apply, and which questions to ask at each stage.