SeanMiller
Labor Markets

Lateral Vacancy Chains in Closed Internal Labor Markets

Sean Miller
#vacancy chains#internal labor markets#hiring#tech industry#economics

Lateral Vacancy Chains - Visual representation of closed internal labor markets

Disclaimer: All examples in this paper describe generalized patterns observed across large organizations and hypothetical constructs for illustration. They are not descriptions of any specific company’s internal data, policies, or systems. The views expressed are solely my own and do not represent the views of my employer.


Abstract

Public discourse around the “brutal” job market in large tech and knowledge-work firms tends to focus on three explanations: slowing labor demand (sometimes attributed to AI), fake or compliance-only job postings, and opaque applicant tracking systems that filter out candidates at scale. While each plays a role, they miss a deeper structural mechanism inside firms: lateral vacancy chains in closed internal labor markets.

Classical vacancy-chain theory describes how a single vacancy can generate a chain of promotions and transfers inside an organization before it is ultimately filled by an external hire or eliminated. But many modern firms impose strict policies against level-up transfers and tightly control promotion slots. In these environments, vacancies frequently propagate via same-level internal transfers only, with no promotion at any step. From the outside, each hop appears as a distinct job posting; from the inside, these hops are just one long chain of seat reoccupancy.

In this paper we:

  1. Define lateral vacancy chains as a special case of vacancy chains that operate under level-locked internal mobility rules.
  2. Introduce the concept of a seat key and seat lineage: tracking the life of a budgeted seat as it migrates across teams and incumbents.
  3. Show how standard KPIs (time-to-fill, internal vs external hire mix, internal mobility rates) systematically misrepresent the health of staffing when measured per posting instead of per chain.
  4. Explain how these dynamics compress the number of true external entry points, making the job market feel far worse than aggregate “open roles” suggest.
  5. Sketch a simulation and measurement framework that organizations can use to quantify lateral vacancy chains without exposing confidential data.

Central claim

In many large firms, the key bottleneck for job seekers is not a lack of roles, but a shortage of entry points into a closed, same-level internal labor market.


1. Introduction

Over the past few years, candidates have reported applying to hundreds of roles at brand-name firms with little to no response, despite public job boards showing thousands of openings. The mainstream narrative attributes this to:

While each factor matters, they don’t fully explain the everyday experience:

This paper argues that a large, mostly invisible piece of the puzzle is how vacancies propagate inside the firm once they exist. Specifically:

A closed, same-level internal labor market where a budgeted seat is continuously reoccupied by the same-rank employee, but the job moves across the org while the underlying seat remains active.

From the outside, this looks like many discrete openings. From the inside, it is one budgeted seat whose ownership and incumbent have changed a dozen times.

Understanding this structure is critical for:


2. Background: Vacancy Chains and Internal Labor Markets

2.1 Classical vacancy chain theory

Vacancy chains were formalized by White (1970) and reviewed by Chase (1991). A vacancy chain is the sequence of moves triggered by a single opening:

  1. A position becomes vacant (through growth, promotion, or exit).
  2. An internal candidate fills it, creating a vacancy in their prior role.
  3. Another internal move fills that vacancy, and so on.
  4. The chain eventually terminates when:
    • an external candidate fills the last vacancy, or
    • the final role is eliminated or absorbed.

A defining property of a vacancy chain is its length—the number of successive re-postings of the original opening. Longer chains create more internal mobility and greater cumulative disruption.

Later work extended this model to civil-service hierarchies, academic institutions, and sector-wide labor markets. Most studies focus on promotion chains: vacancies at higher levels propagate downward as upward promotions cascade through the hierarchy.

2.2 Internal labor markets in modern firms

Large firms often function as internal labor markets (ILMs): once hired, workers experience most mobility via internal moves and promotions rather than through external job changes. These markets are characterized by:

Recent worker-flow research shows how ILMs shape wage growth and career paths, and highlights that many firms display high gross turnover but little net employment change—most hiring is replacement hiring, not growth. Replacement hiring naturally generates vacancy chains; microdata confirms that chains are a central feature of establishment dynamics.

However, the policy environment has shifted since much of the classic vacancy-chain literature: many modern firms constrain promotions tightly while permitting lateral transfers relatively freely. This creates a distinct variant of vacancy chains that the literature barely touches.


3. Lateral Vacancy Chains: A Modern Variant

3.1 From promotion chains to lateral chains

In many large tech and finance firms, internal mobility policies frequently include rules such as:

The consequence is that most backfills are level-locked. A departing L4 engineer is replaced by another L4; any promotion to L5 is handled separately, often on a quarterly or annual cycle.

flowchart TB subgraph classic["Classical Promotion Chain"] direction TB C1["L6 Director exits"] --> C2["L5 promoted to L6"] C2 --> C3["L4 promoted to L5"] C3 --> C4["L3 promoted to L4"] C4 --> C5["External hire at L3"] end subgraph lateral["Lateral Vacancy Chain (Modern)"] direction LR L1["L4 Team A exits"] --> L2["L4 from Team B"] L2 --> L3["L4 from Team C"] L3 --> L4["L4 from Team D"] L4 --> L5["External hire L4"] end

This leads to a distinct structure:

Lateral vacancy chain: a vacancy chain in which every internal move is a same-level transfer, governed by level-lock policies; promotions do not occur within the chain itself.

Instead of a vertical ladder, the chain snakes horizontally across teams, products, or sub-orgs.

3.2 Seats, seat keys, and closed internal markets

Inside such a firm, headcount is usually represented as budgeted seats: durable units of capacity tied to budget and level.

We define:

Crucially:

From a seat-centric perspective, we see:

A single budgeted seat being continuously reoccupied by same-rank employees, while the job location (team, project, sometimes manager) moves across the org.

Viewed through job postings, this appears as many distinct openings over time. Viewed through seat keys, it is a single, long-running vacancy chain.

3.3 Why this differs from classic models

This lateral, level-locked behavior differs from classic vacancy chains in three important ways:

  1. No vertical mobility inside the chain. Promotions are handled outside the chain, typically by separate promotion processes. Classical vacancy-chain theory often assumes that vacancies permit upward moves.
  2. The chain primarily redistributes work, not rank. Job responsibilities and team context change, but title and level remain constant. The firm reallocates capacity rather than granting advancement.
  3. The chain operates in a closed ILM. External candidates can only enter at specific points where an internal move is not available or permitted. In practice, this often means only the last vacancy in a long chain is visible to outsiders.

This pattern is not explicitly addressed in existing vacancy-chain work, which is why it does not appear in current job-market discourse despite being structurally important.


4. Seat Lineage: Following the Seat, Not the Person

4.1 Defining seat lineage

Most workforce analytics follow people—tracking promotions, transfers, performance, and tenure. To understand lateral vacancy chains, we instead track seats.

We restate the definitions:

A simplified lineage might look like this:

flowchart LR subgraph Y1["Year 1-2"] A1["Seat K-101<br/>L4 TPM<br/>Team A"] A2(["Alice"]) A1 --- A2 end subgraph Y2["Year 2-3"] B1["Seat K-101<br/>L4 TPM<br/>Team B"] B2(["Bob"]) B1 --- B2 end subgraph Y3["Year 3-4"] C1["Seat K-101<br/>L4 TPM<br/>Team D"] C2(["Carol"]) C1 --- C2 end Y1 -->|"Alice transfers out"| Y2 Y2 -->|"Bob transfers out"| Y3 style A1 fill:#e1f5fe style B1 fill:#e1f5fe style C1 fill:#e1f5fe

A naïve per-posting viewpoint would see three “open roles” filled promptly. Seat lineage reveals one budgeted position whose underlying business need has migrated across the org for years.

4.2 Headcount trading and pseudo-backfills

In level-locked environments, managers often negotiate headcount trades: _ Manager X gives up one L4 seat to Manager Y in exchange for future consideration or a different seat. _ The seat key persists, but its cost center, team, and sometimes job description change.

To a job seeker: _ Each handoff looks like a fresh opening in a new team. _ Several of those postings may be filled by internal candidates already identified via networking before the job ever hits external boards.

To the firm: _ Backfill KPIs look excellent: each vacancy is filled quickly, mostly from strong internal candidates. _ The true chain length—how many moves originated from the initial departure—remains opaque unless someone reconstructs seat lineages.

Practitioners who track seat-level histories often find keys that have cycled through many incumbents across multiple teams over a relatively short period. That is the empirical signature of long lateral vacancy chains.


5. KPI Illusions: How Metrics Hide Lateral Chains

Most organizations track per-posting metrics such as: _ time-to-fill, _ offer-accept rate, _ internal vs external hire mix, _ internal transfer rates.

These metrics are usually local to each requisition. In the presence of lateral vacancy chains, they become systematically misleading.

5.1 Time-to-fill per posting vs per chain

Per posting, a lateral backfill might be filled in 30-45 days. These numbers look healthy on dashboards. But if that opening kicked off a chain of 10 internal moves before an external candidate finally entered, the total elapsed time between the original departure and the final external hire might be 12-18 months. The more relevant question for leaders is:

How long does it take to restore the organization to a steady staffing state after a departure?

That is a chain-level metric, not a posting-level one.

5.2 Internal mobility and replacement hiring

From HR’s point of view, high internal mobility rates and high internal fill rates look positive: _ internal candidates perform better and ramp faster, _ internal transfers improve retention and engagement.

At the macro level, however, research shows that replacement hiring (filling quits) dominates firm-level dynamics and is responsible for much of observed hiring volume. In a lateral-chain regime: _ internal moves dominate mid-chain events, _ external hiring becomes concentrated at a few terminal roles.

Standard KPIs will celebrate internal fill rates while obscuring how few external entry points exist at any given time.

5.3 Phantom supply: job postings vs true entry points

Job seekers see hundreds or thousands of postings on a company’s careers site.

A significant fraction of those postings are: _ compliance-driven for internal moves, _ mid-chain roles intended for strong internal candidates, * or postings that will be closed once an ongoing internal shuffle settles.

If a long lateral chain is in motion, dozens of postings may appear and disappear, yet only one or two of them ever had serious external consideration. From the applicant’s perspective this feels like:

“I applied to 500 jobs and never got a call back.”

flowchart LR P["50 job postings<br/>on careers site"] P --> LC1A & LC2A & LC3A P -.-> VP1 subgraph lateral1["Lateral Chain 1 (L4)"] LC1A["Team A"] -->|"lateral"| LC1B["Team B"] -->|"lateral"| LC1C["Team C"] -->|"lateral"| LC1D["...8 more<br/>moves"] --> LC1E["External<br/>Hire"] end subgraph lateral2["Lateral Chain 2 (L5)"] LC2A["Team X"] -->|"lateral"| LC2B["Team Y"] -->|"lateral"| LC2C["...10 more<br/>moves"] --> LC2D["Eliminated<br/>No hire"] end subgraph lateral3["Lateral Chain 3 (L4)"] LC3A["Team P"] -->|"lateral"| LC3B["Team Q"] -->|"lateral"| LC3C["...12 more<br/>moves"] --> LC3D["External<br/>Hire"] end subgraph vertical["Vertical Promotion (Rare)<br/>L6→L5"] VP1["Director<br/>exits"] -->|"promoted"| VP2["L5<br/>promoted"] --> VP3["External<br/>Hire L5"] end LC1E --> RESULT["3 external hires<br/>from 50 postings<br/>(6% actual opportunities)"] LC3D --> RESULT VP3 -.->|"adds 1 more"| RESULT style LC2D fill:#ffcdd2,stroke:#e64a19 style LC1E fill:#c8e6c9,stroke:#2e7d32 style LC3D fill:#c8e6c9,stroke:#2e7d32 style VP3 fill:#e1bee7,stroke:#7b1fa2 style RESULT fill:#c8e6c9,stroke:#4caf50,stroke-width:3px style lateral1 fill:#e3f2fd style lateral2 fill:#e3f2fd style lateral3 fill:#e3f2fd style vertical fill:#f3e5f5

Seat-centric analysis often reveals a different story: _ Many postings map back to a small set of seats, _ Only a small subset of chains ever invite external candidates at all.

The mismatch between posting counts and entry-point counts is a core illusion this paper highlights.

6. The “Club” Effect: External Job Seekers vs Insiders

These dynamics create a labor market that behaves more like an exclusive club than an open marketplace.

flowchart LR subgraph external["External Candidates"] E1(["Job Seeker 1"]) E2(["Job Seeker 2"]) E3(["Job Seeker 3"]) EN(["...hundreds more"]) end WALL{{"Entry Barrier<br/>Limited True Openings"}} subgraph internal["Internal Labor Market - The Club"] I1(["Employee A"]) <-->|"Lateral<br/>Move"| I2(["Employee B"]) I2 <-->|"Lateral<br/>Move"| I3(["Employee C"]) I3 <-->|"Lateral<br/>Move"| I4(["Employee D"]) I4 <-.->|"Networking"| I1 end E1 & E2 & E3 & EN --> WALL WALL -->|"Small% of postings<br/>are true entry points"| internal style WALL fill:#ffccbc,stroke:#e64a19,stroke-width:3px style internal fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style external fill:#fff3e0

Outside the club: _ Long line, heavy screening, high rejection. _ Very few doors actually open to first-time entrants.

Inside the club: _ Lateral moves are common and often informal. _ You choose when to leave. * You are insulated from the most brutal aspects of the external market.

In this framing:

The hard part is not “getting a job” in the abstract; the hard part is crossing the border into the internal labor market of a high-prestige firm.

Once inside, lateral vacancy chains are largely internal games of musical chairs among members, governed by: _ networking, _ performance signals, _ manager reputation, _ and local politics.

Candidates outside understandably misattribute their difficulty to AI or pure randomness because they cannot see that: * many postings they apply to are simply nodes in a lateral vacancy chain already dominated by insiders.

7. A Simple Model of Lateral Vacancy Chains

To reason about this more formally, we can adapt classical models.

7.1 Markov-chain view

Consider each vacancy as a state in a simple Markov process. At each step, the firm chooses: _ with probability pp: fill internally (same level) → new vacancy in the originator’s prior seat, _ with probability qq: eliminate the seat (budget cut / restructure), * with probability r=1pqr = 1 - p - q: fill externally (chain terminates).

In a pure lateral regime: _ internal fills are level-locked, _ promotions are handled elsewhere and do not appear in this chain.

stateDiagram-v2 [*] --> Vacancy: Initial vacancy Vacancy --> InternalFill: p (internal fill) Vacancy --> ExternalHire: r (external hire) Vacancy --> Eliminated: q (seat eliminated) InternalFill --> Vacancy: Creates new vacancy<br/>in prior seat ExternalHire --> [*]: Chain ends Eliminated --> [*]: Chain ends note right of Vacancy At each step: p = prob internal fill q = prob eliminated r = 1-p-q = prob external end note

The expected chain length E[L]E[L] (number of moves until termination) under this model is:

E[L]=1r+q=11pE[L] = \frac{1}{r + q} = \frac{1}{1 - p}

The intuition: when internal fills are rare (low pp), chains terminate quickly. When internal fills dominate (high pp), chains stretch on. At p=0.9p = 0.9, the expected chain length is 10 moves. This aligns with practitioner accounts of seat keys cycling through 10-20+ incumbents over a few years.

Existing Markov models of manpower planning focus on transitions between levels and roles. Here, the emphasis is on transitions between seats under level-lock, with promotions explicitly excluded from the chain.

7.2 Chain diagram (conceptual)

flowchart TB subgraph external_view["What External Job Seekers See"] direction LR P1["Job Posting<br/>Team Alpha<br/>L4 Engineer"] P2["Job Posting<br/>Team Beta<br/>L4 Engineer"] P3["Job Posting<br/>Team Gamma<br/>L4 Engineer"] P4["Job Posting<br/>Team Delta<br/>L4 Engineer"] P5["Job Posting<br/>Team Epsilon<br/>L4 Engineer"] end subgraph internal_view["What's Actually Happening: Seat K-101"] direction LR S0["Alice exits<br/>Team Alpha"] -->|"Bob transfers<br/>from Beta"| S1["Bob's vacancy<br/>Team Beta"] S1 -->|"Carol transfers<br/>from Gamma"| S2["Carol's vacancy<br/>Team Gamma"] S2 -->|"Dan transfers<br/>from Delta"| S3["Dan's vacancy<br/>Team Delta"] S3 -->|"Eve transfers<br/>from Epsilon"| S4["Eve's vacancy<br/>Team Epsilon"] S4 -->|"Finally"| S5["External hire<br/>fills Eve's role"] end P1 -.->|"same seat"| S0 P2 -.->|"same seat"| S1 P3 -.->|"same seat"| S2 P4 -.->|"same seat"| S3 P5 -.->|"same seat"| S4 style S5 fill:#c8e6c9 style external_view fill:#fff3e0 style internal_view fill:#e3f2fd

From the outside, each node above might correspond to a distinct job posting. Internally, they are successive states of the same seat.

8. Simulation Sketch

A basic simulation can clarify how policy choices affect chain lengths and external entry points. The following pseudocode-like Python example shows a simple Monte Carlo simulation of chain lengths under parameters pp, qq, and rr.

# Copyright 2025 Google LLC
# SPDX-License-Identifier: Apache-2.0
# Simplified illustrative example of lateral vacancy-chain simulation.

import random
from statistics import mean

def simulate_chain(p_internal: float, q_eliminate: float) -> tuple[int, int]:
    """Simulate a single lateral vacancy chain.
    Returns (length, total_days) where:
      - length: number of moves until external hire or elimination
      - total_days: cumulative time-to-fill across all moves
    """
    r_external = 1.0 - p_internal - q_eliminate
    assert 0 <= r_external <= 1, "Probabilities must sum to 1 or less"

    length = 0
    total_days = 0
    while True:
        length += 1
        # Each posting takes 30-60 days to fill (looks great on per-posting KPIs)
        total_days += random.randint(30, 60)
        choice = random.random()
        if choice < p_internal:
            # internal fill, chain continues
            continue
        elif choice < p_internal + q_eliminate:
            # seat eliminated, chain ends
            return length, total_days
        else:
            # external hire, chain ends
            return length, total_days

def estimate_chain_metrics(p_internal: float, q_eliminate: float, trials: int = 10000):
    results = [simulate_chain(p_internal, q_eliminate) for _ in range(trials)]
    lengths = [r[0] for r in results]
    days = [r[1] for r in results]
    return mean(lengths), mean(days)

if __name__ == "__main__":
    # Example: 70% internal fills, 10% eliminations, 20% external entries.
    avg_length, avg_days = estimate_chain_metrics(p_internal=0.7, q_eliminate=0.1)
    print(f"Mean chain length: {avg_length:.2f} moves")
    print(f"Mean time to true resolution: {avg_days:.0f} days")
    print(f"(Per-posting KPI would show: 30-60 days)")

Running this simulation yields representative output such as:

$ python3 sim_chain.py
Mean chain length: 3.33 moves
Mean time to true resolution: 150 days
(Per-posting KPI would show: 30-60 days)

This toy model can be extended to include team-specific transition probabilities, level-dependent behavior, and policies governing when external candidates are permitted to enter a chain.

9. Measuring Lateral Vacancy Chains in Practice

9.1 Data requirements

To quantify lateral chains, organizations need: 1. Stable seat keys that persist across incumbents and team moves. 2. Event logs of: _ seat creation / deletion, _ changes in reporting line or team ownership, * incumbency (who, when they start/end). 3. Linkage between job postings and seat keys, so requisitions can be mapped back to underlying headcount.

Many HRIS/ATS systems already store data in this form but rarely expose it in a way that emphasizes seat lineage.

9.2 New metrics

Once seat lineages are reconstructable, organizations can compute: _ Chain length per seat - number of internal moves between external hires (or between creation and elimination). _ Chain resolution time - elapsed time between initial departure and final external hire or elimination. _ External entry-point rate - number of external hires per active seat per year. _ Internal-to-external ratio by job family and level - to detect where ILMs are most closed.

These metrics can be compared against traditional KPIs to highlight discrepancies. For example: * A team with great time-to-fill per posting but extremely long chain resolution times is likely pushing vacancies around rather than truly resolving them.

9.3 Privacy and abstraction

Importantly, analyses can be done internally and published in aggregate: _ No need to expose individual HR records. _ No need to name specific teams or managers. * Seat lineages can be anonymized or compressed into summary statistics.

For an external-facing version, organizations can share: _ synthetic or simulated examples calibrated to real distributions, _ anonymized chain metrics at the org or job-family level.

10. Implications

10.1 For organizations

10.2 For job seekers

10.3 For researchers and policymakers

11. Conclusion

Vacancy chains have been part of organizational sociology for decades, but the lateral, policy-constrained variant emerging in large modern firms changes the experience of both insiders and outsiders: _ For insiders, lateral vacancy chains create a dense graph of possible moves at the same level—a club you navigate once you’re in. _ For outsiders, they compress the number of genuine entry points and make the job market feel arbitrarily hostile and random.

By shifting perspective from people to seats, and from postings to chains, we can see that:

The brutal feeling of the current job market is not only about fewer jobs; it is also about the structure of internal labor markets that heavily favor insiders through lateral vacancy chains.

This paper has introduced the concept of lateral vacancy chains, defined seat keys and seat lineage, sketched a formal model, and proposed practical metrics. The framework provides a foundation for understanding and measuring a hidden but critical dynamic shaping access to opportunity in modern labor markets. The next steps are empirical: reconstruct seat lineages in willing organizations, calibrate simulations, and publish anonymized results to bring structure to a conversation currently dominated by anecdote and frustration.


References

White, H. C. (1970). Chains of opportunity: System models of mobility in organizations. Harvard University Press.

Chase, I. D. (1991). Vacancy chains. Annual Review of Sociology, 17(1), 133-154.


This post is also available on Medium.

← Back to Blog