I frequently over-engineer my Rust code, doing fancy stuff in methods and requiring mutable references as parameters. The pitfall: the borrow-checker. It often does not let me do fancy stuff when the API is actually called (even if the lib compiles), because of the mutable references :( After getting a coffee, I usually sit down and rewrite stuff in a sane manner, ending up with immutable references and the same behavior as before (from the API perspective).
There is so much leeway in the way we program certain things - these rewrites sound like magic :D However, it takes a lot to re-think my way of writing code. I am so happy that I can use Rust to improve my overall code quality and stability!