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
- Burrow injury risk - ACL tear in 2020 could have derailed everything
- Chase over Sewell - OL still struggled, Burrow was sacked 70 times combined
- Thin OL investment - Nearly cost them the Super Bowl
- 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:
- Identify their franchise QB path
- Map their draft capital
- Calculate cap space and allocation
- Design a 2-year roster construction plan
- Project their competitive window
Suggested teams: Chicago Bears (2024), Carolina Panthers, New England Patriots