As someone who has moved a number of times back and forth between management and development, perhaps I can shed a little insight.
First of all, the two are, really, completely separate disciplines and require a completely different set of skills. Programming requires a high level of attention to detail, a very narrow focus on the specific code for which you're responsible, and a personal drive to be the very best there is. I've never known anyone I considered a top-drawer programmer who did not demonstrate, often in the extreme, all three of these skills.
Management, on the other hand, requires that you take a bigger-picture view. You must be able to look at an overall system, divide it into reasonably bit-sized pieces, decide who has the right skills for each piece (you don't stick a networking server developer on a UI piece, for example), and then follow through as the parts are developed and delivered. You must be able to tell programmers when their code is good enough, and when they must spend the weekend because it's not anywhere close.
If you're going to be a manager, you'll need to answer the following questions positively:
- Can I look at the big picture and
trust others for the details?
- Am I comfortable monitoring and guiding
progress, while keeping in mind that
I have a schedule and set of quality
gates the product must meet?
- Am I
willing to accept responsibility for
the economic harm the company will
suffer if I fail to deliver what I,
on behalf of my team, promised?
- Will
I be able to accept that
responsibility and protect my team,
or will I blame them for the failure?
- If I have an under-performing team
member, will I be able to do what is
necessary?
- Realizing that
recruiting, training, and other
direct costs are significant, will I
be able to develop a plan to recover
the individual?
- If I am
unsuccessful in recovery, will I be
able to terminate the individual,
realizing the impact that would have
on his life, reputation, and ability
to find additional work?
- Realizing
that there will probably be no
schedule relief if someone is
terminated, am I willing to tell the
rest of the team that they have to
step up to the plate?
- Think about the
worst review you've ever had. Would
you be able to deliver that review?
- Would you be able to tell someone that
they're not getting a raise this
cycle because they didn't perform?
- If
the company has layoffs for any
reason, will you be able to let good
people go?
In short, management is about taking care of your people. For some this is simply a matter of pointing them in the right direction and making sure that they have the resources they need. For others this means making sure they have training, books, and people they can use as resources or mentors. In some cases it means developing and implementing a personal improvement plan.
People think that managers just sit and grab glory. Not true. Good managers are always fighting for their people. A good manager is promoting their good people and doing their best to shore up those less capable. Are you prepared to take these steps?
Can you go back? Absolutely. I've done it at least 4 times. I've just recently moved back into an IC role from a management one. The argument that programming skills erode is crap. Good programming is a discipline. You may have to train up in a new language of set of tools, but good design, implementation, and debugging skills don't change significantly. I'm still using some of the tricks I learned 30 years ago when I was coding with punch cards, and I'm using some I learned yesterday.
Your skills are yours. Maintaining them is your responsibility. Letting them "atrophy" is a decision you make and for which you must take responsibility.