Generally, no. There’s a risk of unfair competition for work (they can delegate the stuff they don’t want because they have political power) and their code often becomes “untouchable” because few will call it out if the code is bad.
A hobby project to keep current isn’t a bad idea, though.
As an engineering manager, I actually pick up the stuff other people don’t like to do or stuff I notice that is hanging out there. My goal is to move the team forward.
I’ve also done POCs of work that has been met with resistance that I didn’t feel was justified in order to actually give it a fair shake. That is my coding fun.
> I’ve also done POCs of work that has been met with resistance that I didn’t feel was justified in order to actually give it a fair shake. That is my coding fun.
I've had managers do this to me. What an awful experience. Because they're the manager you can't push back against the awful design decisions they made. They feel it's almost done so don't understand that it takes a lot of time to deal with all the side effects they didn't consider.
I hope I don’t come across that was and do have some evidence (not to be laid out here) supporting that I don’t.
I think I’ve created a team and structure where the developers I manage are comfortable telling me I’m wrong or what I didn’t consider. It happens weekly. We value honest feedback highly. We do it with respect, but we do it.
We just have some developers on the team that are resistant to ideas that don’t follow a pattern until they see it. And sometimes my communication around the initial idea is poor and the best way I can communicate is an implementation.
As with virtually everything in this thread, it matters how you do it. Sounds like you did it well.
I’ll add one other great edge in building a quick POC yourself. Sometimes your idea actually _is_ bad, and trying to articulate it in code helps you see it.
A POC should just be a happy path to prove a concept. I had a CTO who would routinely throw together code just to prove out an integration or another concept with hard coded values everywhere and drop the code in Dropbox for me to lead the effort of making it production ready as the architect. He would go back and forth with the vendor until things worked.
This helped me out by leaps and bounds. I was usually swamped with other research. I would then make it ready for production or lead the team to and take care of the edge cases, integration with our config system, logging and alerting, etc.
There is a huge difference between a POC and an MVP. An MVP should be properly designed and scaffolding that you can build on, a POC doesn’t take those things into account.
That's a very good indicator of a bloated institution. People have to compete for work instead of pushing it away or avoiding it because they already have their hands full.
But I don't believe there is a general rule that applies here.
Most great managers I had were deeply technical and involved in the nitty gritty of the projects, including coding the very spiky aspects of a project.
Most mediocre managers I had were very focused on relationship building. The kind of manager that would need a hobby project to keep current, instead of being the most knowledgeable person in the room.
> I think that there is a big difference between being in the code and writing code. All managers should be in the code, but not all managers should be writing code.
I think it's not possible to be in the code without writing code. People can pay lip service to being in the code as the author indicates, but as we all know there is no substitute for actually sitting down and writing the code yourself in terms of understanding the actual pains and struggles.
And my anecdotal experience says that if you aren't writing at least some of the code, more often than not the disconnect between the manager and what the team is doing grows and grows.
While that is possible, I think a good manager recognizes these pitfalls. My philosophy is "everyone has to scrub toilets once in awhile - that includes me". You'd have to ask my direct reports but, I'd like to say I lean more toward taking the "grunt tasks" that I don't think are super helpful for my folks' career growth.
Then again, I've been called a bad manager on Hacker News so...
Obviously being a good manager is first and foremost, but
I’ve always had more respect for managers that I know can (even if they never do) do my job as well as bring a manager. Early in my career at a startup I had a manager that was both and excellent manager and right there in the trenches with you when issues arose or business deadlines were approaching. The amount of respect I still have for that individual is immeasurable and I’d go work for them again in a heartbeat if they asked.
And OTOH, nothing worse than a manager that don't know what he wants nor how to do it, but he "will know when it is right", and keep you redoing stuff.
IMO if an EM is taking the fun stuff, or the high-profile promo packet stuff, that's a symptom of a lot of very bad things. My boss is an upper-level EM and has at least a few PRs in a couple projects every sprint, and it's almost entirely boring-but-blocking stuff, or stuff that nobody wants to figure out, or stuff that is important but not sexy and not likely to get anyone noticed. He's not writing new features or writing UIs that are getting put in pitch decks or anything.
If I were an IC and my boss was picking the sexy work I would leave. If I was a director and one of my EMs was picking the sexy work I would fire them.
This is a good article, and I find myself agreeing with it almost entirely. My current manager is one of the most effective development managers I've ever had in my career, and I think a good part of that is because he is involved in the codebase, but not directly responsible for new features in whole.
I have had managers with no concept of what's going on the codebase, and those were dysfunctional development teams that produced poor results, despite great communication and productive meetings.
I have had managers that were effectively another engineer on the team, and those were dysfunctional development teams that produced decent results, but had poor interaction with stakeholders and no unified direction.
As in many things, the ideal seems to be a happy medium. Someone who can read the code, who can write the code, and is interested in both, but whose duties are not primarily to do so.
I agree with this sentiment! One way to set up teams is with a squad leader who acts as shit shield first, and developer if the company is running smoothly. That way if the boss manager is a full time shit shield with little time to understand product, the team still has a local product owner to guide the team’s vision and concept of the product, but the power imbalance is also less as the team lead could fairly easily be deposed by accessing the manager.
Absolutely not. Nothing like an out of touch manager slowing down their engineers with random PR comments and questions. They should not go deeper than the design document/architecture level. They are not adding any value trying to put their washed skills on display.
Tldr: managers should be in the code, but should not code themselves.
The article suggests managers should focus several tasks that depend on the ability to code, but not produce code themselves. I think that's not sustainable. When a manager stops producing code, their skills in that area begin to deteriorate. I've seen it happen several times. When you stop coding, you'll eventually start missing crucial things in code review, make very poor estimations of labour involved, and assign the wrong team members to tasks. It won't happen immediately, but it will happen within 5 years.
I think a better way is to keep producing code, but at a lower rate. If the project you're working down doesn't permit low-commitment development, start developing tooling or pick up a side project. A coach doesn't need to be a top-player in the coding field, but they do need to remain fit.
Middle management for software engineering has gone through a paradigm shift. The trend for businesses is flatter structures, manager roles with more responsibilities and this reality largely includes being as deep in the code as direct reports.
Since 2023, most roles I reviewed or interviewed for were player/coach roles, often close to 50/50 split. In my last EM role, I was hired for exactly this.
I found very few EM roles that are primarily managing with only "being in the code"; I can count on my hands out of hundreds of Engineering Manager roles. Probably closer to 95% or more EM roles require hands-on technical work similar to Tech Lead roles.
I have noticed this as well, and if you're interviewing at a startup, it's almost guaranteed to be a highly technical position. Either a hybrid EM/Tech Lead role or a hybrid EM/architect role.
> It depends on the manager, the team, and the organization. As a senior leader, I would rather my managers be in the code as per the above list, but not necessarily putting themselves in the critical path by writing code, given that they are likely to be interrupted more often, have more meetings, and be pulled in more directions than their reports.
I was a manager for about 9 months before being laid off. The goal was to attain power but also work on the huge backlog of work we had. I wanted to use the power to block outside forces that would push my engineers in the wrong direction or remove their focus for investigating things like platform bugs.
What ended up happening was that the project work even though completed was used to gaslight me for 6 months as breaking the platform and causing bugs. Issues that infra team promised to “fix later”.
Go ahead code when you’re a manager it can be effective, but be careful when working with outside ineffective teams they will put blame on you if they can. Management is political and once you start making moves that outshine other teams, opposition will come out of the wood work to bring you back to their level of unhappiness.
The trick to identifying this is when people start naming you at meetings you aren’t in. It might be good things they are saying but that may shift as the good things well dries up.
"But what does this mean for frontline engineering managers? Is the new normal just about writing more code and doing less of the other things that peacetime managers would normally do?"
"Should they be able to do code reviews? Yes."
There is no standard answer here. At many companies it is the Head Of Product who also oversees the tech team. They may not know how to write code, and will not know how to do code reviews. Some project managers lead engineering teams without knowing how to code. That's especially true outside of the tech industry.
For anyone interested in specific numbers, I interviewed Eric Garside about his experience scaling Freshly from 3 engineers to almost 80 engineers, see here:
I've never seen a dual role manager that is actually good. It's usually a senior dev that gets stuck with management duties. They are usually good technically but then lack finesse and knowledge about most managerial issues (budget, employment law, team dynamics, etc). You're now at a disadvantage because the stuff they are supposed to protect you from or have power to help further your career is not developed. If your managers don't have enough management work, then flatten your org and expand their reach so they do.
It really only works in orgs that are large enough to accept a bit of bloat, mature enough to have good managerial practices and invest in growing managers, and where the new manager has only a couple reports (2 is the perfect number). So you take a very good, senior IC who wants to be a manager, you cut their IC duties by 25-50% and you give them 2, maybe 3 direct reports. This is after doing some sort of formal managerial training, internal or external, and with the acknowledgement from their director/senior manager that they're going to be spending more time with them for the next 2-6 months and having skip 1:1s to make sure everything is going ok.
How many organizations do you think check all those boxes and are willing to do that? It's not many.
I've bounced back and forth between IC and EM (intentionally) and I've seen some that get very very close then completely blow it with one of these. One in particular would put people through management training for a full day each week for months, give them a very senior director, all the "right things" but then cut their IC duties by maybe 10-15% at most and give them a team of 12 people to manage. And they wondered why fully half of new managers wanted to go back to IC work after a year or two.
The best realistic thing I've seen, and my current workplace, is pretty good with small teams and training and all that, but basically doesn't offer any pay increase from upper level IC to first-level management and so you have to be okay with basically 20% more work for the same money. It's not perfect but one benefit is you don't get any managers who are only in it for the money.
I don’t see your contact info in your HN profile but could I get in touch with you to learn more about how teams can get this right? My email is in mine.
My best managers were ex-engineers who didn't touch the codebase. They understood how things worked, and could talk architecture & concepts, but they didn't expect to be able to sit down and write code at our level. Maybe they wished they would have the time/opportunity still, but realistically they were focused on leading.
They were happy with it. On the opposite side, almost every dual role manager I've known have been miserable. Most of the ones I knew dropped out and went back to dev only work. A few stuck it out and got promoted into a no-code management role.
My best managers did code! They didn't close tons of tickets but they did do small things, and by keeping active in the codebase they were very cognizant of the state of documentation and technical debt, and could make informed decisions without relying on second-hand reports. It kept their understanding of the codebase grounded in reality. They knew which features were held together with duct tape, what areas needed attention, and planned timelines and expectations accordingly.
This is 100% my experience. I appreciate a manager who can jump into the codebase to fix the small stuff: typos, lint issues, updating minor dependencies, etc., unblocking devs from doing the main work. I like when they have some sense of the reality of the codebase, as you put it, and know who is actually contributing vs bullshitting.
The worst managers I've ever had were the so-called "technical" managers who had never looked at the code. They were often involved in technical decisions, but their opinions were entirely based on vibes. Since they were a manager, people felt obliged to listen to their input, even if it was disconnected from reality.
Either: a) be completely non-technical, and make sure you have a technical leader on the team who you trust, who does know the code or b) get involved in the code, enough to support and unblock your team.
I think this is kinda the best way. If you're a manger who used to code, do the sort of tedious tech debt stuff for your team. Update dependencies. Build small tooling improvements. Do the sort of stuff your devs probably want to do but have higher priority work that will get in the way. That's likely work that doesn't require you to have deep knowledge of how everything works, but still provides value.
If your project is complex enough that's not an option, then write onboarding docs and other technical stuff. IMO, the manager shouldn't be writing code much, but they should always keep a running version of the project. They should be able to run tests, confirm that PRs function locally, just keep a basic attachment to things.
In my experience, there's a time limit on how long these kinds of people can be good managers from the perspective of accurately assessing a) which ICs are contributing what and b) how long it it'll take to implement something. The fact of the matter is that an engineering manager who can't or won't write code will never know as much about his team or indeed the product as one who does.
It's a shame that the "maturation" of the tech industry has resulted in these non-coding eng managers whose main skillset is often bullshitting, managing up, or both.
One important distinction to make is the difference between a manager who started out as an IC on the project (esp. the case when they actually built the thing from the ground up) versus a manager brought in from the outside. I think the former is more likely to be hands-on and generally speaking the expert in the room. But, sometimes you need the latter. It can be challenging (even counterproductive) for the latter person to try to be technically relevant, when they are often the least technically knowledgeable person in the room when they join.
Managers should not be evaluated based on code output -- it's not their job. However, writing code here and there -- to evaluate new technologies, make a rough prototype, or demonstrate a technique to be adopted by individual contributors -- may aid them in their management responsibilities and should be embraced when it does.
I've seen what happens when a manager is also responsible for individual coding duties. He ended up with roughly twice the work, shifting between two mutually incompatible mental modalities all the time, cranky with his subordinates and making a lot of sad phone calls to his fiancée explaining that he'd be late home from work, again. Not a good fate for any worker, even if the pay and prestige are better.
> Do code reviews. Don't just skim PRs (sorry, reader!), but really dig into them: run the branch locally, test it, think critically about the design and the implementation, and provide feedback. Record a video of your review to highlight things that could be better.
Please no! Most managers want to increase output and engineers are aware of that. It is exceptionally frustrating when your manager tells you during your 1:1 that they want to help move things along and then does quite literally the opposite in a PR.
If you must dive deep into a PR, get the PR unblocked and then follow up with the change. Or stop telling your direct reports that you want to help unblock them.
Anything that can be done in a follow-up shouldn't have to block a PR. But if the architecture is wrong, it's better to fix before than after. You are speeding your teams throughput by pointing out the problem earlier rather than later.
But I don't think a manager necessarily needs to be at this level of detail.
> But if the architecture is wrong, it's better to fix before than after.
Although this is true; if the manager is thinking about and getting involved in architecture after the PR is written it does suggest something has gone wrong. If there are architectural considerations then it is good to discuss them with the coder before they start developing.
PR review is a great time to pick up subtle bugs, do last-line sanity checks or get used to someone's style but if they are a bad arena for combating most code issues. If they are picking up design problems there is probably a process flaw to be corrected.
> if the manager is thinking about and getting involved in architecture after the PR is written it does suggest something has gone wrong. If there are architectural considerations then it is good to discuss them with the coder before they start developing.
That's the ideal yes. The problem with poor design/architecture is that it's never actually architected and designed. It just happens as part of a process where someone codes something without actually considering this to be a "design" (something that will affect future code, and solidify over time).
So the job of whoever it is (senior developer, manager, colleague, ...) is to point out the poor design. The hope then is that it can be fixed before it is merged AND that next time there will be no "accidental design".
This is one of the situations where the ideal is in pretty easy reach. 5 minute conversation when handing out tickets. "Hey [insert employee number here] - how are you thinking about doing this ticket?". Or check in with them during standup.
That one question and a few minutes will both save hours of time and get better quality work. Letting the dev put time into work that gets redesigned in the PR is questionable management. Not the end of the world if it happens every so often but it suggests a lack of context in the job. If there is time to redesign during the PR there was time to think through what was acceptable quality before the work started.
Modulo the video, I did exactly this when I ran a team, only for what I thought were "important" or "gnarly" PRs. It works. I rarely had to spend more than an hour on a PR, because small, atomic PRs were all but mandatory on my team, with "atomic" taking precedence over "small". I would also review some of the PRs post-facto, after they are committed, as I was almost never a "formal"/blocking reviewer on them.
Recording a video seems excessive to me. No one has the time or desire to watch me bloviate about something that I could say in a few PR comments that can be quickly skimmed.
Can I get in touch with you to ask more about your time leading teams? No contact info in your HN profile but if you’re interested, my email is in mine.
If you as a manager have the time to do an in-depth code review like that... you're doing micromanagement and you're showing that you don't trust your subordinates. And clearly, you don't have anything more important to do.
> If you mean being the primary implementer of features, then probably not.
It's my belief that any engineering manager worth their salt should push back on this and argue for a seat at this table, every single time. I don't want to work for someone who is disinterested in new functionality in codebases under their purview.
I want my manager to manage. I need them to play the politics to get what I need as far as resources, to set business priorities and to make sure I’m aligned with those priorities.
I need them to then trust me to accomplish the objectives myself on smaller implementations or to lead the team on larger implementations.
I'm not asserting anything about if a manager should code, but rather calling out a statement in the article. A good engineering manager should never be surprised by some new functionality.
When I had managers who coded they were ruthless about removing friction in the dev and deployment pipeline because they had to deal with it too. If build times went up, deployment infrastructure broke or someone’s PR broke dev they would roll it back immediately. If someone consistently blocks PRs the manager noticed the trend and would address it.
2. You get a much better sense of IC’s contributions by writing code.
There are ICs who play politics very well and sell themselves but that set is not the same as the ICs who deliver. If you are writing code you start to notice which ICs have written key features, built critical APIs or worked on hard problems because of comments and Git blame.
3. Understanding your codebase.
I hope most managers have solid CS and engineering fundamentals but that is a necessary but not sufficient condition to grasping the full picture. There’s a reason it takes time to ramp up to full productivity on a new codebase. If you work in the codebase and have had to use that one annoying but critical library or dealt with that tech debt from 2 years ago then you know what is hard and what isn’t. I’ve found when a codebase has a quirk that makes developing certain features hard all of the non-technical people keep forgetting why we can’t do that thing and all the technical people have it burned into their brains.
Also, I'm just fundamentally skeptical you can do a good job of running a team, or hiring, when you don't know how to do the thing the team does. Software development skill requires active use/work to maintain it.
Here here. There are a lot of decisions where there is no real contest between the choices to someone who has tried both options but are difficult to tell apart from a distance. EMs should be in a position where they are trying things in practice.
I'd draw an example of someone who hasn't used git before, making a choice between a git repo and managing code by keeping daily .zip files. Anyone (almost anyone) who is a career coder won't see a choice there.
That example is so basic I think most EM would get that right even if they didn't deal in code but the same dynamic turns up at every level of work. There are situations where there is a right option, the right option is obvious to everyone who is working on it and it is is a drain on the org when management gets confused and thinks that something that isn't an option is viable because they aren't on the ground working on it.
Just curious have you managed people? At what capacity (tl? Em? Pm?)? How big was your team? What was the company env like in which your team(s) functioned?
I guess I should have added some context. I have been (and keep swinging between) ic and management roles (including managers) regularly. I love coding and try to sneak in some when I have time (as a manager).
But that a manager should always code is not something i found helping the team or the manager - all the time. One size does not fit all. In startups yes frankly there is hardly a need for a manager and it is TL, TPM, EM role combined into one.
In larger cos though a most managers are innundated with all kinds of non technical work (meetings, alignment, perf management, product discussions etc). While having coded before is a great thing keeping uptodate is actually robbing the manager of time for all other things on the plate (and those actually benefit the team beyond what meets the eye).
Besides at large orgs there is also so much technical (think large scale design and integrations) knowledge that a manager needs to keep track of which also needs time investment.
Then there are various level/career related things that necessitate one or more TLs a manager needs to work with or manage and coding often gets seen as a manager "not doing their job" or worse stealing a junior engineers opportunities.
There's a lot more that is very environmental but hope sets some context.
Man, I wish the manager's ass was ever on the line. The amount of times I've seen a manager's whole team get laid off and the manager get moved to a different team to fuck everything up again is too many times.
I think I've seen a manager get laid off never. And often seen half their team laid off because they were terrible at their job, but the management class takes care of their own.
Yeah if I implemented my manager's ideas, I'd be the one fixing them too. No thanks - if I have to deal with the problems, I'll decide the solutions too.
In practice, many act as an intermediary who can take the credit for the wins while passing down blame for the misses.
It's not a good leadership trait but it's an effective career advancing move.
The entire list on the post reeks of aspirational intermediary that doesn't actually do any of those things as effectively as empowered project/team leads who do contribute to the product. It's fluff and very easy fluff to remove without feeling pain. Of course, mediocre teams will have mediocre developers who won't want responsabilty and will benefit from intermediary "bossy" managers.
This is so important, my managers who didn't code pretended things weren't too bad and took a "just deal with it" attitude whenever I proposed going for a QoL improvement.
On the flip side I had a manager who had written a lot of the codebase before I joined and had a terrible time allowing anyone to touch his precious baby, regardless of how much his prior ”art” was hurting us, our productivity, and by extension the company.
Yeah... I said it was a "flaming pos" I felt bad about that. But he won't let me add tests so idk whatever. (we prototype software so speed is the main goal but yeah, stuff starts breaking, backtracking, hey... tests)
I think it depends on how it is done, and the kind of ICs you have on the team. It can come off as micromanagement, which may work well enough if you have not-so-competent ICs, but will backfire if you have talented ones.
I've found it really helpful to be a support programmer. not someone that takes on big tasks. nothing with a hard deadline. not something that someone else needs to do their work. leftover cleanup. testing. minor refactoring. build.
you need to keep your hand in the game just to understand what's going on with the codebase. but you're not an a-list player here.
> It can come off as micromanagement, which may work well enough if you have not-so-competent ICs, but will backfire if you have talented ones.
Yep agreed - I've seen a couple of managers that were probably fine as developers but struggled (to their extreme detriment) with being pretty average compared to the senior developers that they were managing. Their 'helpful advice' just served to show how superficial their understandings of the systems were.
Friction can be more of a problem too though. If your manager is objectively better than the team, estimates can get cut short and failing to meet those adds tension.
Obviously a good manager might pitch in, understand their teams capabilities but it's not always a natural transition for senior devs moving to management.
Doesn't work, because the team won't always tell you of the issues that block them (normalization of deviance). Sometimes you need to find out yourself.
If a manager communicated with and listened to their team, but their team had written a web service with gaping security holes or disastrous data integrity practices because all their senior engineers were incompetent and/or were hired at a level that was above their ability, would that manager find out just from chatting with them?
I promise you that it's not guaranteed. You need to actually go looking through the code to find everything that's wrong.
I didn't say you should be judging performance solely on daily syncs, but you have a myriad of ways of doing that as a manager including simply looking at the big-picture content of PRs, what issues a dev identified and solved, what devs contribute to discussions/technical solutions in slack/meetings, what projects are completed, and how well they turn out etc.
But eh? Doesn't matter how loud you are in a sync, you can very easily go off the actual content of what someone is saying. If someone goes off 5 minutes about how they managed to turn an object into a json string, that doesn't exactly make them look good.
But you are a part of it. You are the manager of the codebase, you should actively be part of the discussions of what's being merged in, what your architecture looks like, what changes are required to complete a new project, what issues are arising, what the blockers are on projects, whats slowing down your team etc. None of that requires you to sit down and code.
If you're really listening and asking the right questions you should be aware of even changes like "Were deciding to use this HTTP client rather than what we currently have". OK why are we doing that? What was the issue? Ask ask ask.
As a manager Id argue you have (or should have) more technical insight into your whole codebase than any IC
How do you do any of that without extensively reading code? Do you consider reading large volumes of code not "sit[ting] down and cod[ing]"? Just because you're not actually producing large volumes of commits does not mean that it's not coding.
I think "coding" is commonly understood as writing code, not reading code, you know like if I say "I coded google jamboard", someone thinks I developed it, not read the source code. But besides, why do you need to extensively read code to understand whats going on?
Assume you read your code base once and understood it. You get a feature, discuss how its going to be done (well add this table, add these endpoints, etc). You should have a damn good idea already what thats going to look like in your codebase. I don't think knowing all the low level details is necessary (most people would call that micromanagement) and besides writing code yourself isnt going to help know all the low level details of all the other projects
After thinking about what you wrote here I have some conclusion:
If someone is "good manager" that does all those things whether he writes the code or not he is going to be a "good manager" anyway. Explicitly writing code might not be best use of time but hey if person feels like he needs it that is on him.
If someone is "bad manager" that doesn't bother to deal with technical details and wants only to do "important management stuff" and thinks he can manage by proxies like counting story points or counting closed tasks, does not care about HTTP client A or B and learning the system, he is going to be a "bad manager" and will never even care about writing code.
Finally "bad manager" and "good manager" - is hard to tell because "bad manager" can be good for the company or a team as much as "good manager" and depending on many other factors it can be that "down to earth, hands dirty, good manager" might be really bad for the company or a team depending on business context.
I tend to agree but, playing devil's advocate, is this true for other roles? Does a movie director need to know how to build sets? How to sew costumes? How to use Blender/Maya/Houdini? My manager can code, used to code, sometimes does code, but they aren't familiar with their team's current work.
Like imagine you were a coding manager 10 years ago with AI experience. Sometime over the last 10 years your team does AI infra. You, as a manager and as an IC, have zero AI experience (you've never trained a model, never used a trained model, never using any of the various AI frameworks). Are you still okay to manage this team or should you be replaced with someone who does have that experience?
> I tend to agree but, playing devil's advocate, is this true for other roles? Does a movie director need to know how to build sets? How to sew costumes? How to use Blender/Maya/Houdini?
I don't know that much about movie making, but my understanding is that there would be managers and/or leads within each specialty, who are (among other things) managing the interaction between their specialty and the director / producers.
That seems pretty comparable to what's being discussed here.
In any industry, if you want a team to work well, you have to have someone with both authority and hands-on experience who’s responsible for providing day-to-day guidance. Sometimes that person is called a “supervisor” or “tech lead” instead of “manager”, although this typically implies some division of responsibilities as well; no reason the person providing guidance necessarily has to be the same person reporting to leadership or hiring and firing.
Toyota calls it the gemba walk. Managers need to see how the factory is running with their own eyes. Not just live behind a desk and listen to what they hear in meetings.
A movie director can see the sets with their own eyes. But you can't see the state of a software codebase without reading and understanding the code, and the most surefire way to do that is to try to write something, even just documentation.
You don't assess the state of your software by walking around the office and looking at hands on keyboards. You look at the codebase.
> I tend to agree but, playing devil's advocate, is this true for other roles? Does a movie director need to know how to build sets? How to sew costumes? How to use Blender/Maya/Houdini? My manager can code, used to code, sometimes does code, but they aren't familiar with their team's current work.
Many directors started in other roles in the movie industry, typically as writers, PAs, or other subspecialties. Chad Stahelski was a stuntman and stunt coordinator before he started directing John Wick, and it really shows.
I think the clear distinction is between someone who understands a part of the job, and someone who is good at part of the job. If you don't understand how costuming works, as a director, you're going to have a hard time getting good costumes, but by no means does that mean you're able to pinch hit in that role. I personally believe that it's difficult to replace hands on experience as a way to truly understand something.
In software engineering, I think there's a huge gap between managers who worked in some other industry and transferred over, versus having previously been an engineer, even a mediocre one. Knowing how the sausage is made is hard to replace.
Though the fact that directors have certain biases from how they working into the role does also highlight an issue with this kind of effect: when you have technical leads or project managers on a big multi-disciplinary project, they will have a natural tendency to favor the areas they are more familiar with, and bias the decision-making and planning of the project around that. It can be difficult to step back and optimize for the project/system as a whole.
> or worked on hard problems because of comments and Git blame.
Oh lord we'd better hope they have absolutely IMPECCABLE git fu if they are going to be using this metric. Unfortunately here on HN I've seen people essentially brag that they only know just enough git to get by and "who cares if I don't know all the other commands deeply." In any event, this scenario REQUIRES that a manager know exactly how to determine who originally introduced something, or, exactly where it was significantly improved if they are going to be reading comments and blaming to see "who performs."
The very fact a manager might be doing this has got me a little worked up, mainly as I know great managers who don't do this and who are scared of something as simple as the reflog.
> When I had managers who coded they were ruthless about removing friction in the dev and deployment pipeline because they had to deal with it too.
For me a good manager is a facilitator, not a leader. Someone who removes obstacles for us. Whether they themselves are affected or not. Someone only fixing an issue because they have to deal with it too seems like a pretty bad manager to me.
They're not for pushing targets or trying to weed out non-performance, I don't work at a playschool. My manager is there to make sure I can do my job and that I can reach my maximum potential (including making sure I'm in the right job)
When the company tells your manager "we need to cut wood" and you tell your manager "I need to sharpen my axe", these things are in harmony but it's still a balancing act. The manager should trust your judgement, but they may also have a better view of the short-vs-long-term tradeoffs, and sometimes we spend too much time sharpening. Sometimes we don't spend enough.
I think a good manager should be able to take a swing with the axe to get a feel for its sharpness.
I think every team needs a TL. If the EM isn't filling that role, then another team member should be, and most of what you're talking about falls on the TL (with some sanity checking from the EM by talking to other team members about these things as well)
i lead dev teams in the consulting world, I don't code even though i really want to. Sometimes I get pulled in for time sensitive work or the hard stuff but that's about it. Every time I get bored as a manager and reserve some fun stuff for myself a crisis happens that needs my attention and then the code falls behind schedule. So I guess that's the end of that.
i like the analogy of a sports team coach for being a manager. You can motivate, cheer, train, and drive the team to victory but you can't step on the field.
Summary: Managers who know how to manage, but don't know how to do anything are not the best managers. The best managers are the great individual contributors who never ever wanna be a manager but decide they have to be a manager because no one else is going to be able to do as good a job as them.
Managers who didn’t want to be managers are the worse ones. They don’t know how to play politics and compete for resources against other managers and make sure their team gets raises and promotions.
The skillset you need for management are different from those you need as an IC
Yes and Steve Jobs led illegal collusion between most of the big tech companies to keep compensation down. He wasn’t exactly the most employee focused CEO.
This comes from the perspective of someone who manages managers. So if you're looking to hire managers, and don't care about retention, perhaps this is good advice to follow.
But if you're looking to evaluate your manager, or hire managers who can retain great people, maybe not the best advice.
There's a third option that's missing from that dichotomy: people who are OK individual contributors but who are actually really good at managing people.
These are the best managers, because they have the disposition/skills to be a good manager, but also aren't going to make dumb engineering decisions.
IC's who become reluctant managers are generally terrible managers because it's not what they're good at and not what they enjoy.
let me add a fourth then: ICs who had really great managers and became great as a result, and when given the opportunity decided to then become the next great manager and mentor the next group of great ICs.
I once had a lead programmer (who was a great one) who insisted that a manager should not have access to the source code of our project. I have often worked with engineers who were nervous about who could check in code so I kind of understood. And this really was a great lead, technically strong and a good leader so I said, fine no code access for me.
It was a terrible mistake for me. So much of my value as a manager was being understand what the engineers were doing. I am not a great programmer but I can do it, and I could usually understand what an engineer was trying to do from looking at their check ins rather than listening to them in stand ups. I was just not that useful. There were times when the team was doing things that I knew I had seen done before with much better before with different methods, but just talking about it was relatively ineffectual.
Don’t allow your skills to atrophy. If you get to a high position, it’s much harder to find a job at that level. If you can code, you can always find something.
If you can’t code, and you can’t get a manager role, you’re in trouble.
That’s why I have one year of expenses in a liquid savings account in addition to retirement savings. So I can have the runway to get back into coding if necessary.
Are you proposing that they do coding on the side after they get off of work? I have a strict policy of “no side work” and I have since graduating from college in 1996. When I get off work, I don’t think about computers again until I go back to work the next day.
I’m not a manager. But I am now a “staff software architect” working full time at a third party cloud consulting company after pivoting from software development and doing a previous stint working at AWS in the consulting department (full time direct hire - AWS Professional Services).
My specialty is supposedly developing applications using AWS services. But as I moved up I find myself doing no coding.
My job is half working with sales and being the first technical contact for a customer and writing long and detailed requirement documentation and getting the customer to sign the contract for us to do the work. The other half is as a tech lead coordinating between the customer, project manager, sales, and the subject matter experts on our side who lead/implement the various “work streams” (development, data, cloud architecture, etc).
First issue, when I was looking for a remote job last year and the year before as a developer as a plan B job, every opening had hundreds of applications and I heard crickets. This has never happened to me and I looked for software development jobs in 1999, 2008, 2012, 2014, 2016 and 2018. The job at AWS fell into my lap in 2020.
It’s a shit show out there right now for software development jobs especially remotely. Did I mention I was looking for regular old enterprise Dev jobs?
On the other hand for differentiated strategic cloud consulting jobs, I had no problem getting offers quickly.
A lot of what's in the article resonates with me. Specifically, I've seen cases where managers unwittingly use coding (a problem they feel comfortable with) as a way to escape from facing more serious manager responsibilities (problems they don't feel comfortable with). When you've got 10 years of experience doing X, and you just started doing Y two years ago, it's natural to try to play to your strengths by doing X.
But as a manager, there's a whole category of things that only you can effectively do, because the social environment and power structures are set up that way. In that context, coding is a distraction for a manager. Writing code often takes a lot of mental energy and stays in your head even when you're not at the keyboard.
I don't want my manager getting nerd sniped when they should be coaching a struggling colleague, advocating to upper management, having a tough conversation with a toxic team member, or reigning in the PM.
I’m in favor of managers being engineers but everything you wrote is true. I wish I had read this comment a few years ago, it would have saved me and my teams some trouble.
As a manager, I make a point to produce some code that makes it into production every quarter, but my reason for that is not because I can't help myself from writing code. Rather, I want to understand the pain of the sdlc. I want to understand firsthand how long it takes to get something deployed and how many steps it takes. Being able to empathize, rather than just sympathize, with my direct reports has made me a better manager.
Should they be able to? Absolutely. Should they exercise this on projects they manage? Probably not.
I ran into this problem years ago. It's not exactly good form to be manager that contributes to the team's project, is at the apex of code review, and is responsible for team performance reviews, all at the same time. It can work, but without other people at your level reviewing your work, you'd be asking the team you manage to call out your mistakes. That's the kind of thing that a lot of people might not be comfortable with, so you're really asking for softball and rubber-stamp reviews on your work. This makes for poor optics: your work always goes to `main` virtually unchallenged, while everyone else has a harder time.
At the same time, you need to be technically competent if you're managing a team while in the review loop. To do otherwise is to create situations where you will lose face with your team. So, sticking to review only is probably the best answer here.
There are workarounds though. It makes sense to maintain a pet automation project just to stay sharp while solving real problems (e.g. every manager needs better reporting). You can also negotiate out cross-team contributions where your work may be reviewed by folks that do not report to you.
To "lose face" with a team shows a lack of trust. I think it's fine if you don't have a perfect solution, but require some eyes on your work. But you're right, if you don't have people your level (or better yet, more experienced) reviewing your work, getting an honest code review is challenging.
I've definitely seen this - managers reviewing or submitting code that was woefully unfinished. It forces the team to decide how much to push back against the person who decides if they get a raise in a way that's decidedly unfair. It also taints your perception among the team.
It's that old quote - better to keep silent and be thought possibly a fool than to speak and remove all doubt. If your job isn't primarily coding, and you parachute in to "help out" and end up making more work than you save, that burns a lot of goodwill that you can't really get back. You're not some junior dev that's going to get better with mentorship.
A manager should never write any code that is part of the critical path of the deliverable.
Every single time without fail that I have had a manager who still tries to be an active contributor, one of two things happen.
Either they never keep their commitments as a coder because they are spending too much time on their management duties including meetings, manhole up, and career development for their reports or they are horrible managers who don’t or can’t do what I need from them as a manager - get me the resources I need to do my job, play politics and manage up and especially fight for raises.
318 comments
[ 3.2 ms ] story [ 279 ms ] threadA hobby project to keep current isn’t a bad idea, though.
I’ve also done POCs of work that has been met with resistance that I didn’t feel was justified in order to actually give it a fair shake. That is my coding fun.
I've had managers do this to me. What an awful experience. Because they're the manager you can't push back against the awful design decisions they made. They feel it's almost done so don't understand that it takes a lot of time to deal with all the side effects they didn't consider.
I hope I don’t come across that was and do have some evidence (not to be laid out here) supporting that I don’t.
I think I’ve created a team and structure where the developers I manage are comfortable telling me I’m wrong or what I didn’t consider. It happens weekly. We value honest feedback highly. We do it with respect, but we do it.
We just have some developers on the team that are resistant to ideas that don’t follow a pattern until they see it. And sometimes my communication around the initial idea is poor and the best way I can communicate is an implementation.
I’ll add one other great edge in building a quick POC yourself. Sometimes your idea actually _is_ bad, and trying to articulate it in code helps you see it.
This helped me out by leaps and bounds. I was usually swamped with other research. I would then make it ready for production or lead the team to and take care of the edge cases, integration with our config system, logging and alerting, etc.
There is a huge difference between a POC and an MVP. An MVP should be properly designed and scaffolding that you can build on, a POC doesn’t take those things into account.
That's a very good indicator of a bloated institution. People have to compete for work instead of pushing it away or avoiding it because they already have their hands full.
But I don't believe there is a general rule that applies here.
Most great managers I had were deeply technical and involved in the nitty gritty of the projects, including coding the very spiky aspects of a project.
Most mediocre managers I had were very focused on relationship building. The kind of manager that would need a hobby project to keep current, instead of being the most knowledgeable person in the room.
> I think that there is a big difference between being in the code and writing code. All managers should be in the code, but not all managers should be writing code.
I think it's not possible to be in the code without writing code. People can pay lip service to being in the code as the author indicates, but as we all know there is no substitute for actually sitting down and writing the code yourself in terms of understanding the actual pains and struggles.
And my anecdotal experience says that if you aren't writing at least some of the code, more often than not the disconnect between the manager and what the team is doing grows and grows.
Then again, I've been called a bad manager on Hacker News so...
Obviously being a good manager is first and foremost, but I’ve always had more respect for managers that I know can (even if they never do) do my job as well as bring a manager. Early in my career at a startup I had a manager that was both and excellent manager and right there in the trenches with you when issues arose or business deadlines were approaching. The amount of respect I still have for that individual is immeasurable and I’d go work for them again in a heartbeat if they asked.
If I were an IC and my boss was picking the sexy work I would leave. If I was a director and one of my EMs was picking the sexy work I would fire them.
I have had managers with no concept of what's going on the codebase, and those were dysfunctional development teams that produced poor results, despite great communication and productive meetings.
I have had managers that were effectively another engineer on the team, and those were dysfunctional development teams that produced decent results, but had poor interaction with stakeholders and no unified direction.
As in many things, the ideal seems to be a happy medium. Someone who can read the code, who can write the code, and is interested in both, but whose duties are not primarily to do so.
The article suggests managers should focus several tasks that depend on the ability to code, but not produce code themselves. I think that's not sustainable. When a manager stops producing code, their skills in that area begin to deteriorate. I've seen it happen several times. When you stop coding, you'll eventually start missing crucial things in code review, make very poor estimations of labour involved, and assign the wrong team members to tasks. It won't happen immediately, but it will happen within 5 years.
I think a better way is to keep producing code, but at a lower rate. If the project you're working down doesn't permit low-commitment development, start developing tooling or pick up a side project. A coach doesn't need to be a top-player in the coding field, but they do need to remain fit.
Since 2023, most roles I reviewed or interviewed for were player/coach roles, often close to 50/50 split. In my last EM role, I was hired for exactly this.
I found very few EM roles that are primarily managing with only "being in the code"; I can count on my hands out of hundreds of Engineering Manager roles. Probably closer to 95% or more EM roles require hands-on technical work similar to Tech Lead roles.
> It depends on the manager, the team, and the organization. As a senior leader, I would rather my managers be in the code as per the above list, but not necessarily putting themselves in the critical path by writing code, given that they are likely to be interrupted more often, have more meetings, and be pulled in more directions than their reports.
What ended up happening was that the project work even though completed was used to gaslight me for 6 months as breaking the platform and causing bugs. Issues that infra team promised to “fix later”.
Go ahead code when you’re a manager it can be effective, but be careful when working with outside ineffective teams they will put blame on you if they can. Management is political and once you start making moves that outshine other teams, opposition will come out of the wood work to bring you back to their level of unhappiness.
The trick to identifying this is when people start naming you at meetings you aren’t in. It might be good things they are saying but that may shift as the good things well dries up.
"Should they be able to do code reviews? Yes."
There is no standard answer here. At many companies it is the Head Of Product who also oversees the tech team. They may not know how to write code, and will not know how to do code reviews. Some project managers lead engineering teams without knowing how to code. That's especially true outside of the tech industry.
For anyone interested in specific numbers, I interviewed Eric Garside about his experience scaling Freshly from 3 engineers to almost 80 engineers, see here:
https://respectfulleadership.substack.com/p/eric-garside-as-...
I also surveyed several of the CTOs who I know in New York City, about team size and scale and responsibilities, they gave their answers here:
https://respectfulleadership.substack.com/p/a-survey-of-ctos...
How many organizations do you think check all those boxes and are willing to do that? It's not many.
The best realistic thing I've seen, and my current workplace, is pretty good with small teams and training and all that, but basically doesn't offer any pay increase from upper level IC to first-level management and so you have to be okay with basically 20% more work for the same money. It's not perfect but one benefit is you don't get any managers who are only in it for the money.
The worst managers I've ever had were the so-called "technical" managers who had never looked at the code. They were often involved in technical decisions, but their opinions were entirely based on vibes. Since they were a manager, people felt obliged to listen to their input, even if it was disconnected from reality.
Either: a) be completely non-technical, and make sure you have a technical leader on the team who you trust, who does know the code or b) get involved in the code, enough to support and unblock your team.
If your project is complex enough that's not an option, then write onboarding docs and other technical stuff. IMO, the manager shouldn't be writing code much, but they should always keep a running version of the project. They should be able to run tests, confirm that PRs function locally, just keep a basic attachment to things.
It's a shame that the "maturation" of the tech industry has resulted in these non-coding eng managers whose main skillset is often bullshitting, managing up, or both.
I say this as someone who has been in both roles!
Managers should not be evaluated based on code output -- it's not their job. However, writing code here and there -- to evaluate new technologies, make a rough prototype, or demonstrate a technique to be adopted by individual contributors -- may aid them in their management responsibilities and should be embraced when it does.
I've seen what happens when a manager is also responsible for individual coding duties. He ended up with roughly twice the work, shifting between two mutually incompatible mental modalities all the time, cranky with his subordinates and making a lot of sad phone calls to his fiancée explaining that he'd be late home from work, again. Not a good fate for any worker, even if the pay and prestige are better.
Please no! Most managers want to increase output and engineers are aware of that. It is exceptionally frustrating when your manager tells you during your 1:1 that they want to help move things along and then does quite literally the opposite in a PR.
If you must dive deep into a PR, get the PR unblocked and then follow up with the change. Or stop telling your direct reports that you want to help unblock them.
But I don't think a manager necessarily needs to be at this level of detail.
Although this is true; if the manager is thinking about and getting involved in architecture after the PR is written it does suggest something has gone wrong. If there are architectural considerations then it is good to discuss them with the coder before they start developing.
PR review is a great time to pick up subtle bugs, do last-line sanity checks or get used to someone's style but if they are a bad arena for combating most code issues. If they are picking up design problems there is probably a process flaw to be corrected.
That's the ideal yes. The problem with poor design/architecture is that it's never actually architected and designed. It just happens as part of a process where someone codes something without actually considering this to be a "design" (something that will affect future code, and solidify over time).
So the job of whoever it is (senior developer, manager, colleague, ...) is to point out the poor design. The hope then is that it can be fixed before it is merged AND that next time there will be no "accidental design".
That one question and a few minutes will both save hours of time and get better quality work. Letting the dev put time into work that gets redesigned in the PR is questionable management. Not the end of the world if it happens every so often but it suggests a lack of context in the job. If there is time to redesign during the PR there was time to think through what was acceptable quality before the work started.
Recording a video seems excessive to me. No one has the time or desire to watch me bloviate about something that I could say in a few PR comments that can be quickly skimmed.
It's my belief that any engineering manager worth their salt should push back on this and argue for a seat at this table, every single time. I don't want to work for someone who is disinterested in new functionality in codebases under their purview.
I need them to then trust me to accomplish the objectives myself on smaller implementations or to lead the team on larger implementations.
I'm not asserting anything about if a manager should code, but rather calling out a statement in the article. A good engineering manager should never be surprised by some new functionality.
1. Reducing dev friction.
When I had managers who coded they were ruthless about removing friction in the dev and deployment pipeline because they had to deal with it too. If build times went up, deployment infrastructure broke or someone’s PR broke dev they would roll it back immediately. If someone consistently blocks PRs the manager noticed the trend and would address it.
2. You get a much better sense of IC’s contributions by writing code.
There are ICs who play politics very well and sell themselves but that set is not the same as the ICs who deliver. If you are writing code you start to notice which ICs have written key features, built critical APIs or worked on hard problems because of comments and Git blame.
3. Understanding your codebase.
I hope most managers have solid CS and engineering fundamentals but that is a necessary but not sufficient condition to grasping the full picture. There’s a reason it takes time to ramp up to full productivity on a new codebase. If you work in the codebase and have had to use that one annoying but critical library or dealt with that tech debt from 2 years ago then you know what is hard and what isn’t. I’ve found when a codebase has a quirk that makes developing certain features hard all of the non-technical people keep forgetting why we can’t do that thing and all the technical people have it burned into their brains.
I'd draw an example of someone who hasn't used git before, making a choice between a git repo and managing code by keeping daily .zip files. Anyone (almost anyone) who is a career coder won't see a choice there.
That example is so basic I think most EM would get that right even if they didn't deal in code but the same dynamic turns up at every level of work. There are situations where there is a right option, the right option is obvious to everyone who is working on it and it is is a drain on the org when management gets confused and thinks that something that isn't an option is viable because they aren't on the ground working on it.
But that a manager should always code is not something i found helping the team or the manager - all the time. One size does not fit all. In startups yes frankly there is hardly a need for a manager and it is TL, TPM, EM role combined into one.
In larger cos though a most managers are innundated with all kinds of non technical work (meetings, alignment, perf management, product discussions etc). While having coded before is a great thing keeping uptodate is actually robbing the manager of time for all other things on the plate (and those actually benefit the team beyond what meets the eye).
Besides at large orgs there is also so much technical (think large scale design and integrations) knowledge that a manager needs to keep track of which also needs time investment.
Then there are various level/career related things that necessitate one or more TLs a manager needs to work with or manage and coding often gets seen as a manager "not doing their job" or worse stealing a junior engineers opportunities.
There's a lot more that is very environmental but hope sets some context.
Second: If their ass is on the line, then they DO get a bigger say. They are paid for seeing potential problems, guiding the team, among other things.
I think I've seen a manager get laid off never. And often seen half their team laid off because they were terrible at their job, but the management class takes care of their own.
It's not a good leadership trait but it's an effective career advancing move.
The entire list on the post reeks of aspirational intermediary that doesn't actually do any of those things as effectively as empowered project/team leads who do contribute to the product. It's fluff and very easy fluff to remove without feeling pain. Of course, mediocre teams will have mediocre developers who won't want responsabilty and will benefit from intermediary "bossy" managers.
Managers always have a higher job security compared to an IC from my experience.
Poor managers always use this dumb excuse of 'ass on line' to override good decisions by ICs with their own shitty decisions.
This is so important, my managers who didn't code pretended things weren't too bad and took a "just deal with it" attitude whenever I proposed going for a QoL improvement.
you need to keep your hand in the game just to understand what's going on with the codebase. but you're not an a-list player here.
Yep agreed - I've seen a couple of managers that were probably fine as developers but struggled (to their extreme detriment) with being pretty average compared to the senior developers that they were managing. Their 'helpful advice' just served to show how superficial their understandings of the systems were.
Obviously a good manager might pitch in, understand their teams capabilities but it's not always a natural transition for senior devs moving to management.
Some managers will do that. Most won’t. Given that, it’s easier to just tell them all to code.
I promise you that it's not guaranteed. You need to actually go looking through the code to find everything that's wrong.
But agreed that youll find more mistakes, if your manager also happens to be the best IC on the team.
But eh? Doesn't matter how loud you are in a sync, you can very easily go off the actual content of what someone is saying. If someone goes off 5 minutes about how they managed to turn an object into a json string, that doesn't exactly make them look good.
It is like learning stuff from the book vs learning hands on. There is no book that will teach you skiing.
The same for working with the team - it is so much different than listening and trying to understand.
Everyone nags about how MBA graduates ruin everything by thinking that you can manage and it doesn’t matter who and what.
If you're really listening and asking the right questions you should be aware of even changes like "Were deciding to use this HTTP client rather than what we currently have". OK why are we doing that? What was the issue? Ask ask ask.
As a manager Id argue you have (or should have) more technical insight into your whole codebase than any IC
Assume you read your code base once and understood it. You get a feature, discuss how its going to be done (well add this table, add these endpoints, etc). You should have a damn good idea already what thats going to look like in your codebase. I don't think knowing all the low level details is necessary (most people would call that micromanagement) and besides writing code yourself isnt going to help know all the low level details of all the other projects
If someone is "good manager" that does all those things whether he writes the code or not he is going to be a "good manager" anyway. Explicitly writing code might not be best use of time but hey if person feels like he needs it that is on him.
If someone is "bad manager" that doesn't bother to deal with technical details and wants only to do "important management stuff" and thinks he can manage by proxies like counting story points or counting closed tasks, does not care about HTTP client A or B and learning the system, he is going to be a "bad manager" and will never even care about writing code.
Finally "bad manager" and "good manager" - is hard to tell because "bad manager" can be good for the company or a team as much as "good manager" and depending on many other factors it can be that "down to earth, hands dirty, good manager" might be really bad for the company or a team depending on business context.
Like imagine you were a coding manager 10 years ago with AI experience. Sometime over the last 10 years your team does AI infra. You, as a manager and as an IC, have zero AI experience (you've never trained a model, never used a trained model, never using any of the various AI frameworks). Are you still okay to manage this team or should you be replaced with someone who does have that experience?
I don't know that much about movie making, but my understanding is that there would be managers and/or leads within each specialty, who are (among other things) managing the interaction between their specialty and the director / producers.
That seems pretty comparable to what's being discussed here.
A movie director can see the sets with their own eyes. But you can't see the state of a software codebase without reading and understanding the code, and the most surefire way to do that is to try to write something, even just documentation.
You don't assess the state of your software by walking around the office and looking at hands on keyboards. You look at the codebase.
Many directors started in other roles in the movie industry, typically as writers, PAs, or other subspecialties. Chad Stahelski was a stuntman and stunt coordinator before he started directing John Wick, and it really shows.
I think the clear distinction is between someone who understands a part of the job, and someone who is good at part of the job. If you don't understand how costuming works, as a director, you're going to have a hard time getting good costumes, but by no means does that mean you're able to pinch hit in that role. I personally believe that it's difficult to replace hands on experience as a way to truly understand something.
In software engineering, I think there's a huge gap between managers who worked in some other industry and transferred over, versus having previously been an engineer, even a mediocre one. Knowing how the sausage is made is hard to replace.
Oh lord we'd better hope they have absolutely IMPECCABLE git fu if they are going to be using this metric. Unfortunately here on HN I've seen people essentially brag that they only know just enough git to get by and "who cares if I don't know all the other commands deeply." In any event, this scenario REQUIRES that a manager know exactly how to determine who originally introduced something, or, exactly where it was significantly improved if they are going to be reading comments and blaming to see "who performs."
The very fact a manager might be doing this has got me a little worked up, mainly as I know great managers who don't do this and who are scared of something as simple as the reflog.
For me a good manager is a facilitator, not a leader. Someone who removes obstacles for us. Whether they themselves are affected or not. Someone only fixing an issue because they have to deal with it too seems like a pretty bad manager to me.
They're not for pushing targets or trying to weed out non-performance, I don't work at a playschool. My manager is there to make sure I can do my job and that I can reach my maximum potential (including making sure I'm in the right job)
I think a good manager should be able to take a swing with the axe to get a feel for its sharpness.
i like the analogy of a sports team coach for being a manager. You can motivate, cheer, train, and drive the team to victory but you can't step on the field.
Summary: Managers who know how to manage, but don't know how to do anything are not the best managers. The best managers are the great individual contributors who never ever wanna be a manager but decide they have to be a manager because no one else is going to be able to do as good a job as them.
The skillset you need for management are different from those you need as an IC
Clearly those are not the skills Steve Jobs valued.
https://research.upjohn.org/cgi/viewcontent.cgi?article=1343...
But if you're looking to evaluate your manager, or hire managers who can retain great people, maybe not the best advice.
These are the best managers, because they have the disposition/skills to be a good manager, but also aren't going to make dumb engineering decisions.
IC's who become reluctant managers are generally terrible managers because it's not what they're good at and not what they enjoy.
It was a terrible mistake for me. So much of my value as a manager was being understand what the engineers were doing. I am not a great programmer but I can do it, and I could usually understand what an engineer was trying to do from looking at their check ins rather than listening to them in stand ups. I was just not that useful. There were times when the team was doing things that I knew I had seen done before with much better before with different methods, but just talking about it was relatively ineffectual.
If you can’t code, and you can’t get a manager role, you’re in trouble.
Are you proposing that they do coding on the side after they get off of work? I have a strict policy of “no side work” and I have since graduating from college in 1996. When I get off work, I don’t think about computers again until I go back to work the next day.
I’m not a manager. But I am now a “staff software architect” working full time at a third party cloud consulting company after pivoting from software development and doing a previous stint working at AWS in the consulting department (full time direct hire - AWS Professional Services).
My specialty is supposedly developing applications using AWS services. But as I moved up I find myself doing no coding.
My job is half working with sales and being the first technical contact for a customer and writing long and detailed requirement documentation and getting the customer to sign the contract for us to do the work. The other half is as a tech lead coordinating between the customer, project manager, sales, and the subject matter experts on our side who lead/implement the various “work streams” (development, data, cloud architecture, etc).
First issue, when I was looking for a remote job last year and the year before as a developer as a plan B job, every opening had hundreds of applications and I heard crickets. This has never happened to me and I looked for software development jobs in 1999, 2008, 2012, 2014, 2016 and 2018. The job at AWS fell into my lap in 2020.
It’s a shit show out there right now for software development jobs especially remotely. Did I mention I was looking for regular old enterprise Dev jobs?
On the other hand for differentiated strategic cloud consulting jobs, I had no problem getting offers quickly.
But as a manager, there's a whole category of things that only you can effectively do, because the social environment and power structures are set up that way. In that context, coding is a distraction for a manager. Writing code often takes a lot of mental energy and stays in your head even when you're not at the keyboard.
I don't want my manager getting nerd sniped when they should be coaching a struggling colleague, advocating to upper management, having a tough conversation with a toxic team member, or reigning in the PM.
I ran into this problem years ago. It's not exactly good form to be manager that contributes to the team's project, is at the apex of code review, and is responsible for team performance reviews, all at the same time. It can work, but without other people at your level reviewing your work, you'd be asking the team you manage to call out your mistakes. That's the kind of thing that a lot of people might not be comfortable with, so you're really asking for softball and rubber-stamp reviews on your work. This makes for poor optics: your work always goes to `main` virtually unchallenged, while everyone else has a harder time.
At the same time, you need to be technically competent if you're managing a team while in the review loop. To do otherwise is to create situations where you will lose face with your team. So, sticking to review only is probably the best answer here.
There are workarounds though. It makes sense to maintain a pet automation project just to stay sharp while solving real problems (e.g. every manager needs better reporting). You can also negotiate out cross-team contributions where your work may be reviewed by folks that do not report to you.
It's that old quote - better to keep silent and be thought possibly a fool than to speak and remove all doubt. If your job isn't primarily coding, and you parachute in to "help out" and end up making more work than you save, that burns a lot of goodwill that you can't really get back. You're not some junior dev that's going to get better with mentorship.
Every single time without fail that I have had a manager who still tries to be an active contributor, one of two things happen.
Either they never keep their commitments as a coder because they are spending too much time on their management duties including meetings, manhole up, and career development for their reports or they are horrible managers who don’t or can’t do what I need from them as a manager - get me the resources I need to do my job, play politics and manage up and especially fight for raises.