~/kslomka/blog $ ls
Field notes.
Backend architecture, distributed systems, and engineering field notes.
- posts
- 54
- posts
- series
- 5
- series
- of reading
- 8h
- of reading
★ featured
Driftr: What I Built When Volta Stopped Moving
A shim-based Node.js toolchain manager in Go: syscall.Exec handoff, checksum-verified installs, nvm-compatible pins, and the pnpm shared store nobody turns on.
2026-07-11·17 min read#developer-tools#nodejs#golang#cli#pnpm#bun

★ featured
gtm-as-code: Google Tag Manager Changes Belong in a Pull Request
A Terraform-style CLI for GTM and GA4: YAML config, a plan you review in the PR, apply from CI, and adoption of a live container without rewriting it by hand.
2026-09-28·12 min read#developer-tools#analytics#google-tag-manager#infrastructure-as-code#cli

$ series
$ tags (70)
- #ddd20
- #software-architecture11
- #php10
- #ddd-series9
- #symfony9
- #hexagonal-architecture8
- #cqrs7
- #postgresql6
- #claude-code5
- #event-sourcing5
- #agentic-os3
- #ai-agents3
- #ai-workflow3
- #database-performance3
- #developer-tools3
- #distributed-systems3
- #doctrine3
- #fintech3
+ 52 more
- #messenger3
- #microservices3
- #obsidian3
- #rabbitmq3
- #security3
- #typescript3
- #cli2
- #developer-workflow2
- #encryption2
- #kubernetes2
- #nestjs2
- #nodejs2
- #saga-pattern2
- #testing2
- #amazon-sqs1
- #analytics1
- #automation1
- #backpressure1
- #bun1
- #code-review1
- #docker1
- #domain-events1
- #energy-management1
- #g13-tariff1
- #golang1
- #google-tag-manager1
- #graphify1
- #heat-pump1
- #home-assistant1
- #hooks1
- #idempotency1
- #infrastructure-as-code1
- #jev1
- #llm-routing1
- #mcp1
- #multi-agent1
- #orm1
- #outbox1
- #performance1
- #photovoltaics1
- #pnpm1
- #productivity1
- #queues1
- #redis1
- #refactoring1
- #resilience1
- #ruflo1
- #scrum1
- #serena1
- #smart-home1
- #streams1
- #worker-threads1
All posts.
202616 posts
· 10 min
StackMade OS: the agentic operating system I layered on Claude CodeNEW
Inside StackMade OS, my ARMS-framework agentic operating system on top of Claude Code: skills, capped routines, vault memory and a local dashboard, with real screenshots and costs.
10 min
· 38 min
One repo, three layers: Serena, Graphify and Obsidian for agentsNEW
A step-by-step setup wiring Serena, Graphify and an Obsidian vault under one AGENTS.md: commands, file layout, git decisions and how to verify each layer.
38 min
· 32 min
Home Assistant energy controller: PV, G13 and heat pumpNEW
How I built PV, battery and G13 automation in Home Assistant, where winter heat pump control stands, and what is measured versus estimated.
32 min
· 15 min
Jev as a Claude Code prompt router: routing by task sizeNEW
A Jev classifier in a Claude Code prompt hook sizes each message and routes it to a helper agent. Thresholds, measured cost, and failure modes.
15 min
· 19 min
What This Architecture Cost, Measured Rather Than ArguedNEW
What hexagonal architecture costs in Symfony 8: ports, layers and buses counted from the repository, and the thresholds below which it is not worth it. Part 6.
▸ DDD, CQRS and Hexagonal Architecture in Symfony 8 · 6#ddd#hexagonal-architecture#symfony#php#software-architecture#cqrs#refactoring19 min
· 17 min
Event Sourcing Behind the Port You Already Have
Event sourcing in Symfony 8: an event-sourced repository swapped in by one DI alias, proven by the same contract test, and what the alias did not cover. Part 5.
▸ DDD, CQRS and Hexagonal Architecture in Symfony 8 · 5#ddd#hexagonal-architecture#symfony#php#event-sourcing#postgresql#cqrs17 min
· 19 min
Domain Events Are Not Integration Events
Domain events vs integration events in Symfony 8: recorded by the aggregate, released after commit, versioned into a contract, consumed by a worker. Part 4.
▸ DDD, CQRS and Hexagonal Architecture in Symfony 8 · 4#ddd#hexagonal-architecture#symfony#php#messenger#rabbitmq#domain-events19 min
· 15 min
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 · 3#cqrs#ddd#hexagonal-architecture#symfony#php#postgresql#doctrine15 min
· 18 min
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 · 2#ddd#hexagonal-architecture#symfony#php#cqrs#messenger#software-architecture18 min
· 15 min
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 · 1#ddd#hexagonal-architecture#symfony#php#doctrine#software-architecture15 min
· 18 min
Ruflo: What a Swarm Layer 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
· 18 min
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.
18 min
· 21 min
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.
21 min
· 22 min
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.
22 min
· 12 min
Hermes Agent Review: Self-Improving AI Agent (254K Stars)
Hermes Agent passed 254K GitHub stars by October 2026. A review of the learning loop, deployment model, and the security risks nobody's writing about.
12 min
· 20 min
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.
20 min
20251 post
· 9 min
Event Store Bottleneck: Scaling with NestJS Microservices
Your event store processes 10K events/min smoothly, then Black Friday hits. How to scale with distributed NestJS microservices.
9 min
202335 posts
· 10 min
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.
10 min
· 4 min
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.
4 min
· 3 min
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.
3 min
· 5 min
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
5 min
· 4 min
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.
4 min
· 6 min
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.
6 min
· 3 min
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.
3 min
· 7 min
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.
7 min
· 9 min
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.
9 min
· 4 min
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.
4 min
· 6 min
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.
6 min
· 8 min
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.
8 min
· 3 min
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.
3 min
· 4 min
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.
4 min
· 4 min
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.
4 min
· 4 min
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.
4 min
· 5 min
Domain Events in DDD (DDD series part 10)
Part 10 of the DDD series: what a domain event actually records, why it is named in the past tense, and the delivery guarantee it does not give you for free.
5 min
· 3 min
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 · 9#ddd3 min
· 3 min
Overcoming Procrastination: 5 Tips That Held Up
Take control of your time and achieve success with our tips and resources on stopping procrastination.
3 min
· 5 min
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.
5 min
· 4 min
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.
4 min
· 3 min
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
· 4 min
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.
4 min
· 5 min
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.
5 min
· 4 min
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.
4 min
· 8 min
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.
8 min
· 3 min
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.
3 min
· 6 min
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.
6 min
· 3 min
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.
3 min
· 4 min
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.
4 min
· 4 min
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.
4 min
· 2 min
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
· 6 min
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.
6 min
· 2 min
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
· 2 min
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.
2 min