Run Docker Compose as a Linux Service with systemd
Docker Compose on boot, managed by systemd.
Docker Compose on a Linux server should start on boot, stop cleanly on shutdown, and survive reboots without manual intervention.
Docker Compose on boot, managed by systemd.
Docker Compose on a Linux server should start on boot, stop cleanly on shutdown, and survive reboots without manual intervention.
Pick the right Docker install path on Ubuntu.
Installing Docker on Ubuntu should be simple, but in practice several Docker-shaped options compete for the same command name, each with different packaging, upgrade behavior, and security implications.
Fix Ubuntu APT without guesswork.
APT failures are common on long-lived Ubuntu machines, and they usually appear after a release upgrade, a third-party repository change, a removed PPA, a manually installed .deb, or an interrupted package installation.
Faster LLM inference without quality loss - a practical guide
A 70B model generates one token per forward pass, and each pass reloads weights from VRAM, computes attention across the context, and synchronizes memory. Between tokens, the GPU sits idle while it waits for sequential dependencies to resolve.
40% of multi-agent pilots fail. Here's how to pick the right orchestration pattern - and avoid the ones that break.
Single-agent AI systems peaked in 2025 — you gave one LLM a prompt, some tools, and a goal, and it did reasonably well on bounded tasks.
Write the event with the data. Never split them.
Two writes that should succeed together will eventually fail separately.
Your order service saves the order to the database, then publishes an order.created event to a message broker.
Go context is control flow, not storage.
Go’s context.Context is simple enough to use badly — and that is the problem.
The spec as source of truth, not a side document.
Spec-Driven Development is one of those ideas that software engineers have reached for before and then set aside when the effort stopped paying.
Specs as source of truth, or slow ceremony?
Spec-Driven Development entered 2026 as the serious developer’s answer to vibe coding drift.
Keep intent close to the code.
Decision records are the missing memory layer in AI-assisted software development. They capture not just what was built, but why — and that distinction becomes critical when AI tools are writing your code.
Handle errors at the right boundary.
Go error handling is easy to complain about. Every Go developer has written this code hundreds of times:
Stop sleeping in concurrent Go tests.
Testing concurrent Go code has always required a bit of discipline. Goroutines are cheap, channels are simple, and context cancellation is idiomatic — background workers and timers are everywhere in real Go services.
A2A is not dead. It is just not universal.
Google’s Agent2Agent protocol, usually shortened to A2A, had a strange first year.
Reliable polling patterns for AI agents.
Polling agents are one of the least glamorous parts of AI assistant architecture, but they are also one of the most useful.
A2A turns agents into network peers.
The A2A Protocol, short for Agent2Agent Protocol, is an open standard for communication between independent AI agent systems.
MCP gives agents tools. A2A gives agents peers.
AI agent architecture is starting to split into two layers.
Get new posts on AI systems, Infrastructure, and AI engineering.