Rust’s borrow checker isn’t the hard part it’s designing around it

251 points Expert_Look_6536 82 comments

After spending more time with Rust, I’ve realized the borrow checker itself isn’t really the problem.

What’s actually hard is designing your data flow in a way that the borrow checker is happy with.

In other languages, you write the logic first and deal with bugs later. In Rust, you kind of have to pre-think ownership, mutability, and lifetimes as part of your architecture, not as an afterthought.

I’ve had multiple cases where the “fix” wasn’t changing a line it was restructuring the entire approach (splitting structs, changing function boundaries, avoiding shared mutable state, etc.).

It almost feels like Rust is forcing you into a more functional/ data-oriented design style, even if you didn’t intend to.