I had a grubby little shell script that munged some log files, and rather than leave well enough alone I rewrote it as a Rust CLI. Partly to learn the language properly, partly because the script had grown the kind of awk incantation that only works because I'm too frightened to touch it.
The first day was humbling. The borrow checker and I had a frank exchange of views about who owned a string, and I lost every round. There's a particular indignity in spending twenty minutes fighting the compiler over a problem that wouldn't even exist in Python, where I'd simply have shipped the bug and found out in production.
Then something clicked. clap for argument parsing is genuinely lovely, the error handling with Result stopped feeling like ceremony and started feeling like a checklist of things I'd normally forget, and once it compiled it just worked. No "ah, that edge case at three in the morning" follow-up. The compiler had already made me handle it.
Was it worth it for a script? On pure economics, absolutely not; the shell version took ten minutes and this took a weekend. But I came out the other side actually understanding ownership instead of nodding along to it, and I've got a single static binary I can drop on any box without worrying about which awk it has. For learning, worth every fight. For the log files, the script would have been fine.