I really can't emphasize enough how much I love using Bazel. The ability to tell a less technical user "just run `bazel run //amazing/server`" regardless of language and know that everything will magically work (toolchain installation, future toolchain upgrades, incremental rebuilds) is really freeing. The actions graph with rules and aspects is quite powerful, so you can do things like add Java nullability checks or Python type checking remarkably easily. Recently I put together a simple build rule that strips external dependencies, archives the rest, and uploads it to a cache. Then we can easily run that archive against a pre-built container (which contains the external dependencies) in our cluster, enabling a very fast ML iteration loop on beefy cluster machines. I've also done a lot of work to enable middle-ground environments, so my users can run Python scripts like they're used to (`python script.py`) while inside of a Bazel environment, which makes it easy for them to develop quickly and then create a BUILD file when they're ready.
The major downside I've experienced is that any time you're trying to do something in a less-than-Bazel way (for example relying on binaries built outside of Bazel) things can get really hairy. My containers often need various things from apt repositories, so I had to give up on rules_docker and made my own rules for Podman. I think you need someone who understands aspects and rules before adopting it, or else the sharp edges of Bazel will keep cutting you until you drop it.
I tried Bazel once about 5 years ago for a Python project and it definitely wasn't up to task then, and I kind of wrote it off for a while (it was a bad experience). I do like the idea of tools like Bazel and Nix, and I've since moved toward Go and Rust which I think are more of a happy path for Bazel. I wouldn't mind giving it another try, but I'm not eager to bite off a big learning curve (limited spare time, other hobbies, etc). If anyone has any recommendations for gentle introductions to Bazel (ideally for Go), I would appreciate them.
Python support in Bazel now looks more promising with `rules_python`: https://github.com/bazelbuild/rules_python
`rules_go` to my understanding is great too.
Over years, Bazel is not as opinionated as before, mostly because adoptions in different orgs force it to be so.