A new way to think about Software Design
This year’s Saturn Conference at San Diego reflected an evolving landscape as macro trends such as cloud based architectures, Internet of Things (IoT), and devOps in an Agile world, continue to reshape the industry. How do we think about design and architecture in this changing landscape?
Professor Daniel Jackson of MIT, in a keynote at the Saturn Conference, gave us a fresh look on how to think about design. The idea is simple and elegant and one wonders why it took so long for somebody to come up with it. Simply put, Professor Jackson describes an application as a collection of coherent concepts that fulfill the purposes of the application. The beauty of this formulation is that it eliminates the clutter of implementation artifacts.
When we describe the design of a program in UML, we struggle to create structural and behavioral diagrams that accurately reflect program implementation. Sadly (and, perhaps, mercifully) we rarely succeed in this endeavor and even if we did, those diagrams would likely be just as hard to understand as the code (think of creating interaction diagrams to represent various method call chains). And if our implementation language happens to be a non-object oriented language then we are plain out of luck. On the other hand, this new kind of thinking has the potential to transcend implementation language and, perhaps, even technology. It also has ramifications on the architect vs developer debates that rage in the world of software engineering today.
Professor Jackson provided several examples of applications and the concepts they embody. For instance, an email application embodies concepts such as Email Address, Message and Folder while a word processor embodies concepts such as Paragraph, Format and Style. A considerable part of the presentation delved into the details that illustrated the sophistication that underlies these concepts and the confusion that befalls when these concepts are poorly defined.
So, how do we select concepts? Professor Jackson defines purposes that a concept fulfills. In a clean design, he said, a concept fulfills a single purpose. This has ramifications that I have yet to fully get my head around. It reminds me of the Single Responsibility Principle which is also a difficult concept to understand. In any case, I suspect that defining a coherent set of concepts is difficult and takes repeated iterations of implementations to get it right. In fact, the user of that software is likely to be a critical part of the process as concepts are pruned, split up or even eliminated to make them coherent and understandable.
And, how do we implement concepts? Does a concept map to a single class or multiple classes if implemented in an object oriented language? I will eagerly wait to see further work on this approach.
Go look up the slides of this thought provoking presentation here: Rethinking Software Design.
Chief Scientist at TCS Research
8 年Very interesting. The notion of "concept" seems analogus to the notion of "feature", though features seem from the user's point of view, while concepts seem to be from the point of view of designers. In another perspective, feature may be considered as a combination of concept and purpose. As you have pointed out, Prof. Jackson's notion of clean design (1 concept: 1 purpose) and its impacts need more, in-depth understanding. Granularity of concepts is another important aspect, potentially resulting in hierarchy of concepts. Overall, I believe this can provide an important step towards cleaner and better specifications of systems.
Telemedicine physician | Former physician executive | Re-imagining care delivery to be more patient-centric
8 年This is a fascinating topic. Thanks for sharing the slide deck. I was especially impressed with how Professor Jackson was able to deconstruct his ideas through examples in commonly used software like photo and word processing. I may have to use his last slide in presentations about mapping out healthcare workflows. I find myself bouncing back and forth between conceptual and representation design. Being clearer on the distinction would probably help me communicate messages to different audiences.