Arkanis A blog about random stuff, but mostly programming.

The Popularity Trap of Software Development

bigger-picture, programming, society

I've been talking to students about this for a few years now. But I've never heard anyone else talk about it, so it might be worth writing about it here. Or not. You'll be the judge of that. 😉

When programmers need a library (framework, programming language, tool, …) they often just grab a popular one. GitHub stars, NPM downloads, Stack Overflow posts or frameworks "everyone uses". After all, if a lot of people use them, they can't be bad. Right? I've head my phase of that as well.

But after a while it turned out to be… somewhat misleading. How do libraries become popular? Sometimes they have nice descriptions or promise a lot. Let's call that good marketing. I hope that makes it clear that you should not take that stuff at face value. After all, a pretty idea in a readme doesn't tell you much about what the code actually does. Or if it works out at all. Anyway, that is one dynamic leading to popularity and I hope everyone should have at least some resistance to it. Or at least understand that it's something you need resistance against.

Another dynamic is simply how popularity works in the internet. At least right now, but probably also way into the future. Search engines and statistics make stuff "popular" when people talk and write about it a lot. So, why would you write about a library? Hm, maybe the API isn't quite clear, so someone asks a question. Maybe it isn't clear at all, so a lot of people ask questions. Maybe there are bugs. Those need to be discovered, triaged, discussed, solved, etc. Maybe you have a "can do anything" library, that gets complicated once you apply it to something that isn't a trivial toy problem. Pretty much any usecase would need to be discussed. Known working recipes discovered, shared, fought over, the whole tribal shebang.

If you've been programming for a few years, you've probably seen that play out in many different variations. Competitions over GitHub stars between projects, fights over "best practices", stuff like that.

But you know what doesn't help much to make a library popular? If it solves the specific problem you currently have.

Sounds strange? Let's play it through: You need a library to solve a specific problem and through various ways you stumble upon a project. The readme specifies what problem the library solves, the assumptions that went into it and the limits where it breaks (when it should not be used). It's a reasonable fit for your problem and will work in your context. Nothing to ask or talk about here. The API is clear and simple, not much that can be used wrong. Again, nothing to ask about. After doing a quick experiment everything checks out. It works to solve your problem and there are no obvious bugs. Again, nothing to talk about. You use it to solve your problem and move on to the next thing you have to do.

How much would such a library be talked about? Maybe a bit here and there. Maybe someone would recommend it for a while after using it. Or maybe not. Maybe it just worked well enough and didn't leave much of an impact. A lone project page, a bit of documentation and a few posts about it here and there. But if you measure popularity by how much people talk about something, it would sure fly under the radar. At least compared to other libraries with a lot more unknowns that need to be discussed.

The first time I thought about that it felt very strange to me. Not at all like I felt it should work. Maybe one of those social heuristics evolved a long time ago that doesn't translate well into modern times. Who knows.

Anyway, what I want to demonstrate with that is that "popular" doesn't mean "solves my problem".

I can understand why people take that mental shortcut, though. Searching for a library that's a good match for your problem takes time and effort. Just taking a popular one? A lot less effort. And it gives you a handy excuse to justify your decision. In a world where we often have to work under pressure a strategy that can shave of days of work is attractive.

Another advantage: You don't have to understand much about your problem. Again, it saves time if you don't have to think about the details. Or you're new and don't know them and are afraid to ask questions (and are still in the phase where you conflate not asking questions with competence). I've met a lot of students who are simply afraid in those situations. And this is one way to deal with that fear. So there's also a big emotional component here.

But as anyone who has lived life for a while knows: Decisions have consequences. Those important details you haven't thought about? They will catch up to you. Sooner or later. If you're lucky sooner. Then you can at least understand what went wrong, fix it and avoid it the next time. If you're unlucky later. To late to fix. Or maybe you've moved on and don't realize the mistake and happily repeat it again and again. Or even teach it and have others duplicate your mistake.

If we really get extreme we can make an entire business out of running away fast enough. Have had any inexperienced "consultants" in house lately that told you how to solve your problem they don't have a clue about?

Ok, I've had my little rant now. Back to the topic at hand. So searching for a library boils down to:

  1. Understand your problem and what you need.
  2. Look for a library that does what you need. A simple as possible, as complex as necessary.
  3. Test and check if it actually does that.
  4. Repeat until you found one that fits.

And popularity doesn't much factor into that decision. Which makes it hard to find good candidates. But I hope by now you understand that discarding something because of an ugly project page or little activity isn't a good strategy.

For many students this is a very strange way of thinking. Sometimes I have the impression that our current programming society encourages using the fashion part of our brains to make that decision. And it takes some training to use the problem solving part instead. But hey, you have to learn it somewhere.

I think I'll leave it here. I've had a whole other train of thought about the synergies between all that and simplicity, but that will have to wait for another time. Or maybe never. At least the advantages of simplicity are well known compared to the traps of popularity. 🙂

react

nice meh bad surprised confused agree disagree

Comments

Newsfeed

No comments so far, feel free to write one. :)