"Warum OBA?" - "Why OBA?": i have no idea what OBA might mean. It's not a common acronym.
But it gets better. "Fast, richtig". Yes, that means "almost correct". A great claim!
At the same time, I have been using NX for a larger (though not huge) Javascript monorepo. Javascript is my strongest language, so take this with a grain of salt, but at my org's scale I vastly prefer the NX experience over Bazel. I think the reason is that NX feels like an optimized, natural extension of normal Javascript build tooling, while Bazel requires an entirely separate set of knowledge.
But once you start running into things like multiple languishes and multiple platforms etc it probably makes sense to think about something like Bazel but I agree with you as of right now the learning curve is way too high. I’m very curious to see where they can get it to in a few years, as I mentioned in my other comment, the 6.0 release with bzlmod along with the toolchains and platforms APIs starts to make things quite a bit more grokkable but there is still a long way to go yet I think.
I know that some people use Cargo for non-Rust projects. Curious about experience with that, vs. e.g. Meson. CMake is used for a lot of projects, but that experience has been almost as bad as Autotools, yet still better than SCons or WAF.
Don’t get me wrong it’s still EXTREMELY power user and I imagine several years before it starts making a name for itself outside of mega corps like Google and Twitter because the ecosystem right now is a mess but I genuinely hope it can live up to its full potential where you can build basically any project from scratch with a single command and know that it was done right and with many other guarantees under the hood.
First off, if you depend upon another Bazel project which has its own dependencies, you need to clone dependencies from its WORKSPACE into yours for any targets you are hitting. If they chose to include macros for importing their dependencies, you may use those, but this would be opt-in. This is not technically unreasonable; you have all the power you need to have everything in your project depend upon a single version of a shared library or potentially import multiple versions (depending on how tangled the tree is), but you have to use this power, even if you don't care. Compare this to a non-sandboxed, more naive build using whatever version of libraries was found in the environment. You have the means to tightly control what is in the environment, or not care. With Bazel you have to care.
The dependency chain has led to a problem in practice when I tried to use Google's protobufs and Cython at the same time. The protobuf generated Python bindings use a particular version of Cython and override Cython's own Bazel rules, which seemed like a very rude and unnecessary practice. This made it impossible for me to use Cython in the same project as protobufs. A bug report to protobuf was met with "PR welcome."
As far as I can tell there are no "best practices" or features in Bazel to ease this kind of degenerate dependency chaining. If there are, a popular Google library decided not to use them. I consider dependencies to be the best and worst thing about Bazel; when it works it just works, when it doesn't it really doesn't.
All that said, I would probably use Bazel over pretty much any other alternative for business software in C++. For one-offs and PoC it is overkill.
This reminds me of how Nix[1] is doing things under the hood. Recently added Nix to on of our projects[2] which is still a build system using Nix to manage dependencies.
[2]https://bob.build/docs/getting-started/package-management