Over the years, I've been involved in scaling engineering teams through various growth phases. These are some observations that have held true across different contexts.

Hiring Compounds

The quality of early hires shapes everything that follows. Good engineers attract other good engineers. They set standards, mentor newcomers, and build the culture through their daily work.

Spending extra time on hiring—especially in the early stages—pays dividends for years.

Process Should Solve Problems

When teams ask for more process, it's usually a symptom of something else: unclear ownership, missing context, or communication gaps.

Adding process without addressing the underlying issue just adds overhead. It's worth understanding what's actually broken before reaching for a new workflow or tool.

Technical Debt is a Trade-off

All codebases accumulate debt. The question is whether it's taken on deliberately or accidentally.

Deliberate debt—shipping quickly to validate an idea, with a plan to revisit—can be a reasonable trade-off. Accidental debt—shortcuts taken without awareness of the cost—tends to compound in ways that slow teams down unexpectedly.

Keeping track of known debt and its context helps make informed decisions about when to pay it back.

Autonomy Requires Alignment

Autonomous teams can move quickly, but only if they're aligned on goals and principles. Without alignment, autonomy leads to fragmentation.

The investment in shared understanding—clear objectives, documented decisions, visible progress—enables teams to work independently without constant coordination.

Simple Systems Scale Better

The teams I've seen scale most effectively tend to have simpler systems. Not simple in capability, but simple in concept—easy to understand, reason about, and modify.

Complexity tends to grow naturally over time. Actively working to simplify—consolidating services, reducing abstraction layers, improving documentation—makes systems easier to evolve.

The Role Changes

At different scales, the job of an engineering leader changes substantially:

  • Small teams: Writing code, reviewing, making technical decisions
  • Growing teams: Hiring, architecture, establishing practices
  • Larger organizations: Building systems, developing other leaders, setting direction

Each transition requires learning new skills while letting go of others. The work that made you successful at one stage isn't necessarily what's needed at the next.

Learning Continues

Every team and organization is different. What worked in one context might not apply in another. The observations above have been useful to me, but they're not universal rules.

The most reliable approach is to keep learning, stay curious about what's working and what isn't, and adjust based on what you observe.