Vacancy counts are the standard measure of labour demand and they hide the most useful thing about a market: how fast it moves.
Same count, opposite markets
Two cities each show 400 open data engineering roles. In the first, the median posting is nine days old and a fifth of listings were published this week. In the second, the median is seventy-one days and almost nothing is new.
The first market is churning: roles open, fill, and are replaced. The second is silted up — the same roles have been advertised since spring. A candidate treating those as equivalent will waste months, and so will anyone forecasting from the counts.
How to read the number
| Median age | Usual reading |
|---|---|
| Under 14 days | Fast turnover. High-volume roles, or genuine scarcity being resolved quickly. |
| 14–35 days | Normal for most professional roles. |
| 35–60 days | Slow. Specialised roles, long internal process, or weak candidate flow. |
| Over 60 days | Something is stuck. Frozen requisitions, pipeline-building, or listings nobody maintains. |
Age and momentum together
Age alone can mislead. Pair it with the thirty-day change in openings:
- Young listings, rising count — genuine expansion. The best signal available.
- Young listings, falling count — roles are being filled faster than opened. Tightening, not weakening.
- Old listings, rising count — postings are accumulating without resolving. Often the first sign of a freeze that has not been announced.
- Old listings, falling count — retreat. Roles are being withdrawn rather than filled.
The third combination is the one worth watching, because it looks healthy on a vacancy count and is not.
Why almost nobody publishes it
Computing age needs the publication date on every listing and a consistent definition of what counts as one posting. Providers who assemble their index from boards inherit ingestion dates rather than publication dates, which makes everything look fresh. It is not that the number is hard to understand — it is that it is easy to compute wrongly and hard to compute honestly.