Category: architecture

← Back to all posts

Cross-Cutting Concerns Without Constructor Over-Injection

python architecture · by Adrian Benavides · August 3, 2026 · 5 min read

Use contextvars.ContextVar for cross-cutting concerns that almost every service needs, without threading them through every constructor. Covers per-task isolation, structlog and opentelemetry designs, sync-vs-async leaks, and the failure modes that show up in production.

Enforcing Modular Boundaries with Import Linter in Python

python architecture · by Adrian Benavides · July 24, 2026 · 10 min read

Import Linter enforces Python architectural boundaries at near-zero runtime cost. Benchmarked on three real OSS codebases (10k, 20k, 200k lines of Python).

Hexagonal Architecture in Python: Building Decoupled, Testable Systems

python architecture · by Adrian Benavides · July 10, 2026 · 10 min read

Build decoupled, testable Python systems with Hexagonal Architecture. Covers ports, adapters, driven/driving roles, structural typing with Protocol, and the pitfalls of port proliferation, primitive obsession, and infrastructure leakage.

Domain-Driven Design in Python: Preventing the Big Ball of Mud

python architecture · by Adrian Benavides · July 2, 2026 · 12 min read

Apply DDD tactical patterns in Python with immutable value objects, aggregate roots, and bounded contexts (the modular monolith default, the modern tooling landscape, and when DDD is overkill).