We use Vagrant because it is the best toolchain for having a standardized development environment that is readily provisoned with just a single command on macOS, Linux, and Windows.
There's a lot of things that could be better; the thing I dislike the most is how Vagrant configuration file is a Ruby script with weird semantics around conditionals, which makes it its own special language to learn. They would have been a lot better off with the configuration approach taken by Xen (where the configuration file was a straightforward Python system).
Also, it's error messages are optimized too much for people developing Vagrant itself, and not enough for helping end users who are using Vagrant, which means one has to google often to figure out what the actual problem is.
Still, I don't think there's a better alternative for a development environment that Just Works for hundreds of developers. Docker isn't really designed for the development environment use case in my view, since it's optimized for throwing away state and getting a clean one when you make changes, and that's sometimes really not what you want. And having to SSH into a remote development environment has significant latency and editor setup costs that in my view make it a backup plan, not the main way to do things.



