June 24th, 2013 by
By Fran Litterio
A skeuomorph is a physical or digital design element that resembles another material or technique. It’s an ornament unnecessary to the operation of the object or software, but exists to create a sense of comfort or impart a sense of elevated status.
Does your calendar app turn pages like a paper calendar? Does your email program show envelopes with stamps on them? Does your smartphone lay out its dial-pad like a touch-tone telephone or emit a shutter click sound when you take a picture? These are all examples of skeuomorphism. You’ll find it the non-digital realm too: spokes on hubcaps, an LED temperature gauge shaped like a glass thermometer, aerodynamic fins on cars.
Steve Jobs was a fan of skeuomorphism. Under his direction, Apple software sported brushed metal textures, and the iPhone user interface was flush with skeuomorphs. Jonathan Ive, Apple’s current Senior VP of Design, finds it distasteful and is moving the company away from it.
I propose that software design has its own kind of skeuomorphism. When a software developer creates a linked list of data items, it has no metal links as in a chain. A CPU clock tick does not, in fact, make a ticking sound. A semaphore isn’t anything like a signalman waving flags around to communicate between naval vessels. A binary tree has a root, branches, and leaves, but it’s not really a … well, you get the point.
If Apple’s chief of design wants to scrub skeuomorphism from one of the world’s most widely-used graphical user interfaces, why don’t we software developers do the same in our design patterns? I propose the answer is simple: skeuomorphism in software design helps developers visualize and manage complexity — and, in software, complexity is the enemy. It’s the source of bugs, makes maintenance difficult, and makes software hard to use.
Imagine developing a real-time operating system. Trust me, it’s complex. Skeuomorphs help us manage that complexity. For instance, we speak of a thread having an affinity to a processor. Threads? What does sewing have to do with software? Affinity is an emotion. Yet, it’s an elegant way to express the idea that the elemental schedulable entity in a process always executes on a given processor.
In an SMP environment, code executing on one processor must sometimes execute a memory barrier instruction to flush cache, write buffers and prevent the processor from reordering write operations from across the barrier. Memory barriers are a key part of every operating system’s synchronization primitives — but there’s no physical barrier anywhere. It’s a design skeuomorph that helps developers create a mental model of very complex software.
Unlike Jonathan Ive, I come not to bury skeuomorphism but to praise it. It has a long tradition of value to software developers who desperately need to manage complexity. I have only one exception: can we finally stop using a floppy disk icon to mean “Save this document”? That particular skeuomorph’s time has passed.