You haven’t been paying attention to software development trends, apparently. Software development has been moving away from central designs for decades, and ‘agile’ programming is a refutation of grand central plans, which we find never survive contact with the customer. We’ve learned not to create grand up-front designs by high-powered architects and planners, and instead we build the smallest viable product we can, then release it and respond to how the market reacts.
In software itself, we’ve discovered that borders are really important. In the early days of computing, there were no borders. All code ran in the same space, and your bad code could kill my program, or the operating system itself.
So first we learned to partition code into protected spaces. Then we learned to write object-oriented code that had isolated functions. Then we learned to code against interfaces, because the code that calls a library function doesn’t need to know how the library function works. It just needs to comply with the interface.
And the ‘main’ function (in languages that have it) does not act as a central authority, and does not handle all contingencies. In a modern language, the ‘main’ method may be completely empty, or it may construct a few high-level objects, but the actual control of the program is left to controllers, interrupt-driven code, etc. The move towards more decentralized logic has been going on for decades.
And the reason this is true is because of the same thing that makes an economy impossible to plan and control from the top down - complexity. Software is much more complex than hardware, and as a result we have learned to architect it in a way that allows modules to have autonomy and for the overall system to emerge from the bottom-up interaction of the modules.
So at every level - hardware, operating systems, and programs - software has been trending towards compartmentalization and decentralization. We don’t use the ‘smart people think of everything’ waterfall process any more because it’s high risk and rarely works well. Instead, we’ve moved to ever more decentralized and iterative designs. You know, like a market.
Speaking of that, even inside software we find that markets are working. Token Ring networks have been designed that use pricing to have modules bid for network access based on their internal needs, allowing the overall schedule to emerge dynamically. This solves the problem we had with top-down allocation whenever the requirements changed or something new is added to the system, or when the guys designing the bandwidth allocation failed to understand the needs of the software or the customer.
Software as an industry also has virtually no regulation. You don’t need a license to be a programmer. You don’t need a degree. You don’t need government certification of your code. You don’t have to wait for government inspectors to sign off on it. There are no regulations specifying what language to use, or what best practices you must follow. The computer industry is the closest thing to a wild west we have - for good and for bad.