Screw Interface Patterns

Allow me to begin by saying that this is an opinion piece. I’m not doing research into the matter, but rather boiling down trends—the good and bad—as I see ’em.

And they’re mostly bad. Otherwise it’d be boring.

A Pattern Language

Pattern obsession has come to user interface design by way of software architecture, by way of a book about real (brick and mortar, natch) architecture written by a man named Christopher Alexander.

In A Pattern Language, Alexander proposes basic building blocks of architectural and community (town, etc.) design that have been proven useful in certain situations, for certain effects, so that architects and civil planners can use them as a starting point for creating effective and pleasant environments.

It’s heady stuff. And quite fascinating, really, although closer to the Did I Just Reread That Same Sentence 3 Times? side of the reading enjoyment scale than the OMG That Is So True Let Me Leap For Joy! side.

Now, somewhere in the dim & misty, some people who weren’t civil planners or architects read Alexander’s book on the patterns for buildings and towns. And they thought to themselves, Boy howdy! This can be generalized for ANYTHING, if you think about it! Let’s apply it to software. And for a while, it was good.

But not all is right in Patternsville.

Don’t Mix Stripes and Dots

He also wrote a book on the invention, creation and refinement of things, in general, called Notes on the Synthesis of Form.

In this book, among other things, he argued that innovation comes from taking an existing thing and smoothing out its observable problems.

One of the metaphors he used was that of trying to create a perfectly smooth metal face on an object. (An abstract object, apparently.) He said that you can tell if something’s not perfectly smooth by inking it and holding it against a known-smooth object. Then you see where the ink transfers irregularly, and then you sand it down, and you start again.

If you’ve ever had a dental crown made, you know how this works. (There’s nothing quite like biting down on carbon paper. Yummmmy!)

He meant it metaphorically, of course. The imperfect metal face stood in for the design of an existing thing, also presumably imperfect in some observable way. By “smoothing out” its problems, through tweaking and refinement, you achieve a more perfect thing. An innovation.

The thing is, this is—for the most part—a load of hogwash. It may work for architecture, and it may work to a (much) lesser degree for software architecture, but it doesn’t work for interaction design… unless all that you’re aiming for is something not-very-objectionable.

Software is not Architecture

Zed Shaw and I once had a conversation about this very topic. I didn’t agree with him entirely at the time, but in hindsight, he was absolutely right (and I’m going to steal his arguments—Hi, Zed!).

Software is just simply not architecture.

Architects work with real, physical constraints—gravity, tension, wind, earthquakes, soil composition.

Software, no matter how fervently you wish it, has no equivalent. Hardware limits don’t compare. If an architect underestimates gravity, his bridge will crash into the ocean. If a software architect underestimates how much RAM she needs, her software will run slowly.

Of course, people do die because of software errors. But logic errors and bad interface are just not comparable to the forces that hold the universe together, don’t you agree?

And yes, there are well-worn paths in the software development world. You know that if you have to achieve a certain kind of permissions structure, you might want to do an ACL. There’s nothing wrong with this, in the pure sense. Getting advice from trusted peers and experts is a good idea in any profession.

People no longer treat patterns as the shared wisdom of experts, however. They are inclined less to bang their heads against a problem and then consult the Book of Wisdom to see what it says about their particular problem. Instead, they treat patterns as Wal-Mart for decisions. They don’t know what they want, exactly, but hey, this little item here on the shelf looks like a potential candidate.

They start with a pattern and see how to make it fit.

This is bassackwards.

Design is not Architecture

Interface design, also, is not architecture.

The world of software is a world of possibilities. The world of architecture is much less so.

Yes, there are very many ways to skin a cat or an I.M. Pei building, but the fact is that humans come in a known range of sizes, walk in certain ways, feel certain ways about low or high ceilings, sleep in certain ways, group together in certain ways, and have a known range of tolerance for temperature and personal space.

These vary among populations, but not by very much—and, bonus, humans have been creating towns and buildings for thousands of years. There’s a lot of trial and error here. A lot of it, no doubt, was reductive (smoothing away problems).

On the other hand, software is an extremely young field. When Alexander published Notes, in 1964, software was an unknown quantity for all but a very few elite individuals. Who used punchcards.

Now, with the incredibly powerful computers we have on our desks, in our backpacks and even in our pockets, we face infinite potential permutations of design for software interface.

Not so for buildings.

And the best things in interface are not achieved by eliminating existing problems. They come from additive design, not reductive sanding down.

Take, for example, the iPhone. Compare it to its predecessors, right back to the Newton.

Can you imagine a sanding-down process that would lead from, say, a Sony Ericsson, RIM, Palm, or Nokia handset to a product like the iPhone?

The Most Universal is the Most Boring

Interface pattern afficionados have moved from the sage advice stage (e.g. “Pave the cowpaths”—that’s a good pattern, it’s a guideline with room for individuality and interpretation) to the concrete (visual designs *as* the pattern, complete but for colors and styling). This is such a problem.

These concrete patterns are useful for two things:

  1. Surveying the field of what’s out there, and
  2. Helping bad designers elevate their bad work to the mediocre

Item #1 is interesting for everyone in a library-sciences kinda way, but I believe that #2 is detrimental. I don’t think that the most-discussed tools and strategies ought to be aimed at the lower end. How dismal.

Consider creative writing, which is a much better parallel to interface design than architecture. When you write, you can do anything. You choose words, rhythms and structure to communicate your ideas, not just what you say. You still need to hold up a coherent thread, and help the reader to follow along, just like with a good interface design. But you have, as it were, endless possibilities when you face the blank page.

I’d like to leave you with this passage from one of my favorite books, Sin and Syntax:

“House” is familiar, it’s short, and it’s standard, but why ignore the options, which include cottage, duplex, dacha, shack, bungalow, A-frame, Tudor, Victorian, hacienda, manor, and wickiup? (Don’t even think about colorless words like abode, dwelling, domicile, or residence.) Create analogies: is that pile of wood and steel a poor man’s Fallingwater? a Tony-Simth-on-stilts? or a Bauhaus mineshaft?

Choosing the right noun means exploring the layers of a word. First, it must be precise, conveying the exact image you are rendering: pick bungalow if you’re describing a one-story house with a low pitched roof. Second, your noun must be rich, its connotations conjuriing a realm of emotion or sensation: stay with bungalow if you’re capturing coziness, a homey atmosphere. Finally, your noun must be apt—its associations, its links to other words and ideas, must comlement your meaning. Are the occupants a bunch of frat boys? Then crash pad might work better.

Yes, house is the most universal word available. It works. It’s a noun that’s central to society; it’s one of the very first words you learn when you study a foreign language. You know that you will be understood when you use it, in any situation. It’s a pattern.

But you couldn’t call yourself fluent in any language if that’s the only word you know for a place where people live.

Do you design or develop rich web interfaces? Then you really ought to snag a copy of our book, JavaScript Performance Rocks!, before the price goes up. It’s over 280 pages of how to architect, serve, and run the fastest rich web app you can—and how to cope with speed problems in the UI, if you must. Plus it comes with our handy dandy profiling tool, DOM Monster. Right now it’s a steal at $24—which is $15 off the final price! So check it out now.

11 Comments

  1. ander says:

    "Software, no matter how fervently you wish it, has no equivalent." (about physical constraints of real architecture)

    Yes it has. Laws of mathematics.

    E.g. NP-completeness seems like constraint to me.

  2. Harald Eckmüller says:

    This is probably a bit of a tangent to the point I think you try to make, but coming from my background in teaching, patterns (of any sort) are an invaluable tool to teach concepts that can not simply be formalized.

    Especially design is something that has to be experienced – good and bad – until you have outgrown you personal taste and discover the rhymes, patterns and limits* that define it on a larger scale.

    Agreed, in itself this produces only mediocre results if copied instead of creatively innovated upon, but again, being creative and innovative beyond the usual requires a lot of understanding and awareness of what IS usual.

    So, all in all, yes, I agree with you that really good design does not come from putting together sarcely understood building blocks to solve even less understood problems.

    On the other hand, I also strongly believe that patterns and building blocks are a fundament to build upon, for those not already savants of the field.

    *whether those limits may be cultural, technical, ressource-related or even more esoteric

  3. Most people would rather pick out wallpaper patterns from a book than to design their own. It saves time and gives an acceptable answer.

    And if you’re just trying to cover that ugly streak on the wall, anything will do.

    But when the design of a component is critical to your success, put the patterns away and do it right. At best, they’re the start of the design journey, not the end of it.

  4. Dave Mosher says:

    I’ve been guilty of putting too much stock into patterns to solve my problems in a quick and easy way in the past. Your article highlights two key points (at least for me) that I believe I’ve come to understand but couldn’t articulate as well as you have here:

    1. Treating patterns as products we select from a shelf that will meet our needs is silly but it’s also lazy. It speaks to a lack of passion in our industry as well. People were once passionate about interface design and usability; it seems these things have been replaced with a quest to conform to what "the pros" are doing. It’s a shame too, because we’re selling ourselves short when we take the best "boxed" solution and apply it to our problems. It’s like people are afraid to fail and that fear robs us of one of the most important learning tools we can have as design professionals: learning from our mistakes 🙂

    2. Software development really is a relatively young field. All of our preconceived notions based on a few decades of experience doesn’t amount to much in the long run. We reinvent the wheel so many times and think that we’ve come up with a standard "1 size fits all" solution in the form of patterns. What got me really inspired about this was an article by Tom DeMarco on the IEEE website: http://www2.computer.org/cms/Computer.org/ComputingNow/homepage/2009/0709/rW_SO_Viewpoints.pdf (definitely a good read).

    Thanks for your post 😉

  5. Sarah Mei says:

    Hmm, interesting. I taught programming last week to a group of high schoolers – total programming newbs. Before we started coding, we talked about what programming is, and most of them thought it had a lot of math in it. I explained that it has more to do with language – that it’s about learning to speak the language of the computer.

    Anyway – I think the creative writing metaphor works for programming, in general, too. Thanks for the interesting post.

  6. James Cooper says:

    The comment about fearing failure may be partially true, but in a business situation, there’s good reason to fear failure — failure means more costs and less profits.

    In order to innovative, you need to try things, and that means the potential to fail — which is a good reason not to fear failure, because it stands in the way of our ability to innovate. But we don’t have to reinvent the wheel either — using tried, tested, and true methods takes the risk out of the day-to-day stuff and lets us focus our experiments on the innovations that we are aiming for.

    So yes, we can’t just smash blocks together and expect to come up with something new and different, but we can’t start from scratch every time either. Patterns and other building blocks have their places — use them to solve the boring problems so that you can put your risk and effort into the thing that makes your product unique.

  7. Dave Mosher says:

    @James Cooper:

    I agree that there are risks associated with failure. I was referring more to personal failure in the context of design and implementation; if all we do in this context is use "off the shelf" implementations in the form of patterns then we lose out on the learning experience. I agree we can’t reinvent the wheel each time we develop/design something new but there is something to be said for understanding the lower level building blocks that patterns use before jumping to blind implementation.

    I agree, patterns have their place but it should be a place where we know what makes them work at a fundamental level and why they are good at solving the problem we need to solve.

  8. pauric says:

    User’s provide us with two things 1) A goal 2) An understanding, based on experience, on how to best achieve that goal.

    UI Design is the art of understanding the user’s goals along with the craft removing the non-essential thus allowing them to achieve their goal as succinctly as possible. An ideal interaction is not when we’re happy with what we’ve creatively added but when we have nothing left to remove from their path.

    UI Design is the creation of a language whose sole purpose is to allow the user to communicate with the machine. Using existing patterns, as a basis at least, allows us to tap in to the user’s experience of previous ui interaction ‘languages’. It is most certainly not the act of a sub-par designer.

    “everything should be made as simple as possible, but no simpler”.

  9. pauric says:

    User’s provide us with two things 1) A goal 2) An understanding, based on experience, on how to best achieve that goal.

    UI Design is the art of understanding the user’s goals along with the craft removing the non-essential thus allowing them to achieve their goal as succinctly as possible. An ideal interaction is not when we’re happy with what we’ve creatively added but when we have nothing left to remove from their path.

    UI Design is the creation of a language whose sole purpose is to allow the user to communicate with the machine. Using existing patterns, as a basis at least, allows us to tap in to the user’s experience of previous ui interaction ‘languages’. It is most certainly not the act of a sub-par designer.

    “everything should be made as simple as possible, but no simpler”.

  10. Fredericadek says:

    pine cone hill bedding postert design scan slide klipsch rsx 4 noodle cutter buck the animated trophy sappire homedics palm percussion personal massager ティンバーランド 6インチ ping driver laptop messenger bag baby seats car hood scoops lg 42lb1dra Doudoune North Face easy bake mixes quickbooks pos pro brn coffee filter omelette pan rainbow bright cartoon super trampoline mens tennis shorts flatware prosine 1800 nikon coolpix 885 review ベルスタッフ レザー pc20 big brain nintendo ds carrier parts quality assurance manager nori directv boxes reason refills premises liability

  11. Gustaveuwp says:

    ratpadz awareness breast cancer sharp microwave manual cl41 3cnj100 cool collection jvc av32 gail borden pacsafe stashsafe arcade game consoles ルブタン スニーカー photoimpressions program HP 15 black inkjet cartridge guitar hard case cold air intake system sandisk 512mb mp3 player salon software for mac vacuum cleaner bag schneiders transflash card reader ovc shopping ティンバーランド ブーツ mini shortwave radio teva water shoes solar shield kitchenaid k45ss second space cheap soccer gear fret files nikon ml l3 12320 032 belli pregnancy モンクレール激安 puter controller panasonic er224s physics by inquiry royal canin qi gong

Leave a Reply

Hey, why not get a shiny
Freckle Time Tracking
account?