Blog
Why the tools on this site check what they check. Mostly the failures that are silent: config that is valid and still wrong, defaults that cost money, and the errors nothing reports until much later.
CrashLoopBackOff is not an error: reading the status Kubernetes actually gave you
The status tells you the kubelet is waiting before the next restart. The logs you need are from the previous container, the exit code is in describe, and exit 0 on a Deployment is the most confusing case there is.
Read it- Docker 30 Jul 2026
depends_on has no Kubernetes equivalent, and your converter will not mention it
Compose starts containers in dependency order. Kubernetes starts everything at once and expects your application to cope. The conversion succeeds, the manifests are valid, and the ordering guarantee is silently gone.
8 min read - AI infrastructure 30 Jul 2026
Your LLM cost dashboard is wrong, and it gets worse as caching improves
input_tokens is the uncached remainder, not the prompt. A dashboard built on it under-reports by exactly as much as your cache is working, so the day someone fixes an invalidation bug the graph falls off a cliff and the invoice does not move.
8 min read - Kafka 30 Jul 2026
acks=all does not wait for all replicas, and the ISR shrinks under load
It waits for the in-sync replicas, and that set contracts exactly when you need it most. Without min.insync.replicas, acks=all can mean one broker: the same durability as acks=1, with more latency and a false sense of safety.
8 min read - AI infrastructure 30 Jul 2026
The prompt fits and the request still fails: max_tokens comes out of the same window
max_tokens reserves space in the context window the prompt occupies, thinking spends that reservation before the answer starts, and a truncated response is textually identical to a complete one unless you read stop_reason.
7 min read - MCP 30 Jul 2026
Your MCP tools are missing because you never declared them
A client does not call tools/list for a capability the server did not declare. A server that implements four tools perfectly and returns an empty capabilities object gets an empty tool list, correctly, in every client that follows the spec.
7 min read - MCP 30 Jul 2026
Three MCP rules your JSON-RPC library will happily break
A null id is legal JSON-RPC 2.0 and forbidden in MCP. Batching was valid in 2025-03-26 and removed in 2025-06-18. Ids must be unique for the whole session, not merely among the requests currently in flight.
8 min read - MCP 30 Jul 2026
One print statement breaks an MCP server, and the client will not tell you
On stdio, stdout is the transport. A startup banner, a dependency's warning, or a console.log lands mid-frame and desynchronises the reader for everything after it. Here is why it survives testing and how to find it.
8 min read - MCP 30 Jul 2026
Write when to call the tool, not what it does
A description that states capability under-triggers. The lift comes from the trigger condition in the tool's own description, not the system prompt. And two tools described in the same vocabulary are chosen at random.
7 min read - AI infrastructure 30 Jul 2026
Prompt caching made our bill go up: the write premium nobody budgets for
A cache write costs 1.25x the input rate, not 1x. Below two requests caching is a loss, the minimum prefix is not the same on every model, and a timestamp in your system prompt can produce a 0% hit rate that nothing reports.
11 min read - Redis 30 Jul 2026
In redis.conf, 1g and 1gb are different numbers
A suffix without the b is decimal. maxmemory 1g is 1,000,000,000 bytes; 1gb is 1,073,741,824. Seven percent below the capacity plan, no error, and eviction starts earlier than anyone modelled.
7 min read - Redis 30 Jul 2026
A plain Redis SET deletes the expiry you set earlier, and nothing tells you
SET without KEEPTTL discards any TTL the key already had. On volatile-lru the leaked keys become ineligible for eviction, so Redis evicts your well-behaved data and keeps the leaked entries until writes start failing.
9 min read - AWS 30 Jul 2026
The S3 bucket policy that reads like a lockdown and denies nothing
A Deny with a condition on a key anonymous requests do not carry. NotPrincipal that exempts the wrong identity. An IP allow-list that VPC endpoint traffic walks past. Each reads as a restriction and permits what it was written to stop.
7 min read - AI infrastructure 30 Jul 2026
The same JSON schema is accepted in one mode and rejected in the other
Without strict mode, maxLength is ignored and your tool receives a violating value. With strict mode, the identical keyword is a schema error before the request runs. Same document, opposite failures, and neither is what the author expected.
7 min read - Cost & compliance 30 Jul 2026
CostCenter and costcenter are two different tags, and the history never comes back
AWS tag keys are case-sensitive. A report grouped by one silently omits every resource carrying the other, the grand total is unchanged so nothing looks wrong, and cost allocation data is not restated retroactively.
7 min read - Networking & scheduling 27 Jul 2026
Friday the 13th does not exist in cron
When day-of-month and day-of-week are both restricted, cron ORs them instead of ANDing them. 0 0 13 * 5 runs about 64 times a year, not once. It is decades old, documented, and still catches people who have used cron for years.
6 min read