The problem of over-engineering and top down approaches is that the people at the top try to predict the future. They have limited attention resources and the people at the top become a bottleneck to the adaptability of the complex adaptive system.
The answer? To design for complexity and to strategically decide to design resilient, sustainable, adaptable systems. This means moving away from the mechanistic model of design and management.
I encourage all developers to review and comment on this framework.
It would be interesting to develop a framework for complex applications. And as Dave Snowden said, such complex systems cannot be predicted beforehand. Instead the complex applications could emerge as interactions between distributed functions on the SAFE network.
The framework would be a layer on top of the SAFE APIs, and it could probably be made simple, and out of that simple foundation complexity will emerge.
EDIT: For fun, here is a hack for how to send a function as a string: Edit fiddle - JSFiddle - Code Playground Together with JSON for data this can be used for distribution of basically any kind of functionality in complex ways.