Executive summary
A job title in tech is supposed to tell you what the work is. It also sets the pay band. This post checks whether those two things line up.
We collected 3,060 job postings published in 2026 for ten titles in the United States and Canada. For each title we measured which skills the postings ask for, then compared titles by how much those skill lists overlap. Separately, we took the base-salary ranges the postings disclose, and the base salary and total compensation (TC: base plus equity and bonus) that people report on levels.fyi. Every pay figure in this post says which of the two it is.
Key takeaways:
How the data was built
This section comes first because every number later depends on it.
Postings. We read 2,073 postings from 157 employers through the public job-board APIs of Greenhouse, Lever and SmartRecruiters. We added 987 postings from LinkedIn’s public job pages for the cells the boards left thin: all ten titles in Canada, and Analytics Engineer, MLOps Engineer, Data Analyst, Business Analyst, FDE and AI Engineer in the US. Every posting was published between 5 January and 3 October 2026. A posting without a date was dropped, not guessed. The same requisition posted to several cities counts once.
Titles. Raw titles were mapped to the ten titles by a fixed rule sheet. Managers, interns, new-grad programmes, sales engineers and contract roles were excluded. A title counts as FDE when it says “forward deployed” (or FDE) and “engineer”; field strategists and forward-deployed data scientists do not. Ambiguous titles were decided by the posting text. We also collected Backend Engineer, but dropped it: in an earlier run its skill profile was almost identical to Software Engineer, so it added a row without adding information.
Skills. A taxonomy of 167 skills in seven groups (languages, data engineering, ML, LLM and GenAI, cloud and infrastructure, product and analytics, soft skills) was built from 120 postings. Each skill is one regular expression, applied to every posting after the company introduction, benefits and legal notices are stripped. No language model is involved, so the same postings always give the same matrix.
Checks. The taxonomy went through three rounds of review by a reviewer who had not built it, each on postings it had never seen. The final round measured precision (when the extractor says a posting asks for a skill, is it right?) and coverage (of the skills a posting asks for, how many does the taxonomy catch?). It did not pass every target: coverage and the LLM skill group fell short. The numbers are in the limits section.
Pay. 1,852 postings disclose a salary range, mostly base salary; 26 Canadian ones that reuse the company’s US range are set aside, leaving 1,826. We use each range’s midpoint and call it posted base. Separately, levels.fyi publishes self-reported pay per title as distributions of base salary and of total compensation (TC), which adds equity and bonus. Posted base is compared with levels.fyi base; levels.fyi TC is shown as its own series. The sources are never averaged together.
Throughout, a title-country cell with fewer than 20 postings is not shown, and 20 to 39 is marked low n. The pay explorer is the exception: it draws cells from 7 postings, flagged very low n.
The common core is collaboration
Start with what every one of these jobs asks for. We set the bar before looking at the data: a skill in the common core must appear in at least 60% of postings for every one of the ten titles.
One skill clears it: working across teams. No technical skill does. Python, the most widely requested language, is in 83% to 89% of data-engineering and data-science postings, but in 5% of Business Analyst postings.
Each bar spans from the title with the lowest share to the title with the highest. Collaboration is the only bar that starts above 60%.
So the ten titles do not share a technical base. To see what separates them, look at the full map.
The skill map
The table shows, for 28 skills, the share of postings for each title that ask for it. These are the 28 skills whose share varies most between titles. Titles are ordered so that similar ones sit next to each other; the order comes from the clustering further down.
| ML Eng | MLOps Eng | Software Eng | FDE | AI Eng | Business Analyst | Data Scientist | Data Eng | Analytics Eng | Data Analyst | |
|---|---|---|---|---|---|---|---|---|---|---|
| Machine learning (general) | 99 | 91 | 21 | 30 | 64 | 3 | 72 | 34 | 20 | 14 |
| MLOps / ML platform | 70 | 88 | 6 | 20 | 32 | 1 | 15 | 6 | 0 | 0 |
| Kubernetes | 19 | 75 | 30 | 15 | 25 | 0 | 3 | 15 | 2 | 0 |
| CI/CD | 19 | 71 | 27 | 21 | 32 | 2 | 7 | 42 | 29 | 0 |
| Observability / monitoring (Prometheus, Grafana, Datadog) | 26 | 69 | 40 | 20 | 39 | 3 | 9 | 51 | 28 | 5 |
| Docker / containers | 13 | 67 | 19 | 14 | 34 | 0 | 4 | 13 | 4 | 0 |
| AWS | 27 | 63 | 35 | 31 | 43 | 1 | 12 | 55 | 20 | 7 |
| Customer-facing / client work | 4 | 0 | 4 | 73 | 7 | 7 | 8 | 5 | 4 | 4 |
| LLMs (general) | 57 | 42 | 17 | 49 | 89 | 2 | 25 | 13 | 15 | 6 |
| AI agents / agentic systems | 40 | 20 | 23 | 52 | 80 | 1 | 14 | 16 | 13 | 5 |
| RAG / retrieval | 22 | 15 | 5 | 24 | 70 | 0 | 10 | 6 | 2 | 0 |
| API design (REST, gRPC, GraphQL) | 22 | 40 | 47 | 59 | 66 | 15 | 8 | 29 | 15 | 5 |
| Prompt / context engineering | 12 | 5 | 4 | 21 | 63 | 1 | 6 | 1 | 3 | 0 |
| Written documentation | 22 | 28 | 28 | 40 | 32 | 84 | 24 | 39 | 63 | 43 |
| Requirements gathering / analysis | 12 | 9 | 8 | 18 | 23 | 82 | 13 | 19 | 49 | 32 |
| Process mapping / improvement | 0 | 5 | 2 | 4 | 6 | 78 | 2 | 6 | 7 | 15 |
| Agile / Jira | 4 | 12 | 7 | 2 | 15 | 65 | 4 | 9 | 7 | 9 |
| Python | 73 | 80 | 45 | 63 | 77 | 5 | 89 | 83 | 74 | 58 |
| ETL / ELT pipelines | 31 | 39 | 15 | 28 | 26 | 3 | 23 | 89 | 61 | 29 |
| Data quality / contracts / testing | 9 | 16 | 7 | 6 | 8 | 11 | 14 | 71 | 69 | 55 |
| Data platform / data products | 7 | 21 | 11 | 14 | 7 | 5 | 19 | 70 | 57 | 24 |
| SQL | 19 | 21 | 13 | 16 | 15 | 25 | 78 | 84 | 99 | 85 |
| Data modelling (dimensional, star schema) | 1 | 2 | 11 | 7 | 9 | 10 | 14 | 74 | 88 | 40 |
| Business intelligence (general) | 3 | 0 | 1 | 1 | 1 | 16 | 12 | 28 | 77 | 72 |
| dbt | 2 | 2 | 3 | 2 | 2 | 0 | 8 | 46 | 75 | 14 |
| Dashboards / reporting | 5 | 10 | 10 | 8 | 13 | 37 | 33 | 39 | 81 | 87 |
| Data analysis (general) | 7 | 1 | 5 | 2 | 6 | 37 | 37 | 9 | 33 | 78 |
| Data visualisation / storytelling | 1 | 4 | 3 | 2 | 2 | 9 | 32 | 7 | 30 | 67 |
| JDs (n) | 205 | 112 | 1583 | 193 | 161 | 174 | 185 | 136 | 112 | 199 |
Percent of postings mentioning the skill as required or preferred. Darker means more common.
Two blocks stand out. On the left, the builder titles share Python and cloud platforms, and ML, MLOps and AI Engineer add the ML stack. On the right, the data titles share SQL and data modelling. The boundary is sharp: SQL is in 99% of Analytics Engineer postings and 13% of Software Engineer postings.
Signature skills
Raw prevalence mixes two things: what a title needs, and what every title needs. To isolate the first, we compare each title’s rate for a skill with the rate in all other titles combined, using a smoothed log-odds ratio (details below). A signature skill is common in that title and rare elsewhere.
| Title | Signature skills (this title vs all others) |
|---|---|
| ML Eng | Machine learning (general) 98% vs 29%; Graph ML / GNNs 4% vs 0%; JAX 7% vs 0%; PyTorch 53% vs 5% |
| MLOps Eng | CI/CD for ML / continuous training 54% vs 2%; Experiment tracking / model registry (MLflow, W&B) 54% vs 3%; MLOps / ML platform 88% vs 12%; Feature stores 23% vs 2% |
| Software Eng | Kotlin 9% vs 1%; Go 29% vs 5%; Mobile development (iOS, Android, Swift) 8% vs 1%; Rust 11% vs 2% |
| FDE | Customer-facing / client work 72% vs 5%; Enterprise integrations / iPaaS 10% vs 2%; Rapid prototyping / proof of concept 38% vs 11%; Product sense / product strategy 27% vs 8% |
| AI Eng | Prompt / context engineering 63% vs 5%; RAG / retrieval 70% vs 8%; LLM frameworks (LangChain, LlamaIndex, HF) 46% vs 3%; LLMs (general) 89% vs 21% |
| Business Analyst | Process mapping / improvement 78% vs 3%; UAT / acceptance testing 44% vs 2%; Requirements gathering / analysis 82% vs 14%; Agile / Jira 65% vs 7% |
| Data Scientist | Causal inference 35% vs 1%; Statistics / statistical modelling 61% vs 6%; R 29% vs 2%; Predictive modelling / classification 32% vs 3% |
| Data Eng | Change data capture 14% vs 1%; ETL / ELT pipelines 89% vs 21%; Data modelling (dimensional, star schema) 74% vs 15%; Data quality / contracts / testing 71% vs 14% |
| Analytics Eng | Semantic / metrics layer 58% vs 3%; SQL 99% vs 27%; dbt 75% vs 6%; Reverse ETL 9% vs 0% |
| Data Analyst | Power BI 51% vs 3%; Tableau 56% vs 3%; Business intelligence (general) 72% vs 7%; Data analysis (general) 78% vs 10% |
The newest titles hold up. Analytics Engineer has a sharp signature: dbt in 75% of its postings against 6% elsewhere, and the semantic layer in 58% against 3%. MLOps Engineer has its own: CI/CD for models in 54% of its postings against 2% of the rest. FDE’s marker is customer-facing work, at 73% against 5%.
Details: the log-odds score
For skill $s$ and title $t$, let $y_t$ be the number of postings for $t$ that mention $s$, out of $n_t$, and $y_r$, $n_r$ the same counts for all other titles. With pooled rate $p_0$ and a prior worth $\alpha = 10$ postings,
$$\delta_{s,t} = \log\frac{y_t + \alpha p_0}{n_t - y_t + \alpha(1-p_0)} - \log\frac{y_r + \alpha p_0}{n_r - y_r + \alpha(1-p_0)}$$
A skill is listed only when $\delta$ is at least 1.96 standard errors above zero. The prior keeps a skill seen in 2 of 23 postings from outranking one seen in 400 of 1,000.
Forward Deployed Engineer, the newest title
FDE needs an introduction. According to Pragmatic Engineer, Palantir created the role in the early 2010s and ran two engineering tracks: “Dev”, one capability for many customers, and “Delta”, one customer served with many capabilities (Pragmatic Engineer, Aug 2025). An FDE is embedded with a customer and writes production code against that customer’s problem, then feeds what it learns back into the product. That separates it from a sales or solutions engineer, who works before the sale, and from a consultant, who advises rather than ships.
The title spread with enterprise AI. OpenAI built an FDE team in 2025, and Tom Tunguz estimates that by mid-2026 the large AI labs and cloud providers had committed roughly $10B to FDE-style deployment groups (Tom Tunguz, Jul 2026). Some observers say the 2026 versions drift toward consulting, with about a quarter of the time spent coding (Pragmatic Engineer, May 2026).
The postings agree that it is a different job. Besides customer work, FDE postings ask for prototyping (38% against 11% elsewhere) and, less sharply, product sense (27%, about the level of Data Scientist postings). They ask for stakeholder communication more often than Software Engineer postings (70% against 52%), though less often than Data Scientist, Analytics Engineer and analyst postings (85% to 89%). On skills, FDE is closest to AI Engineer (0.84), then Software Engineer (0.80).
Which titles are the same job
If two titles ask for the same skills in the same proportions, they describe the same job. We measure this with the cosine similarity of their skill-prevalence vectors: 1.0 means identical proportions, 0 means no overlap.
| ML Eng | MLOps Eng | Software Eng | FDE | AI Eng | Business Analyst | Data Scientist | Data Eng | Analytics Eng | Data Analyst | |
|---|---|---|---|---|---|---|---|---|---|---|
| ML Eng | 0.85 | 0.72 | 0.72 | 0.83 | 0.38 | 0.74 | 0.60 | 0.49 | 0.43 | |
| MLOps Eng | 0.85 | 0.74 | 0.66 | 0.76 | 0.32 | 0.59 | 0.66 | 0.47 | 0.36 | |
| Software Eng | 0.72 | 0.74 | 0.80 | 0.76 | 0.53 | 0.64 | 0.72 | 0.60 | 0.50 | |
| FDE | 0.72 | 0.66 | 0.80 | 0.84 | 0.54 | 0.68 | 0.66 | 0.59 | 0.52 | |
| AI Eng | 0.83 | 0.76 | 0.76 | 0.84 | 0.44 | 0.65 | 0.61 | 0.52 | 0.43 | |
| Business Analyst | 0.38 | 0.32 | 0.53 | 0.54 | 0.44 | 0.55 | 0.47 | 0.61 | 0.66 | |
| Data Scientist | 0.74 | 0.59 | 0.64 | 0.68 | 0.65 | 0.55 | 0.67 | 0.73 | 0.78 | |
| Data Eng | 0.60 | 0.66 | 0.72 | 0.66 | 0.61 | 0.47 | 0.67 | 0.85 | 0.67 | |
| Analytics Eng | 0.49 | 0.47 | 0.60 | 0.59 | 0.52 | 0.61 | 0.73 | 0.85 | 0.85 | |
| Data Analyst | 0.43 | 0.36 | 0.50 | 0.52 | 0.43 | 0.66 | 0.78 | 0.67 | 0.85 |
Cosine similarity of skill profiles. Shading starts at 0.40, the floor for these ten titles.
No pair of the ten is a duplicate. The closest pairs, at about 0.85, are Analytics Engineer with Data Analyst, ML Engineer with MLOps Engineer, and Data Engineer with Analytics Engineer. Next come FDE with AI Engineer (0.84) and ML Engineer with AI Engineer (0.83). AI Engineer is further from Software Engineer, at 0.76.
Hierarchical clustering on the same numbers gives the two families. Analytics Engineer and Data Analyst merge first, then ML and MLOps, then AI Engineer and FDE. Software Engineer joins the AI and FDE pair, and that group then joins ML and MLOps. On the data side, Business Analyst is the last to join. The two families merge only at the final step.
Seniority moves some titles toward a neighbour, not all. Senior Data Analyst postings resemble Analytics Engineer postings more (similarity 0.88) than junior and mid-level ones do (0.82), and senior AI Engineer, MLOps and Business Analyst postings also sit slightly closer to their nearest title. For the other six titles the senior postings sit further from their nearest neighbour. Senior Data Engineer postings, for example, move toward Software Engineer (0.74 against 0.67) and away from Analytics Engineer (0.83 against 0.86).
Pay by title
The explorer shows three distributions for each title, each labelled with what it measures. Posted base is the midpoint of the base-salary range in each posting. levels.fyi base is the base salary people report for the title. levels.fyi TC is their total compensation: base plus equity and bonus. Each bar is a box plot: the thin line runs from the 10th to the 90th percentile, the box covers the middle half, and the tick marks the median.
Filter by country, level, series (posted base, levels.fyi base, levels.fyi TC) and title. Canada is in CAD, so compare within a country. levels.fyi has no dedicated page for six of these titles; we used the closest job-title page under Software Engineer, listed in the limits section.
Three things to read carefully.
First, compare base with base, and level with level. Across all levels, US posted base sits well above the levels.fyi title page: Software Engineer postings have a median midpoint of 220k, while the title page reports a median base of 160k (and a median TC of 196k). Two things make up that 60k. About 40k is employer mix: submissions listed on the levels.fyi company pages of the posting-sample employers have a median base of 200k, so these employers pay more than levels.fyi’s whole population (this step also absorbs the newer offer dates and which submissions the company pages list). About 22k is level mix: 82% of the postings are Senior or Staff+, against 56% of those submissions, and reweighted to the postings’ level mix the same submissions come to 222k. Matched by level, within those employers, the two sources nearly agree: 175k against 160k at Junior/Mid, 212k against 219k at Senior, and 260k against 260k at Staff+. Data Scientists agree at Senior (202k against 200k), and so do Canadian Senior Software Engineers (178k against 173k CAD). When a US posting lists several regional ranges we take the first, usually San Francisco or New York, so posted base is still “what this sample of employers advertises”.
Second, the gap between base and TC is mostly an engineering phenomenon. On levels.fyi, ML Engineer base is 200k and TC 283k; Data Analyst base is 107k and TC 110k. Equity is where the builder titles pull away, and postings never show it.
Third, levels.fyi does not publish a Junior/Mid, Senior and Staff+ breakdown per title. It publishes pay per company level (Amazon SDE II, Shopify L6). For the level filter we took those company pages for the employers in our posting sample and mapped each company’s ladder to tiers: levels titled Senior are Senior, levels below them are Junior/Mid, and levels above them are Staff+. A ladder with no Senior title borrows the tier of the same level code from that company’s Software Engineer ladder, or else uses the typical years of experience at that level. Only submissions with 2025-2026 offer dates are used. levels.fyi splits these by job family, so this works for Software Engineer, Data Scientist and Business Analyst, and through focus tags for ML Engineer and Data Engineer; Data Analyst has too few submissions to use. FDE, AI Engineer, MLOps and Analytics Engineer have no levels.fyi split, so with a level selected they show posted base only. Junior postings are almost absent (29 of 3,060), because new-grad programmes were excluded, so junior and mid-level are reported together as Junior/Mid.
Where skills and pay disagree
If titles were pure descriptions of work, similar skill profiles would come with similar pay. The table lists the ten most similar pairs and the pay gap between them.
| Pair (higher posted base first) | Skill similarity | Posted base gap | levels.fyi base gap | levels.fyi TC gap |
|---|---|---|---|---|
| Analytics Eng over Data Analyst | 0.85 | +60% | +41% | +55% |
| ML Eng over MLOps Eng | 0.85 | +35% | +43% | +89% |
| Data Eng over Analytics Eng | 0.85 | +23% | -5% | -8% |
| FDE over AI Eng | 0.84 | +19% | +18% | +35% |
| ML Eng over AI Eng | 0.83 | +47% | +35% | +77% |
| Software Eng over FDE | 0.80 | +7% | -9% | -9% |
| Data Scientist over Data Analyst | 0.78 | +98% | +50% | +65% |
| MLOps Eng over AI Eng | 0.76 | +9% | -6% | -6% |
| Software Eng over AI Eng | 0.76 | +27% | +8% | +23% |
| ML Eng over Data Scientist | 0.74 | +19% | +25% | +56% |
Each gap is the first title's median over the second's, US only. Posted base and levels.fyi base are salary only; levels.fyi TC adds equity and bonus.
High overlap does not bring pay together:
- Analytics Engineer over Data Analyst: +60% posted base, +41% levels.fyi base, +55% levels.fyi TC. All three agree on the direction. The difference between the two profiles is the engineering layer in the signatures: dbt, data modelling and the semantic layer. Most of the profile, SQL, BI tools and stakeholder work, is shared.
- ML Engineer over MLOps Engineer: +35% posted base, +43% levels.fyi base, +89% levels.fyi TC. Most of the TC gap is equity. The levels.fyi MLOps cell has only 39 reports, so treat its figures as indicative.
- ML Engineer over AI Engineer: +47% posted base, +35% levels.fyi base, +77% levels.fyi TC. The two profiles differ in where the model comes from: ML Engineer postings ask for training and deep learning, AI Engineer postings for prompting, retrieval and LLM frameworks around a model someone else trained.
- Data Engineer over Analytics Engineer: +23% posted base, but 5% the other way on levels.fyi base and 8% on TC. The US Data Engineer cell has only 29 postings with pay, and the sources disagree, so this gap is not established.
Software Engineer and FDE are within 7% of each other on posted base, and on levels.fyi FDE is 9% higher on base and 10% higher on TC. FDE’s posted base is 19% above AI Engineer’s, its closest neighbour on skills (18% on levels.fyi base, 35% on TC). Lower in the table, Data Scientist and Data Analyst share less (0.78) but differ the most of any listed pair: 98% on posted base, 50% on levels.fyi base.
In this sample, a title that adds an engineering or modelling signature to a shared core is paid at the engineering title’s level, and the gap widens once equity is counted. The data show the association, not the reason for it.
Limits
- Who is in the sample. The job-board APIs reach employers that use Greenhouse, Lever or SmartRecruiters. Banks, telcos and most large non-tech employers use other systems that we could not reach, so the board sample leans toward tech companies. LinkedIn adds a broader mix but only for the thin cells.
- LinkedIn. 987 postings come from LinkedIn’s public job pages. For the seven titles with at least 40 board postings, pairwise similarities from board postings alone correlate at 0.91 with the combined numbers, with the largest single shift 0.14. The other three titles (Analytics Engineer, MLOps Engineer, Business Analyst) depend on LinkedIn and could not be checked this way.
- Canada. 26 Canadian postings quoted exactly the same range as the same company’s US posting (a US range, not a Canadian one); their pay is not used. MLOps Engineer (23 postings) and Analytics Engineer (29) in Canada are low n. Canadian posted base for AI Engineer (19 postings with pay), MLOps Engineer (8) and Analytics Engineer (18) appears only in the explorer, flagged very low n.
- FDE. One employer, Databricks, supplies 19 of the 193 FDE postings. levels.fyi has only 9 FDE reports for Canada, shown flagged very low n. FDE was reviewed separately on 16 postings after it became its own title; that check found the customer-facing rule was matching the words “forward deployed” in the job title itself, which we removed, and that product-sense and LLM-provider matches on FDE postings are noisy.
- levels.fyi by level. The per-level levels.fyi figures come from company pages of employers in the posting sample: 316 of 587 have a levels.fyi page, 145 publish a level ladder, and 112 contribute 2025-2026 submissions. Each company page lists only a subset of its submissions; in the 2025-2026 data used here, a company level has a median of 5. Mapping ladders to tiers is a judgement; an audit of 45 levels at large employers found 16 misplaced under the first mapping. The ladder rule fixed most of them, and a second audit’s remaining cases (eBay, IBM, Scotiabank, Lyft, Pinterest, Stripe, RBC, Geotab) are set by hand in a documented override table, so the levels of other employers are rule-mapped and unaudited. The US Software Engineer figures barely moved through these corrections. Canadian submissions are stored by levels.fyi in USD and were converted at the page’s own rate (1.41). Business Analyst cells are dominated by one employer (Amazon supplies over half of the US Junior/Mid and Senior cells, Scotiabank over half of the small Canadian Junior/Mid cell), and the explorer flags any cell where one company supplies half or more.
- levels.fyi pages. Software Engineer, Data Scientist, Data Analyst and Business Analyst have their own pages. The other six use a job-title page under Software Engineer: Forward Deployed Engineer, Machine Learning Engineer, AI Engineer, Machine Learning Ops Engineer, Analytics Engineer and Data Engineer.
- Required vs preferred. Only 31% of postings separate preferred qualifications under their own heading, so the analysis uses “required or preferred” throughout.
- Taxonomy quality. The final review, on 60 postings the taxonomy had never seen, found precision of 0.93 overall, above 0.85 in six of seven skill groups. The exception is LLM and GenAI at 0.78: a posting that says “you will use AI tools daily” can be counted as asking for LLM skills, so LLM shares in non-AI titles are overstated. Coverage is the weaker side: the taxonomy misses 18% of the skill phrases a human reader would list (8% if borderline phrases are excluded), mostly paraphrases of soft skills and ML lifecycle work. Read every share as a lower bound, and compare titles with each other rather than reading single numbers as exact. The final review was run before FDE became a separate title, so no FDE postings were in its sample. Collaboration appears in 72% to 89% of postings for every title, so it describes the whole field and does not separate any two titles.
- Data source for levels.fyi figures: Levels.fyi (https://www.levels.fyi), crowdsourced compensation data, used under its attribution requirement.
- Pay. Posted ranges are mostly base salary. A keyword check around each disclosed range finds the word “base” in 44% of them, total compensation or on-target earnings mentioned nearby in 17%, and neither in 39%; equity or bonus is mentioned nearby in 59%, never with an amount. levels.fyi is self-reported, skews senior and large-company, and states no time window; we label it trailing. The two are never blended.
- A posting is a signal, not the job. It describes what the hiring team wants to advertise. Everything here is a snapshot of 2026 postings, retrieved on 3 October 2026; the newest titles are the most likely to have moved again.
Michael Wan Interactive Insights