Cool Tools and Other Stuff Think from the User In by Eric Armstrong March 23, 2006
In his recent post, Bill Venners included a terrific quote from Ken Arnold. It crystallized my thinking on subjects as diverse as API design, interface design, and documentation (which many developers don't realize, is almost purely a design activity).
(Many developers) think from the implementation out, instead of thinking from the user in.
That is pure gold. It nicely encapsulates a variety of issues I've noticed, including documentation, API design, and interface functionality.
To transform that wonderful observation into a golden rule, I'd say:
Think from the user in, rather than from the implementation out.
Documentation: Describe how to drive the car, not
how the steering system works. It's astonishing how
many developer-authored whitepapers do the latter.
That's good stuff for the design document, and something
that other coders will want to hear. But 95% of the
people who are looking at your stuff want to use it.
APIs: Design the best APIs you can think of. Do
something else for a week. Then write some test
applications from memory. When there's a difference
between what you thought the API was as a user
and what you thought it should be as the designer,
favor the user perspective. Rename the API or
refactor to match the way you thought it would work
when you were using it. Whenever possible, build
your application tests first.
Interface design: Don't build an interface for your
technology, so it can be used. Build an interface that
solves user problems. Set up use cases and design an
interface that minimizes the number of steps the user
has to take in the most frequent use cases, that
makes less common cases possible, and that above all
makes it easy to remember how to do things. Then use
your technology to implement it. And if the APIs get
in way, change the APIs!
Have an opinion?
Readers have already posted
about this weblog entry. Why not
If you'd like to be notified whenever Eric Armstrong adds a new entry to his weblog, subscribe to his RSS feed.
Eric Armstrong has been programming and writing professionally since
before there were personal computers. His production experience includes artificial intelligence (AI) programs, system libraries, real-time
programs, and business applications in a variety of languages. He works as a writer and software consultant in
the San Francisco Bay Area. He wrote The JBuilder2 Bible and authored the Java/XML programming tutorial available at http://java.sun.com. Eric is also involved in efforts to design knowledge-based collaboration systems.