If you are in the tech industry, you’ve probably had the experience of trying to explain something to someone in your life who isn’t technical (usually people say “to your grandmother” but once I had someone say “but what if my grandmother was Ada Lovelace?” - good call on stereotyping there). You will find that it can be surprisingly hard to explain things that, to a programmer, seem obvious, like “what’s code” or “what’s the difference between the browser, a web page, a server, and the internet, and why don’t the cat pictures load faster?”
This is because we have self-selected as people who are very comfortable with complex abstractions. Most of what we deal with in the world of software isn’t physical - it’s not even “real” in the sense most people would mean - it’s all “just” some weird math that only uses 1’s and 0’s, lots and lots of them. What do you mean there are “trees” in there? What’s a pixel and do you need different colored numbers for them? Because so many people who are good at this skill are in the tech industry, it’s very easy to think that *everyone* is good at it - after all, all of the people you meet daily are.
This means that sometimes you can design a feature or a product that makes a lot of sense to you as a programmer or abstract thinker, and when you share it to people around you, they will nod and say “right on”, but when you launch it, it will go nowhere because the mass of the world’s population can’t do the math in their heads to make it make sense, at least not comfortably.
This is a “programmer trap” - and these patterns seem to repeat themselves. Typically someone decides that all of the little edge cases and irrational features in a design are irritating, and it would be easier to just make one single abstract, composable, programmable model. Wave was a good example of this - and there is quite a graveyard of people trying to do “personal information managers” or “programmable documents” or things in this general area that try to take the necessary mess of some domain and make it into an abstract model, or add a “little programming” to make it “easier”. Slack is probably a good example of the opposite direction - rather than making a very abstract and pure program (“it’s JUST IRC!!”), they focused on real workflow, real user patterns, and let it be idiosyncratic where it needed to be, to work well. In some sense, this is “the rise of worse is better” but for products - complex and complete usually doesn’t beat simple and workable.
The only real cure for this is awareness - remember that things that make sense to you might not make sense to everyone, because you may have unique skills and you live with others of similar perspective. When programmers hear “you can write code to make it work”, they are excited - the rest of the world is either terrified or confused. It’s a very good reminder that user testing, even in the form of “explain this to the next person I randomly meet who’s not a tech person” is very valuable.
Look out for the traps!