GUI Architecture - Why is it so Hard?

If you are an application developer, you are likely to have learned at least one GUI architecture - Model-View-Controller (MVC) being the most "popular" design pattern. I use "popular" to refer to MVC because in reality, it's a design pattern that's misunderstood by a lot of practitioners.

I read this article by Martin Fowler and really enjoyed the breadth and depth of his discussion of GUI architectures. A layman might think all GUIs are architected internally the same way (since they tend to work and look the same) but the variety of architectures that have been developed and used over the years is remarkable. At the moment, Presentation Model is now one of the more popular architectures.

What's so fascinating is that GUI frameworks are some of the most heavily used and understood frameworks - yet such a fundamental architectural detail is still subject to change and refinement after more than 30 years of evolution.

Why is this so? Many other algorithms and design patterns have become settled and/or in hindsight seem to have obvious solutions while GUI architectures never really seems obvious. They always feel a little odd and not so intuitive.

The Reality of Design

When faced with a difficult design task, I try to find a real world analog to the problem. I.e. what in the real-world is a process or structure that is like the problem at hand. Normally the real-world solution (or some variant of it) is a likely solution for the problem just as in the real-world. You can see this principle at work in just the naming of some of the more common design patterns.

Perhaps that is the root problem with GUI architecture - it is a design problem with no good real-world analog and therefore the human mind has difficulties with it. Or more interestingly, stop a moment and consider the terms "model", "view" and "controller" at a higher level of abstraction. Could the way they relate and interact also represent the relationships and interactions between a computer program, graphical user interface and operating system?

So, perhaps the difficulty with GUI architecture is not just that it doesn't have a real world analog but that it is self-referential to the entire task of interacting with a computer; a task which mankind has not had long to adapt to.