Building Engineering Culture at Scale cover image

Building Engineering Culture at Scale

By Julian Krause · Friday, August 1, 2025 · ~3 min read

When your engineering team grows from 5 to 50 to 500, nearly everything breaks. Code review bottlenecks multiply, architectural coherence dissolves, and the shared understanding that once existed in a single room now spans time zones and continents. I have navigated this transition twice, and the lessons were painfully similar both times.

Architecture Decision Records

When your team is small, architectural decisions live in people's heads. When your team is large, they need to be written down. Architecture Decision Records (ADRs) are the simplest tool that works. Each ADR captures the context, the decision, the alternatives considered, and the consequences.

// Example: An ADR might justify this pattern in your codebase

// ADR-0012: Use Result<T> instead of exceptions for expected failures
// Status: Accepted
// Context: Exception-based error handling creates hidden control flow
//          and makes error cases invisible in method signatures.
// Decision: Domain operations return Result<T> for expected failures.
//           Exceptions are reserved for unexpected/infrastructure failures.

public class Result<T>
{
    public T? Value { get; }
    public string? Error { get; }
    public bool IsSuccess => Error is null;

    private Result(T value) => Value = value;
    private Result(string error) => Error = error;

    public static Result<T> Success(T value) => new(value);
    public static Result<T> Failure(string error) => new(error);
}

We store ADRs in the repository alongside the code they govern. When someone asks "why did we choose X?", there is a written answer with context that survives team turnover.

Code Review Standards, Not Gatekeeping

Code reviews at scale can become a bottleneck that slows delivery to a crawl. The solution is not to skip reviews but to standardize what reviewers check. We created a review checklist that focuses on architecture conformance, security, and correctness — and explicitly excludes style preferences, which are handled by automated formatters.

A review should take 30 minutes at most. If a pull request takes longer to review, it is too large. Our rule: no PR over 400 lines of meaningful changes (excluding generated code, tests, and configuration).

Inner Source and Shared Libraries

As your codebase grows, duplication becomes inevitable unless you actively fight it. Inner-source shared libraries — maintained like open-source projects within the company — are the most effective approach I have seen.

// Shared library: Krause.Common.Abstractions
// Maintained by a platform team, consumed by feature teams

public interface IDomainEvent
{
    Guid EventId { get; }
    DateTimeOffset OccurredAt { get; }
}

public interface IAggregateRoot
{
    IReadOnlyCollection<IDomainEvent> DomainEvents { get; }
    void ClearDomainEvents();
}

The critical success factor is treating these libraries as products with clear ownership, semantic versioning, changelogs, and migration guides. Libraries without owners become abandoned libraries.

Invest in Developer Experience

The single highest-leverage investment for a growing engineering organization is developer experience. If your build takes 20 minutes, every developer loses 20 minutes multiple times per day. If setting up a local environment takes a full day, every new hire loses a day of productivity.

We track three metrics religiously: time from commit to deployment, time to set up a new development environment, and time to run the full test suite. Any regression in these metrics is treated as a production incident because the cumulative cost across the engineering team is enormous.

Culture is not about ping pong tables or free snacks. It is about whether your team can do excellent work efficiently. Invest in the systems and practices that make that possible.


Comments (3)

Hannah Monday, March 2, 2026 5:08 PM

I have a question: does this also apply to older versions?

Clara Sunday, March 1, 2026 8:08 PM

I had the same experience, can confirm.

David Saturday, March 7, 2026 11:08 PM

Exactly! I had the same thought.

Anna Tuesday, March 3, 2026 5:08 PM

Thanks for sharing — very helpful.

Ben Wednesday, March 4, 2026 5:08 PM

Could you elaborate on this topic in a follow-up post?

Leave a Comment