Skip to content

Instantly share code, notes, and snippets.

@lethain
Created May 23, 2025 04:41
Show Gist options
  • Save lethain/754244b8825c5d5e34b6bf7d1d019b7b to your computer and use it in GitHub Desktop.
Save lethain/754244b8825c5d5e34b6bf7d1d019b7b to your computer and use it in GitHub Desktop.

Engineering Decision-Making Strategy

Our engineering organization lacks a clear, consistent process for making software architecture decisions, leading to friction between engineers who feel excluded from decisions versus those who feel slowed down by lengthy approval processes. This ambiguity around decision-making authority—particularly when a few highly opinionated engineers can effectively overrule others' work—is reducing overall engineering velocity and creating frustration across the team.

This strategy highlights the policies and operations we've adopted to improve how we make make technical decisions in Engineering.

Policy & Operation

Our policies for engineering architecture decision-making are:

Federated Decision Authority Framework

We will implement clear decision rights at three organizational levels:

  • Team-Level Decisions: Product engineering teams have full authority over architecture decisions that affect only their services and don't create cross-team dependencies
  • Cross-Team Decisions: Architecture changes affecting multiple teams require input from our Architecture Advisory Group (AAG) - composed of Staff+ engineers representing each major domain
  • Organization-Level Decisions: Technology choices that impact company-wide standards (new programming languages, major infrastructure changes) require CTO approval with AAG recommendation

Mandatory Architecture Decision Records (ADRs)

All significant architecture decisions must be documented using ADRs. ADRs must include context, options considered, decision made, and rationale. ADRs are stored in a searchable, central repository accessible to all engineers. Teams cannot proceed with implementation until the ADR is published and reviewed.

Architecture Advisory Group Structure

The AAG consists of engineers representing domains (Frontend, Backend, Infrastructure, Data, Security). Members are nominated by teams and confirmed by engineering leadership based on technical expertise and collaborative judgment. Terms are 18 months to prevent entrenchment. Time commitment is 2-3 hours per week for office hours, retrospectives, and decision review.

Escalation and Exception Handling

Standard escalation path follows Team → AAG feedback → CTO review if unresolved. Emergency decisions can be made without full process but require retroactive ADR. Teams can request CTO review of AAG recommendations they strongly disagree with.

Measurement and Review

We track leading indicators (ADR completion rate, Architecture Office Hours attendance, escalation frequency) and lagging indicators (cross-team integration issues, technical debt metrics, engineer satisfaction). Monthly metrics review occurs in AAG retrospectives with quarterly presentation to engineering leadership. Success criteria include 90% ADR compliance, <5% decision escalation rate, and improved engineering satisfaction scores.

Diagnose

Based on our analysis of the current state, we've identified the following root causes and constraints:

Technical Constraints

  • Decision Authority Ambiguity: There is no clear framework for determining who has final authority on architecture decisions, leading to inconsistent outcomes where the most persistent voices prevail rather than the most informed ones
  • Inconsistent Technical Standards: Without coordinated decision-making, teams make incompatible technology choices that create integration challenges, operational overhead, and knowledge fragmentation
  • Lack of Decision Documentation: Architecture decisions are made in meetings, Slack discussions, or informal conversations, leaving future engineers without context for why systems were designed as they were

Organizational Constraints

  • Staff+ Engineer Utilization: Senior engineers spend significant time in reactive architectural debates rather than proactive technical leadership, reducing their impact on strategic technical initiatives
  • Team Autonomy vs. Coordination Tension: Teams want sufficient autonomy to move quickly, but the absence of coordination mechanisms creates downstream problems that ultimately slow everyone down
  • Onboarding and Context Transfer: New engineers struggle to understand architectural patterns and decision-making precedents, leading to repeated debates about previously settled questions

Business Impact

  • Reduced Engineering Velocity: The combination of unclear decision rights and lack of precedent documentation means architectural questions consume disproportionate engineering time
  • Technical Debt Accumulation: Inconsistent architectural decisions create technical debt that becomes expensive to resolve as the codebase grows
  • Talent Retention Risk: Experienced engineers become frustrated with inefficient decision-making processes, while newer engineers feel excluded from important technical discussions

Constraints We Must Work Within

  • Team Size and Growth: We cannot significantly expand the number of senior engineers dedicated to architecture coordination, so any solution must scale efficiently
  • Existing Technical Diversity: We already have multiple programming languages and architectural patterns in production, so we cannot impose uniform standards retroactively
  • Product Development Pressure: Product teams have aggressive delivery timelines that cannot accommodate lengthy approval processes

Explore

Based on research across technology organizations, three distinct approaches have emerged for managing architecture decision-making:

Advisory Architecture Process (Stripe/Netflix Model)

Stripe's approach uses architecture decisions made by implementing teams with a group of senior engineers providing feedback and guidance. No formal approval is required, but teams are expected to incorporate feedback. Netflix follows "Freedom and Responsibility" where engineers make decisions within their sphere of responsibility, with context shared broadly through documentation and RFCs.

Federated Architecture Councils (Amazon/Google Model)

Amazon's "Two-Pizza Team" model allows each service team to own their architecture decisions within their "Well-Architected Framework." Google uses Technical Lead Networks where Technical Leads coordinate architecture decisions in each area, with regular Architecture Review Committees for company-wide decisions and strong emphasis on written design documents.

Centralized Architecture Authority (Traditional Enterprise)

Traditional enterprise approaches like Microsoft's historical model use central architecture boards that approve all significant decisions, with detailed architecture standards and governance processes. Technology choices are limited to approved stacks with strong emphasis on consistency and risk management.

Architecture Decision Records (ADRs)

Michael Nygard's ADR pattern provides lightweight documentation of architecture decisions, capturing context, options considered, and rationale. This creates an immutable record enabling future teams to understand reasoning and has been successfully implemented at ThoughtWorks, Spotify, and numerous startups.

Technology Strategy Patterns

Eben Hewitt's "Architectural Decision Authority" pattern emphasizes clearly defined decision rights at different organizational levels with escalation paths for cross-cutting concerns, balancing autonomy and coordination with specific implementation guidance for different organization sizes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment