This concise book by J. Johnson is filled with practical guidelines and rules of thumb for would-be designers of software-intensive, multi-function tools. Such e-tools' success requires an interface that creates direct, low-friction paths from the goals of the tool-user to the goal-promoting operations made possible by the tool, whether it be a word processor, a smartphone, or an MP3 player.
Whenever one specifies a guideline or rule of thumb, or announces a policy that is about to be adopted and enforced, it is wise to explain the reasoning behind it, even if one has the power to enforce its adoption. Detailing the reasons, in tandem with examples of good and bad practice, makes the rule more memorable, and more likely to be reconstructed by someone trying to recall what the rule is. The reasoning, if valid, will also undercut the natural tendency to ignore or actively subvert rules that appear arbitrary, with no better basis than the whim of some over-controlling personality.
An incredible thing about "Designing with the mind in mind" is that most of its guidelines are ultimately easy to remember and, equally important, "easy to swallow", that is, made as palatable as possible by the reasons and examples provided. Because the basis for each guideline is so well explained, the guidelines all make intuitive sense.
The reasons provided for the design guidelines are primarily drawn from cognitive psychology, and secondarily from neuroscience. Therefore, the title appropriately reads "with the mind in mind" and not "with the brain in mind". In a compact book (around 200 pages) that can be read in two sessions, it would have been a mistake to try to ground all the guidelines in neural constraints. Far better is the strategy followed by Johnson, who roots the guidelines in "hard" cognitive psychological constraints that, in turn, one could explain in terms of brain circuitry -- but only if given a budget of another 200 pages. In a few cases, Johnson does sketch neural explanations, in order to exemplify how each mental constraint could be related to a handful of pertinent neural constraints. But, just as one of his interface design principles is to avoid forcing the user to learn geek-speak that is irrelevant to the user's goals, Johnson makes no attempt to give more than short glimpses of the arcane objects and vocabularies found in modern neuroscience.
Another welcome aspect of the book is the way that each chapter builds on the main themes of earlier chapters. For that reason, but also for the overarching perspectives they offer, the last two chapters are the best. One explains how design can maximize the ease with which users explore and learn to deploy the full range of nifty functions made possible by a software-intensive, multi-function tool. The other explains how the time scales of tool operations (such as feedback that a mouse click has been received) must mesh with the time scales of the mind's operations. Poor temporal meshing between these two contributors to the person-machine "conversation" (Johnson's apt term) leads to many gratuitous frustrations and annoyances, which will drive users to abandon the offending product X in favor of a product Y that meshes better with the time scales of mental operations. This will happen even if X outperforms Y on many other, "objective", benchmarks.
Many of the topics treated in the book have been treated elsewhere, notably in prior design books by authors familiar with cognitive psychology, but the approach taken here is remarkable for its elegance and conciseness. Anyone in the business of designing a software product that is complex enough to have an associated "learning curve" will find here many good ideas for minimizing the curve's steepness. The book's own learning curve is very gentle, despite the wealth of ideas.