Remember how your parents would try to use Windows 95 or something like Norton Commander. They'd copy an app shortcut to a floppy disk and be amazed how much stuff they were able to put inside. All the games, and lots of space left! And you'd think they don't understand anything at all, they are just clicking pretty much randomly, hoping this magic machine would at some point understand them and do the right thing. That was the time when programmers were building products for programmers.

It wasn't awesome, but it was sincere. Nobody was pretending that software was built for regular people, and the consensus was: in order to use a computer you have to learn something. Or know someone who can help.

Today we're living in times when programmers are building products for people believe that they're building products for people.

This isn't awesome and it's not sincere. Today all of us regularly feel like our parents with Windows 95. You have to learn or, more commonly, just remember how to use a certain website or an app. And I'm not talking about small pieces of software, I'm mostly talking about huge, global products: Google's user interfaces are chaos and madness, Facebook is madness and mess, Android is mess and vertigo. Trying to do something non-trivial, not the most basic thing reminds me of good old pixel-hunting quest games: What if I press here? Is it a button? Can I drag this? Oh, this is text, but it's clickable, and this is a button, but it looks like a text…

Using these interfaces on a daily basis feels like a dream to me. You know, like in a dream you're trying to run, but it's futile. And everything changes chaotically, and nothing makes sense. And it's so nice when it rains, but sausages are going to burn. You know. Meanwhile, Google and Facebook are doing AB-tests: “hmm, if we make this button less button-y and move it to the left, more people would click it”. So we get an update to a bad UX.

It's hard to build painless products in general. But it's especially hard for programmers to build painless products because in order to become a programmer we all had to endure suffering consistently. This is the unfortunate reality: you have to eat lots of shit to become a software developer. So we have a higher tolerance to UX pain, and this affects the way we design products and interfaces.

I'm talking about our tools, of course: languages, libraries, frameworks. You'd like to get into the creative process and explore interesting problems and abstractions, but first, you have to deal with versions, dependencies, compatibility, bugs, updates, and other accidental complexity. This is a vicious circle because programming tools are created by programmers.

Of course, we aren't doing this because we love pain. Lots of progress is made all the time. Unfortunately, often, users pay for this progress. Architectural solutions based on programmer's convenience affect end-user experience, design, and UI. My favorite example is Atom. A text editor. Still works with visible lag on an insanely powerful multi-core, multi-gigabyte machine. This text editor performs worse than one would 30 years before. Because Electron is a nice development tool.

Electron is not bad, the situation is bad. The situation where Electron is a good choice is pretty bad.

We can say bad things about programmers, rant about how we can't write code anymore, how frontend web developers are insane and npm is considered harmful. But it seems like on the macro level this is just a transition period. Some day we'll get to the point where programmers would build products for people, and, hopefully, we'll think of it as “people are building products for people".