The fundamental question of software design -- namely how to shape software so that it is more usable -- has been strangely marginalized. We've made great progress on user interfaces, but the structures that affect usability, flexibility, robustness, and even security, lie deeper in the software.
In a cluster of related projects, we're developing:
- a theory of software design based on "concepts", which are essentially micromachines that are understandable to human users
- a series of case studies to test and extend the theory
- a new modularity mechanism based on concepts to support rapid assembly of applications without coding.
As computing becomes even more pervasive in our society, and as we depend more and more on software infrastructure, its design -- in this sense, not in the sense of internal code structure -- will become a central concern, and we think that now is the time to rethink how we design software.