Perspective
Speed is a distraction
The most common technology selection mistake is optimising for the wrong variable. Teams debate Rust vs Java vs TypeScript based on microbenchmarks that vanish behind a database query. They compare "hello world" throughput when what matters is whether their team can ship, operate, and maintain the system over its lifetime.
The experiment
We built the same system three times. Same schema, same MongoDB, same queries. 13 entities, 19 resolvers, federated across multiple services. Java, Rust, TypeScript. Three complete implementations of the same architecture, tested under identical conditions.
What we found
At baseline—a single user, no contention—Rust is 3–6x faster than Java. Sounds dramatic. But under realistic load with 10 concurrent users, the gap collapses to 1.3–2.6x. MongoDB becomes the bottleneck, not the application tier. The difference between "0.7ms" and "1.8ms" is undetectable to any human, any frontend, any SLA.
Under load, they converge
| Test | Java | Rust | Difference |
|---|---|---|---|
| REST CRUD | 1.84ms | 1.38ms | 0.46ms |
| GraphQL | 1.76ms | 0.69ms | 1.07ms |
| Federation | 3.09ms | 1.96ms | 1.13ms |
10 concurrent users, same MongoDB instance, median latencies
What actually matters
The numbers make it obvious: the real performance lever is infrastructure, not language. Switching from a single-node MongoDB to a replica set doubled latencies—in both languages equally. Adding proper indexes delivered a 100x improvement—again, regardless of language. The application tier is the last place to look for performance gains.
Infrastructure matters more
| Change | Effect |
|---|---|
| Single-node → Replica set | 2x latency increase (both languages) |
| No indexes → Indexed | 100x improvement (both languages) |
| Rust → Java | 1.3–2.6x (under load) |
The right question
Instead of "which language is fastest?", ask: "which language lets this team ship reliable software fastest?" That depends on the team's experience, the organisation's hiring pipeline, the ecosystem for the problem domain, and the operational model. A Rust service that nobody on the team can debug is slower than a Java service they understand.
Our approach
We implement in the language that fits the team and the constraint. Same framework architecture, same patterns, proven in all three. Java when the team knows it, Rust when the constraints demand it, TypeScript when the ecosystem fits. The choice is about people and sustainability, not benchmarks.