Thinking about team work organization, I was constantly humming "Divide and Conquer" (DaC) principle. That's pretty obvious since it is guiding principle how big teams are taking on large problems - by splitting them into many smaller ones. (Small enough for single person to solve.)
Turning back to work, my eyes have met again with several of my constructs loosely based on MVC model.
Sudden enlightenment: MVC is another application of more general DaC.
How DaC works. A (simple) problem is split into three (primitive) problems:
2 smaller problems of original bigger problem and (one more piece everybody forgets about)
problem of integration the two smaller solutions into solution for bigger problem.
The third part - often forgotten line connecting two blocks - is very important and often play crucial development organization role. Recurrently applying DaC we can slice problems until they reach manageable size.
How MVC works. A problem is split into three problems:
stateful part containing all data/state (model),
stateless part containing all utilities needed to work with model (view) and
controller part which best exemplified by UI to manage the data of model using the utility of view.
MVC generally drawn as three blocks, with model being independent, view depending solely on model and controller depending on both model and view.
Similarities are obvious.
On high level, MVC's controller is the interface connecting the two pieces of problem - model (state) and view (functions). (Bigger problem split into two smaller problems - model and view - with controller playing role of integration problem.)
On lower level, MVC looks like DaC splitting original problem into three smaller problems and plus three more integration problems (view to model, controller to view and to model).