All books

Elegant Puzzle

Bookshelf

Elegant Puzzle

Organizations

  • Team sizing matters: Keep teams between 4-8 engineers for optimal functioning; too small (<4) creates survival risk, too large (>8) reduces efficiency
  • Organizational transitions: Navigate through four states strategically - falling behind, treading water, repaying debt, and innovating
  • Organizational structure: Design your structure based on where you want support (users, business or technical) and constraints (people, roadmap, hardware)
  • Team evolution: Follow natural progression from ad hoc to temporary to permanent teams as needs stabilize
  • Standardization approach: Standardize your approach to team design rather than the actual team structures themselves
  • Manager span: Limit engineering managers to 6-8 direct reports; beyond this, quality of support significantly deteriorates
  • Team topology: Consider “soil fertility” - don’t put your best engineers all on one team; distribute talent to maximize growth
  • Team metrics: Track measure four key metrics for success - throughput, stability, engineering load, and team health
  • Change management: Make organizational changes less disruptive by batching changes and communicating the rationale clearly

Tools

  • Prioritization framework: Use the model of “succession of controls” - work directly on actual constraints (bottom-up) rather than setting arbitrary goals (top-down)
  • Work classification: Categorize work as speculative, maintenance, or reduction to better understand value and communicate priorities
  • Metrics selection: Choose metrics that demonstrate progress toward company goals and create virtuous cycles
  • Strategy document structure: Make strategy documents practical with 5 sections: problem statement, vision, specific, constraints, and approach
  • Vision testing: Ensure visions are actionable by testing if they help with prioritization, coordination, and prevent wasting resources
  • Roadmap creation: Develop multi-quarter roadmaps that tie back to company goals and provide direction without excessive detail
  • Capacity planning: Always plan at 70% utilization to account for interruptions, interviews, and unexpected work
  • Career development: Use the “promotion packet” approach to give engineers clear targets and document their growth objectively
  • Decision quality: Focus on creating systems that produce quality decisions rather than trying to make perfect decisions

Approaches

  • Opportunity sizing: Evaluate opportunities through the lenses of availability, relevance, solvability, and value to determine priority
  • Technical investment: Allocate 20% of engineering time to technical debt; schedule it explicitly rather than hoping it happens
  • Migration completion: Drive migrations to 100% completion; partial migrations create overhead without delivering full value
  • System modeling: Use napkin math to validate your understanding before diving into complex initiatives
  • Meeting effectiveness: Always start meetings with context and end with explicit next steps to respect everyone’s time
  • Presenting to executives: Structure executive presentations as a pyramid - conclusion first, supporting points next, details last
  • Feedback delivery: Provide feedback that is timely, actionable, specific, and kind to maximize its effectiveness
  • Career conversations: Hold career discussions that explore life context, aspirations, and how the company fits into their goals
  • Interview process: Design interviews that validate skills for the role and provide candidates with a representative experience

Culture

  • Team culture creation: Deliberately shape culture through artifacts (what you create), values (what you believe), and practices (what you do)
  • Culture document: Create explicit cultural documents to align teams and make implicit assumptions explicit
  • Inclusion focus: Prioritize inclusion over other cultural elements; without inclusion, other values cannot thrive
  • Decision making: Document and clarify how decisions get made in your organization to reduce friction and align expectations
  • Communication channels: Select appropriate channels for different types of communication; not everything should be in Slack
  • Knowledge sharing: Create systems for preserving and sharing knowledge; avoid critical information living only in individual minds
  • Recognition programs: Implement recognition that rewards your true values, not just what’s easily measurable
  • Meeting culture: Design meeting-light cultures by requiring agendas and clear decision criteria
  • Remote work: Support remote work with explicit documentation, scheduled social time, and communication training

Careers

  • Career ladders: Create explicit, fair career ladders with examples and counterexamples to guide growth
  • Growth opportunities: Provide three key ingredients for growth - room to scale up, authentic feedback, and role models
  • Manager transitions: Support new managers with training, coaching, and clear expectations during their first 90 days
  • Performance management: Address performance issues with a structured approach - identify, document, provide feedback, create plan, follow up
  • Manager hiring: Select managers who demonstrate coaching ability, give credit, have self-awareness, and show systems thinking
  • Retention strategy: Focus retention efforts on top performers through growth opportunities, not just compensation
  • Psychological safety: Build systems where people can express concerns without fear; this is the foundation of high-performing teams
  • Diverse hiring: Expand your hiring pool by reconsidering unnecessary requirements and designing inclusive interview processes
  • Career mobility: Support internal transfers and career changes to retain talent and build institutional knowledge

Tips

  • Team foundation: When starting a new team, immediately establish core processes for deployments, testing, and on-call
  • Technical specs: Require written technical specifications for significant projects to clarify thinking and align stakeholders
  • Architecture design: Approach architecture as optimization under constraints rather than seeking perfect solutions
  • System evolution: Design systems to evolve gracefully; avoid both over-engineering and under-engineering
  • Interview design: Create interviews that can be consistently evaluated and represent real work as much as possible
  • Code review: Implement lightweight code review practices that catch issues without creating bottlenecks
  • Knowledge management: Create systems for documenting knowledge that make it easier to write than to not write
  • Meeting hygiene: Respect everyone’s time by having clear agendas, goals, and follow-ups for every meeting
  • Communication clarity: Be explicit about communication expectations - what requires real-time vs. asynchronous responses
  • Growth mindset: Approach challenges with curiosity rather than defensiveness to continuously improve

Key Takeaways

  1. Team design: Structure teams of 4-8 engineers for optimal performance and support
  2. Technical debt: Explicitly allocate 20% of engineering time to address technical debt
  3. Decision making: Focus on creating systems that consistently produce good decisions rather than trying to make perfect decisions
  4. Migrations: Drive technical migrations to 100% completion; partial migrations create maximum pain with minimal benefit
  5. Growth prerequisites: Provide three essentials for engineer growth - room to grow, honest feedback, and role models
  6. Strategy documents: Create practical strategy documents with clear problem statements, constraints, and approaches
  7. Capacity planning: Always plan at 70% utilization to account for unexpected work and maintain team sustainability
  8. Metrics selection: Choose metrics that demonstrate progress toward company goals and create virtuous cycles
  9. Documentation: Make documentation easier to write than not write to preserve institutional knowledge
  10. Inclusion first: Prioritize inclusion as the foundation upon which all other cultural values can thrive