Any successful software company is going to consist of a thin layer of developers, creating software, spread across the top of a big abstract administrative organization.
The abstraction exists solely to create the illusion that the daily activities of a programmer (design and writing code, checking in code, debugging, etc.) are all that it takes to create software products and bring them to market. Which gets me to the most important point of this essay:
Your first priority as the manager of a software team is building the development abstraction layer.
The Development Abstraction Layer, Joel Spolsky, Joel on Software, April 11, 2006
Having done both jobs, I agree with Joel. Most programmers work best when they can just get on with the job of programming.
That's one reason why promoting good programmers into management positions is not always such a great idea. Management and programming are very different activities.
Good managers, like good coders, are hard to find. They ought to be nurtured and looked after - the managers and the coders.
Again, having done both jobs, I find myself wondering if I wasn't a better manager than coder. Whether I was/am a good manager, I leave that for others to answer. I do, however, feel pretty confident about my flexibility, and my ability to help get things done/fixed.
Anyway, back to the point of this post: when a team works well, everyone does their job well, with their colleagues in mind. Things begin to happen like magic. A magic that is hard to replicate without the whole team. Even harder to "make" happen without the cooperation of every team member.
(no subject)
In a Hierarchy Every Employee Tends to Rise to His/Her Level of Incompetence.
Thus it follows that a great programmer will be promoted to become a so-so manager and then to a position that they are completely unsuited for--I think it is much more difficult to manage people than to a specific job.
The problem is when there is an incompetent manager, then you get to do your job and manage them -- while making them think they are managing you. I had 2 phenominal managers (division director and branch chief at FEMA -- they were so good that I still feel loyal to them) and understand the reason behind paying a good manager a good salary. That is not to say that there are many managers I know of who fully deserve theirs. I've had some pretty crappy managers.
(no subject)
A good manager is gold, and so is a good programmer.
Heirarchies are necessary, not the leat because that makes it clear who is ultimately responsible for stuff, but also because we're tribal/pack animals - we need to know where we fit in the scheme of things socially. But that doesn't mean an exceptional programmer has to take the "management track" to advance financially or responsibly in an organisation.
At least, it shouldn't, anyway.
I was probably thre wierdest manager in the whole of the organisation at the time. Once I got over my 'need' to micromanage (which was largely a consequence of fear) I think I did my job well. Just wierdly :)
I sometimes wonder how my life might have turned out if I hadn't chosen to drop everything to become a poor law student.