Hacker News new | past | comments | ask | show | jobs | submit login
Coding as an Engineering Manager (nemethgergely.com)
307 points by gergelyke 4 months ago | hide | past | web | favorite | 138 comments

I think a lot of organisations (and people) fall into the trap of thinking of an engineering manager as a more senior tech lead, when in fact they are very different jobs with very different modes of working.

As soon as you start taking on managerial work, your development productivity starts to fall rapidly. I've never found a happy medium, nor have I seen others achieve it. People who try to do both quickly settle on ~80% of one and ~20% of the other. Which is fine if you acknowledge that you can only do ~20% of the other, and that the shape of it is likely to look very different to when you were spending 100% of your time on it.

As others have mentioned, if you are an engineering manager and you still want to dedicate some of your working time to development, you have to take yourself out of the critical path. Nobody wants to hold up a release because you were working on an important part of it and you've been constantly interrupted all week with managerial work and meetings.

Instead, pick things that are either tiny or decoupled from the release process. Things like refactoring, non-critical bug fixes, documentation, tests, spikes. These are the kinds of things that won't fall apart if your development productivity is unpredictable and the kinds of things that are easy to put down and pick up again. As an engineering manager, you're interrupt-driven which is incredibly disruptive for focus. If you do write code, then it has to be the code that works within those constraints, or you'll end up being a blocker for the rest of the team and your managerial work will suffer as well.

Agreed with everything you said, and will add 2 major points:

1) God help you if you choose 80% coding and 20% management. Your team will be very unhappy. Maybe you'll take care of the HR/Admin work that noone else can, but their career growth will stagnate, and morale will be low.

2) If you do pick 80% management, and 20% engineering, understand that your growth as an engineer will completely plateau. Yes, you can still participate in design reviews, even weigh in on code reviews, and ship the occasional bug fix/perf improvement/nice-to-have feature or some operational tool that will save your team a bunch of time and make your oncall happy.

But without hands on struggle with a new paradigm or scaling challenge, you won't grow. And given the choice between improving as a manager or improving as a hands on techie, you have to make the choice to work to improve as a manager, and start doing all the invisible things you never realized a manager does (least known and most annoying is managing UPwards)

SOURCE: Just spent a year stepping into a vacant engineering manager role on my team, tried to do the 80-20, didn't love the management role, am back to a full time senior engineer, and am frustrated with my skills that appear to have atrophied.

I tried to do the same thing too. Here's what I learned.

The people who are "managers" are also splitting their time. They only need to spend maybe 20% of their time in actual supervisory work. The rest of their time is spent on tasks that are delegated to them by their higher-ups. These tasks are largely forms of information processing: Gathering, analyzing, and communicating. Excel and PowerPoint. But they are typically one-time tasks that are not worth automating.

I was happy with the 20% supervision, no problem. But the 80% information processing tasks just weren't interesting to me.

When they finally posted an opening for my old job, I went to the boss and asked: "What do you want me to be, a mediocre manager or a great engineer?" Oddly enough, moving me back to engineering resulted in a second promotion on top of the first. Meanwhile, I did enjoy receiving a fair amount of management training and insider understanding about how the business works.

That's exactly what happened to me. I thought I would love management. I love mentoring, developing people, prioritizing tasks for the team, balancing delivery and long term growth.

But those "information processing" tasks you mentioned are the ones that nobody who's not a manager knows about and i HATED them.

>(least known and most annoying is managing UPwards)

Boy if that ain't the most true statement about moving from engineering into management, I don't know what is. I was so exceptionally bad and unprepared for this when I tried my hand at management.

I will have to second this. I've taken on the role of engineering manager this year and found managing upwards by far the most difficult aspect of the job, and not something I expected at all.

What does it mean to manage upwards?

Keeping an eye on the bigger picture at your company. Knowing what the current initiatives are. Knowing and working towards what will make your boss a hero. Empathizing with other parts of the organization and understanding where your team fits in.

“Make your boss a hero” is one of the most deranged things I hear managers say. At my first job out of university, my manager told me my job was to make him look good. I instantly wrote him off as a moron. We worked for a publicly traded company. Nobody cares about how you look or your little empire. This isn’t your money. You are hired to manage it for the shareholders, not to look cool or be a little rentseeker

Sounds like the expression rubs you the wrong way.

How about this instead: a manager is a representative of a team, and vice-versa. Not every senior leader in a company has time to get to know and evaluate every individual member of every team; instead, they evaluate a manager as a proxy for the whole team. You, as a team member, will be evaluated through your manager. It's up to you whether that evaluation is positive.

"Make your boss a hero" isn't a very endearing way to phrase it, but it's a concise way to say that in a traditional corporate hierarchy, your fate is aligned with your boss's fate.

Idk, on the job I was in at that point I worked my specified amount and then worked on developing my skills and education outside work. I watched as my boss’ project floundered, he ran out of budget for contractors, employees who were less weak started leaving and their positions not filled. As my boss started trying to tell me I needed to fulfill more of a “leadership role” I could tell he was trying to pass off a terrible project to me so I demurred. Anyway, I got laid off, got a big severance, got to continue educating and doing things like that while collecting unemployment as I applied for jobs after, and ended up getting basically a position at more or less my dream lab.

I understand it’s different if you’re older with kids and a mortgage or lot of health bills or whatever but I haven’t really felt like my fate has ever been tied to any of my employees.

I feel like it’s just headgames for your manager to try and convince you that making him look good is essential to your career.

Edit: in case this is relevant the shitty project was actually the best project in our department as far as I was concerned before my former manager ran it into the ground by trying to look good by promising dozens of features for people who didn’t use it instead of building something that worked and was extensible

> in a traditional corporate hierarchy, your fate is aligned with your boss's fate

And as a company owner, your fate is aligned with your customers' and investors' fate.

Hence the importance of sales, marketing and investor relations, i.e. managing OUTwards and UPwards.

I think the flips side of this is that a great manager deflects most or all of the credit to the team.

Therefore the team works hard on things that will make the manager and the manager's managers look great in the woder scope of the company, and the manager says, correctly, that the team is responsible for the work.

I think this kind of manuevering is fundamental to large human organizations with scarce resources (you know, all of them) so the goal is to make it as healthy as possible.

"Make your boss a hero" is one of the most deranged things I hear managers say.

Why? If my bosses boss is happy with my boss then our department gets a bigger budget, more interesting projects and, most important, we get more autonomy and get left alone more. All of those things directly improve my quality of life. If I can keep my bosses boss off my bosses back, then my boss won't be on my back.

The challenge for some people is the issue of whether to accept and forgive your boss for appearing to be stupid or mentally deranged. Bosses may fail to share all the information they have. The results are that their decisions may look crazy stupid, having no apparent justification. And some bosses ARE stupid or have mental problems. (For example, I once worked for one who had a brain tumor.) For some people this starts a vicious cycle of resentment -> poor communication -> more resentment -> worse communication. Other workers accept that part of a job is to supervise bosses and try to diminish their foolish/harmful/incompetent behavior -- to make them look good in spite of themselves. For these accepting reports, there is no perception of injustice in the need for reports to manage wayward supervisors: it's just how things are. This sets up a virtuous cycle of improved communication -> more mutual good will -> improved communication -> more good will. The boss-critical employees tend to endorse meritocracy. The boss-accepting employees see no moral issue in who is assigned leadership responsibility and compensation. If you see nothing morally wrong with your having to rescue your bosses from themselves, you're probably a boss-accepting employee.

Your boss is entrusted with other people’s money, resources, employees to manage it in a way that generates value for them. How he looks and how his image impacts you feeling like you got an interesting project is irrelevant except exactly insofar as it influences this.

I was on the same boat, went back to senior dev but found myself missing the leadership side of the job (improve engineering process, cross team architecture etc) so I'm moving to principal SWE which seems to be the sweet spot in my current company.

The amount of time management takes depends on the size of your team. I've done 80% engineering and 20% management with small teams for more than a decade of my career. It's not for everyone, certainly.

I hate to say it but "it depends".

In a smaller company where teams are more cohesive and you have pretty clear objectives, management can be easy. But in larger corps, management becomes this big firestorm of meetings where if you as a manager don't represent your team well enough they will be starved off resources, projects and perhaps more importantly, recognition. Team members will see this and jump ship quickly enough.

This is perhaps the biggest reason I personally prefer smaller companies. Its statistically more likely to have a more effective manager, because a manager doesn't have to be a superstar to get their teams what they need.

what kind of managing do you do ? I dont spend more than 1 hour a week with my manager, so I am not sure where your time goes ?

Current Manager. It's "Support Engineering" but currently:

- Metrics for the business to understand what our pain points are

- 1:1 Prep and post 1:1 vision planning ("Is everyone aligned?")

- Performance review prep (time of year)

- Chasing down other managers to try and get problems fixed that were surfaced in 1:1s

- a "net" above the team, to filter out any business side bs that would go their way that would be a distraction. (The team has to trust that I have their best interest in mind. That's why a net, I let them know, and they can see)

- Capacity Planning (Do we have enough people for the growth plan? Oh, did the growth plan get updated? Lemme take another look...)

- Hiring

- Reviewing Resumes

- Are our policies up to date?

- Process thinking (usually surfaced by pain points from 1:1s)

It's a lot of meta thinking

Off the top of my head, these are the kinds of things engineering managers often have to deal with:


- Writing job specs.

- Dealing with recruiters

- Reading CVs/résumés

- Interviews

- Onboarding

- Outreach

- Who do you need to hire next quarter to avoid capacity problems?


- How do you level up your developers? What new responsibilities can you delegate to them so that they can grow without swamping them? Are you available enough to them so you can help them take these new tasks on?

- Evaluating training courses / conferences etc.

- Are there any personal or interpersonal problems that need sorting?

- What can you do to help your team gel better and feel like they are part of a team?

- Where are your team members' careers heading and how can you help them get there?

- Your team has grown too large to manage effectively by yourself. How do you split things up?


- What is everybody working on? What will everybody work on next?

- What are people blocked on? How do you unblock them? What is likely to block them next?

- Can you do things in a better way? How?

- You've got a lot of bugs in the backlog. Is there a root cause? Are there any patterns?

- You aren't performing as well as you thought you were. Where is the time being spent? What's the cause? Are the estimates wrong or the performance?

- Some people want to shift their hours or work remotely. Can you accommodate this? Do you have to adjust process and if so, how?

Line management:

- Approving invoices

- Approving holidays

- One on ones

- Salary review

- Getting people back to work after sickness / parental leave / sabbaticals

- Disciplinaries / performance problems

- Firing / redundancies

- Exit interviews


- How well is your team performing? How do you measure this and how do you improve?

- Do you have enough capacity?

- If not, which features do you bump?

- Are there any bottlenecks in the pipeline?

- What are you telling the shareholders you're delivering next quarter?


- Does marketing know what you are building next? What information do they need from you to sell it?

- Do CS know how to support your customers with the new features?

- Feedback from the rest of the business about the product and how the tech team works.

- Are the specs precise, correct, complete, and achievable?

- Features have been requested. Are they technically feasible? What's the general size of it and what quarter can we deliver it by?

- A big customer has a major problem with your product. It's not your fault, but it has a disproportionate affect on the customer. How do you prioritise solving this problem?


- A shareholder owns a business with a related product that they want integrated ASAP. How do you deal with that pressure without disrupting your plan?

- One of your suppliers has a data breach that has leaked your data. How do you deal with that? Have you defined processes for reporting security issues?

- A supplier is failing to perform adequately. Can it be fixed? How do you move away? How soon? Where does the work fit into the schedule?

- A supplier has changed their pricing structure. Do you have to move? How soon? Where does the work fit into the schedule?

- New legislation has been passed and you have to make changes to your product. What are the requirements?

- A complaint has been made about the accessibility of your product. Does it have merit? What's the impact of fixing it, and how urgent is it?

- A big prospective customer is on the verge of signing, but they must have one feature that you weren't planning on building until next year. How do you rearrange things to get the customer with minimum impact?

- A service you use is changing their API. What's the risk of staying on the deprecated version until it can be planned in?

Amazingly thorough list. Did you compile it from your experiences? What field of engineering are you involved with? Hopefully you did not experience all these problems personally.

Yeah, virtually all of it is from personal experience, although the most negative ones are fortunately rare! I manage a team working on a platform that lets non-technical people build communities through web & mobile apps, so the tech we're dealing with is roughly Rails / PostgreSQL / VueJS / Swift / Kotlin / AWS and you could loosely describe us as a social media startup.

I guess if I could summarise the above, it's that there's an awful lot of very ill-defined and irregular things that need deciding about and acting upon, and it's an engineering manager's job to corral that into some sort of order and make sure it all happens. Lots of spinning plates and dealing with things that don't really fit neatly into a job description, especially at smaller companies.

Okay, saved.

A good manager will give you the idea they aren't doing much, paradoxically.

This. A good manager filters out most of the outside noise and problems so the team can focus on the task at hand.

I'm an engineering manager. It is Friday. I have 10 scheduled events on my calendar today:

1 phone call with a candidate that accepted an offer

3 scrum team demo sessions

3 standups

1 standing meeting for escalated support case review

2 1:1 meetings

In addition, I will spend a chunk of time reading and sorting resumes, preparing a presentation I'm delivering next week, following up on a few blocking issues that came up last night/this morning, and reviewing the progress of software upgrade that's on-going.

For me I have always found the best projects to work on are Developer Experience projects.

In most companies its hard to dedicate the time to DevEx but as a manager I can rock out a few features for our cli in a couple hours. If i'm delayed it doesn't really hurt the status quo but when I succeed my developers love it because I make their lives easier (the (almost) entire point of being a manager). It scratches the coding itch too although I have lost many evening and weekends getting carried away.

As others, I 100% agree with this and it's what I've also been focusing on as a manager.

Someone told me: Once you have 10 people on your team, if you spend 100% time coding, you increase amount of coding by 10%.

Instead, either spend time finding that next hire (increase by 10%), or work on other things that improves the team's productivity even more.

For me, the hard part is when the team size is ~5-8 people. Too big for me to be 80% technical, but usually not quite such that managing is 80% either. This is when it's easy to sign up for critical tasks and get interrupted due to manager stuff, and as a result work 160% total. Once the team grows it usually gets easier.

Ditto on this. I've been doing this by doing things like updating our libraries to be more secure, implementing lazy-loading, speeding up our build times, etc. Things that all increase engineering productivity and happiness and simultaneously aren't necessarily things that would be prioritized to be worked on normally. And of course as you point out, they're all things that can be worked on without blocking anyone while I get pulled away from code for sometimes days at a time.

In a lot of organizations a Lead Dev is still a coder, but keeping an eye on the long game.

Personally, I think that the sort of code you're talking about here is a big part of the mix of things that a Lead should be working on, or at least championing. You don't actually want these people to have too much code with their name on it for the same reason you don't want Managers to do it: It gets treated as a sacred cow whether you want it to or not.

For myself, I'd estimate it's about a 40-40-20 split between DevEx code, the most safety-critical functions in libraries, and example code respectively. But, I'd aspire to flip the last two numbers (on a high functioning team I should be able to trust other people to do bits I barely trust myself to get right).

And unless you enjoy bottlenecks (some people do because it makes them feel special), you should be trying to get most of the code written by people of average skill (the peak of your employee bell curve). So if I'm writing even half as much code as they are, things aren't going well at all. You want a light touch.

>DevEx code

I am trying to understand the meaning of this word through context and/or through Google but I only get some social media platform. What is DevEx.

Honestly GP is the first time I’ve heard that name but it’s an area I care about. Way too many of us work harder instead of smarter, and I used to joke with a UX friend that we were going to steal all their people to work on dev ergonomics.

Developer experience. In other words, improving the tools your developers rely upon to do their job. It's like UX, but for the development process.

IBM called this role the toolsmith in a chief programmer team, a 1970's development paradime.

I have worked in an early web dev team that sort of worked like that at BT I was the backup/toolsmith.

Ive been called a toolsmith before, but I fear that label misses the mark. I do what I consider to be the barest minimum of user studies (approximately what I don’t think my boss will notice) and I don’t observe others putting half as much effort or empathy into it as I do.

I don’t know if I’m crazy or living in the future, but it’s definitely frustrating and a little alienating.

This is exactly what I do, currently my main coding project at work is a library to improve our tracking of system level metrics across applications. If I get some time I can add a few more things that suddenly get tracked across multiple projects, making debugging easier in the future, and if I don't nobody really notices.

If you can hook into one of your upstream, this becomes even easier.

We call this the '@companynamespace' layer, includes wrappers for internal APIs, and additional sugar we use everywhere (AWS, status, metrics)

That's much what I'm doing, a standard set of utilities that any service can depend on and use without thinking too much about it.

I apologize for not having a lot to add, but I had to upvote and reply for this phrase alone:

> make their lives easier (the (almost) entire point of being a manager)

I am glad I am not alone in this, and sadly, I feel that way most of the time.

It's been interesting to watch how we handle it here at Sentry (75 people) -- my manager, the CEO, still codes every day and a lot of it is non-trivial: https://github.com/getsentry/sentry/graphs/contributors

One pattern that seems to work is to write the code if it's easier to explain it in code (& tests!) than in words.

That's interesting! I think he's definitely an outlier though. He must have a good executive team under him to lean on so that he can focus some time every day on development.

That's a good rule of thumb too – haven't heard that before.

To be honest, as a customer, this terrifies me if I take you at face value re: 'codes every day'

FWIW: as the head of product, I code a few times a week but mine is all sample code for our customers or demos.

We are a developer focused company so your mileage may vary.


> Instead, pick things that are either tiny or decoupled from the release process

Totally agree. What I've seen work is when engineering managers work on non-critical (but high impact) improvements, on initial prototypes (so that they can have a good idea of challenges when they allocate resources), bug fixes, getting involved in outage remediation, etc.

This is ultimately drove me to leave my last job. The company believed the word "manager" meant, "do everything that needs to be done." You're the senior developer? We need this fixed. No, I'm the manager. I manage people. What about the project? You're going to run it right? Is the project a person? No. What was really sad is that I had to abandon the management portion to do everything else. They were completely dumbfounded as to why there was no professional development going on in the entire company.

This is very well said. Do you think when a manager jumps into critical parts of the codebase, it also causes an over-reliance on that person? i.e. Something is behind, the manager takes the wheel, and finishes it off over the weekend due to their experience. Now, the junior developers feel like they "don't own" that component?

I've seen similar things happen, where there are certain areas that can only be worked on by the lead dev / manager because it's complicated and undocumented. It's usually because the codebase started out as a one-man job and the developer stuck with the company long enough to go into management but never got the code into a good enough state for others to work on it effectively. It's a business risk in lots of ways, including causing morale issues as you suggest.

I think a lot of developers who become more senior also really struggle with delegation. We're that used to dealing with every tiny detail that taking our hands off the wheel feels unnatural. We're that used to solving technical problems, that when somebody has a technical problem, our instinct is to solve the problem for them instead of pointing them in the right direction so they can solve it for themselves. But that doesn't scale and doesn't help more junior developers grow. Teach a man to fish and all that.

Thank you so much for talking about critical path -- I think that is the biggest takeaway.

As someone who had a manager who was very hands on... it was frustrating. The code he wrote was brilliant, but it was hard to review against him. Furthermore, when bugs came up, it was always "hey guys I don't have time for it, please fix it."

Ay, I'm just discovering this now. It's hard to give up my identity as a dev.

Especially since I've been working as a solo freelance dev and moving into managing teams feels like I'm leaving my main monetizable skill behind.

For those who don't know a wonderful resource for this is https://www.manager-tools.com/

I used to be dislike the idea of being an engineering manager and wanted to stay in the code. Interestingly enough, having children completely changed my perspective on management. Some important management skills - e.g. patience, delegation (babysitters!), investing in someone's overall productivity and long-term success (Schools! Extracurriculars! College!), prioritization (family comes first!), sometimes cleaning up after someone else's messes (with kids, literally!) - come from being a parent.

I'm half joking, but only half! I believe part of being a good engineering manager is having had hands-on software development experience so as to better keep a check on velocity, code quality, and overall tech decision-making. Much in the same way, I feel like I can be a good parent and can teach my kids how to process their world because I've lived it before.

Having a kid during my transition to management (in the absence of existing management) brought me to the exact same thought process, and it's a dead-on observation I live every day six years later. It becomes much less about the executional skill, and much more about the aspects you listed above. The skills involved in parenting and managing are one big feedback loop of sorts.

Having someone that can see the forest for the trees and chart/change course as a team is, additionally, crucial. It's just that, at home, it's not just me.

That is an interesting connection. I've always been interested in growing into an engineering manager, especially at places where there is a distinction between managers and leads. I've also always been enthusiastic about having kids (particularly compared to my same-age peers). I guess I just naturally value investing in other people's success and easing the path for people to learn lessons that I might have learned the hard way.

I wonder whether interest in / enjoyment of parenting is correlated with feeling likewise about people management.

I've noticed this as well. Running a home together with a partner, especially with children in the picture, is an organizational challenge not unlike any other. It involves a lot of listening, acting, planning, budgeting, and keeping calm in the face of (neverending) problems. When I show up to work, it's more of the same.

I always make sure I can still compile and execute the code. If I can't, I get someone to update the README files so that I can. That also helps me make sure new members can be onboarded.

I also do off-critical-path features and bug fixes. That said, I did write a fair bit of the code base before taking a more managerial role, and I contribute to discussions about what will make the thing faster.

Compiling and running your team's code could be the most powerful excercise to stay connected with the engineering part. Way too often I would discover that some functionality declared as 'done' cannot be demonstrated in any way, and such discoveries initiate discussions leading to meaningful decisions.

Yeah exactly. I see it as a form of QA. It's not serious if discovered early, but I've come across times when there was some new dependency I didn't have, forcing me to google how to install it. So then I tell the team and someone will update the docs.

Basically, if only the people who wrote something can compile/execute it, it isn't done.

I've worked in organizations that promoted engineers into management, rather than bringing in outside managers or managers without engineering backgrounds. For highly engineering-driven orgs this can make a lot of sense, and depending on how it's done and the people involved, it can produce great results.

However: when those managers hold on to their engineering responsibilities, their teams suffer for it. There's a negative stereotype among engineers that managers don't do anything anyway, so maybe the team just needs a designated engineer to play manager in order to go to meetings, approve days off, etc.- the bookkeeping parts of management, but not the managing parts of management. There's a perception that the other engineers on the team are super self sufficient, what do they need a manager for anyway?

Often these managers would be allowed to continue doing engineering as a motivator- they didn't really want to be managers in the first place, let's just let them keep doing their thing and throw some more money at them and everybody will be happy. But it really feels like an antipattern.

Working on different teams where managers didn't do any coding was a breath of fresh air. I didn't know what I was missing. Managers can do the most good by focusing on things that allow their engineers to be as focused on their work as possible, and as unblocked and undistracted as possible. It makes a huge difference. It doesn't matter how incredibly self-sufficient an engineer is...if they get stuck doing a bunch of extra non-engineering stuff because their manager doesn't manage, their work and happiness will suffer for it.

So, at least based on my own experiences, I've come to see teams where the manager still has engineering responsibilities on their own team as a red flag. Anecdotal and highly contextual to where I've worked, but that's been my experience.

I've talked with several companies in the past 6-8 months where this tenure-based model of elevating engineers to management positions has broken down quite a bit.

What generally happens is, once in management, they end up on a track of being more business-facing and the breadth of their role continues to expand (while reducing hands-on code time) to the point where the organization has to relent and hire from the outside anyhow when the promoted manager finally admits they'd have rather remained hands-on.

I try to identify engineers on my team with an interest and early aptitude for management early-on, and mentor in that direction while mentoring those who wish to remain hands-on in the other. I always need a right-hand person to handle the higher-order organizational aspects while I'm away, and likewise, I need a left-hand person to lead the day to day technical execution. So usually I'm not lacking for support while at the same time elevating them to the next level (and without needing to hire someone from the outside).

Can you provide specific examples of things that you found the most useful when you finally had a full-time/non-coding manager? Having somewhat recently transitioned into an engineering management role, I'm curious if there's anything (or situation) in particular you'd highlight.

This is all in the context of large tech companies, so YMMV. Things like, going to high level meetings so engineers don't have to, and making an effort to keep engineers from getting sucked in to too many meetings period (at least, ones where their presence isn't critical).

Helping with bug management and task prioritization, minimizing engineers' multitasking to maximize productivity, and guiding the team towards long term goals. Engineers tend to be super focused on their immediate and short term tasks- what they're supposed to be doing right now. That can make it hard for a team to collectively maintain trajectories towards long term goals over the course of months and years. IMO a good manager will be the ultimate maintainer of the long term goals, and can helpfully keep everyone on track as they individually focus on shorter term stuff.

Also, enabling their engineers' professional development. Many engineers really thrive when they're tasked with something that involves learning and using some technology that they don't know, but are curious and excited about. As much as possible, if it aligns with team goals of course, it's great if people get a steady trickle of these kinds of tasks. Only if they'd want them, of course. It feeds their curiosity and creativity, and helps the whole team keep their technical edge. But these things are unlikely to happen unless the manager picks up on the interest and potential, and explicitly tasks someone to do it.

Finally, it might sound silly, but making a point to do pleasant team building stuff like bringing in bagels or donuts for everyone once in a while, or having the occasional team lunch at a cool restaurant (assuming there are cool places nearby). Also t-shirts. :) Quality t-shirts provide a surprising amount of bang for the buck in terms of goodwill, at least in large tech companies.

These are great; thanks for the insight!

We don't let managers code where I work. We also don't let them do anything technical besides match employees to work they want to do. Your manager is just there to make sure you can focus as much as your time as possible being productive.

I really like this approach, it's extremely bottom up. It's not that I think our managers don't have technical skills. They all have impressive backgrounds as SWEs etc, but this setup is for the best. The alternative at other companies I've worked for ended up with managers who slowly lost their technical skills and essentially fossilized, and couldn't make rational tech decisions, and managers who intertwined their management success with the product and drove it to ruin because they weren't making the best technical decisions for the product.

So please, if you're a manager, stop coding. Manage people, unblock them, make sure they are happy. Empower them to do the coding for you.

"We don't let managers code where I work."

"...ended up with managers who slowly lost their technical skills and essentially fossilized, and couldn't make rational tech decisions"

There's a connection here. A technical manager can't make reasonable tech decisions unless they do some tech work, but perhaps we just need to be more clear that what you want is a pure project manager to check off boxes.

I think a good tech manager still respects a bottom up approach most of the time, but should have enough experience to push back when the group is steering in the wrong direction. A generic project manager isn't going to do that.

I've had a primarily technical career so far and am working on switching to engineering management in the foreseeable future.

Once I'm done with that switch, I don't want to be frequently making technical decisions, rational or otherwise - that should be the job of the tech lead on my team, with input from everyone else.

I will, of course, need to remain technical enough that I can understand whether my tech lead is making good decisions, as you say. I'll also need my team to respect my credibility enough to know that I relate to what they're dealing with, and to be able to effectively keep them unblocked.

But none of this requires sustaining continued technical contributions within my day job past the initial transition period, at least not once the company is above a certain size.

One of the best managers I've ever worked under (indirectly) was not technical and didn't pretend to be. What she did know was people and organizations.

When have you ever heard of a large org making a re-org to solve real problems after substantial consultation and with anything close to universal buy-in? She managed that, and well enough that she correctly used arguments from the rank and file to explain the re-org to other parts of the company.

That's the kind of mentor I'll want to learn from as a manager.

> I will, of course, need to remain technical enough that I can understand whether my tech lead is making good decisions, as you say

A lot of stress has been created for teams I'm on by semi-technical managers chiming in. By telling yourself you'll remain technical enough, I'd encourage you to define what that actually means. Thinking you know stuff that you actually don't is going to be a huge pain in some one's ass.

I once had a boss who kept pushing for us to to do things in a certain way using a remote API, but the API client didn't support the features needed to do the things my boss insisted we use. The boss wouldn't allow for a discussion on extending the API client because he was 100% certain he was correct when he was in fact 100% wrong. I started looking for a new boss after that.

Completely agreed. Knowing the limits of one's knowledge and accepting feedback when one is misinformed are important skills. I believe I already do that and I certainly don't plan to stop.

If I have a competent tech lead under me, I wouldn't be pushing for a certain technical way to do things except if the requirement came from some external constraint like the business or another team, and I would accept the limits of technical possibility.

I might share my technical input if it happened to relate to my area of expertise in a way that wasn't otherwise sufficiently present, but I want my team to know their stuff, not to defer to my technical knowledge out of some personal need to be the expert. Also my input != final decision, with respect to technical decisions, if I'm not tech lead on the task.

Even if I had to push for or against something, I'd do my best to defer to my tech lead (i.e. not me) to actually come up with and lead the solution. It's not a manager's place to prevent a tech lead from conducting a discussion on technically how to achieve the goal within the applicable constraints.

> One of the best managers I've ever worked under (indirectly) was not technical and didn't pretend to be. What she did know was people and organizations.

I don't mean to create a debate around sexism in the workplace, but could this be because in general in the US, we expect males to have a big ego while for women its OK to be not have one? As a male, I've had trouble with my ego getting in the way pretty often but I try to recognize that and be better about it.

You're right about the general pattern in the US, but that isn't the explanation in this case.

She made sure there were plenty of technical managers under her (she was a VP). The problems that really needed fixing were organizational, not technical, and she did something that a manager with a more technical skew of skills might not have known how to.

The managers in that company who tended to be good and well liked didn't have a big ego regardless of gender, even if (as in her case) she was appropriately aware and confident of the areas in which she was strong.

> "We don't let managers code where I work."

That leads exactly to the situation you described below.

> "...ended up with managers who slowly lost their technical skills and essentially fossilized, and couldn't make rational tech decisions"

I recently left my job at a respected social network over my new manager lacking the proper technical skills yet not accepting more reasonable solutions.

Case in point: imagine you have an API endpoint you normally hit with your service, periodically. We make a GET request to this endpoint but it also supports POST. The parameter sent is q=<some_long_string>.

It comes to my attention that this long string can get over 1MB long, at which point it causes issues with our service.

I bring up in a meeting that we should just POST to this endpoint instead of doing GET at all times because the data could be larger than 1MB at times. Makes sense, right? Well, my manager without the proper technical awareness basically pushed for us to check if the query is larger than 1MB and POST if and only if it is larger than 1MB.

I gave my two weeks a week after that and made it very clear to the upper management that this manager was the reason I was leaving and I felt like I was being stifled by having a manager like this.

But your manager was doing what I said he shouldn't do which is butt in on technical decisions. You should have talked to your skip and your team mates about your manager stepping over the boundary. You should have also told your manager you wanted to switch teams. There are plenty of other managers who don't work like that.

While that would satisfy the immediate problem of not having to personally work for such a manager, it doesn't solve the problem that the company has such managers.

Better to leave.

As long as the company has clearly defined the roles in the way I've described there is no reason to leave. There will always be outliers who are not working as intended. That's human nature for you. The real solution is to try and help those people understand their role better, and if that fails, then get rid of them.

There is at least one bad egg almost anywhere.

I mean no disrespect, but if you quit every time you have to work with a bad/obnoxious/egotistical/incompetent/delusional manager (or project manager), you'll never remain long in one job.

yes, to you and the other sibling, i didn't mean one bad apple ruins the bunch. i assumed reasonableness of the GP in that he didn't experience once bad interaction and bail, and that he left out all those details for the sake of brevity. because you know, most people are (by definition) reasonable.

i thought it would have been too much to qualify my remarks but i see i should have.

i only meant, if this is the norm for a company, leave post haste.

thank you for challenging my comment, it was well deserved.

As others have said, a good manager shouldn't have got involved at all with this discussion beyond "figure it out!". Technical decisions aren't their job anymore. They are there to solve people and organizational problems now--not technical problems.

We don't want managers steering anything. That's either the job of the group or the tech lead. The manager is supposed to manage the team the same way a managers manages a baseball team. You get the right people, give them the right tools, and let them play the game.

Exactly, this feels right to me. A manager's job should be to keep track of things but without micromanaging too much (a good example was checking being able to build your team's code on occasion etc.) and also providing the tools and protection they need from upper management so that the team can play the game.

In my previous team, I essentially had the tech lead role in the team but that role wasn't acknowledged with a title, although the entire team was very aware of it.

Ended up getting too much friction with the new manager and I left.

I got a job almost simultaneously as I left. It is much shorter commute, it pays more and it is more exciting. However it is unfortunate I had to exchange 3.5 years of rapport I've built at a place for these.

The role of a project manager is to have someone who can represent the user. The project manager should be talking to users, soliciting product feedback, getting bugs filed, and feeding this to the team.

The role of a manager is to manage the people on the team. That means helping them grow their careers, help them switch teams if they find something that would be a better fit, promote the teams work, unblock people, give feedback on how team members are communicating, manage meetings and fill in for team members so they can spend more time coding that sitting in meetings.

Basically a people manager is like a boxing manager. He gets the champ into shape, puts him in to the ring, and cheers him on. When the champs not fighting he makes sure the champ can focus 100% on training.

I think you mean "proDUCT manager" – a project manager usually focuses on schedule, balance of work, bottlenecks, and maintaining (but not defining) priorities.

It's pretty common for an engineering manager to do project management, and to some degree it's necessary: people management and priority management are closely related.

> So please, if you're a manager, stop coding.

Not a fan of this advice at all. My best managers were also fantastic engineers that actively contributed to the project. They were better at handling escalations, better at making technical decisions, got more respect from their reports, and were fantastic for team morale.

If you have a bad manager, it's not because they're coding, or too technical, it's because they aren't good managers. Good managers also know how to motivate, delegate, support, and lead. They know when to get their hands dirty, and when to let their teams fail and learn. And most importantly, they understand engineering tradeoffs, and when to make them.

Most top tech companies have very technical managers, and even though they're not always great, I'd take a random tech manager over a random non-tech one any day.

They're not supposed to make technical decisions. What you're talking about is one person wearing multiple hats. Sure, some people can do that. But the end goal is to have a manager that manages as his sole job. Getting your hands dirty is a bad thing. That means your spending that time doing technical work when you could be reducing friction for the team and promoting their work.

Sorry. I guess I straight up disagree with all of that.

I also disagree with the notion of "sole job", which inevitably leads to "that's not my job", a common response at ossified organizations. IME, well-functioning companies are made up of flexible individuals with good judgement.

Obviously, there must be a "main job" for every individual -- I think that's absolutely required. I really wish more managers would actually get their hands dirty.

If you go too far down that road, you wind up with Dilbert-style PHBs who know nothing about the work their team actually does. I'd rather someone who can get their hands dirty, help out the team if necessary.

Imo getting your hands dirty is a prerequisite to understanding your team... and for me it's something you have to keep doing. I agree you shouldn't be the one making technical decisions, but wouldn't say DON'T get your hands dirty as a manager

There’s only so many hours in a day. The time you wasted coding could be spent much more productively doing your actual job which is managing.

How big are your teams? This probably makes sense for a larger team where the person is less technical and more people focused. In most small companies, this would not cut it.

I worked with another team (6 people, 1 manager.) Their manager did NOT code and he was not well respected at all. It caused a ton of morale problems, complaints, etc.

That's about the maximum number of people a manager should be managing.

The biggest issue I see is managers who don't code making technical decisions. Like I said in my OP, managers are supposed to unblock people. The team or a tech lead should be making the technical decisions.

That makes sense too - as I see it depends a lot on how big the team is that an engineering manager works with, as well as if the team is a product or a platform team, among other factors.

Our teams have a hard size limit, after that we split and get a manager for the other team. If a manager is managing more than a handful of people, he can no longer give members the attention they need.

A lot of companies do not have the foresight or resources to simply split a team though.

There's lots of way to organize teams as well. At previous companies we've organized yes around products, or around skillsets, for instance.

I don't understand the second paragraph; how did a manager that codes fossilise? Conversely, how do your current managers not?

Fossilizations happen more so because companies treat manager as a promotion rather than a separate track for engineers who want to focus on people. You have managers who are used to solving problems with a skillset that's probably been outdated by the pace of technology, who no longer have the time to invest in keeping current since they're essentially wearing two hats now and they have more going on in their lives.

I really like the "work on bugfixes and small features".

There's lots of coding work that is easy to drop at a moment's notice and not mess up other work, schedules, etc.

Tooling is another one. Find processes that could use a nicer tool.

We have an EM who took on grunt work (but critical) so the team could focus on tasks on the charter of the team. Personally I really appreciated that because otherwise the team would have had to spend a few sprints doing the grunt work. His rationale was "You guys are doing great work and your momentum is great. I don't want this stuff to slow you guys down. I'll take it on" +100 for that attitude.

We have some managers that help in reproducing bugs. For me as a dev this is super valuable and saves me a lot of time I can spend on looking at the code.

Oh that's a great! Are you okay with me adding it to the article?

Sure. The good thing about this is that they were often very good devs so their insights are really good.

I'm a CTO (of a company quite a bit smaller than Uber) and I do basically everything in this article.

One thing missed here (or that is out of scope of the article) which I think is actually very important is that engineering managers should get involved in QA. It's not glamorous but running through a couple of manual test scripts yourself gives you insight into features you might not know too well (if the product is very large) and also to personally assure yourself of the product's quality.

I find myself incrementally tweaking the QA test script every now and again when I do this, it's a great way to continuously improve the process.

Totally agree on the QA side, you need to see first hand what’s coming out of your team to understand where your team is at.

I think people should be able to swing back and forth; manager for a year or two, engineer for a year or two. I don't believe everyone can be happy with a prescriptive path to follow -- I can't only be one or the other for the rest of my life. I like leading, mentoring, and developing teams. I also have strong inclinations towards inventing solutions and developing the future generation of technology.

I think businesses need to be able to adapt people to different roles and be comfortable moving people around and let them change over time. Otherwise we'll have people hopping off to new companies every few years as we tend to and taking all of their domain knowledge with them.

I like the idea but in most companies the salary structure doesn't allow it.

Lots of anecdotes here...I'll add more.

I worked primarily in 2 type of companies as far as this topic goes.

The first (and in my sample, more common) kind was engineering managers as pure managers. You had tech leads which were really DRIs on technical projects, but very much software engineers in their day to day roles, and Engineering Managers which handled money, people issues, and made sure the tech leads did their jobs. At some companies, teams have both. Often each team has one TL and an engineering manager may look over multiple teams. Not always though.

That works, but there's a bit of a disconnect. The person who decides if you should get promoted or get a raise (or fired!) very much relies almost exclusively on second hand information. They may have been an engineer in the past, but they're not anymore, and may only have a loose understanding of what is truly happening. They're usually a bit better at handling people issues though.

The other kind is the "your boss should generally be able to do your job. Maybe not as well, definitely not as fast, but in a pinch, given enough time, they could". So engineering managers are just a higher form of tech leads that ALSO have the whole people/money/management responsibilities. They code (a little...maybe 5-20% of the time max) and can fully understand the problem the people they manage are dealing with (not just because they did it 5 years ago, but because they deal with them too in the present). That's a lot of work.

Much, much fewer people are qualified to do this so to scale, you either have to be a very competitive organization, or actively train/manage/promote engineers into those roles (or steal people from the rest of the organization and train them as engineers. That works too!).

I personally much prefer the later (even though another post mentions it as being a potential trap, I saw it work very well when handled properly). It's infuriating to have to explain to a manager that the company's darling engineer actually suck, but the managers only see the end result (without what happened to get there or without being able to analyze the cost) and have significant decisions be made around it. But again, it's very hard to build an organization that way.

>It's infuriating to have to explain to a manager that the company's darling engineer actually suck

Holy crap, yes. Well it’s not always that the darling TL sucks but often that they themselves are in a role where they aren’t familiar with some of the tech the people working in their team are working on, so they don’t know how to properly make the large scale time estimates that get reported to the manager (and why would you ever ask the people actually working on specific tasks how long something would take? That makes too much sense and they might not tell you what you want to hear). But when they’re the darling and you’re working to meet the darling’s time estimates that were never realistic in the first place, you get thrown under the bus to the manager when time estimates fail. This actually just happened to me today.

This power structure also allows the manager/TL to play good cop bad cop on their employees where all bad news/orders from manager to employee goes through the TL but all good news/orders goes directly through the manager.

You can’t really win in a finger pointing game like this. The only fix is to just leave

> Well it’s not always that the darling TL sucks

While I've definitely seen instances of the darling being a TL, my biggest issue is when its an individual contributor. I've had to deal with cases where the company's "ninja" was some dude who just hid in a corner pumping shitty code 18 hours a day, ignoring all pagers, requests for help, his teammates, or even his own TL. But he shipped software that kind of sortoff worked (well, as long as his teammates handled every pager notification that came every time it failed). Management loved him because of his "productivity" and hated how everyone else was so slow (because they were deleting with the fallout of his crap).

It was awful.

Here's how I do it:

1) I manage a team of fullstack engineers where I do very few coding tasks but also can sometimes chip in on large efforts or when senior people are out of the office.

2) Code liberally on weekends and on my bus ride in the morning on OSS and a SaaS I've built over many years.

Staying engaged technically makes me unquestionably a better manager, but I will impede my team's development if I take tasks in the team sprint.

This article is pretty close to my own situation. I’ve found that the worst thing I can do is work on features that could potentially block everyone, and the best I can do is grease our code ecosystem by updating libraries, compiler versions, and low level code which doesn’t affect business logic.

Exactly why I quit managing altogether. One can code or one can manage, but doing both means both are compromised.

I swing back and forth. I go for months without touching the code, then I go for months where I stay in touch. It's easy to think a code base is decent when you stay close to it. Diving into a new code and unfamiliar code base allows me to see how new engineers will approach the code base, what's the onboarding/setup docs? Is it automated? install.sh or containeriazed? Are there tests? FAQ? user documentation, maintenance document? architectural documentations? If I can jump in the code fast and get moving, it's great. If not, I know the team is slacking and I figure out why and cover that area.

If pressed for time, then I might do the test/bugfixes cycle.

I code multiple times a week at home, so I'm not really pressed to program at work

Good perspective. In my experience an engineering manager must be flexible. An engineering manager can really help the team excel by building productivity tools, prototyping new concepts documenting, or even fixing small bugs. With that, a manager should not let technical tasks get in the way of managerial duties.

I like the author's advice about not taking on work that may block your team. That is truly risky and can backfire. I've seen this firsthand -- But a manager absolutely must keep their head in the game technically. They need to be able to interface with other engineers and managers on a deeply technical level. They should have an awareness of their project's codebase that is best gained through being in it. An engineering manager without technical ability is a more like project manager.

In my org, I have seen the expectations of what a manager does shift quite a bit. With the addition of a tech lead role, it seems managers are silo'd into less technical, and less hands-on work. I feel that any sort of hard expectation or assigning percentages to management vs engineering time is ignoring the nuances of team dynamics, and individual personalities. A manager who can also effectively contribute code should do that. Likewise, an engineer who can boost team morale, mentor, help recruit/staff the team should. Take a look at the team dynamics and determine what mix works.

"Work on Bug Fixes / Small Features"

That's terrible advice, in my view.

In your job you should always do what is the most useful and productive use of your time.

As a tech lead/manager your role is to manage/lead and your time is extremely valuable. In addition, your job as a manager is to allocate resources efficiently.

A small feature is a good task for a junior engineer. It helps them grow and their time costs less than yours.

Bug fixes should be the job of whoever knows the relevant part of the code best, which is unlikely to be you if you're a manager but even if it is you should aim to train and mentor others to acquire the technical expertise.

Having first hand knowledge about the state of the codebase is helpful to doing your job as a tech lead / manager. Doing bug fixes / small features is a productive way to gain and maintain this knowledge.

You can/should have visibility of the code base through design specs and code reviews.

There is absolutely no need to do a (potentially junior) engineer's job. It might be 'productive' but it's not the best use of your time or your role, and thus it is in fact a waste of time and money.

If you only have 20% of your time available to write code, then I would much rather you do not review code in which the person who wrote it had 90% or more of their time to write code. The review will be less thorough, correct, and timely than if someone else who regularly spends more time in the code.

These 'junior engineer' tasks are attractive for a manager who still wants to be in the code. They are non-critical and small. Perfect for someone with an unpredictable schedule. However, they also provide an opportunity for the manager to have a better, but still imperfect sense of the codebase and technology.

If you're a manager you don't have 20% of your time available to write code... If you want to write code then stay in a position where it is your role.

This is the worst class of managers I have ever experiences: engineering managers with little dev experience. They rose quickly and became managers fairly early on in their career. They got excited by the opportunity, but then realised early on that they mostly attend meetings and write e-mails.

They miss coding, so they try and code between meetings, but without knowing our engineering practices, code reviews, agile methodology, ...

I run an org of 20ish at a FANGish company. I have mgrs and a team of ICs reporting to me. Myself and my managers are on the oncall rotation along with ICs and we do light coding activities.

Pros- team morale, better tech decisions, skills stay up to date, oncall is quiet

Cons- more time consuming, develops bias against other mgrs that do not code

To each his own...

As a new professor it seems I am supposed to act more like a manager and do less of the research/coding/data analysis myself. But I love to code! My goal is to keep a small project for myself that I work on when I don't have impending deadlines (basically never?).

If you choose non critical bugs to work on, your managers will say wtf is he working on that, and your next performance review will say "needs better judgement on priority of tasks" and you'll be let go in the next round.

I guess am going down that path, am on the database side though. It terrifies me to be a people's manager, approving timesheets and crap.. I would love the mentoring part, but I'd rather skip and go straight to being the strategy guy.

I like writing metrics-related code as an EM. It’s valuable for me to be able to understand our data that’s tracking our KRs and informing our KPIs. And I get to stay sharp on some frameworks we use here for surfacing metrics to the company.

I find the bit about mentoring people outside your org interesting. I'm interested in mentorship myself. Does anyone know if there are actually rewarding mentorship programs on websites like meetup.com? Has anyone else done this?

I have done this, but it can be harder to manage. Watch you don't burn yourself out.

Mentoring someone inside your org, but outside your immediate team is often a better option because the motivations are clearer and the individual is getting inputs from you, their manager, their team, other individuals in the broader org.

When it's someone completely outside it can be much harder to understand the motivating factors, reinforce learning, ensure follow through etc. As a result, scoping the mentorship and building up a successful relationship is harder.

Example: You meet someone looking to build non-trivial sites with Django to make a career switch. If you discover they are deficient in Python, do you go down that rabbit hole, or stick to only Django? Unless you and they are really motivated things can break down quickly.

Inside an org you might have the option of supporting that person talking to their manager about taking a formal training course. Of course you can suggest similar to a random individual at a meetup, but the follow through often isn't going to the same extent.

Check with your local university or community college for mentoring opportunities.

For example, the University of California at Davis has a senior design class in their computer science program. You can submit a proposal for a project; if it's accepted you become the mentor and work with the students a couple hours a week over 4 to 5 months. I did this last year and found it extremely rewarding.

Edit: fixed typo

Did you have to pay money to do this?

No, it was more like just write a good proposal. There was a problem related to Swagger API specs that had been bugging me for a while, so I wrote it up and sent it in. I was delighted when it was accepted.

I'm planning to submit another project this year. Working with students is fun.

p.s., The class is ECS 193AB in case any folks living near Davis are interested.

What do you have to offer?

Im an ambitious person with credentials, but programming is not my day job and Ive made marketing mistakes on my popular website.

Definitely technical mentorship- especially in robotics. Also great career advice for people starting out in their career (in university for CS or graduating soon/just graduated, picking between entry level offers) up to 2 years into career. Or grad school advice.

Id be looking for web programming and business savvy skills.

Btw, Ive recently fell in-love with embedded systems. Ive built a dishwasher that sets your dinnertable. But the issue is the business, not the tech.

What do we mean by manager in this situation? Is the first level "team leader" a people manager that engineers, or are we talking higher level managers?

What is the difference between a tech lead and an engineering manager?

As Engineering Manager I was doing Code reviews of my team;

That would be great.

> Work on Bug Fixes / Small Features

With this, I disagree for 2 reasons:

1) If your devs had to prove themselves technically via hiring process and you didn't, then your technical chops are potentially not up to scratch and devs have to tolerate inferior noise. Ditto with architecture input.

2) The easiest fix isn't always correct. Not having day to day knowledge of the code base means you're more likely to implement something substandard.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact