How well a software product works for its users—and how easily and robustly it can be implemented—depends on the design of its behavior. But there’s been little research on how to design external behavior; instead we’ve focused primarily on engineering the internal structures of software. Conceptual design is a new way to frame a design in terms of free-standing, reusable units of behavior. I’ll explain what concepts are, how they characterize the design of applications, and how they can be judged using a few simple design principles, giving examples from major applications in which conceptual analysis reveals critical design flaws.
A draft book about conceptual design is available, and Gitless, a reworking of Git based on our concept design principles, is available.

Daniel Jackson is a Professor of Computer Science at MIT, a MacVicar teaching fellow, and an Associate Director of the Computer Science and Artificial Intelligence Laboratory. His research has focused primarily on software modeling and design. He was the creator of the Alloy modeling language, and author of Software Abstractions: Logic, Language, and Analysis. His current research projects include development of new paradigms for end-user programming, a safety interlock for self-driving cars, and a new theory of software design that connects user experience to essential conceptual structures. He was a recipient of the 2016 ACM SIGSOFT Impact Award, the 2017 ACM SIGSOFT Outstanding Research Award, and is an ACM Fellow. Jackson is also a photographer; his most recent project is Portraits of Resilience (MIT Press, 2017).