Lab
Build an EM Interview Self-Assessment Tool
25 min
Beginner3 Free Attempts
Instructions
Overview
In this lab, you will build a Python command-line tool that helps Engineering Manager candidates assess their interview readiness. The tool will collect self-ratings across five competency areas, calculate scores, identify strengths and weaknesses, and generate a personalized study plan.
The Five Competency Areas
Your tool must evaluate candidates across these five areas:
- People Management — Hiring, coaching, feedback, performance management, conflict resolution
- Technical Architecture — System design, tradeoff analysis, technical decision-making
- Behavioral Storytelling — STAR-format stories, leadership narratives, structured communication
- Execution & Delivery — Project management, cross-team coordination, shipping under constraints
- Strategic Thinking — Vision setting, roadmap prioritization, connecting engineering to business
Requirements
Part 1: Data Collection
Create a function collect_ratings() that:
- Accepts a dictionary of competency ratings (each rated 1-5)
- Validates that all five competency areas are present
- Validates that each rating is an integer between 1 and 5
- Returns a validated ratings dictionary
- Raises a
ValueErrorfor invalid inputs
Part 2: Score Analysis
Create a function analyze_scores(ratings) that returns a dictionary containing:
overall_score: The average score across all five areas (rounded to 1 decimal)readiness_level: A string — "Strong" (avg >= 4.0), "Moderate" (avg >= 3.0), or "Needs Work" (avg < 3.0)strengths: A list of competency names where the score is 4 or 5weaknesses: A list of competency names where the score is 1 or 2growth_areas: A list of competency names where the score is 3
Part 3: Study Plan Generation
Create a function generate_study_plan(analysis, weeks) that:
- Accepts the analysis dictionary from Part 2 and a number of weeks (4, 8, or 12)
- Allocates preparation time: 40% to weaknesses, 20% to growth areas, 10% to strengths (remaining 30% to general practice)
- Returns a list of dictionaries, where each item represents a week with:
week_number: The week number (integer)focus_area: The primary competency to focus on that weekdaily_hours: Recommended daily study hours (float)activities: A list of 2-3 specific activities for that week
- Distributes weeks proportionally across weakness, growth, and strength areas
Part 4: Report Generation
Create a function generate_report(ratings, analysis, study_plan) that:
- Returns a formatted string containing:
- A header with the overall score and readiness level
- A section listing all five competency areas with their scores and a visual bar (using
#characters, where each#represents one point) - A strengths section listing areas rated 4-5
- A weaknesses section listing areas rated 1-2
- The complete week-by-week study plan
- The output must be clean, readable, and well-structured
Example Usage
ratings = {
"People Management": 2,
"Technical Architecture": 4,
"Behavioral Storytelling": 3,
"Execution & Delivery": 5,
"Strategic Thinking": 2
}
validated = collect_ratings(ratings)
analysis = analyze_scores(validated)
plan = generate_study_plan(analysis, weeks=8)
report = generate_report(validated, analysis, plan)
print(report)
Expected Output Format
============================================
EM INTERVIEW READINESS ASSESSMENT
============================================
Overall Score: 3.2 / 5.0
Readiness Level: Moderate
--- Competency Breakdown ---
People Management: ## (2/5)
Technical Architecture: #### (4/5)
Behavioral Storytelling: ### (3/5)
Execution & Delivery: ##### (5/5)
Strategic Thinking: ## (2/5)
--- Strengths (Score 4-5) ---
* Technical Architecture
* Execution & Delivery
--- Weaknesses (Score 1-2) ---
* People Management
* Strategic Thinking
--- 8-Week Study Plan ---
Week 1: People Management (1.5 hrs/day)
- Read 'The Manager's Path' chapters on feedback
- Practice delivering constructive feedback scenarios
- Write 3 STAR stories about people management
[... remaining weeks ...]
============================================
Grading Rubric
Correctly scores across 5 competency areas — collect_ratings() validates all 5 areas exist with scores 1-5 and raises ValueError for invalid input; analyze_scores() calculates the correct overall average, readiness level, and categorizes strengths/weaknesses/growth areas accurately25 points
Generates accurate strength/weakness report — generate_report() produces a clean, readable report with overall score, readiness level, visual competency bars using # characters, and correctly separated strengths (4-5) and weaknesses (1-2) sections25 points
Produces personalized study plan based on gaps — generate_study_plan() supports 4, 8, and 12 week timelines; allocates approximately 40% of weeks to weaknesses, 20% to growth areas, and 10% to strengths; each week includes a focus area, daily hours, and 2-3 specific activities25 points
Handles edge cases and produces clean output — works correctly when all scores are equal (all 5s, all 1s, all 3s), when there are no weaknesses, or when there are no strengths; output is well-formatted with consistent alignment and no crashes or unhandled exceptions25 points
Checklist
0/10Your Solution
3 free attempts remaining