Products should be made of programs. Programs should be able to be simple enough to be "complete" while how they get built, replaced, planned, and orchestrated however, is free to be as fluid as the problem to be solved.<p>Many systems tried to be this, but people too frequently side-step these solutions for decomposition because they aren't complete enough. Unix wasn't enough, now we have Docker, etc.<p>OOP tries to achieve this from a different level on the inside of complex systems, but still falls short. (e.g. you have to do IPC or have a message-passing VM where objects~=processes to be able to do live code replacement and allow multiple independently-developed implementations of the same concept to run simultaneously and collect behavior on which does a better job, so this type of thing is not common.)<p>It'd be nice if the progress towards building smaller systems that avoid complexity begins to outpace the progress toward building larger systems which defend against complexity within my lifetime, but I can't say I'm hopeful.