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