Marcel Koch’s Post

A rewrite in Rust might solve your performance problems. But it will hurt your time-to-market. When existing backends in Python, Java or Node.js hit their limits, the usual options come up: vertical scaling, async, concurrency or maybe a full rewrite in Rust. That rewrite can quickly turn into a large-scale project with endless ticket backlogs. The team is blocked for months, new features stall and the overhead of agile coordination keeps growing without delivering measurable product value. A more pragmatic approach is incremental replacement. Architectural flexibility means replacing only the isolated bottleneck with Rust. The rest of the system stays untouched. The foundational mechanism for this is the C-ABI (Application Binary Interface) as a universal interface, but today there are considerably more elegant solutions available. Depending on the language, there are two paths: 1. Generalist approaches - supporting multiple languages uniFFI: The established standard boltFFI: A newer alternative that achieves higher performance by skipping serialization Diplomat: Specialized for complex data structures 2. Language-specific integrations Python: PyO3 and Maturin (builds native Python wheels directly from Rust) Node.js: NAPI Java: j4rs, robusta_jni There is also an organisational advantage. The majority of the feature team continues working in their familiar ecosystem and simply integrates the Rust code, either as a library or as a domain core. That part is handled by a small dedicated group within the team, supported by a Rust expert. (that's me 😊) How does your team handle performance bottlenecks? Have you already integrated Rust into your systems? #RustLang #SoftwareArchitecture #Python #Java #NodeJS

  • No alternative text description for this image
Robert Sarkozi

Senior Software Engineer at Softing | Rust 🦀| AI | This is the way!

5d

That's the exact approach we took also, in many cases. Rust, not being ABI-stable yet (intentionally), works well with C/C++ with its FFI interop interface.Thus replacing functionality and adding new is easily done in this way, incrementally.It's also a good way to demonstrate and idea, to quickly implement a POC, easier than in the project's own language and architecture.Bindgen and CXX is what I choose most of the times.And yes, Agile is often times an impediment.

Like
Reply

We have already removed Rust again because removing rust made our CI pipeline 3 times faster.

Like
Reply
See more comments

To view or add a comment, sign in

Explore content categories