(Originally published on meta.stackoverflow Stack Exchange by Jon Ericson.)

As a preface, I haven't been a regular Stack Overflow user for quite some time. I can't really claim to be an outsider either since I got hired by Stack Exchange. Maybe those two cancel out?

The goal of Stack Overflow is:

Give programmers a place to get answers to their questions.

Now every big-picture goal like that has to have dozens of subgoals. For instance, comments are designed to prevent the problem of tangential conversations sidetracking people from writing or finding answers. Closing duplicate questions avoids needlessly duplicating answers. Voting sorts answers on the page according to usefulness.

I bring it up because it's common to confuse subgoals with the main goal. Every time I read emails sent via the "contact us" link, I read about how one of our subgoals prevents the user from getting their questions answered. The authors assume Stack Overflow is failing because they are no longer able to ask questions. But the goal isn't for every programmer to be able to ask any question they like. That's shortsighted.

Purely anecdotally, every programmer I've met (friends, family, co-workers, etc.) knows about Stack Overflow, love the answers they get, and yet about half have never even created an account. For them, Stack Overflow succeeds in providing answers simply by being the first, most-reliable, and highest-quality result returned by Google. I've personally had questions that I haven't bothered to submit because I find the answer already exists on SO.

Objectively, the data suggests that people are getting their questions answered:

Answer votes by week

The longterm trend is that each year more people have indicated they were helped by the sum total of answers on the site than previous years. (The peak around the first week of March seems to be seasonal just like the winter trough.) Nothing lasts forever, of course. But for the moment, there's no better place to ask programming questions.

Which brings me to an important subgoal: stabilize and grow the source of answers. Despite hundreds of thousands of answered questions we already have, there are surely millions more that have yet to be asked. And that takes people; lots of people. Just under half of the questions that have been answered unequivocally were answered by people who only managed the feat once. At the far end of the spectrum, a handful of users contribute thousands of accepted answers. A healthy ecosystem requires both.

A few years ago, a co-worker approached me to ask how I got so much reputation on Stack Overflow. My answer was two-fold:

  1. I got lucky and joined during the beta. (Luck should never be ignored.)

  2. When somebody asked me a programming question or when I ran into something strange in the course of my job, I made it my habit to see if the question was already asked on Stack Overflow. Then I'd either provide an alternate answer (if possible) or self-answer the question.

Why did I do this? Partially it turns out that providing solutions to common problems (and if you've experienced it yourself, it's likely others have too) is a great way to get reputation over many years. But it also made me feel good to think that I'd reduced the odds that some other programmer would get stuck on the same problem I did. My personal goal was:

Help other programmers get their jobs done well.

Due the the nature of my job, I had lots of downtime. Rather than waste the time on something selfish, I tried to contribute something positive to my profession (and learn a thing or two myself). I pictured some other guy in an office like mine trying to get home to his family, but needing to fix a bug first. Then I imagined him (yeah, kinda sexist, I know) finding my answer and being able to leave work with a feeling of success. For all I know, this might even have happened at some point.

Please direct comments to the original post.