$ blog
Backend architecture, distributed systems, and engineering field notes.
featured post
Driftr: What I Built When Volta Stopped Moving
A shim-based Node.js toolchain manager in Go — 1ms overhead via syscall.Exec, SHA256-verified installs, and pnpm shared-store optimization nobody turns on.
2026-07-11 · 12 min read

$ Series
$ explore by tag (50)
- #ddd17
- #software-architecture10
- #ddd-series9
- #php7
- #symfony6
- #cqrs5
- #hexagonal-architecture5
- #postgresql5
- #event-sourcing4
- #ai-workflow3
- #database-performance3
- #distributed-systems3
- #doctrine3
- #fintech3
- #microservices3
- #security3
- #typescript3
- #agentic-os2
- #claude-code2
- #developer-tools2
- #encryption2
- #kubernetes2
- #messenger2
- #nestjs2
- #nodejs2
- #rabbitmq2
- #saga-pattern2
- #testing2
- #amazon-sqs1
- #backpressure1
- #cli1
- #code-review1
- #docker1
- #golang1
- #idempotency1
- #mcp1
- #multi-agent1
- #obsidian1
- #orm1
- #outbox1
- #performance1
- #pnpm1
- #productivity1
- #queues1
- #redis1
- #resilience1
- #ruflo1
- #scrum1
- #streams1
- #worker-threads1
$ latest posts
## 2026
15 min readNEW
The Read Side Does Not Go Through the Aggregate
CQRS read models in Symfony 8: a read port the domain does not own, a query bus that returns a value, and when a projection table earns its place. Part 3.
DDD, CQRS and Hexagonal Architecture in Symfony 8 · part 3#cqrs#ddd#hexagonal-architecture#symfony#php#postgresql#doctrine18 min readNEW
The Application Layer, the Transaction, and a Working API
Application layer in Symfony 8: use cases on a Messenger command bus, the transaction boundary in config, optimistic locking and RFC 9457 errors. Part 2.
DDD, CQRS and Hexagonal Architecture in Symfony 8 · part 2#ddd#hexagonal-architecture#symfony#php#cqrs#messenger#software-architecture15 min readNEW
The Domain Model, and the Only Rule That Matters
DDD domain model in PHP 8.5 and Symfony 8: keep the container out of the domain, and choose Doctrine ORM or DBAL with the costs on the table. Series part 1.
DDD, CQRS and Hexagonal Architecture in Symfony 8 · part 1#ddd#hexagonal-architecture#symfony#php#doctrine#software-architecture18 min read
Ruflo: What a Swarm Orchestration Layer Actually Adds to Claude Code
A coordination ledger, vector memory, background workers, and agent routing on top of Claude Code: what Ruflo v3 does, what it costs, and when to skip it.
18 min read
How We Processed 100 Million Events Per Day in Node.js
A production-focused guide to processing 100 million daily events in Node.js with streams, backpressure, workers, queues, and bounded memory.
21 min read
Building Idempotent Message Handlers in Symfony Messenger
A production guide to idempotent Symfony Messenger handlers using SQS, Redis locks, PostgreSQL deduplication, and the Outbox Pattern.
22 min read
Why Claude Code Loses Context, and How Obsidian Fixes It
CLAUDE.md design, MCP config, session hooks, and a 5-step interview that generates your agent's operating manual. Not a second-brain guide.
12 min read
Hermes Agent Review: Nous Research's Self-Improving AI Agent
Hermes Agent hit 95K stars in 7 weeks. A review of the learning loop, deployment model, and security risks nobody's writing about.
20 min read
Securing Event-Sourced Financial Systems
Part 4 of an event sourcing series: PII kept out of events, crypto-shredding for GDPR erasure, locked-down CQRS projections, and auditable observability.
## 2025
9 min read
Why Your Event Store Becomes a Bottleneck (And How NestJS Microservices Can Fix It)
Your event store processes 10K events/min smoothly, then Black Friday hits. How to scale with distributed NestJS microservices.
## 2023
10 min read
The EntityManager Is Closed: Causes, Reset, and Recovery
Why Doctrine closes the EntityManager after a failed flush, what resetManager() restores and what it does not, and how to keep workers alive.
4 min read
Simplifying PHP Version Management with SWTP
SWTP is a Bash utility for switching PHP versions on macOS: what it does, how to install it, how the auto-update works, and where it stops helping.
3 min read
Symfony Workflow Component and the Saga Pattern
Symfony's Workflow Component paired with the Saga Pattern for multi-step business processes, with configuration and a full integration example.
5 min read
The Saga Pattern: Distributed Transactions in TypeScript
Explore the Saga Pattern with TypeScript! Learn to build scalable and consistent distributed systems through this step-by-step guide
4 min read
Scaling PostgreSQL for High Transaction Volumes in Fintech
Strategies for scaling PostgreSQL in fintech: improve transaction throughput, query performance and availability while preserving consistency and integrity.
6 min read
Hexagonal Architecture with Nest.js and TypeScript
Learn how to combine Hexagonal Architecture, Nest.js and TypeScript to build modular, scalable and testable applications with ports and adapters.
3 min read
Building a High Availability RabbitMQ Cluster
Building a RabbitMQ cluster that survives losing a node: node configuration, the HA policy, load balancing and failover, and what to monitor after.
7 min read
Alternatives to Domain-Driven Design, and When to Use Them
DDD is not a default. The real alternatives, transaction script, active record, table module and tactical-only DDD, and how to tell which you need.
9 min read
RabbitMQ: Exchanges, Queues, Topic Routing and Policies
How a RabbitMQ message finds its queue: exchange types and topic routing keys, bindings, the protocols underneath, and TTL and dead-letter policies.
4 min read
Clean Architecture: The Dependency Rule and Its Cost
Clean architecture as Robert C. Martin defined it: the dependency rule, the layers it produces, what adopting it costs, and the pitfalls on the way.
6 min read
The Pipes and Filters Architecture
Pumps, filters and pipes as a way to structure processing: what each component owns, where the pattern beats one procedure, and its blind spot.
8 min read
Encryption, Encoding and Hashing Are Not the Same Thing
Learn how encryption, encoding, and hashing can secure your data. Explore examples and differences between these essential techniques.
3 min read
Event Sourcing: State as a History of Events
Storing every change as an event instead of overwriting state: how the history is replayed, where event sourcing fits, and the practices it demands.
1 min read
When DDD Fits a Project, and When It Does Not
A short note on the DDD decision: what makes a domain complex enough to be worth modelling, and why introducing it into a legacy system needs a plan.
2 min read
CQRS: Separating the Write Model from the Read Model
Part 2 of an event sourcing series: splitting commands from queries, what that fixes as data grows, and what it costs to run two models instead of one.
2 min read
Making the Business Case for Application Testing
Arguing for a testing budget: the case to make to a business, a cost-benefit framing that survives scrutiny, and a testing plan worth proposing.
3 min read
Domain Events in DDD (DDD series part 10)
Discover the benefits of using Domain Events in DDD and how they can improve the flexibility and maintainability of your software.
3 min read
Mastering Transactions: The Power of Aggregates in DDD
Part 9 of the DDD series: the aggregate as a transactional consistency boundary, worked through e-commerce, banking and healthcare examples.
Domain-Driven Design (DDD) Series · part 9#ddd3 min read
Overcoming Procrastination: 5 Tips That Held Up
Take control of your time and achieve success with our tips and resources on stopping procrastination.
2 min read
Circuit Breakers: Containing Cascading Failures
How a circuit breaker opens, isolates a failing dependency and closes again, why that stops a failure cascading, and how to implement one.
4 min read
Docker vs Kubernetes: What Each One Actually Does
Containers, images and orchestration without the buzzwords: what Docker gives you, what Kubernetes adds, and why comparing them directly misses.
3 min read
PostgreSQL Index Types: B-tree, GiST, Partial and Expression
Which PostgreSQL index to reach for: B-tree defaults, bitmap scans, GiST for non-scalar data, and the partial and expression indexes that shrink them.
3 min read
Services (DDD series part 8)
Part 8 of the DDD series: what belongs in a domain service, what belongs on an entity or a value object, and how to tell which one you are looking at.
3 min read
JWT: How Signed Tokens Work and What They Prove
How a JSON Web Token is built, signed and verified, what the signature does and does not prove, and where JWT fits in a microservices setup.
4 min read
Code Review: Approaches and What Makes One Effective
Peer review, self-review and automated review compared, plus what separates a review that catches defects from one that argues about formatting.
8 min read
Hexagonal Architecture and Domain-Driven Design, Together
Hexagonal architecture is a rule about dependency direction, not a folder layout. What ports and adapters buy you, where DDD attaches, what it costs.
3 min read
Entity (DDD series part 7)
In Domain-Driven Design (DDD), the concept of an Entity is used to represent the key concepts of the business domain.
6 min read
PostgreSQL Data Partitioning
Range, list and hash partitioning in PostgreSQL: how each splits a table, what the planner does with the partition key, and what it costs later.
3 min read
Bounded Context (DDD series part 5)
Part 5 of the DDD series: a bounded context is the boundary inside which one model and one set of terms hold, and why two contexts must not share it.
2 min read
Domain Model (DDD series part 4)
Part 4 of the DDD series: the domain model as a shared representation of business concepts, relationships and rules, not a diagram of database tables.
2 min read
Scrum: What Makes a User Story Good
What a good user story contains and what it leaves out, written after an interview question about the perfect user story that I could not answer.
2 min read
Value object (DDD series part 6)
Part 6 of the DDD series: value objects carry no identity and are defined entirely by their attributes, which is what makes them safe to share.
2 min read
Who should consider using DDD? (DDD series part 3)
Part 3 of the DDD series: which organisations get value from it, from regulated domains to complex products, and which get overhead instead.
2 min read
Benefits of using DDD (DDD series part 2)
Part 2 of the DDD series: what a shared vocabulary with domain experts actually buys you, and which of the claimed benefits depend on having one.
2 min read
What Domain-Driven Design Is (DDD series part 1)
Part 1 of the DDD series: modelling the business domain rather than the database, and the principles that follow once the model is the centre.