We’ve been discussing why to adopt Rust. Now let’s talk about the hard part: actually building team capability.
After 18 months of Rust adoption in our financial services engineering org, I want to share what worked, what didn’t, and what I’d do differently.
The Learning Curve Reality
Let’s be honest about what we’re dealing with:
- Average ramp-up time: 3-6 months for productivity comparable to their previous language
- Initial velocity impact: 2-3x slower development for first 2-3 months
- Concepts that cause friction: Ownership, lifetimes, borrow checker errors
- Team morale dip: Inevitable frustration period around weeks 4-8
These aren’t problems to be solved—they’re the cost of admission. Plan for them.
What Didn’t Work
Sending Engineers to External Training Alone
We sent 3 engineers to a week-long Rust bootcamp. They came back excited but isolated. Within a month, they were stuck on problems nobody else could help with, and morale dropped.
Lesson: Training cohorts, not individuals. Send groups who can support each other.
Starting with a Complex Project
Our first Rust project was rewriting a performance-critical trading component. High stakes, high visibility, high pressure.
Result: Engineers were fighting the borrow checker while racing deadlines. Quality suffered, and people burned out.
Lesson: First projects should be low-stakes learning opportunities, not production-critical systems.
Expecting C++ Expertise to Transfer
Our senior C++ engineers assumed their expertise would translate. It didn’t. In fact, C++ habits were often counterproductive—patterns that are idiomatic in C++ don’t work in Rust.
Lesson: Treat Rust as genuinely new. Junior engineers sometimes adapt faster because they have fewer habits to unlearn.
What Actually Worked
The “Rust Guild” Model
We created a cross-team guild with:
- Weekly study sessions (working through exercises together)
- Shared Slack channel for questions
- Rotating “Rust office hours” with more experienced members
- Monthly “show and tell” for sharing learnings
This distributed the learning burden and created psychological safety for asking “dumb questions.”
Progressive Project Complexity
| Phase | Project Type | Goal |
|---|---|---|
| Month 1-2 | Internal CLI tools | Get comfortable with basics |
| Month 3-4 | Non-critical batch jobs | Handle errors, work with crates |
| Month 5-6 | Internal services (low traffic) | Learn async, networking |
| Month 7+ | Production services | Apply learnings with support |
Pairing Senior Rust + Senior Domain Expert
Our most effective pattern: pair someone experienced in Rust (even if junior overall) with someone senior in the problem domain.
The domain expert knows what to build. The Rust person knows how to build it safely. They teach each other.
Dedicated Learning Time
We explicitly allocated 20% time for Rust learning during the first 3 months. Not optional “if you have time” learning—blocked calendar time.
Metrics We Track
| Metric | What It Shows |
|---|---|
| PRs merged per engineer per week | Velocity recovery |
| Borrow checker errors per PR | Learning progress |
| Time to first production deploy | Confidence milestone |
| Guild attendance | Engagement level |
| Internal Rust questions asked | Healthy learning culture |
The 6-Month Checkpoint
After 6 months, we expect engineers to:
- Write idiomatic safe Rust without constant borrow checker battles
- Understand when and how to use
unsafe(and when not to) - Review Rust code from other team members
- Mentor newer Rust learners
Not everyone hits this timeline. That’s okay—individual variation is normal.
What I’d Do Differently
- Start earlier with async - We delayed async/await concepts too long. Modern Rust services need it.
- More code review pairing - Understanding why Rust experts write code a certain way is invaluable.
- Celebrate small wins - The learning curve is demoralizing. Acknowledge progress more frequently.
Question for others who’ve done this: What was your biggest surprise in the Rust adoption journey?