Google any question you ever have about programming and the first results will probably be from Stack Overflow, with great answers from outstanding developers inside. Thousands if not millions of devs use it every day to get unstuck and fix that weird bug, which makes it an invaluable resource that most devs wouldn't even imagine how to live without.
But if you ever dare to ask or answer a question, you'll find yourself engaged in an unbelievably toxic environment wondering how such a monster could have ever grown so massive.
Here's my assessment of why this happens, what they could do to fix it, why I believe we shouldn't just go along with it, and what alternatives we could use instead.
It's fairly clear that the dominant position in Google's search results is a key to their success, which can be frustrating as you'd usually get old results that perpetuate bad or deprecated practices. But that's just a quality issue, the real problem is the behavioural ones they create in order to get there.
For instance, duplicate content was one of the big no-nos of early search engine optimization. Stack Overflow therefore puts a giant effort on avoiding duplicate questions, with a built-in search that suggest duplicates as soon as you start writing your question (which is great) and incentives their users to mark questions as duplicates (which is not).
At this point, any new user that dares to make a question bellow the level that'd make the language creator go "uh, guess we should spend the entire next month looking at that" will face a wave of duplicate question flags, low-quality marks, and downvotes, which will ironically get the account below the minimal score required for posting questions and result in it getting functionally blocked. Forever.
Let's think about that for a sec. You, as a newbie, ask a question that seems reasonable to you. Instead of getting answers, you get functionally blocked from using the website until you gain score, which you can only do by answering questions, which you don't have the knowledge to.
Doesn't that seem like a vicious circle?
Furthermore, if you are a stablished developer and decide to give back to the community by trying to answer some questions at SO, you won't fare any easier. Dare to answer what other considers a low-quality question and you'll get downvotes. Dare to answer a great-quality question with a great-quality answer and you'll... still get downvotes, because...
People with a bazillion points will gladly get a -1 from downvoting someone else's answer just to improve the chances of their own's from being marked as the accepted one. Really. There are people out there downvoting every other answer they deem as a threat to their dominant position in the ridiculous hierarchy of meaningless score.
They'll downvote, flag, name-call, and reply in the most condescending ways. They'll abuse you out in every possible way just to keep being in the top 1% overall, to gain reputation score for the next privilege (yup, that's their term) or to claim their next badge, many of which are awarded from being a toxic %#$&!
There are badges for reaching a number of raised flags (which results in people flagging everything), for reaching a number of edits (which results in people editing everything), for deleting your own post with negative score (and that's literally called peer pressure... seriously, I couldn't make this up) and for visiting the site without skipping a single day. Ever. Which leads me to...
The rewards system is incredibly fine tuned to keep users engaged, and seems designed by an evil psychologist or a master game designer (is there any difference between both? :p)
If you make it past the initial backlash of negativity and toxic behaviour, you'll find yourself bombarded by small dopamine rushes from raising scores and badges acquisition every time you answer a question or reach a milestone.
The issue is that it goes way too far, with each tag having three or four people literally addicted to it. I'm talking about well-intended, incredibly knowledgeable people that spend every waking hour overwatching a tag, racing to be the first to answer every new question and have their dose of +10s to survive the day.
They've developed strategies for it too: normally they'll answer the question in the shortest possible way to be the very first and get their question marked as accepted in case the author was watching, then immediately edit it for clarity in case that they were looking for a better one, and finally another edit formatting it to be the prettier and get attention whether is was the one marked as accepted or not.
These people are pretty much creating 99% of SO's content. They are working their souls off for the company, without receiving any real compensation, and spending so much of their time on the site that they probably can't even hold an actual job, despite being outstanding devs. And don't even get me started on how they treat their (also unpaid) moderators...
I'm not one to make complaints without pitching a solution, so hear me out... the issues behind SO's toxicity shouldn't be too hard to be worked on.
Removing downvoting for good. Really, there's no benefit for it. If you think something shouldn't be on the site, flag it as such. But downvoting is hurtful. Our minds tend to weigh a negative feedback far heavier than a bunch of positive ones. Even if the downvote means -2 score and the upvote +10, most people will perceive an overall negative experience from getting one or two downs in a sea of ups. And that sucks.
Putting a limit on the number of daily answers per user. This will prevent addictive behaviour and give upcoming devs a chance to compete with the ones dominating a topic. And I mean compete in the most loose of meanings, as it will also lessen the hierarchical aspect.
Reworking the way questions from new users are handled. Seriously, it seems absurd that trying to ask a sincere question unequivocally results in your account being practically banned. Make a sandbox for new users, improve your duplicate question search system, separate the spam from the well intended newbies.
Remove policing incentives. Flagging a question should be a last resort, not an encouraged behaviour.
I've seen them speak a lot about trying to fix the toxicity in the recent years, with a new code of conduct every other month and positive articles everywhere, but no changes to the system itself.
Either they're unaware of their system being the issue, or knowingly taking advantage of it while putting down some nice words to wash their guilt away. Considering how masterful their psychological tricks are, I have a hard time believing it's the former. Therefore...
Yup, it's comfortable to pick the first result at Google, and that's usually Stack Overflow. But by doing so, we're enabling and contributing to this behaviour.
That's why I choose not to use Stack Overflow, and why I believe it would be better for everyone, even themselves, if more people did the same.
Not only have I stopped answering questions there, I do my best to avoid getting any trafic into the site. I deliberately avoid clicking in their search results (and I use DuckDuckGo that luckily doesn't seem to be so addicted to SO as Google to begin with), which usually makes for better solutions anyway, cause...
Sure, there's a place and a time for simple questions / answers. SO-driven development is a term we like to joke about. It's a quick solution that will get you unstuck. But there are better alternatives that will rocket your carrer forward:
Ask in a more productive, welcoming online community such as DEV.to. The very nature of DEV's system incentives good behaviour, but they really make an effort to get it to the next level, and it shows. Everywhere I look, there's a little detail helping to build a positive community.
But there are all sorts of tools for questions out there. GitHub issues themselves can be a great place to learn (sure, some projects are not as welcoming as others, but GitHub at least has a guide to build a good CoC). Even Twitter has less toxicity than SO, and that's saying something.
Try browsing through the documentation. It can be more troublesome or even frustrating at times, but it'll help you truly understand the language / tool. It will give you super powers.
Reach out to your local communities. They'll be glad to assist and will help you build the connections, which at the end of the day is the best way to get great job opportunities, participate in meetups, even start your path as a speaker or author.
As you can see, going with alternatives will not only help you fix that particular bug or guide you through a how-to process, it will do so in a much more positive vibe and help you boost your career with knowledge and connections you wouldn't get otherwise.
And if you're in a position to share knowledge and answer questions, please don't do it on SO. A personal blog, DEV, twitter, anything else is a better platform. Which reminds me, I regularly blog about web development, mostly CSS stuff, and share the links at my twitter, so you can follow me if those topics are of your interest ;)
Let’s build a better web together!