@borkdude that's the conclusion I've come to as well over the years. The only way to keep code maintainable is to aggressively break it up into small units that can be reasoned about independently.
It's not a problem you can solve with a language because the problem lies with the fact that humans can only keep so much context in their heads. Once the scope grows beyond that you start making assumptions about the way the code works.
@borkdude
There's also the problem of communication overhead. You end up with more meetings, emails, and so on. And these become increasingly less productive the more people you have in the loop.
Ultimately, any large project can and should be broken up into smaller units that encapsulate some functionality. Then these can be composed together into larger things.
I like to think of it as Lego style code architecture. :)