This is the fifth fight in my series The Seven Righteous Fights. For an introduction, see The Seven Righteous Fights: Overview.
Affordance is what the interface makes easy and obvious. Affordances tell us all sorts of things about the tiny interactions we have with the world, and with software.
Most people talk about the affordances of hardware, which way your USB plug goes, things like that. But software interfaces also offer us affordances, with a big green yes button and a small grey more information button.
This picture is where I crossed the street to go to work. As you can see, the place that the sidewalk goes does not correspond to either the crosswalk button or the crosswalk itself. This is bad for the grass, bad for the mobility impaired, and a nightmare when the snow gets plowed off the sidewalk and in front of the button. I live in Minneapolis, we measure our snow in feet. In the winter, the crossing button can be literally covered by a plow drift.
This is a bad affordance, but sometimes you are doing this with software design, where you are putting the sidewalk “where it belongs” and not where users need it.
The righteous fight in affordance is to figure out how to make it easier to do the right thing than the wrong thing. Sometimes the wrong thing is depositing your check to the wrong account because the app has tiny buttons on your phone. Sometimes the wrong thing is that it’s easy to harass other users without consequence. Whatever your intentions for the thing you’re building, users will see it a different way.
One of the things that I classify as affordance is the privilege level it takes to do something. To test this, perform one of your user’s daily tasks.
Now step your permissions down to the level of ordinary mortals. Oh, is that less fun? Are there more hoops and confirmations and things you need to do? Can you even do the job without advanced permissions? Setting excessive security or blocking on ordinary tasks is an affordance and security anti-pattern. It means that people demand elevated access, and makes them and your organization more vulnerable to accidents and malice.
This is a homunculus. It is a weirdly shaped human because the size of the body parts represents nerve density and sensation, instead of physical appearance.
As developers, we often look at things in terms of the architecture, or where the data is. But the user has a really different idea of what is important, what gets used most. Our software needs to reflect what they are actually doing, not what is most logical to us.
Affordance is our opportunity to nudge users into patterns that they will find useful, rewarding, and not hideously irritating. We can only take advantage of that opportunity if we are thinking about their needs as well as our own.
This blog post is part 5 of my Seven Fights series. You can hear me give this talk at SpringOne Platform (August 1-4) or Abstractions (August 18-20).
O'Reilly Software Architecture/Velocity
The Lead Developer London