At 95% of companies, there is zero career development and advancement once you become a "Senior Software Engineer". Fix that and you'll see more engineers stay put (where they're likely happier and more productive).
At 95% of companies, there is zero career development and advancement once you become a "Senior Software Engineer". Fix that and you'll see more engineers stay put (where they're likely happier and more productive).
1) Pure technical people are under appreciated and in general under compensated in most organizations. Often management doesn't understand how important they are.
2) Good managers/management are under appreciated by most engineers. It is hard to measure quality in management and it is one of those jobs that when you're doing it best it appears like you're not doing much as you're avoiding bad projects/crisis in the background and putting your people forward to make sure they get their credit and are enabled to get their work done.
I'd like to see some more courses to help technical people be better at management as it isn't something you'll necessarily be good at just because you're really smart. I'd also like to see a technical 101 course for management types so they can better appreciate their true tech talent.
On a side note I thought Havard's article about management research at google and related hacker news comments were interesting. Most management philosophies I've seen weren't in the tech space and I'm not sure the production line and sales team techniques transfer over to software. https://news.ycombinator.com/item?id=6762222
I think that good management realizes that things will end badly for them if they don't compensate employees well, but I for one though have never seen a corporate dashboard that tracked how fairly the developers are being paid. Management often seems genuinely surprised that they can't just replace the talented technical person who left and that they can't hire top talent for median wages.
Oh, the irony!
Can we just agree that any job that require expert judgment of context-rich situations to take decisions - versus the raw application of fixed rules - is simply not suited to Taylorist evaluations???
I'm not sure what entices a developer into pursuing management. As the above post pointed out, they didn't see a viable career path. I'm going to guess another reason is that many are fed up with how things are currently being done at their workplace, and they feel they can do a much better job than their current manager. This was my case.
Maybe the next statement is a little naive, but if you want to make things better, than just do it. Insert yourself wherever possible. Learn what you need to learn. If you end up hating it, at least you tried. It's a lot of effort to support yourself, but it can be well worth it. For me, I was able to introduce a Wagile workflow for our team, which had dramatic effects in just a month. I'm now actually starting to do product work as well as transition everyone into a full Agile approach.
Doing management right doesn't mean that you no longer are there at 8 PM. It means that you're there at 8 PM more often than any one of the people under you.
If a primary purpose of managers is to "shield subordinates", then you have a much bigger problem within your organization.
As for job security, I guess I'll find out eventually. My gut feeling is that in software companies, it's easier to get laid off/fired as a manager, and it's the opposite in companies where software/IT plays a peripheral or supporting role.
I don't need anyone to tell me to keep working on my TODO list. On the other hand, someone who grasp the big picture is useful to have around to tell me in what order to tackle the task in the TODO list. Its even better when said someone has the clout to go poke a 3rd party that is blocking me so I can keep working on the TODO list.
But the very best managers I have had are the ones that are willing to bite the bullet and say "No, X cannot go into the TODO list as it is now. Let's work together to define what realistic actionable items need to happen for X to be accomplished and then we can put those in the TODO list."
Half of a manager's job is justifying the importance of management to the employees, and the other half is justifying their own importance to their superiors.
Let's put it this way. I have never been kept around long enough to see my own manager get fired. And I have been through 3 mergers.
Managers manage. They don't wait until there's a fire and then start running around tossing the blame ball. Boss's do that.
Both of them are distinct from "boss" as the grandparent describes it, which is usually what happens when you get a manager who lacks empathy, awareness, and flexibility. Both leader and manager are highly cognitively-complex, pro-active roles that require constant information-gathering. Boss is what happens when you get someone in that position who lacks the confidence or skillset to stay on top of all that information and then reacts through command & control techniques when things go wrong.
That sounds like a boss to me (and not just because you used an unnecessarily gender-specific word ;). One of the anecdotes in the article is about this person, as a manager, acting as a listening board and ultimately conduit for an engineer when discussing the importance of a specific project at Twitter, and raising questions that came from that engineer that ultimately resulted in the project being cancelled. I think that advocacy role is important management – where the manager advocates both up and down (and ultimately you can't "tell" people what to do, you can only fire them or convince them, so it's "advocacy" both directions).
In many companies I see more undermanagement than overmanagement, so starving out the management track doesn't sound like a great strategy. And if a company is going to have better career development and advancement, it's managers who will make that happen. The pithy answer is "why don't you become a manager so you can fix that?" – and maybe you don't want to and that's fine, but you should hope that some other enlightened person chooses differently.
Re: advancement: to have greater impact than a Senior Software Engineer you need to do more than hack or stay late to fix bugs. What we define as "management" might not be the best way to do that, but it's got to be something. And at a certain point impact based on individual skill is hard to scale. I don't think we have a very good model for what it means to be more than that, so there's something precarious about the upper levels of the technical track. I recall seeing an article describing the developer equivalent of "The Wolf" (the character from Pulp Fiction), and have encountered people in that position; it's kind of like a wildcat manager role, diving in to fix problems that are typically both technical and organizational. There might be other models of what it means to go beyond Senior, but I think they aren't as well understood as they should be. And a lot of them will look somewhat like management because a large component is doing work that makes other people more productive.
Often, organizational and technical challenges are intertwined. We become susceptible to certain technical pitfalls because of the unique weaknesses of our organization and its technical leadership (or lack thereof). I concur that many senior engineer roles will look like management. One thing that distinguishes them is that the senior engineer is not involved in the minutiae of HR decisions that line managers make for their employees (salary & promotion, approving vacations, etc.) nor in the broader allocation of corporate resources that consumes so much manager time, but rather on high-level but still distinctly technical tasks.
In my industry (power engineering), it is very common to see giant engineering companies that have gutted the senior engineer role. They are made up of hordes of interns and junior engineers and lots of hotshot bosses and nothing in between. The quality of work they can produce suffers noticeably.
For example, I have zero interest in career advancement. I just want to draw a paycheck so I don't end up homeless and so I can afford to buy the occasional cool gadget. It'd be nice if my work was interesting so I'm not completely bored while I'm working for my paycheck, but advancement is definitely at the bottom of my list of what to look for in a job.
The bigger problem is that most companies view "engineer" as "implementor of ideas that come from the business". Hence, all that Agile/Scrum bullshit in which engineers just churn tickets, rather than making meaningful technical decisions and building projects of increasing scope. No one who has any leverage and talent wants to work in that way. This becomes self-perpetuating, because even though there are good people who stick around (usually, with kids in expensive private schools, or uninsured sick relatives) the assumption becomes that good engineers leave after a certain point and, thus, that anyone left isn't any good.
For me, I only enjoy coding if it's part of a bigger whole, and if I am proving something in doing so. If I'm stuck in a ticket shop and can't leave for 2 years for some reason, I'm going to manage (preferably officially; unofficially via aggressive delegation if necessary) because I was done with that junior-level business-story coding several years ago. I graduated out of it long ago, and I won't be put back there like Billy Madison.
Good technical people at large companies (ran by non-Technical management) are often undervalued. I see over and over again how an engineering team gets a non-technical PO/Manager - who is just a very bad proxy. They can't bring any important insights into technical products and can't easily fix inter-team dependency. That's why all Google's APMs are technical (most with CS degrees).
This gets worse when top level management is not technical for a technical company. Since they are not technical, they don't have good vision about where the industry will go in 10 years and what are the limitations. Ex. Microsoft under Steve vs Satya. One only had a vision for next quarter and the other seems to think longer term (and knows where the technology is going).
Isn't that the inherent nature of a lot of the programming jobs, though? For example, I'm currently contracting at a e-commerce company. My day to day work is as you described - closing tickets that get assigned to me in the Sprint. I also suggest new tickets, but they're solely limited to technical issues (mostly addressing technical debt, trying out new technologies etc.).
Honestly, I wouldn't know how to suggest anything on the business side - I don't know a first thing about how the market we're in operates (except that it's very competitive), and we have a separate person (Product Manager) whose only job is to think of new features for our team to implement. I think that's the only arrangement that works for non-technical products, which is what vast majority of programmers work on.
The problem is that it's often bundled with a similar but patently false and demonic idea---that the business and technical sides can be siloed without ill effect. They can't.
Someday someone will write a best-selling business book about how it's valuable for management to have technical expertise, and it'll have some catchy term like the "mangineer" or something.
I'm not the OP, but the point I think is that as long as you are content to be a "code monkey" (no disrespect meant at all, but that's what it sounds like) that just does what they're told for 40-50 hours per week, you can't expect to have any upward career growth.
Where there's divergence is that engineers don't want to work for the business as a subordinate, or for compensation that justifies working on something less interesting or career-beneficial than what one would prefer.
Honestly, I'm not even sure how "upward career growth" could look in a company structured like that. I don't think I saw a single programmer in here who empowered himself with business domain knowledge to a degree where he could make meaningful contributions. I guess we're all comfortable with where we stand.
This is exactly what I tell people when they ask why I'm applying to business school instead of being a career software engineer. Engineers will almost always just be implementers of other people's strategy decisions -- and they will be largely fungible -- but the strategy decisions are where you can have a real lever effect on organizations as an individual.