Architecture Principles for Developer Autonomy

Goal

Reduce architect gatekeeping by establishing clear principles that enable teams to make autonomous decisions. This requires two layers:

  1. Architecture principles - high-level guidelines
  2. Concrete processes - specific governance artifacts (system documentation, context maps, component diagrams)

Principle Management

Treat principles as living artifacts

Store principles in markdown within a version-controlled repository:

git init architecture-principles
cd architecture-principles
echo "# Architecture Principles" > principles.md
git add principles.md
git commit -m "Initial principles"

Architects as collaborators, not gatekeepers

Architecture teams should act as consultants and coaches, not approval boards. Engage them early to:

Source: Thoughtworks Lightweight Technology Governance

Code Documentation

Follow Minimum Viable Documentation principles:

https://google.github.io/styleguide/docguide/best_practices.html

Engineering Principles

Simplicity first

Justify each complexity layer introduced. If adding infrastructure capacity solves the problem, do that instead of adding complexity.

Queue management

Every processing queue requires a corresponding dead letter queue:

## example-queue-config.yaml
queues:
  - name: order-processing
    dlq: order-processing-dlq
  - name: payment-processing
    dlq: payment-processing-dlq

Aggregation services

Prefer synchronous calls over aggregation services. Only introduce aggregation when logic complexity demands it, not for performance issues solvable by scaling.

Back Office Principles

Observability

ELK stack setup via oneclick pipeline:

oneclick create-service --name my-service --observability elk

Configure Kibana alerts for the new service.

References

Governance:

Example principles: