Olivier Lowe

Show Your Work

Engineering Notes

Architecture decisions, experiments, measurements, and the evidence behind them.

10 · FRONTEND ARCHITECTURE · ANGULAR / TYPESCRIPT / NAVIGATION

Navigation Is Not the Business

A URL can represent and restore where the customer is without becoming the owner of workflow or business state.

Checkout position gained navigation semantics through representation, browser-history synchronization, and restoration while workflow and business responsibilities remained separate.

POSITION → URL → RESTORE → OWNERSHIP

Read engineering note →

09 · FRONTEND ARCHITECTURE · ANGULAR / TYPESCRIPT / ASYNC WORKFLOWS

What Happens While We Wait?

Latency can change workflow correctness when one user intent is allowed to start the same operation twice.

An in-flight operation introduced duplicate-intent protection, workflow-owned pending state, and visible progress without earning a generalized async-state framework.

INTENT → IN-FLIGHT → GUARD → OUTCOME

Read engineering note →

08 · FRONTEND ARCHITECTURE · ANGULAR / TYPESCRIPT / SERVER STATE

The Server Owns Some of Our State

The browser can hold a valid Order representation without owning the authoritative truth about that Order.

Server-owned data has a different lifecycle from ordinary local state: authority, freshness, staleness, and refetching matter.

REPRESENTATION → STALENESS → AUTHORITY → REFETCH

Read engineering note →

07 · FRONTEND ARCHITECTURE · ANGULAR / TYPESCRIPT / DEPENDENCY INJECTION

Dependency Injection Is Not Dependency Inversion

Angular can inject dependencies correctly while higher-level code still depends on the wrong abstraction.

Dependency Inversion, Dependency Injection, and composition participate in the same runtime graph but answer different architectural questions.

COUPLING → INVERSION → DI → COMPOSITION

Read engineering note →

06 · FRONTEND ARCHITECTURE · TYPESCRIPT / ANGULAR / REACT

Replace Angular. What Breaks?

The frontend Application was supposed to be independent of Angular. Replacing the UI with React tested whether that claim was actually true.

The UI framework changed. The Application, Domain, use cases, and business behavior did not.

CLAIM → SUBSTITUTE → JOURNEY → EVIDENCE

Read engineering note →

05 · FRONTEND ARCHITECTURE · ANGULAR / TYPESCRIPT / REST / GRAPHQL

REST Was an Implementation Detail. Prove It.

REST was supposed to be replaceable. Swapping it for GraphQL tested whether that architectural claim was actually true.

The transport changed. The Application, Domain, capability contracts, and customer journey did not.

CLAIM → SUBSTITUTE → E2E → EVIDENCE

Read engineering note →

04 · BACKEND ARCHITECTURE · PYTHON / DJANGO / FLASK

We Said Django Was an Adapter. Prove It.

Calling Django an adapter was an architectural claim. Replacing its HTTP role with Flask was the experiment.

The inbound HTTP framework changed. The Domain and Application did not.

CLAIM → REPLACE → SYSTEM TEST → EVIDENCE

Read engineering note →

03 · FRONTEND ARCHITECTURE · TYPESCRIPT / ANGULAR

When CQRS Earns Its Place — and When It Doesn't

I split reads from writes. I still did not introduce CQRS.

Different responsibilities can earn segregation without earning CQRS.

DIVERGENCE → NARROW CAPABILITIES → CQRS QUESTION → STOP

Read engineering note →

02 · FRONTEND ARCHITECTURE · TYPESCRIPT / ANGULAR

Measure Before You Optimize

Finding inefficiency is not the same as finding a problem.

The browser was over-fetching. Measurement showed that the observed cost still did not justify another architectural mechanism.

OBSERVE → MEASURE → DECIDE → STOP

Read engineering note →

01 · BACKEND ARCHITECTURE · PYTHON / DJANGO

The In-Memory Lie

What a Fake Can Prove — and What It Can't

A green in-memory test proved application coordination — but not database persistence.

TEST → ASSUMPTION → REAL DATABASE → EVIDENCE

Read engineering note →