The abstraction trap
Abstraction - the generalization of a single instance into a repeatable, sometimes parametrizable pattern that can be reasoned about - is the bread and butter of the technical world. Think for a second about the levels of abstraction that needed to be climbed for you to read these words! Every computer in the world fundamentally only does one thing - binary math! That's it. But we use abstraction to turn that math into letters stored in a database, bits of an internet packet sent to a server and encoded on a magnetic medium somewhere, finally even small colored dots on a screen that look like the letters we want.?
You read that paragraph and probably thought "duh!" right? It is pretty obvious...to us. And that's really the point of this letter. If you've selected into and been successful in the tech industry at all, and most particularly if you work closely with software, you have a very above-average ability to consume, internalize and use abstraction. You're likely very comfortable with it.?
But most people aren't. How often have you heard someone say, "oh I just don't get computers at all" and you laugh a bit at them because it just doesn't seem that hard to you? We've all had moments where we don't really understand why something is so hard for someone to understand - almost always, it's about some kind of abstraction that's hard to handle.?
领英推荐
This can leak over into our design of software very easily, and it's related to the "programmer trap" we discussed earlier. It's very much not enough to test software on people in the industry who not only have this ability to parse abstraction but who also are insiders who understand common design patterns (and IT professionals are "in the industry"). Often, when I get stuck with a piece of software, I can think "ok, what was the programmer probably thinking when they built this" and it can help understand. Most people outside of the industry can't do that - they need something that has a more familiar narrative flow, that asks less of them in terms of complex mental models.?
if you like, you could think of this as a form of accessibility design. If we were, for instance, designing software that was very difficult to use if you were colorblind (which we sometimes do inadvertently), the correct response wouldn't be "learn color" any more than the correct response here is "learn abstraction".?
The right answer is always to go to where the user is and to solve their needs. This is easy to do when we can understand and feel those needs ourselves. It's much harder when we have our own biases and blind spots that are more common in the industry - and in that case, we have to take extra care to design for people who are less comfortable with abstraction than we happen to be. This means lots of user feedback, UXR, constant revising of rough edges, good telemetry to see where people get lost, all the usual suspects.?
EM at Microsoft | Forbes 30u30 Asia 2021
2 年Hi Sam, One of the times, I faced difficulties was when I am trying to understand a new design & I kept on thinking - is it me who is not making sense for this or the dev/designer had this abstraction purely to show off the future proofing/generic nature of it? 4/5 I was simply not able to understand the rationale bcz of the blind spots or just less visible horizon(from my POV) but lately I've seen people overcompensating a lot as well when they get to know what they have been missing.
CEO / Creative Director at Wuzzals
2 年As a non-programmer I have always wondered how many abstraction layers are there from the chip to a full application. Thanks for posting!