Well, to be fair, Tensorflow is a Google library - pretty much any Google-made library will have five levels of indirection before it does anything, regardless of language. It's in their DNA.
> I ask because from what I understand from Google's monorepo, it should be easy for engineers to take direct dependencies on whatever they want.
Not correct. The dependency system supports visibility restrictions - you can take direct dependencies to anything only if you're in your own experimental tree. Otherwise package authors can control access.
I worked at Google for several years until 2015 - one of the running inside jokes was that increasing a border by one pixel is a full-quarter project with a PM, a tech lead, and multiple engineers.
It's not like most people would want more complexity (at least I hope not), but somehow it kept happening, and I feel at least some of it is cultural.
At the risk of over generalizing, I think 2 things are going on:
1) They hire a lot of smart but inexperienced people. I've noticed that those kinds of programmers often write clever and overengineered things, which means overly complex.
2) They get promoted for creating complicated things. They don't get promoted for writing simple things.