Build1 distinct publisher3 min readPublished
The Python adapters worked; they just paid interpreter startup and an import walk on every agent tool call, on a cluster that scales to zero because one person funds it. The Go control was already an order of magnitude quicker.
The Engineer · Build desk

Follow any of these and your For You feed starts watching them — no settings page required.
build
SSE in Go breaks twice before your handler runs: an illegal header, then a 30-second timeout1 distinct publisher
build
Rate limit your MCP servers, because a retrying agent turns one error into a billing incident1 distinct publisher
build
Your meter now runs on someone else's machine: signed receipts, fsync, and failing open1 distinct publisher
product
AI writes the Dockerfile, and the pipeline is still checking the app code1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
A Knative cold start is a sum of terms: image pull or warm cache hit, container start, language runtime initialisation, and application bootstrap [3]. The first three are roughly the same whatever you wrote the service in. The fourth is where the Python adapters spent their five seconds, because the interpreter has to start, the import statements run, and the dependency tree gets walked before your handler exists [4].
What makes the before-and-after worth reading is the control. The Go adapter, clickup-mcp, was running on the same cluster under the same Knative configuration [8]. That holds the platform terms fixed and moves only the bootstrap term, which is the comparison you need before attributing five seconds to a language.
The figures also check against each other. The per-service measurements were 5.9, 4.9, 5.4 and 7.2 seconds [7], which sum to 23.4 and land inside the range reported for a cold draft chain [15]. Four Go hops at the slow end of that band, 400 milliseconds each, come to 1.6 seconds [16], so "roughly 2 seconds" after the port is the per-service number rounded up rather than a second, softer claim. The recovery is about 21 seconds per cold run [17].
The constraint that forces the design is upstream of the language. Warm replicas are ruled out because the cluster is paid for personally, so everything scales to zero [5], and an agent that reaches for these tools constantly hits an idle service almost every time [6]. That latency was purchasable two ways, continuously with a warm replica or once with weekends [10].
For the result to transfer, your chain has to be sequential. The draft phase calls four adapters one after another [9]; fan them out concurrently and the cold-start cost is the slowest hop, 7.2 seconds, not the sum [18]. You also need traffic thin enough that idle-then-invoke is the normal path [6]. A service with steady arrivals pays the bootstrap bill once and a rewrite buys it nothing.
The write-up skips profiling the Python imports, trimming the dependency tree, or timing how many hours the port itself took [19]. So the measurements support the claim that Go starts an order of magnitude faster on this cluster [8], but they don't establish that 5 to 7 seconds was the floor for these Python services; the first of those two findings was tested, the second was not.
The port was cheap for a reason specific to this class of service. An MCP adapter is a thin wrapper that lets an agent call something external [1], and two of the four APIs had no usable Go SDK, so the requests were hand-rolled and took less time than expected because modern APIs are mostly REST and JSON [12]. Two services held small in-memory caches, which Python gave away for free and Go made him decide about; the answer was sync.Map [13]. He settled on net/http plus slog, observing that the number of choices Go gives you for stdlib HTTP is zero, and that this is why the step is fast [11]. The final image is a static binary from a golang:1.25-alpine builder into FROM scratch [14].
Six seconds was also the good case; some services took longer, and an agent waiting on a cold start cannot tell the difference between a slow tool and a broken one [20]. That risk sits outside what any latency table measures.
Ranked by verification strength, evidence, and original report placement.
The four services were Model Context Protocol adapters, thin wrappers that let an AI agent call out to some external thing: one talked to Replicate for image generation, one to a Nostr-friendly social poster, one was a Git-aware research helper, and one was a Tavily-powered web search.
All four were written in Python, ran on Knative on a small Kubernetes cluster, and all worked.
On serverless platforms the container is spun up only when traffic arrives, so the first request after an idle period pays the full startup tax: image pull or warm cache hit, container start, language runtime initialisation, and application bootstrap.
For Python the bill arrives at application bootstrap: the interpreter has to start, import statements run, and the dependency tree gets walked before the author's code runs.
The author does not keep a fleet of warm replicas on the small cluster because he is paying for it personally, so the services scale to zero.
Every idle service eats a cold start the next time it is invoked, and for these four MCPs that was approximately every time an agent decided to use them, which was constantly, making cold starts the common case rather than an edge case.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 6, 2026
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Consistent numbers, one hand
Every figure comes off one engineer's own machines and nobody else has re-run it. What lifts it above anecdote is that the numbers reconcile: the four Python measurements sum into the chain figure quoted for the slow path, and the Go per-service band brackets the fast one. What is absent is method — how many cold starts were sampled, whether a value is a median or a single observation, how the boundary between image pull and bootstrap was attributed — and the only control is a Go service the author happened to have already.
Five services, one install
This is deployed rather than proposed: the Go rewrites are live on the same Knative setup, and the two-second chain figure is a post-port measurement, not a projection. The scope is one person's self-funded Kubernetes and five small adapters. Nothing indicates the ratio survives fatter dependency sets, larger images, teams with warm capacity, or traffic patterns where idle periods are rare.
Numbers hold, causation is looser
The arithmetic behind the headline holds up, though the attribution behind it is on shakier ground. With no import profile and no dependency trimming attempted first, 'Python starts slowly' is doing work that 'these particular imports are slow' might have done at a fraction of twenty hours. And the twenty-three seconds exists because the draft phase calls four adapters one after another - fire them together and the cold-start cost is the 7.2-second image adapter, not the sum.
Own money, own byline
Nothing is being sold and no employer or vendor appears. The author pays for his own machines, which is both the reason scale-to-zero is non-negotiable and a standing reason to prefer whichever runtime is cheapest to leave idle. The pull that remains is authorial. The rewrite-in-Go write-up is a well-worn genre, one that rewards the port over the profiler.
Specific, coherent, single-sourced
The figures are specific and they agree with each other, which gives reasonable confidence in what happened on this one self-funded Kubernetes setup, though that confidence does not stretch to the ten-to-twenty-times ratio transferring elsewhere. One wrinkle inside our own coverage is worth flagging: we had recorded that the write-up gives no hour count, and it plainly does - twenty hours, generously, across three partial weekends.