Stack Overflow is a really great source for programming knowledge and troubleshooting best practices for a variety of software issues. It used to be a great tool for generating it, too. I've been using it since the Fall of '08, and started contributing a few months after. I got out of practice in participating with the website directly, and mostly end up on it at this point based on Google searches.  I wouldn't be surprised if many of its one-time daily users now interact with the site this way. I think the amount of growth it can achieve has hit a plateau, and its user interaction may begin to take a hit as a result.

I'll have to preface what I'm about to say with, of course, the disclaimer that this is pure and unabashed opinion, based entirely on my anecdotal experience as a user of the site. That being said, let me outline the major reasons why I think Stack Overflow has moved on from an early phase. At one point, it was rapidly growing, and a truly exciting community to participate in. Now it's just a useful resource where most of the important problems and questions have already been addressed.

Scarcity of Important Questions
When Stack Overflow began, there was a lot of room for participation from its users.  There was a low chance of creating a duplicate question, and a low chance of a correct or accepted answer already being provided.  Part of this had to do with a growing user base, and part of this had to do with where Stack Overflow was as an application -- it was incipient, and still growing, externally bootstrapping knowledge from its users. Users had an incentive to be the first to answer, and give a thoughtful answer at that -- growing your reputation amongst a community of peers. Reputation is tallied by points generated by up-voting questions or answers, or having your answer accepted by the question-asker.

There has been plenty of time since SO's beginning, and most of these questions have been either answered authoritatively or debated to the point of stalemate. If you are looking for appropriate design patterns for web development, or the best way to parse a URL in X language, or a regular expression that solves a popular problem, the answer is already there. It's not worth fielding a question, and if you do, your submission will often be closed as a duplicate by an administrator, with a link to a very well-addressed question worded nearly the same.

A Community of Specialists
As more developers find themselves unable to contribute to already solved or discussed problems, they must rely on their more specific skills for any opportunity to answer questions. In certain communities, (*ahem* .NET *ahem*) this is totally fine, and there are enough entrenched specialists to create a sort of 'feedback loop' -- any esoteric questions they may have, someone else may have the answer for, and vice versa.

If these niche communities don't have a critical mass of users asking interesting or useful questions, you get the opposite effect: a sort of ghost town of sparse activity.  In these neglected pockets, questions usually can be classified into a few fairly useless categories. You have the "what is this bug idiosyncratic to my machine setup" questions, which don't really do much for the actual software development side. You have the person asking obvious questions that could be answered by a quick check of an online manual. You also have the person asking you to basically do a specific implementation of something for them. These are time-intensive questions, but they are often the only ones that won't get poached by someone else while you're writing your answer, and are the best chance to actually improve your reputation. Or how about the "how do I implement this one jQuery plug-in that maybe 30 developers have ever used on my site" people? And then you have all the people getting their questions closed because they were already addressed. These are often in combination with each other, with optionally indecipherable Babelfish English. The worst, though, is probably the users who have a question about a bug that's really only a code smell. They're not willing to accept that they're approaching the problem the wrong way, and refuse to accept a thoughtful answer and helpful recommendation if it involves too much work or isn't what they want to hear. This isn't usually a problem in the higher-traffic communities, because the amount of users reading questions and voting on answers is high enough that the opinion of the question-asker doesn't really come into play. Less trafficked disciplines become too dependent on answer acceptance.

So that's too bad. Every month or so I'll look up questions about natural language processing, the Zend Framework, or other things I'm interested in, only to find myself in a desert of less than useful questions -- not useful for me to answer, not useful for me to read.  And all the stuff on the front page, of course, is for framework- or implementation-specific Java and .NET, and getting a lot of action. Of course this is to be expected, right? But it didn't always used to be that way -- I swear.  So how did it get that way?

The Fatigue
Stack Overflow uses 'reputation' points and an achievement system to promote high activity among its users.  I think that as the opportunity to increase your reputation and your number of achievements dwindled, so did a lot of user activity. There's a plateau you hit there where you either have to devote way too much time to help other people do their work, or you just fall out of it. When you do, you don't have a lot of incentive to get back into the game.

Early in Stack Overflow's history, a need for knowledge engineering and a community with growing rules skewed the amount of reputation points towards early adopters. Games of code golf, "what's your favorite programming comic strip" threads, and "What language should I start learning now" threads made it way too easy to attain points without actually demonstrating real knowledge or expertise. Obviously, there are users with tens of thousands or hundreds of thousands of reputation points who actually earned most of them by demonstrating expertise. But how do I tell them apart from the people who had the funniest joke about Ruby programmers, posted a few Dilbert comic strips, and then went after a series of low-hanging fruit with well-formatted responses?

So I think it's likely that the amount of repeat users on Stack Overflow will start dwindling soon, if it hasn't already. I don't have any numbers, but as a former heavy user, it's just a hunch I have. It's a well-developed resource which in some way baited its users to expend their time much in the same way popular video games do -- with scores and achievements that don't really amount to very much. It's all fun to get them, until the amount of effort you have to expend doesn't merit the sense of reward.

How could SO combat this? There are maybe a few things. They could revise their tagging system to associate reputation with tags, allowing people to be "JavaScript Expert" or "Ruby Guru" based on the amount of points they amassed on questions with those tags. That might help to revive participation in certain sub-fields of software development.  They could retroactively subtract points from questions deemed to have no educational value.  They could create alerts that would let people interested in certain aspects of programming know that there is a brand new question in their field that pertains to their know-how, exhorting users t
o lend their expertise, instead of hoping they're browsing unanswered questions of a certain tag at the right time.

But ultimately, I think Stack Overflow has sealed its fate. It has successfully replaced Experts Exchange, and it's got great search engine rankings. People aren't going to go to Stack Overflow anymore; they're just going to go to Google. I think that's a community killer in and of itself that may be worth putting some thought into.

EDIT: One commenter points out that Stack Overflow already does have 'tag' badges for specific areas of expertise.  It's weird that I've never noticed these before, and I'm wondering when they were implemented, and how many of its casual users are aware that they exist. Of course, that doesn't alleviate the fact that questions are rarely tagged completely. Does a question that involves how to implement something in Spring count as a Java question? Should a person be considered a Java expert if they've got Spring questions in the bag, but maybe not so much with other packages? And what about vice versa, where a question is really a Java question, but is only tagged as having to do with Spring? Just some observations I thought I'd throw out.