Benchmarking Software Engineering Job Levels by Company Size

Pave Data Lab
•
April 4, 2025
•
2
min read
•

What is the optimal number of Individual Contributor (IC) levels in your job architecture design? 

‍

Facebook/Meta has 7 IC levels for software engineers. Meanwhile, Microsoft has 13 IC levels for software engineers.

‍

This raises the question–what is the optimal number of IC levels?

‍

First, let’s look at some market data. And then let’s consider some pros and cons of the two approaches in this Microsoft vs Meta IC level comparison.

Software Engineering Job Levels by Company Size

How many IC job levels do most companies in the market utilize today?

‍

Our team analyzed the number of IC levels within the Software Engineering job ladder across 1,033 Pave customers. A key note: only levels with employees currently in-seat today were counted in the analysis.

‍

So, what is the standard number of engineering levels? Two key findings emerged:

‍

  1. ~5-7 IC levels is the norm. We found that by the time companies get to ~200+ employees, they tend to leverage ~5-7 IC levels for software engineering. Smaller companies (< 200 employees) tend to leverage a couple or few IC levels as they grow into a more robust job architecture.

  2. The “double level” Microsoft system is an outlier. While there are certainly some companies in Pave’s dataset more aligned with Microsoft’s 12+ IC levels system, these companies are exceptions to the norm.

‍

Individual Contributor (IC) Software Engineering Job Levels by Company Size

‍

Pros & Cons of the Two Approaches

In this Microsoft vs Meta IC level comparison, both approaches to job architecture design have pros and cons.

‍

Pros to the Microsoft-style Architecture with 12+ IC Levels:

‍

  • Theoretically, you get to promote employees roughly twice as frequently. This can increase an employee’s perception of their career momentum and perhaps act as a retentive force.

‍

Pros to the Standard Architecture with 6-7 IC Levels:

‍

  • This is the market-standard architecture and thus is more congruent with how existing compensation benchmarking datasets are structured (Pave, Radford, etc.). This likely yields more seamless market pricing exercises for your compensation team. Also, there’s less of a learning curve for candidates, employees, and comp program administrators.

‍

  • The size of each promotion award in a system with fewer levels (and promotions) is likely larger than in the Microsoft-style system. Which raises the final question…

‍

What matters more from a retentive standpoint—the frequency of recognition, or the magnitude of an award each time an employee is recognized? 

‍

Learn more about Pave’s end-to-end compensation platform
Matthew Schulman
CEO & Founder
Matt Schulman is CEO and founder of Pave, the complete platform for Total Rewards professionals. Prior to Pave, he was a software engineer at Facebook focusing on user-centric mobile experiences. A self-proclaimed "comp nerd," Matt is known for sharing data-driven thought leadership around all things compensation and personal finance.

Become a compensation expert with the latest insights powered by Pave.

(function (h, o, t, j, a, r) { h.hj = h.hj || function () { (h.hj.q = h.hj.q || []).push(arguments) }; h._hjSettings = { hjid: 2412860, hjsv: 6 }; a = o.getElementsByTagName('head')[0]; r = o.createElement('script'); r.async = 1; r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv; a.appendChild(r); })(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv='); !function () { var analytics = window.analytics = window.analytics || []; if (!analytics.initialize) if (analytics.invoked) window.console && console.error && console.error("Segment snippet included twice."); else { analytics.invoked = !0; analytics.methods = ["trackSubmit", "trackClick", "trackLink", "trackForm", "pageview", "identify", "reset", "group", "track", "ready", "alias", "debug", "page", "once", "off", "on", "addSourceMiddleware", "addIntegrationMiddleware", "setAnonymousId", "addDestinationMiddleware"]; analytics.factory = function (e) { return function () { var t = Array.prototype.slice.call(arguments); t.unshift(e); analytics.push(t); return analytics } }; for (var e = 0; e < analytics.methods.length; e++) { var key = analytics.methods[e]; analytics[key] = analytics.factory(key) } analytics.load = function (key, e) { var t = document.createElement("script"); t.type = "text/javascript"; t.async = !0; t.src = "https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js"; var n = document.getElementsByTagName("script")[0]; n.parentNode.insertBefore(t, n); analytics._loadOptions = e }; analytics.SNIPPET_VERSION = "4.13.1"; analytics.load("0KGQyN5tZ344emH53H3kxq9XcOO1bKKw"); analytics.page(); } }(); $(document).ready(function () { $('[data-analytics]').on('click', function (e) { var properties var event = $(this).attr('data-analytics') $.each(this.attributes, function (_, attribute) { if (attribute.name.startsWith('data-property-')) { if (!properties) properties = {} var property = attribute.name.split('data-property-')[1] properties[property] = attribute.value } }) analytics.track(event, properties) }) }); var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); if (isMobile) { var dropdown = document.querySelectorAll('.navbar__dropdown'); for (var i = 0; i < dropdown.length; i++) { dropdown[i].addEventListener('click', function(e) { e.stopPropagation(); this.classList.toggle('w--open'); }); } }