The Essence of Software
The Essence of Software
Why Concepts Matter for Great Design
Daniel Jackson
PRINCETON UNIVERSITY PRESS PRINCETON & OXFORD
Copyright 2021 by Princeton University Press
Princeton University Press is committed to the protection of copyright and the intellectual property our authors entrust to us. Copyright promotes the progress and integrity of knowledge. Thank you for supporting free speech and the global exchange of ideas by purchasing an authorized edition of this book. If you wish to reproduce or distribute any part of it in any form, please obtain permission.
Requests for permission to reproduce material from this work should be sent to
Published by Princeton University Press
41 William Street, Princeton, New Jersey 08540
6 Oxford Street, Woodstock, Oxfordshire OX20 1TR
press.princeton.edu
All Rights Reserved
ISBN 978-0-691-22538-8
ISBN (e-book) 978-0-691-23054-2
Version 1.0
British Library Cataloging-in-Publication Data is available
Editorial: Hallie Stebbins and Kristen Hop
Production Editorial: Jenny Wolkowicki
Jacket design: Emily Weigel
Production: Danielle Amatucci
Publicity: Sara Henning-Stout and Kate Farquhar-Thomson
Copyeditor: Bhisham Bherwani
Interior design: Daniel Jackson
to my parents
Contents
- 1
- 9
- 15
- 29
- 47
- 59
- 79
- 99
- 109
- 127
- 147
- 157
- 167
- 179
- 183
- 299
- 309
- 311
- 315
- 317
How to Read This Book
A micromaniac is someone obsessed with reducing things to their smallest possible form. This word, by the way, is not in the dictionary.
Edouard de Pomiane, French Cooking in Ten Minutes
Concept design is a simple idea that youll be able to apply in your own workusing and designing softwarewithout having to master any complex technicalities. Many of the concepts Ill use as examples will be recognizable old friends. So Ill take it as a compliment if your conclusion, after reading this book, is that concepts are a natural and even obvious way to think about software, and that you learned nothing more than a systematic framework for an intuitive idea.
But even if the underlying theme of this book resonates and seems familiar, I suspect that for many readers this new way of thinking about software will be disorienting, at least initially. Although software designers have talked for decades about conceptual models and their importance, concepts have never been placed at the center of software design. What would design look like if every software app or system were described in terms of concepts? What exactly would those concepts be? How would they be structured? And how would they be composed together to form the product as a whole?
To answer these questions as best I can, this book is longer than I would have liked. To mitigate that, I have organized it so that different readers can take different journeys through it. Some will want to reach a pragmatic destination as quickly and expeditiously as possible; others, wanting a deeper understanding, may prefer to follow me on some detours away from the main path. This little guide should help you plan your route.
Intended Audience
In short, this book is aimed at anyone interested in software, in design, or in usability. You might be a programmer, a software architect, or a user interaction designer; a consultant, an analyst, a program manager, or a marketing strategist; a computer science student, teacher, or researcher; or maybe just one of those people who (like me) enjoys thinking about why things are designed in certain waysand why some designs succeed so gloriously and others fail so spectacularly.
No knowledge of computer science or programming is assumed, and although many of the principles in the book can be expressed more precisely in logic, no mathematical background is required. In order to appeal to as broad an audience as possible, Ive drawn examples from a wide variety of popular apps, from word processors to social media platforms. So each reader will likely encounter examples that are easy to follow and others that require more effort. A byproduct of reading the book, I hope, will be a more solid grasp (and thus greater mastery) of apps that you use but dont yet fully understand.
Goals of This Book
This book has three related goals. The first is to present some straightforward techniques that software creators can apply immediately to improve the quality of their designs. By helping you identify and disentangle the essential concepts, articulate them, and make them clear and robust, the book will enable you to design software betterand thus design better softwarewhatever phase of design you work in, from the earliest phases of strategic design (in which products are imagined and shaped) to the latest phases (in which every detail of interaction with the user is settled).
The second goal is to provide a fresh take on software, so you can view a software product not just as a mass of intertwined functions, but as a systematic composition of concepts, some classic and well understood, and others novel and more idiosyncratic. With this new perspective, designers can focus their work more effectively, and users can understand software with greater clarity, empowering them to exploit their software to its fullest potential.
My third and final goal is broader and perhaps easier. It is to convince the community of researchers and practitioners who work on the development of software applications and services that the design of software is an exciting and intellectually substantive discipline.
Interest in software designespecially when focused on user-facing aspectshas waned over the last few decades, even as recognition of its importance has grown. In part this is due to the misconception that there is nothing inherent to the design of software that makes it more or less usable, and that any such judgments are subjective (or better addressed as psychological or social questions, with the focus more on the user than the software itself).
The rise of empiricism in software practicewhile motivated by the apt recognition that even the best designs have flaws that only user testing will revealhas also, in my view, dulled our enthusiasm for design, as many have come to doubt the value of design expertise. But mostly, I believe, we have suffered from a lack of respectability and intellectual confidence, since our ideas about what makes software usable have more often been expressed as tentative rules of thumb rather than principles grounded in a rich theory. I hope to show, in this book, that such principles and theory do indeed exist, and to encourage others to pursue their development and refinement.
Choosing Your Path
You can take different paths through the book, depending on your goals. To do so, it will help you to know how the book is organized and what each part contains.
contains three motivational chapters. The first might have served as a preface: it explains why I came to write this book, and why the problems that I was interested in hadnt already been addressed in other fields (such as human-computer interaction, software engineering and design thinking). In the second chapter, we see our first examples of concepts, and the impact that they have on usability, and I explain concept design as the top of a hierarchy of user-experience design levels. The third chapter outlines the many roles that concepts have, from being product differentiators to being the linchpin of digital transformations.
is the heart of the book. Its first chapter tells you exactly what a concept is, and how it can be structured. The second explains the fundamental idea of a concepts purpose as a motivation and a yardstick. The third shows how an app or system can be understood as a composition of concepts, combined using a simple but powerful synchronization mechanism; it explains how over-or under-synchronization can damage usability; and, more subtly, how some features that we traditionally view as complex and indivisible can instead be understood as synergistic fusions of distinct concepts. The fourth shows how mapping concepts to a user interface is not always as straightforward as you might imagine, and that sometimes the problem with a design lies not with the concepts per se but in their realization as buttons and displays. The last chapter in this part introduces a way to think about software structure at a very high level as a collection of concepts that are mutually dependent on one anothernot that any concept relies on another concept for its correct working, but rather that only certain combinations of concepts make sense in the context of an app.
Next page