Case Study: The Cincinnati Bengals Rebuild

From 2-14 to Super Bowl in two years: A masterclass in roster construction


Introduction

The Cincinnati Bengals entered the 2020 season coming off a 2-14 campaign—the worst record in the NFL. Just two years later, they were playing in Super Bowl LVI. This remarkable turnaround wasn't luck; it was the result of strategic roster construction that maximized the value of a top draft pick, smart free agency, and an understanding of positional value.

This case study examines how the Bengals rebuilt their roster and what other teams can learn from their approach.


The Question

How did the Bengals transform from the league's worst team to a Super Bowl contender in just two years, and what roster construction principles drove their success?


The Starting Point (2019-2020)

The 2019 Bengals

import pandas as pd
import numpy as np

# 2019 Bengals situation
bengals_2019 = {
    'record': '2-14',
    'point_differential': -157,
    'cap_situation': {
        'cap_space': 48.0,  # $M
        'dead_money': 8.2,
        'qb_cap_pct': 12.5  # Andy Dalton
    },
    'roster_age': {
        'avg_age': 26.8,
        'core_avg': 28.5,
        'under_26': 18
    },
    'key_needs': [
        'Franchise QB',
        'Offensive line',
        'Wide receiver depth',
        'Pass rush'
    ],
    'assets': {
        'draft_pick': 1,  # First overall
        'cap_space': 'significant',
        'young_receivers': ['Tyler Boyd', 'Tee Higgins (drafted)']
    }
}

print("2019 Bengals Assessment:")
for k, v in bengals_2019.items():
    print(f"  {k}: {v}")

The Critical Decision: Joe Burrow

The Bengals' turnaround began with the most important roster decision a team can make:

def analyze_qb_draft_decision():
    """
    The Bengals' decision to draft Joe Burrow.
    """
    options = {
        'draft_burrow': {
            'pick': 1,
            'contract': '4 years, $36.1M fully guaranteed',
            'cap_hit_y1': 8.9,
            'risk': 'Injury history, small sample',
            'upside': 'Generational talent, leadership'
        },
        'trade_pick': {
            'potential_return': '3-4 first round picks',
            'risk': 'Lose franchise QB opportunity',
            'upside': 'Accumulate more talent'
        },
        'draft_other': {
            'options': ['Chase Young (EDGE)', 'Jeff Okudah (CB)'],
            'risk': 'Miss on franchise QB',
            'qb_alternatives': 'Stick with Dalton or draft later'
        }
    }

    return {
        'decision': 'Draft Burrow',
        'rationale': [
            '1. QB most important position',
            '2. Generational prospect (best since Luck)',
            '3. Cheap contract allows roster building',
            '4. Franchise QBs rarely available',
            '5. No trade offers sufficient'
        ],
        'surplus_value': {
            'market_value_over_4_years': 120.0,  # If elite
            'contract_cost': 36.1,
            'surplus': 83.9
        }
    }

burrow_decision = analyze_qb_draft_decision()
print("\nBurrow Draft Decision:")
print(f"  Surplus value if successful: ${burrow_decision['surplus_value']['surplus']}M")

Year 1: Laying the Foundation (2020)

The Draft

bengals_2020_draft = [
    {'pick': 1, 'player': 'Joe Burrow', 'position': 'QB', 'result': 'Franchise QB'},
    {'pick': 33, 'player': 'Tee Higgins', 'position': 'WR', 'result': 'Pro Bowl caliber'},
    {'pick': 65, 'player': 'Logan Wilson', 'position': 'LB', 'result': 'Quality starter'},
    {'pick': 107, 'player': "Akeem Davis-Gaither", 'position': 'LB', 'result': 'Depth'},
    {'pick': 147, 'player': 'Khalid Kareem', 'position': 'DE', 'result': 'Rotational'},
    {'pick': 215, 'player': 'Hakeem Adeniji', 'position': 'OL', 'result': 'Depth'}
]

def evaluate_draft_class(picks):
    """Calculate draft class value."""
    total_surplus = 0
    hits = 0

    for pick in picks:
        # Estimate surplus based on result
        if 'Franchise' in pick['result'] or 'Pro Bowl' in pick['result']:
            surplus = 20 + (256 - pick['pick']) / 10
            hits += 1
        elif 'starter' in pick['result'].lower():
            surplus = 8 + (256 - pick['pick']) / 20
            hits += 1
        else:
            surplus = 1

        total_surplus += surplus
        pick['estimated_surplus'] = round(surplus, 1)

    return {
        'picks': picks,
        'total_surplus': round(total_surplus, 1),
        'hit_rate': hits / len(picks),
        'grade': 'A+' if total_surplus > 50 else 'A' if total_surplus > 35 else 'B'
    }

draft_eval = evaluate_draft_class(bengals_2020_draft)
print(f"\n2020 Draft Class Grade: {draft_eval['grade']}")
print(f"  Total surplus value: ${draft_eval['total_surplus']}M")

Free Agency Approach

The Bengals took a measured approach in 2020 FA:

Signing Position Contract Strategy
Trae Waynes CB 3yr/$42M Fill need, overpay
D.J. Reader DT 4yr/$53M Anchor defense
Vonn Bell S 3yr/$18M Value signing
def analyze_2020_fa_strategy():
    """Evaluate Bengals 2020 FA strategy."""

    signings = [
        {'player': 'Trae Waynes', 'position': 'CB', 'aav': 14.0, 'age': 27,
         'result': 'Injured, limited impact', 'grade': 'D'},
        {'player': 'D.J. Reader', 'position': 'DT', 'aav': 13.25, 'age': 25,
         'result': 'Pro Bowl when healthy', 'grade': 'B+'},
        {'player': 'Vonn Bell', 'position': 'S', 'aav': 6.0, 'age': 25,
         'result': 'Quality starter', 'grade': 'A'}
    ]

    return {
        'total_committed': sum(s['aav'] * 3 for s in signings),
        'hits': 2,
        'misses': 1,
        'strategy': 'Fill key needs, accept some risk',
        'lesson': 'CB FA signings high risk, S better value'
    }

fa_2020 = analyze_2020_fa_strategy()

2020 Season Result

  • Record: 4-11-1 (Burrow injured Week 11)
  • Assessment: Foundation laid, QB confirmed elite before injury

Year 2: Aggressive Building (2021)

The Ja'Marr Chase Decision

The Bengals faced a crucial choice with pick #5: address the offensive line or reunite Burrow with college teammate Ja'Marr Chase.

def analyze_chase_vs_sewell():
    """The pivotal 2021 draft decision."""

    options = {
        'jamarr_chase': {
            'position': 'WR',
            'profile': 'Elite prospect, Burrow connection',
            'projected_impact': 'Immediate WR1',
            'positional_value': 'Premium but replaceable',
            'risk': 'OL still weak'
        },
        'penei_sewell': {
            'position': 'OT',
            'profile': 'Generational OT prospect',
            'projected_impact': 'Protect franchise QB',
            'positional_value': 'Premium, scarce',
            'risk': 'Miss on Chase'
        }
    }

    decision_factors = {
        'burrow_connection': 'LSU chemistry could accelerate timeline',
        'wr_value': 'Tyler Boyd + Tee Higgins already solid',
        'ol_alternatives': 'Can address in FA or later rounds',
        'ceiling': 'Chase ceiling higher than Sewell',
        'risk_tolerance': 'Bengals chose upside over safety'
    }

    actual_results = {
        'chase_2021': {'catches': 81, 'yards': 1455, 'tds': 13, 'grade': 'A+'},
        'sewell_2021': {'games': 17, 'sacks_allowed': 2, 'grade': 'A'},
        'verdict': 'Both excellent, Chase more immediate impact'
    }

    return options, decision_factors, actual_results

chase_analysis = analyze_chase_vs_sewell()

Complete 2021 Draft

bengals_2021_draft = [
    {'pick': 5, 'player': "Ja'Marr Chase", 'position': 'WR', 'result': 'OROY, Elite'},
    {'pick': 69, 'player': 'Jackson Carman', 'position': 'OG', 'result': 'Bust'},
    {'pick': 111, 'player': "D'Ante Smith", 'position': 'OT', 'result': 'Depth'},
    {'pick': 149, 'player': 'Cameron Sample', 'position': 'DE', 'result': 'Rotational'},
    {'pick': 190, 'player': 'Tyler Shelvin', 'position': 'DT', 'result': 'Depth'},
    {'pick': 202, 'player': 'Evan McPherson', 'position': 'K', 'result': 'Pro Bowl'},
    {'pick': 235, 'player': 'Chris Evans', 'position': 'RB', 'result': 'Limited'},
    {'pick': 252, 'player': 'Trey Hill', 'position': 'C', 'result': 'Cut'}
]

# Note: Late-round K (McPherson) became crucial for playoff run

2021 Free Agency: Surgical Additions

Signing Position Contract Result
Riley Reiff OT 1yr/$7.5M Key starter
Trey Hendrickson EDGE 4yr/$60M Pro Bowl
Mike Hilton CB 4yr/$24M Quality starter
Larry Ogunjobi DT 1yr/$6.2M Strong season
Chidobe Awuzie CB 3yr/$21.75M Pro Bowl caliber
def analyze_2021_fa_strategy():
    """Evaluate improved 2021 FA approach."""

    key_signings = [
        {'player': 'Trey Hendrickson', 'aav': 15.0, 'need': 'Pass rush',
         'result': '14 sacks', 'grade': 'A'},
        {'player': 'Chidobe Awuzie', 'aav': 7.25, 'need': 'CB1',
         'result': 'Excellent', 'grade': 'A+'},
        {'player': 'Mike Hilton', 'aav': 6.0, 'need': 'Slot CB',
         'result': 'Quality starter', 'grade': 'A'},
        {'player': 'Riley Reiff', 'aav': 7.5, 'need': 'OT',
         'result': 'Solid, injuries', 'grade': 'B+'}
    ]

    strategy_notes = [
        'Targeted specific needs',
        'Mixed contract lengths (short-term + long-term)',
        'Value signings (Awuzie especially)',
        'Avoided overpaying at weak positions',
        'EDGE worth premium (Hendrickson)'
    ]

    return {
        'signings': key_signings,
        'total_spent_year_1': sum(s['aav'] for s in key_signings),
        'hit_rate': 4/4,
        'grade': 'A',
        'key_insight': 'Better scouting, targeted needs, value focus'
    }

fa_2021 = analyze_2021_fa_strategy()

2021 Season Result

  • Record: 10-7 (AFC North Champions)
  • Playoffs: Beat Raiders, Titans, Chiefs
  • Super Bowl LVI: Lost to Rams 23-20

Key Success Factors

1. Franchise QB on Rookie Contract

def calculate_burrow_window_advantage():
    """Calculate roster building advantage from cheap QB."""

    burrow_cap_hits = {
        2020: 8.9,
        2021: 9.6,
        2022: 11.2,
        2023: 12.8  # Before extension
    }

    market_qb_cost = {
        2020: 30.0,
        2021: 35.0,
        2022: 40.0,
        2023: 45.0
    }

    total_savings = sum(market_qb_cost[y] - burrow_cap_hits[y]
                       for y in burrow_cap_hits)

    return {
        'savings_over_4_years': total_savings,
        'extra_players_affordable': total_savings / 8,  # Avg starter cost
        'window_description': '4 years to build elite roster around cheap QB'
    }

window = calculate_burrow_window_advantage()
print(f"\nRookie QB Window Advantage:")
print(f"  Total savings: ${window['savings_over_4_years']}M")
print(f"  Extra quality players: ~{window['extra_players_affordable']:.0f}")

2. Elite Draft Execution

def summarize_draft_success():
    """Summarize Bengals' draft execution 2020-2021."""

    key_picks = [
        ('Joe Burrow', 1, 'Franchise QB'),
        ('Tee Higgins', 33, 'WR2, Pro Bowl caliber'),
        ("Ja'Marr Chase", 5, 'WR1, Offensive ROY'),
        ('Logan Wilson', 65, 'Starting LB'),
        ('Evan McPherson', 202, 'Clutch kicker')
    ]

    return {
        'hit_rate': '5/13 impact players (38%)',
        'quality_of_hits': 'Very high - 2 Pro Bowlers, 1 MVP candidate',
        'position_selection': 'Premium positions (QB, WR) prioritized',
        'value_finds': 'Logan Wilson (3rd), McPherson (6th)',
        'overall_grade': 'A'
    }

3. Smart Free Agency

def summarize_fa_approach():
    """Summarize Bengals FA strategy."""

    return {
        'year_1': {
            'approach': 'Fill holes, accept overpays',
            'result': 'Mixed (Reader good, Waynes bad)',
            'lesson_learned': 'CB signings risky'
        },
        'year_2': {
            'approach': 'Targeted, value-focused',
            'result': 'Excellent (Hendrickson, Awuzie, Hilton)',
            'key_insight': 'EDGE worth premium, CB can be found cheaper'
        },
        'overall_strategy': [
            'Avoid long-term deals while rebuilding',
            'Target value positions (S, slot CB)',
            'Pay premium for pass rush',
            'Use 1-year deals to maintain flexibility'
        ]
    }

4. Positional Value Understanding

def analyze_positional_allocation():
    """How Bengals allocated resources by position."""

    allocation = {
        'premium_investment': ['QB (draft)', 'EDGE (FA)', 'WR (draft)'],
        'value_approach': ['CB (mid-tier FA)', 'S (value FA)', 'OL (late FA/draft)'],
        'avoided': ['RB premium deals', 'LB premium deals'],

        'result': {
            'offense': 'Elite weapons, adequate line',
            'defense': 'Strong pass rush, solid secondary',
            'special_teams': 'Excellent kicker (late draft)'
        }
    }

    return allocation

Lessons for Other Teams

1. The Franchise QB Is Everything

The Bengals' transformation was only possible because they: - Had a losing season at the right time (2019) - A generational QB was available (Burrow) - They didn't overthink it (took the QB)

2. Maximize the Rookie QB Window

def rookie_qb_window_strategy():
    """Strategy for teams with rookie QBs."""

    return {
        'years_1_2': [
            'Aggressive FA spending',
            'Trade future picks if contending',
            'Build elite supporting cast'
        ],
        'years_3_4': [
            'Begin QB extension discussions',
            'Lock up core players',
            'Plan for cap increase'
        ],
        'key_metrics': {
            'cap_advantage': '$20-30M/year vs veteran QB',
            'window_length': '4-5 years',
            'championship_probability': '2-3x higher than rebuilding'
        }
    }

3. Position Value Matters

The Bengals prioritized: 1. QB - Non-negotiable, took Burrow #1 2. WR - Took Chase over OL, paid off 3. EDGE - Paid Hendrickson premium 4. CB - Found value (Awuzie), avoided overpays

4. Draft Hit Rate > Draft Capital

def draft_quality_over_quantity():
    """Quality of picks matters more than quantity."""

    bengals_vs_average = {
        'bengals_hit_rate': 0.38,  # 5/13 impact players
        'league_average': 0.25,

        'bengals_value': {
            'hit_quality': 'Very high (Burrow, Chase)',
            'surplus_created': '$100M+ over 4 years'
        },

        'lesson': 'One franchise QB > many role players'
    }

    return bengals_vs_average

What Could Have Gone Wrong

The Risks They Took

  1. Burrow injury risk - ACL tear in 2020 could have derailed everything
  2. Chase over Sewell - OL still struggled, Burrow was sacked 70 times combined
  3. Thin OL investment - Nearly cost them the Super Bowl
  4. FA misses - Waynes was a bust

The OL Problem

def analyze_ol_oversight():
    """The Bengals' one significant roster construction error."""

    ol_situation = {
        '2020_draft': 'No OL in top 3 rounds',
        '2021_draft': 'Chase over Sewell, OL picks failed',
        'fa_investment': 'Minimal (Reiff only)',

        'consequences': {
            'burrow_sacks_2021': 51,
            'burrow_sacks_playoffs': 19,
            'super_bowl': 'Sacked 7 times in loss'
        },

        '2022_correction': {
            'fa_signings': ['La\'el Collins', 'Alex Cappa', 'Ted Karras'],
            'total_spent': '$35M+',
            'lesson': 'Cannot neglect OL indefinitely'
        }
    }

    return ol_situation

Summary

The Bengals' two-year rebuild demonstrates key roster construction principles:

Principle Bengals Application
Franchise QB Drafted Burrow #1, didn't overthink
Rookie window Spent aggressively with cheap QB
Position value Premium on QB, WR, EDGE
Draft execution High hit rate on early picks
FA strategy Evolved from overpays to value

The Formula: 1. Get the franchise QB 2. Build elite weapons around him 3. Invest in pass rush 4. Find value at other positions 5. Accept some risk (OL) to maximize upside

The Bengals went from 2-14 to the Super Bowl by understanding that roster construction isn't about filling every hole—it's about maximizing value at premium positions while your quarterback is cheap.


Your Turn

Exercise: Apply Bengals principles to another rebuilding team:

  1. Identify their franchise QB path
  2. Map their draft capital
  3. Calculate cap space and allocation
  4. Design a 2-year roster construction plan
  5. Project their competitive window

Suggested teams: Chicago Bears (2024), Carolina Panthers, New England Patriots