The place where I continued to actively participate was in architectural and system level planning discussions. In that capacity, it was to mostly ask questions, ensure focus on objectives, and very occasionally offer advice. It's mostly facilitation and mentorship.
Not doing this makes you the restaurant owner on Gordan Ramsey's Kitchen nightmares. These restaurant owners are always confused whey their food sucks, why food is rotten in the fridge and why everything is failing. If you want to know why you shouldn't leave the 'process of developing software' -- just watch one show of Kitchen nightmares. Also, if you 'are too high up to code' -- change your title to: "project manager".
If you're saying we don't need managers anymore because that's what our CI/CD pipeline does, I agree!
I think a good manager has other responsibilities such as negotiating with other teams to enable their team's success. They don't need to understand the low-level details, but they should be able to comprehend complexity when explained, so even if I only produce '1' feature, they can be certain that my good job didn't produce '10' additional bugs to be discovered by the customers.
The only caveat I'd add to that is that I can't keep on working on things in the critical path, at least as the sole developer picking up those tasks, because I'm hugely more likely to have things come up that prevent me from doing those things in a timely manner. That then leads to other people being blocked on my work.
The best balance I've found is for me to either pair with a developer who's able to remain focused on a task when I'm inevitably dragged away to do something else, or for me to pick up non-urgent tasks like refactoring, or developer tooling. The latter is probably my favourite as it means I'm applying my experience to tools and libraries that can then be used in widely applicable circumstances to make the rest of the team more productive.
This. I've been in a management position for a few years now and was scrum master for a few before that. I try to grab a programming task every sprint, but I absolutely don't have the time to commit to large programming tasks that are critical to team goals.
I'll grab some easy tasks (stuff that takes <2 hours or so). Or, I'll pick up some analysis/prototyping work that isn't time sensitive. Or, I'll just help team members when they struggle with complex problems.
These days, I actually prefer mentoring or pair-programming with the junior developers. I have 4 of them on the team and making them more productive and independent is going to pay much larger dividends than trying to complete a complex task between meetings.
1. As an EM you do sometimes have to resolve conflicts about code between senior members of the team(if it involves the team's tech lead) and it helps to not to have strayed too far.
2. It's much easier to drive new engineering initiatives if you are fluent at code and can quickly read and understand code documentation about a new library/way of doing things.
3. Sometimes while chasing deadlines, it helps if an EM can just sit with an individual contributor and do pair programming. Reminding developers about deadline won't motivate them as much as an EM sitting beside them and helping them out with coding.
4. EM jobs can be a bit hard to find, so being fluent at coding helps you to secure a job much easily since individual contributor jobs are far more prevalent than EM jobs.
I usually try to pick up a side learning project every couple of months to just have some fun and learn something new. After moving to an EM role, I missed coding a lot and had thoughts about moving back to being an IC since EM at my company was a lateral move. Though I chose to stick on since the amount of stuff that I could pick up at a given point of time was no longer limited by my own personal bandwidth.
I completely agree with your point about team members not having to dumb down complex concepts. Sometimes team members can come up with really novel solutions to problems which cost more time to implement on the short term but pays off in the longer term. Unless one is comfortable with the technical chops of a project, it's easy to dismiss ideas which aren't conventional.
I'm in a somewhat different field, but I had this experience a couple of times when I was younger-ish and didn't feel good about it. I don't think it raised my productivity
It may have been a good management move -- mitigating a high-stakes delivery risk by literally keeping an eye close, i.e. sitting next to me at my desk, but it felt more like panicky micromanagement (lasting for two or three days only, thankfully) than sharing the burden of an unplanned delivery.
(Unplanned delivery requests sometimes happen in my field. But what we do isn't as bottom-up as programming; it's more like a progressive GIF, iterative refinement from high level concept down to action plan, so unexpected intermediate deliveries can be good for the client.)
I personally do it in crunch situations for the following reasons: 1. Since there are more eyes on the code being written, mistakes made are an intersection of what either the driver or navigator would make. 2. It makes the developer less likely to procrastinate. I only use this as a last resort though and timebox it to an hour.
There’s a line where as a manager you’ll either do your engineering or management roles a disservice or not. Think of a napoleonic era army — You need to understand whether you are the sergeant who keeps the troops marching and fighting, the junior officer who passes orders on and keeps bullshit away from the sergeant, or the staff officer who makes sure the food and bullets show up, etc.
Steve Jobs said it well: "The best managers, he says, are 'the great individual contributors' who don’t actually want to be managers but step up because they don’t see anyone else who can do the job better."
https://qz.com/work/1152331/watch-a-young-steve-jobs-give-ad...
Steve Jobs was a class-A asshole who people who are trained in leadership agree was a poor leader of humans, even if he had great success in business. I'm not sure I'd take his leadership musings without a few grains of salt.
edit: everyone -> people who are trained in leadership
Everyone agrees?
Because I'm not sure I do. Jobs was probably an "asshole" for whatever your definition of that is. To suggest that he wasn't a capable leader of people is a rather different thing.
His leadership style was authoritative, petty, and probably even mean. It was also extremely effective. It's a style that was hardly unique to Jobs, and I can point to many other effective leaders (especially in the military) who used a similar style to achieve fantastic results. From Patton to Vince Lombardi the evidence is everywhere. Hell today we see much of the same behavior at SpaceX!
I would argue that an authoritative style of leadership, with small doses of intentional praise, can be really effective under certain circumstances. Particularly when the goal is very big, very audacious, and very hard.
There are lots of ways to lead people. Which one is most effective depends on many factors.
Not saying your way is bad, just difficult! Some mistakes I have been guilty of with your approach are:
If you do not delegate work well then you as a coding-manager can become a bottle neck. Sometimes work as a manager is unpredictable and breaks the flow of the coding part. Your coding work has to be passed to someone else (wasteful, as they need to get up to speed on it, context switch, etc) or others have to wait for you to finish the interruption manager-stuff and carry on with your technical work.
A manager like that can be tempted to make snap decisions (which may later turn out to be wrong or costly). Whereas a "dumb" manager can genuinely use the excuse that they have to consult with the team before making a technical decision. Of course you can always say you need to consult with the team, but it is really tempting to speed things up by short-circuiting the process and making decisions right away.
And oh, how I did get railroaded into endless eons of meetings, where no coding shall occur.
And oh, how I did get overruled by the scrum master, the moment I tried to deviate from the script of this iteration's sprint. Engineering manager, though I was.
And oh, how planning and retros taught us no lessons at all. How they were just working lunches at a hoteled desk via Skype. No desk. No one to look in the eye. No credible threat in hand.
No large, faceless corporation will ever get another hour of my time. Not even the time it would take to destroy them. For they do it to themselves by driving people like me away.