Writing
Mostly the things I wish someone had told me before the incident, not after. Distributed systems, event pipelines and AI that has to survive real users.
Every agent framework needs to call your internal APIs, not just the web. A custom MCP server exposes them safely once, instead of bespoke glue per agent.
LangChain chains are a pipeline. LangGraph graphs are a state machine. The moment your agent needs to loop or branch on its own output, you've outgrown a chain.
The demo works on day one and degrades quietly for six months. Retrieval quality and failure behaviour decide whether RAG survives contact with real users.
Throughput is the easy part. The hard part is a consumer restart mid-batch, two replicas double-counting an event, or a slow model call on the ingest path.
A big-bang rewrite bets a new system works before anyone notices the old one stopped. The strangler fig pattern replaces a legacy system piece by piece instead.
Cron jobs and reprocessors are trivial with one replica and dangerous with three. Leader election lets multiple replicas run without duplicating one-off work.
CAP theorem is usually taught as an abstract triangle. In production it's one question: what should this service return when it can't reach another node?
Batching helps throughput and hurts latency. Caching helps latency and can hurt consistency. Most performance debates are about which number matters more.
Attaching a second container to handle logging, mTLS, retries and observability, so your main service doesn't have to. When a sidecar earns its overhead.
Whether it needs designing from scratch or rescuing from its own success, tell me what you’re building and I’ll tell you how I’d architect it.
Open to remote and hybrid work worldwide