The combination of verbose type definitions and limited support for the kind of types rails often uses made it a poor ROI for us, but it did find some bugs.
Personally don't like it, but I also don't like mypy. I do like TypeScript though, mostly.
When you're hacking together an MVP as quickly as possible, it may seem like a brilliant idea to not have types. Then you have a real company and a larger team and you find out that not having types causes lots of problems. Then you graft an ugly hack like Sorbet onto your code base. It's more work and more error-prone than having a real language with types.
The official Ruby motto should be "penny-wise, pound foolish". Everything about the language is a disadvantage when you have a large code base.
Yeah, it's hard to find a decent team, so we work with less experienced guys who need a lot of safeguards like static types ;)
Ruby solves this problem: you do not need big teams, so you are more comfortable finding better developers. Ruby allows to reduce team 5x.
I would say it was immensely worth it. It caught bugs for me before runtime on a daily basis, and enabled refactors that would have been so much more difficult without it.
It was far from painless, and there were plenty of outstanding issues even when I left. But I consider it an invaluable and essential tool for any large ruby codebase.
I was particularly impressed at how fast sorbet was. Way faster than typescript on a comparably sized codebase.
Getting it to play nicely with Rails and other gems that did metaprogramming magic was a constant pain in the butt though.