Where we start
People analytics has a reputation for being soft, and it is the opposite: it is the one domain where every number describes a person who can be counted exactly, so there is no excuse for a number that cannot be reconciled. The running company is Apex, a constructed group of four entities and 1,071 staff rows, built to look like the export any HR system produces. Every Apex figure is invented and the pages say so. What is real is the mechanism: the identity, the bases, and the survivor problem are the same in every company, and once you can see them you can read any people dashboard and know which numbers to believe.
★ What you walk out with tonight. The habit of asking "stock or flow, and on which date" before believing any people number, the identity you can check any dashboard against in ten seconds, the three bases and why each is defensible, and the question that catches the survivor problem: who is not in this table?
The tank, and the identity
6 min livePicture headcount as water in a tank. Joiners pour in, leavers drain out, and the level at any instant is the headcount on that date. The level is a stock: it needs a date. The pouring and draining are flows: they need a period. And the tank obeys one identity that no reporting convention can escape: the level at the end of a period equals the level at the start plus what poured in minus what drained out.
LiveStock or flow: the question to ask before any people number4 min▶
A stock is a count at an instant. Headcount, open positions, people on leave, people in a grade. It has no meaning without a date, and two stocks from different dates cannot be subtracted to give a flow unless nothing else moved between them, which it always did.
A flow is a count over a period. Joiners, leavers, promotions, transfers, hires, offers. It has no meaning without a start and end date, and a flow reported "for the year" in March is a different number from the same flow reported in December.
The identity is the only check that needs no judgement: start stock, plus every flow in, minus every flow out, equals end stock. At Apex, 1,022 on 1 January, 49 joiners and 210 leavers to the end of June, 861 on 1 July. It reconciles. When it does not, the usual reasons are a transfer counted as a leaver on one side and not as a joiner on the other, a contractor in one stock and not the other, or a leaver whose last day was entered in the wrong month.
The reason this matters beyond tidiness: every rate on a people dashboard is a flow divided by a stock, and if the two were not measured on consistent dates, the rate is a fraction of two unrelated numbers.
Self-studyTransfers, contractors and leave: the flows that are not exits3 min▶
Apex has four entities and 291 of its 1,071 rows carry a transfer flag: somebody who moved from Apex Retail to Apex Logistics is a leaver on Retail's dashboard and a joiner on Logistics', and neither on the group's. Whether a transfer counts as attrition depends entirely on whose tank you are looking at, and a group-level attrition figure built by adding up entity-level figures will count every transfer as a loss.
The same applies to people on long leave (in the stock or not?), contractors converting to staff (a joiner or not?), and rehires (a joiner, but not a new person). None of these has a universal answer. Each has to be written down once, in the definition of the stock, so that the identity can be checked with the same rules on both sides.
Two headcounts for the same company. Finance reports 1,022 full-time equivalents; HR reports 1,071 people. Neither is wrong. One counts hours, the other counts heads, and 49 people on part-time contracts explain the gap. The meeting that spends twenty minutes arguing about which is "right" has skipped the only useful question, which is what each number is a stock of. Constructed example; the mechanism is not.
One count of leavers, three attrition rates
5 min liveApex lost 210 people between January and June. What is its attrition rate? Divide by the January headcount and it is 20.5 percent. Divide by the average of January and July and it is 22.3. Divide by July's and it is 24.4. All three are defensible, all three appear in real reports, and a four-point spread from the same 210 people is what happens when the base is not written down.
LiveWhich base, and why the average is the usual answer3 min▶
The start base asks "of the people we had in January, what share left". Clean, but it ignores the 49 who joined and were also at risk of leaving, and it understates the rate in a growing company. The end base asks the question backwards: it divides by a headcount that is smaller because people left, so the more people leave, the more the rate inflates. The average base approximates the number of people who were exposed to the risk of leaving during the period, which is what an attrition rate is trying to measure, and it is why most standards use it.
None of this makes the average base right in every case. A company that doubled in size in a month has an average that describes nobody. The point is narrower: the base is a decision, it moves the rate by points, and it goes under the number in writing. Foundations session 2 takes the same 210 leavers by department and by entity, where the base problem gets worse because the bases get small.
Self-studyAnnualising, and the assumption it smuggles in2 min▶
Apex's 22.3 percent covers six months. Doubled, it is 44.6 percent a year, and that is the number that will be quoted. The doubling assumes the second half repeats the first, which for a company that lost 54 of 108 salespeople in six months is a guess in either direction: the exodus may be over or may be halfway. Annualised figures should carry the word "annualised" and the period they were built from, and a half-year figure compared with last year's full-year figure is not a comparison.
The export is a photograph of survivors
4 min liveOpen the Apex table and every one of its 1,071 rows is either somebody employed on 1 January 2026 or somebody who left in the six months after. Nobody who left in 2025 is there. Nobody who joined in 2019 and quit in 2020 is there. The table is a photograph taken on one date, plus a short film of what happened next, and anything you compute about "how long people stay" from it will describe the survivors, not the staff.
LiveWho is not in this table, and what that does to every tenure number4 min▶
Take the median tenure of Apex's active staff: 5.01 years. It sounds like "people stay about five years". It is not that. It is the median tenure of the people who were still there on 1 January, which is a group that by construction excludes everyone who left earlier, and people who leave tend to leave early. The 210 who left in the first half of 2026 had a median tenure at exit of 1.52 years, and 61 percent of them had been at Apex under two years. Two very different pictures of the same company, and both are computed correctly from the table; the table itself is the problem.
The question that catches it: what would a person have to have done to be missing from this table? For Apex, the answer is "left before 2026". Any statistic about how long people stay, how many leave in their first year, or which cohort is loyal has to be read knowing that the early leavers of every year before 2026 are absent. Deep-dive session 2 measures exactly how far this pushes a survival curve, and what kind of table fixes it, which is an event log rather than a photograph.
Self-studyThe other photographs: surveys, reviews, and exit interviews2 min▶
Every people dataset is a photograph of who was around to be measured. Engagement surveys measure the people who filled them in, which excludes the disengaged in proportion to their disengagement. Performance reviews measure the people who stayed to the review date. Exit interviews measure the leavers who agreed to talk, and the reason they give is the reason they were willing to give. None of these are useless. Each has a missing group whose shape can be guessed, and the guess belongs in the sentence that reports the number. Foundations session 5 is the survey version of this problem.
The Apex headcount bridge, on paper
★ 22 min · everyone works it throughNo code tonight. Six worksheet steps that turn "we lost a lot of people this year" into a bridge that reconciles, a rate with its base written under it, and one sentence a board can use. Every Apex number is constructed; the deep-dive track's first session rebuilds each of them from the table in pandas. Work each step for your own company as we go.
Step 1 · Fix the two dates. A bridge needs a start and an end. Write both, and write what counts as "in the headcount" on those dates: employees on payroll, excluding contractors, including people on leave. Apex's are 1 January and 1 July 2026.
Step 2 · Count the two stocks. Headcount on each date, by the definition in step 1. Apex: 1,022 and 861. If the two come from different systems, say which.
Step 3 · Count the two flows. Joiners and leavers between the dates, by the same definition. Transfers between entities count on entity bridges and not on the group bridge. Apex: 49 and 210.
Step 4 · Check the identity. Start plus joiners minus leavers should equal end. If it does not, the difference is the number of people counted twice or not at all, and finding them is the next task, before any rate is computed.
Step 5 · Write the rate with its base under it. Three bases, three rates. Pick one, say which, and keep it. Apex on the average base: 22.3 percent for the half-year.
Step 6 · The sentence. One line with the flow, the base, the period, and the annualising assumption if there is one. This is the line that goes on the slide.
Keep the bridge as your standing check. Any people report that cannot be reconciled to start plus in minus out equals end is a report with a counting error in it, and the error is usually bigger than the trend the report is trying to show.
Before Foundations session 2
30 min- Build the bridge for your own team or company for the last six months: two stocks, two flows, the identity checked. Write the difference if it does not reconcile; that number is your first finding.
- Compute the rate on all three bases and write the spread. If your organisation already reports a rate, find out which base it uses; if nobody knows, that is your second finding.
- Answer "who is not in this table" for the export you used, in one sentence.
- Bring the bridge. Session 2 splits the same leavers by department and the bases get small enough to lie.
Three questions
Clear all three and Foundations session 1 gets stamped in your passport.
1 · A dashboard shows headcount 1,022 in January, 861 in July, and 210 leavers for the half-year. What is the first thing to check?
The identity is the one check that needs no judgement. Every rate on the dashboard is a flow over a stock, and if the flows and stocks do not reconcile, the rates are fractions of unrelated numbers.
2 · The same 210 leavers give attrition of 20.5, 22.3 or 24.4 percent. Why, and which is usual?
The numerator never changed. The end base inflates because it shrinks as people leave; the start base ignores joiners who were also at risk. The base is a decision, and an undeclared base is the most common way a people number misleads.
3 · Apex's active staff have a median tenure of 5.01 years, and its recent leavers a median tenure at exit of 1.52 years. What does the table let you say about how long people stay?
Both numbers are computed correctly from a table that is a photograph of survivors. Deep-dive session 2 measures how far that biases a survival curve and what an event log fixes.
What this session teaches, and where it came from
Every fact on this page, and its verification tier, is recorded in the course's source map.
Foundations session 1 cheat sheet · pin this
You can reconcile a bridge and write a rate with its base. Foundations session 2 splits Apex's 210 leavers by entity and department, where Sales lost 54 of 108 people and R&D 7 of 94, and the bases get small enough that one resignation moves a department's rate by a point. Then it puts a national benchmark beside them, the quits rate the US Bureau of Labor Statistics publishes every month, and shows why a monthly rate and an annual rate are not the same animal.