Whew, May 2009 is my 10th year in technology. I got a late start so I'm a little older than some of my peers.
I've worked with quite a few veterans of the field and it's been interesting to see the different directions some of them have gone.
Management, where I am currently at, seems like the place where everyone wants to go when they get out of college. Unfortunately, the skills it takes to manage are often very different than the skills you need to code. The other harsh reality is that going into management is like starting a new career. In my case I went from a respected senior engineer with a long track record of success to a novice with no experience and no established credibility. That is a hard transition for some people and even two years later I miss the respect I had at my old position even though I love my current job.
Software Architecture is hailed as some kind of Holy Grail but it is a very different role than development. The good news is that anyone who is looking to advance their skills should be picking up some of the knowledge they might need to be an architect. However, to be good as an architect you have to understand the foundation at a deeper level. I guess the analogy that springs to mind is concrete. Developers know how to spread the concrete to lay the foundation, the architect knows how to MIX the concrete.
For me, these were my two choices and what it came down to was I knew I could be a mediocre to good architect or a bad to excellent manager. Even though the risk is that I could be bad as a manager I seemed more likely to excel so I focused on that path, while still learning some architecture skills because I do enjoy it and wouldn't cry if I ended up doing that instead.
Beyond that I know some people who just stick with development and they enjoy it. I don't see anything wrong with that except that it comes with some drawbacks. For one thing, there is a cap on the salary, but you can still make an easy 6 figures as a developer and that's still far above the median income in the US. The other, more severe, problem is that the longer you stay as "just" a developer the more likely you'll be hit with ageism.
The other route is something a friend of my pursued and loves. He is a Support Engineer. Basically he provides tech support at a high level. He gets to do some coding, solve problems, but isn't stuck just blowing code all day. Of course, he also has to talk directly to customers and that is not something most developers strive to do. However, he is very happy and he has done architecture and management.
The last option I've seen is that some people leverage their technology skills into a non-development role but stay in the technology field. Some people have studied to become sysadmins or DBA's. They can often pursue senior level positions even though they may be novices in their new areas. I often thought about doing this myself as I like working with data and being a DBA or working for a Data Mining company would have been great! Unfortunately, I never found the right opportunity.
I hate to say it, but more than any other prejuidice ageism takes the highest toll. I've seen some racism, but it's relatively minor and often easily countered. Sexism has been a problem in the past but we seem to be getting beyond it. I've seen people dismissed for their age and it is discouraging. When I've interviewed I don't worry about your date of birth, do you have the skills to do the job. Unfortunately, I've even had feedback from my managers, who are not spring
chickens themselves, about some candidates being too old to "work well in the team dynamic". They never overrode my decisions but I found that feedback very discouraging.