Daily #31 Affordance and Developer Experience

I read The Design of Everyday Things 8 years ago. There is a story/lesson in that book that still sticks out in my mind.  It's about door knobs. And how the design of a door knob can indicate how the door works (whether you push or pull to open). A good design communicates this information. This is essentially the concept of affordance. But we have all encountered plenty of doors where it isn't clear whether to push or pull.


In that case, we try both ways and eventually get the door to open. It's no big deal. Except when we don't get it right, we do often get the 'oh I'm an idiot' feeling. And this the point the book makes. Users often mistake poor design for their own lack. They accept bad design and attribute their error to themselves. "I'm an idiot, I don't know how to open a door knob haha."

This point has strong parallels to developer tools/frameworks and the role of developer experience in my observation. There are some developer tools (e.g. web frameworks) that have much higher affordance than others. Certain tools actually prioritize good design. The kind where you can tell what to do intuitively, and then when you do something what you expect to happen is what actually happens.

You know the joke about writing hello world in Java vs. Ruby or any interpreted languages with a REPL (though I recall that Java9 introduced a REP but I digress). The point is when developer's encounter poor design, they (even experienced ones) think 'oh it must be me. I'm doing something wrong. I can't figure this out'.

Early on, many developers take pride in (incidental) complexities in their environment and their ability to grapple with it all. But there comes a point in every developer's career where you care more about not wasting your time than proving that you can chase down some gnarly (but avoidable and unnecessary) issues.

On a related note, I strongly dislike intentional obfuscation. The kind that intimidates newcomers. The documentation that reads like it's written in a foreign language and requires you to look up ten other things. The type of explanations and definitions that make perfect sense if you already know what the Thing is. The poor design in this case does more harm them making someone temporarily feel like an idiot for not being able to open a door. Some newcomers, instead of thinking 'I can't figure this (one thing) out', conclude that 'this (programming as a whole) isn't for me.'