2026-04-03

I picked Rust over Go for the Struvo sidecar — here's the reasoning

Wrong reasons would have been "Rust is faster." Right reasons were the ones that survived the alternatives doc.

#rust#go#struvo#language-choice#sidecar

The decision

Struvo has a transcription sidecar that runs on Render. It originally ran in Python. Hot path was slow under load — about 800ms for a 30-second clip. We needed to ship a faster service.

Two candidates: Rust or Go.

I went with Rust. Here's why, and the reasoning that almost talked me out of it.

The wrong reasons

"Rust is faster than Go." Both are fast enough at this layer. The bottleneck isn't language overhead — it's whisper.cpp invocation. Sub-100ms either way.

"Rust has a better type system." True. Doesn't matter for a 600-line sidecar with three endpoints.

"Rust is what the cool kids use." Worst possible reason. Eventually became part of the warning sign that I was rationalizing.

The right reasons

  1. The sidecar fans out to other binaries — whisper.cpp, ffmpeg, sox. Rust's Command ergonomics + cargo dependency hygiene made the binary management cleaner than Go's. We've been bitten by Go vendor sprawl before.
  1. We already had Rust on the team. My cofounder is faster in Rust than Go. For a two-person shop, language familiarity matters more than language merit.
  1. Static linking. The sidecar runs in a single Render container with no external runtime deps. Rust's default static linking matched the deploy model exactly. With Go we'd have done the same thing — but with Rust it was the default, not a config decision.

What I almost got wrong

I almost went Go because the AI tooling for Go (Claude Code agents, MCP servers) is more mature. Two days in, I realized that's noise — most of the sidecar code was straightforward enough that the AI tooling differential didn't matter.

If the project had been a 10K-line service, the AI tooling differential might have flipped the decision. For a 600-line sidecar, it didn't.

What you can steal

Language choice is mostly a team decision, not a technology decision. Pick the language your team is fastest in unless there's a hard runtime reason to deviate.

The reasoning template I use:

  1. Write down 3 reasons for the choice
  2. Write down 3 reasons against
  3. If the reasons FOR include "is faster" or "is better" without specifics, replace them with the actual specific
  4. If you can't, the choice is rationalized — start over

This is the template the LLM Wiki entry for the decision uses. Forces honesty.