Exercises: Team Building and Roster Construction
Exercise 1: Cap Allocation Analysis
A team has the following cap commitments: - QB: $45M - WR group: $35M - OL group: $40M - RB group: $12M - TE: $8M - Edge group: $28M - DT group: $18M - LB group: $15M - CB group: $22M - S group: $10M
With a $225M cap: a) Calculate the percentage allocated to each position b) Identify which positions are over/under typical benchmarks c) How much cap space remains? d) Is the allocation balanced between offense and defense?
Exercise 2: Draft Value Calculation
Using the Jimmy Johnson draft value chart: - Pick 1: 3000 - Pick 10: 1300 - Pick 20: 850 - Pick 32: 590
Calculate: a) The total value of picks 10, 20, and a 2025 2nd (pick 45, value ~450) b) Is this enough to trade up to pick 1? c) What single pick would be equivalent to picks 20 + 32?
Exercise 3: Rookie vs Veteran Cost Analysis
Compare two options for filling the WR position: - Option A: Sign veteran WR, 4-year/$60M, age 28 - Option B: Draft WR at pick 15, 4-year/$18M rookie deal
Given: - Veteran expected production: 85/100 year 1, declining 5/year - Rookie expected production: 60/100 year 1, improving 10/year (if hit) - Rookie hit probability: 50%
Calculate expected value for each option over 4 years.
Exercise 4: QB Cap Impact
Calculate the roster impact of different QB scenarios:
| Scenario | QB Cap Hit | Total Cap |
|---|---|---|
| Elite QB | $50M | $225M | |
| Good QB | $35M | $225M | |
| Rookie QB | $8M | $225M |
For each: a) Calculate remaining cap for other 52 players b) Calculate average available per non-QB player c) How many more "average" players ($5M each) can you afford with a rookie vs elite QB?
Exercise 5: Surplus Value Calculator
Write a function to calculate draft pick surplus value:
def calculate_surplus_value(pick: int, position: str,
expected_performance: float) -> Dict:
"""
Calculate surplus value of a draft pick.
Args:
pick: Overall pick number
position: Position
expected_performance: Expected performance level (0-100)
Returns:
Dict with contract_cost, market_value, surplus_value
"""
# Your code here
pass
Test with: - Pick 5, QB, performance 75 - Pick 32, EDGE, performance 70 - Pick 100, RB, performance 65
Exercise 6: Free Agent Evaluation
Evaluate this free agent signing: - Player: 29-year-old WR - Contract: 4-year, $72M, $45M guaranteed - Prior year performance: 88/100 - Position career arc: peaks at 28, declines 4 points/year after 29
a) Calculate expected performance each year b) Calculate total expected value over contract c) Is the guaranteed money appropriate given age? d) Grade the signing (A-F)
Exercise 7: Competitive Window Analysis
Team X has: - QB age 26, under contract 3 more years, performance 90 - 4 other Pro Bowl players, avg age 27, avg 2.5 years remaining - $15M cap space - Draft picks: 1st, 3rd, 4th, 5th, 6th, 7th (traded 2nd)
a) Estimate their competitive window b) What phase are they in (rebuilding/competitive/contending)? c) Recommend their offseason strategy d) Should they trade future picks for immediate help?
Exercise 8: Position Value Ranking
Rank these players by expected surplus value over their contracts:
| Player | Position | Age | AAV | Performance |
|---|---|---|---|---|
| A | QB | 25 | $35M | 85 |
| B | RB | 24 | $12M | 88 |
| C | EDGE | 26 | $20M | 82 |
| D | CB | 28 | $15M | 80 |
Show your calculations.
Exercise 9: Build vs Buy Analysis
For each scenario, recommend Build (Draft) or Buy (Free Agency):
a) Contending team needs starting CB, has pick 28 and $40M cap space b) Rebuilding team needs franchise QB, has pick 3 and $80M cap space c) Competitive team needs RB, has pick 35 and $25M cap space d) Contending team needs EDGE, has pick 25 and $12M cap space
Justify each recommendation.
Exercise 10: Roster Age Analysis
Create a function to analyze roster age distribution:
def analyze_roster_age(roster: pd.DataFrame) -> Dict:
"""
Analyze roster age and implications.
Args:
roster: DataFrame with player, position, age columns
Returns:
Dict with avg_age, young_count, old_count, recommendations
"""
# Your code here
pass
Apply to a sample roster and provide recommendations.
Exercise 11: Trade Value Assessment
Team A offers: Pick 15 + Pick 78 Team B offers: Pick 8
Using Jimmy Johnson values: - Pick 8: 1400 - Pick 15: 1050 - Pick 78: 190
a) Calculate total value of each offer b) Which team is "winning" the trade? c) What additional pick would make the trade fair?
Exercise 12: Contract Structure Analysis
Analyze this contract structure: - Total: 5-year, $150M - Year 1: $20M cap hit - Year 2: $25M cap hit - Year 3: $35M cap hit - Year 4: $35M cap hit - Year 5: $35M cap hit - Guaranteed: $90M (fully guaranteed years 1-2, $30M in year 3)
a) When is the "out" in this contract? b) What's the dead money if cut after year 2? Year 3? c) Is this structure team-friendly or player-friendly?
Exercise 13: Roster Construction Simulator
Build a simple roster construction tool:
class RosterBuilder:
def __init__(self, cap: float):
self.cap = cap
self.roster = []
self.remaining_cap = cap
def add_player(self, name: str, position: str,
cap_hit: float, performance: float) -> bool:
"""Add a player if cap allows."""
pass
def get_roster_value(self) -> float:
"""Calculate total roster performance value."""
pass
def get_position_spending(self) -> Dict:
"""Get spending by position."""
pass
def recommend_additions(self) -> List:
"""Recommend positions to address."""
pass
Exercise 14: Dead Money Analysis
A team has these potential cuts: | Player | Cap Hit | Dead Money | Savings | |--------|---------|------------|---------| | A | $18M | $12M | $6M | | B | $15M | $5M | $10M | | C | $10M | $8M | $2M | | D | $8M | $1M | $7M |
The team needs to clear $15M in cap space.
a) Which combination of cuts achieves this with minimum dead money? b) What's the total dead money for that combination? c) Are there any cuts that don't make sense (dead money > savings)?
Exercise 15: Five-Year Roster Plan
Create a 5-year roster plan for a rebuilding team:
Starting position: - 4-13 record - QB age 34, declining - 3 quality starters under 27 - $60M cap space - Picks 2, 34, 66, 98, 130, 162, 194
For each year, outline: - Draft strategy - FA approach - Key contracts to address - Expected record
Exercise 16: WAR by Position
Calculate team WAR given: | Position | Player WAR | Players | |----------|-----------|---------| | QB | 4.5 | 1 | | RB | 0.8 | 2 | | WR | 1.5 | 4 | | OL | 1.0 | 5 | | EDGE | 2.0 | 2 | | DT | 1.2 | 3 | | LB | 0.8 | 3 | | CB | 1.8 | 3 | | S | 0.6 | 2 |
a) Calculate total team WAR b) Which position group provides most value? c) If you could add 1.0 WAR to any position, which would impact wins most?
Exercise 17: Cap Projection
Project cap situation for next 3 years:
Current cap: $225M Expected growth: 7% annually
Current commitments: - Year 1: $200M - Year 2: $180M (some contracts expire) - Year 3: $150M
Calculate: a) Projected cap for years 2 and 3 b) Projected cap space each year c) When is the best year to make a big FA signing?
Exercise 18: Position Premium Analysis
Calculate cost-per-WAR for different positions:
| Position | Avg Starter Cost | Avg Starter WAR |
|---|---|---|
| QB | $35M | 3.0 |
| EDGE | $18M | 1.8 |
| WR | $15M | 1.2 |
| RB | $8M | 0.6 |
a) Calculate cost per WAR for each position b) Rank positions by efficiency c) Which positions offer best value?
Exercise 19: Extension vs Free Agency
Your star CB (age 26, performance 85) wants an extension. - Market rate: 4 years, $72M ($18M AAV) - You could let him walk and draft replacement - Replacement expected: 65 performance, $4M/year for 4 years
Calculate: a) Total cost of extension vs draft replacement b) Expected performance difference c) Cost per unit of performance for each option d) Recommend extension or let walk?
Exercise 20: Complete Roster Evaluation
Using the RosterAnalyzer class, evaluate a team:
# Create sample data
roster = pd.DataFrame([
{'player': 'QB1', 'position': 'QB', 'age': 27, 'performance_rating': 88},
# ... add 52 more players
])
contracts = pd.DataFrame([
{'player': 'QB1', 'cap_hit': 40.0, 'years_remaining': 3, 'guaranteed_remaining': 80.0},
# ... add contract details
])
# Analyze
analyzer = RosterAnalyzer(roster, contracts, 2024)
report = analyzer.generate_report('TEAM')
recommendations = analyzer.get_recommendations('TEAM')
Interpret the results and provide a strategic assessment.
Submission Guidelines
For coding exercises: 1. Include all imports and helper functions 2. Document your assumptions 3. Test with provided data 4. Include sample output
For analytical exercises: 1. Show all calculations 2. Explain reasoning 3. Consider multiple perspectives 4. Provide actionable recommendations