CSAIL Alliances Concepts & AI Workshop
Boston, April 27, 2026
Recent content in Home on The Essence of Software
Boston, April 27, 2026
Short videos about concept design
Object oriented modeling and its pitfalls.
Rethinking software structure to enable LLM coding
Oslo, August 25-26, 2025
Learning about concept design by comparing similar concepts
Learning about concept design by reading a concept spec
Criteria for reviewing concept definitions
Learning about concept design by writing a concept spec
Learning about system design by reading concept specs and syncs
Learning about system design by writing concept specs and syncs
Online, June 10, 12, 16, 24, 2025
Boston, March 2025
Workshop held in Woodinville, WA, in December 2024
A Proposal for a Concept-based App Architecture
Notes on the design of concept configurations
The first step to great software: scenarios of success
Two modes of design thinking Design, whatever the domain, includes two different modes of thinking. In one, the designer generates ideas freely, often responding only loosely to any given need or problem. In the other, the designer takes some previously articulated design ideas, and attempts to improve them. The first mode is expansive, and most successful when critical judgment is suspended; the…
Tactics for divergence Let’s consider some tactics that you might find useful as a software designer to make divergent design more effective. To make these concrete, I’ll suppose that we’re developing an app to support architectural walking tours. Interviewing stakeholders Talking to potential users and other stakeholders is good not only for identifying needs but also for getting design ideas.…
The role of purposes From what to why . The beginning of wisdom for a designer is to stop asking “what?” and start asking “why?”. This applies at every level. You can ask “what application shall I design?”. But a better question is “why would I design that?”. And at a finer grain, the question “what features should my app have?” gives way to “why should my app have these particular features?”.
Two sides of a coin The key to concept design is, perhaps not surprisingly, the idea of concepts . A concept is two things at once. On the one hand, a “concept” means you’d expect it to mean: a mental construct that you need to understand to be able to use an app effectively. So you might that to use Photoshop you need to understand the “concept of a layer”; to use Facebook you need to understand…
An idea you need to know One of the most important and useful ideas in software also happens to be one of the least well known. It was introduced in a paper that David Parnas wrote in 1979, entitled Designing Software for Ease of Extension and Contraction . Program families . Following on from an earlier paper that introduced the idea of “program families”—that when you design software you…
Why agile no longer makes sense in the LLM era.
Notes on designing a GPT-powered tutor using concepts
Applying concept design to the camera rotation API
Lessons learned from deploying concepts at scale.
Motivation: Defining Behavior The operational principle of a concept explains its archetypal behavior: how it’s typically used, and how it fulfills its purpose. But for a concept to be flexible and powerful, it should work in many different scenarios, so we need a way to pin down the behavior in detail. Using the notion of a state machine, we can define how a concept will behave in every possible…
Notes on design of a GPT-powered tutor
Notes on design of a GPT-powered tutor
A Concept Exploration of Noosphere
A brief intro to concept design in three parts.
Integrity violations aren’t as common as I once expected. But when they happen, they’re bad.
The building blocks that social media apps use to control us.
Don Norman’s book helped improve interface design, but it also misled us.
Why a new discipline of software design is needed.
Why modularity matters To see why modularity is so critical in software design, consider what goes wrong when it’s missing. For the programmer, life becomes miserable. Whenever you need to understand or modify some piece of functionality, there’s no single place in the code to go to, and you may have to visit many widely separated locations (and just finding them can be a major challenge). Even…
As I explained in another tutorial , the easiest and most effective way to define the behavior of an app precisely is to model it as a state machine. The app has a set of possible states, and actions that update and query the states. An execution of the app is just a sequence of actions (or more correctly, action instances that include particular action arguments), and the behavior as a whole is…
In another tutorial , I showed a concept definition for Yellkey , a popular URL shortening service: concept Yellkey purpose shorten URLs to common words principle if you register a URL u for t seconds and obtaining a shortening s, looking up s will yield u until the shortening expires t seconds from now state used: set String shortFor: used -> one URL expiry: used -> one Date const shorthands: set…
Any software app, service or system can be viewed as a collection of interacting concepts . Concepts are the building blocks of software Imagine explaining Twitter to someone who’s never used it. You might tell them about the Tweet and Follower concepts, then maybe Hashtag and Like (aka Upvote), and if they’re keen to know even more, you could explain VerifiedAccount or Bookmark . Each…
When critical concepts are missing
What's the difference between design and engineering?
Think about your favorite product, whether it’s a photo-editing app or a toaster, and ask yourself: how did it get to be so good? With all the hype in the design world about creativity and brainstorming, it’s easy to imagine that great designs simply appear, out of the blue. Someone conjures up a new idea, and it just needs to be translated from sketch to product. Maybe many details need to be…
What is a design problem? What exactly is a design problem? And why are design problems often hard to solve? The most compelling answer to this question, in my view, comes from Christopher Alexander in his influential book Notes on the Synthesis of Form (1964). Most of the book is about a way to structure goals into a tree, by noting alignments and conflicts between them, and grouping them to…
Seven criteria What makes a design fit for purpose depends—surprise!—on the purpose. But generic criteria are helpful for two reasons. First, they give you some basis for evaluation, however crude. Second, they can be used as a checklist to suggest more specific ones. A software product should be: Efficient : letting users accomplish their goals with no more steps or effort than needed; Flexible :…
Most of us* believe that simplicity is the key to design. I’m a sucker for the best quotes about it. Here are some of my favorites. First, Tony Hoare in his Turing Award lecture lamenting the complexity of Algol-68: I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so…
When you’re diagnosing a usability snag, or coming up with a new design idea, it’s helpful to know what level you’re working at. Over the years, designers and researchers have defined various levels, reflecting their view of design and what they emphasize. I find the following scheme most helpful: Physical . If you want to think of levels as low and high, this one is at the bottom. It’s the level…
In the 1980s, there was a revolution in software. The Apple Macintosh came out (building on the invention of the WIMP interface at PARC ), Don Norman wrote The Design of Everyday Things , and the first CHI conference was held. Now everyone knows how important user interface design is, and there’s no excuse for messing it up. You can find several collections of UI design heuristics (such as…
A compelling way to explain how something works is to tell a story. Not any story, but a kind of defining story that shows, through a typical scenario, why the thing is useful and fulfills its purpose. The Minuteman Library Network, for example, offers a wonderful service. If I request a book, then when it becomes available at my local library, I get an email notifying me that it’s ready to be…
If user experience runs deeper than the user interface, we need a way to talk about an app that isn’t just visual, and that captures behavior in a more fundamental way. Programmers think in terms of complicated things like objects, callbacks, streams, functionals, and so on. They’re essential for structuring code, but for behavior a much simpler model is effective. State machines That model is the…
A How-To Guide for Removing Irregularities in Your App