To speak to the second of naming things, I’m a big fan of content addressable everything. Addressing all content by hash_function() has major advantages. This may require another naming layer to give human recognizable names to hashes, but I think this still goes a long way towards making things better.
It also requires (different) attention to versioning. That is, if you have arbitrary names, you can change the referent of the name to a new version, but you can’t do that with a hash. You can’t use just-a-hash in any case where you might want to upgrade/substitute the part but not the whole.
Conversely, er, contrapositively, if you need referents to not change ever, hashes are great.
It also requires (different) attention to versioning. That is, if you have arbitrary names, you can change the referent of the name to a new version, but you can’t do that with a hash. You can’t use just-a-hash in any case where you might want to upgrade/substitute the part but not the whole.
Conversely, er, contrapositively, if you need referents to not change ever, hashes are great.