Technical Leadership Patterns & Decision Making
📖 Concept
Staff engineers are force-multipliers. Your impact isn't measured by how much code you write, but by how much you enable the entire team to move faster and make better decisions.
The 4 pillars of Staff engineering:
- Technical Direction — Setting the architectural vision and ensuring consistent technical decisions across teams.
- Execution Excellence — Unblocking others, reviewing complex PRs, identifying and mitigating technical risks before they become crises.
- Knowledge Sharing — Writing ADRs, giving tech talks, mentoring senior engineers toward staff-level, creating runbooks.
- Organizational Influence — Translating technical tradeoffs into business terms, influencing roadmap prioritization, building consensus across teams.
Architecture Decision Records (ADRs): ADRs document WHY a technical decision was made — the context, options considered, trade-offs, and the final decision. Without ADRs, new engineers ask "why did we choose Redux over Zustand?" and nobody remembers.
ADR Template:
# ADR-001: State Management Strategy
## Status: Accepted
## Date: 2024-03-15
## Context
Our app has grown to 50 screens with 10 engineers. We're experiencing:
- Excessive re-renders due to single Redux store
- 40% of Redux code is boilerplate for API data
- New engineers take 2 weeks to understand the state architecture
## Options Considered
1. Refactor Redux — Better selectors, split stores
2. Migrate to Zustand — Simpler API, selector-based
3. Hybrid — React Query for server state + Zustand for client state
## Decision: Option 3 — Hybrid approach
## Rationale
- 70% of our Redux slices are API data → React Query handles this with less code
- Client state (theme, auth) is simple → Zustand is sufficient
- Incremental migration — new features use new stack, old features migrate over time
## Consequences
- Team needs React Query training (2-day workshop)
- Migration will take ~3 months (incremental, per-feature)
- Dual systems during migration (acceptable, well-documented boundaries)
Code Review Excellence: At the staff level, your code reviews teach patterns, catch architectural issues, and raise the team's overall quality. Review checklist:
- Does this change align with our architectural patterns?
- Are error cases handled? What happens when the API fails?
- Will this scale? What if the list has 10K items?
- Is this testable? Can we write a unit test without complex mocking?
- Does this introduce a dependency we'll regret? (bundle size, maintenance)
💻 Code Example
1// === TECHNICAL LEADERSHIP IN PRACTICE ===23// 1. RFC (Request for Comments) for significant changes4/*5# RFC: Migrate to React Navigation 767## Background8We're on React Navigation 5 (2 major versions behind). Benefits of v7:9- Type-safe navigation (reduces runtime crashes by ~15%)10- Static API (better tree-shaking, faster builds)11- Preloading screens (faster navigation transitions)1213## Proposed Approach14Phase 1 (Week 1-2): Upgrade to v6 (smaller jump, intermediate step)15Phase 2 (Week 3-4): Upgrade to v716Phase 3 (Week 5): Enable type-safe navigation for all screens1718## Risk Assessment19- Risk: Third-party navigation libraries may be incompatible20 Mitigation: Audit dependencies before starting2122- Risk: Custom navigators may break23 Mitigation: Identify and update in Phase 12425## Rollback Plan26If critical issues found: revert commit. Navigation state is ephemeral —27no data migration needed.2829## Open Questions301. Do we adopt the static API for new screens immediately or after full migration?312. Should we take this opportunity to restructure our navigator hierarchy?32*/3334// 2. Mentoring pattern: Pull Request as teaching moment35/*36REVIEW COMMENT on a PR that uses useEffect for derived state:3738> Instead of:39> useEffect(() => {40> setFilteredItems(items.filter(i => i.active));41> }, [items]);42>43> Consider using useMemo:44> const filteredItems = useMemo(45> () => items.filter(i => i.active),46> [items]47> );48>49> **Why:** useEffect for derived state is an anti-pattern because:50> 1. It causes an extra render cycle (render → effect → setState → render again)51> 2. There's a brief moment where filteredItems is stale/empty52> 3. useMemo computes during render — no extra cycle, always consistent53>54> Reference: https://react.dev/learn/you-might-not-need-an-effect55*/5657// 3. Technical decision framework58function evaluateTechnicalDecision(options) {59 const criteria = {60 // Weight: 1-5 (5 = most important)61 teamExpertise: { weight: 4, description: 'Team can use it effectively' },62 maintenanceBurden: { weight: 5, description: 'Long-term maintenance cost' },63 communitySupport: { weight: 3, description: 'Active community & docs' },64 performanceImpact: { weight: 4, description: 'Runtime performance' },65 migrationCost: { weight: 3, description: 'Cost to adopt/migrate' },66 bundleSizeImpact: { weight: 2, description: 'Impact on app size' },67 };6869 // Score each option on each criterion (1-5)70 // Calculate weighted score71 // Decision = highest weighted score + team consensus7273 // Document in ADR with scores visible74}7576// 4. On-call runbook template77/*78# Runbook: High Crash Rate Alert7980## Trigger81Crash-free rate drops below 99% (normal: 99.7%)8283## Immediate Actions (within 15 minutes)841. Check Sentry for top crash852. Determine if crash is in JS or Native863. Check if crash correlates with recent release (within 48h)874. If yes: consider rollback or CodePush fix885. If no: investigate root cause8990## Escalation91- JS crash: Mobile team lead92- Native crash: Platform engineer on-call93- Backend-caused: Backend team lead94- If > 5% crash rate: VP of Engineering (potential app store removal)9596## Communication97- Post in #incidents Slack channel98- Update status page if user-facing99*/
🏋️ Practice Exercise
Leadership Exercises:
- Write an ADR for a real technical decision you made (or would make) in your project
- Write an RFC for introducing a new library or pattern to your team
- Review 3 open-source PRs and write constructive, teaching-oriented review comments
- Create a runbook for a common production incident (API outage, crash spike)
- Give a 15-minute tech talk to your team on a topic from this roadmap
- Identify the top 3 pieces of tech debt in your codebase and write a prioritized remediation plan
⚠️ Common Mistakes
Making unilateral technical decisions without team buy-in — Staff engineers build consensus, not dictate
Not documenting decisions in ADRs — 6 months later nobody remembers why a choice was made
Writing code reviews that only say 'nit' or 'LGTM' — senior reviews should teach patterns and catch structural issues
Not investing in mentoring — Staff engineers who don't develop others are senior engineers with a fancier title
Over-engineering the architecture — the simplest solution that meets requirements is almost always the best choice
💼 Interview Questions
🎤 Mock Interview
Mock interview is powered by AI for Technical Leadership Patterns & Decision Making. Login to unlock this feature.