Soft Skills in Engineering Leadership
codingsans.com
codingsans.com
Everyone asks three questions of people leading them:
1. Can I trust you?
2. Do you care about me?
3. Are you committed to excellence? (aka do you have high standards).
Think about someone you admire. Odds are the answer to the above for them is "yes" to all three.
Now think of someone you have had a lot of problems with. Odds are the answers to the above are "no".
And for a leader, you can scale these by caring about roles and what info those roles get to show trust.
Really cool framework as a fundamental baseline.
4. Do you delegate high visibility tasks?
Managers who don't do this work hard to hog all the glory, spend all their time in meetings with other managers or presenting to higher level people etc. It isn't good for them nor their reports, by not growing the reports skills they have a hard time getting to the next level as a manager. Also they create a situation where they are the bus factor 1, which is problematic in itself.
Feeling someone cares fits the warmth dimension; commitment to excellence is a hallmark of competence. I would say the word trust can encompass both.
[0] - https://en.m.wikipedia.org/wiki/Stereotype_content_model
(Unless you value getting screwed over, I guess ;)
Most, if not all, of my managers over the past 10 years have been people managers cloaked as engineering managers who have all stopped programming a decade ago. So much respect is lost for managers who have turned their back on the very craft that brought them into management.
Before the people manager crowd chimes in with "it's not my job", "we have leads", etc, I want to say that it's about the principle of the matter. I don't care if it's "not your job", on principle you should want to keep your skills sharp in order to fully relate to your supports and, if shit is on fire and you're the only one around, to actually do something and fix the problem instead of completely leaning on your team.
But I really dont understand why they should be coding. Even active developers are not able to fix whatever in any module, you fix only in areas you understand. When shit is on fire, I dont want managers or other random developers to create a bunch on hotfixes that will cause new problems.
I want managers to organize the project in a way that shit wont burn on every release.
They should be coding because they'll be able to relate to their supports in a deeper and more fulfilling way. They'll be able to mentor and provide guidance on technology best practices and patterns.
They should be coding because they'll be able to more accurately plan and execute projects. Understanding and applying the technology is understanding it's pitfalls and anticipating potential upcoming challenges.
That's a valid point although I've seen it go badly when a mostly out of touch manager (time is finite, even the most technical manager will be out of touch) thinks they're still at the top of their technical game. They then force out of date engineering decisions on the team.
>They'll be able to mentor and provide guidance on technology best practices and patterns.
That should be done by the senior engineers and tech leads with support from the manager. These are the people who spend 100% of their time thinking technology while even a technical manager will do it 25% of the time. The manager should be the one to structure these conversations, formalize mentorship processes and so on.
Yes, or even worse they don't respect it when their team tells them something is hard to build and will take more time. You get a very "back in my day I'd put this together in a weekend what's the big deal" attitude from people like this.
> understand what tech is relevant to them
can they really understand tech by merely reading whitepapers and youtube videos?
He had two particular skills that many will never have or take a decade or two to cultivate: he could provide you feedback, empathetically, and make you feel like he is genuinely interested in your success and improvement, and he could read a room like no other, often times being the one to say the right thing to break the tension in the room or ask the right question to get us over a roadblock.
I know you aren't saying be the best or focus on coding, but if I look back and had to pick between the two, I'd pick the engineering manager who has cultivated the soft skills. At a certain scale, all engineering problems become people problems.
It's my goal as a manager to be that manager that I never had and lead by example for my reports technically in addition to the expected soft skills of a traditional people manager.
I strongly believe that managers should be able to fulfill both roles but maybe it's just because I've been burned by so many managers in the past.
* 20% for 1-on-1s and dealing with management level issues people bring up.
* 20% spent on hiring
* 20% on various status meetings (team, cross-team, with my boss, etc.)
* 20% spent on pro-actively finding or solving issues before the explode. This includes networking with my counterparts in the rest of the org so I get information and build political capital.
Where do you work? Sign me up! I have hardly any time to code after weekly sprint-related ceremonies, 1:1's, cycle planning, and architecture and code reviews.
The job of management, like the job of any developer, varies from company to company, and situation to situation. Thankfully, the people side of my job as a manager is easy right now, but only because the people I manage are reasonable people to work with, and well receptive to feedback. It was very difficult last year when I had to work through more delicate relationships between the employee and employer. As always, it comes down to people.
It also sounds like the place you may be managing at may not be challenging enough for you. Perhaps it's time to make a change?
It all becomes a bunch of soft targets as a manager and that's really hard.
The one big success I had when I was a manager was getting our client teams to unify on the bugs they were having and to be much more cohesive. When I first got there the android and ios and web people never talked and refused to believe they had the same types of issues/bugs. LOL.
I ultimately hated it because really... I don't want to yell at people for being late to standup, so went back to engineering.
> The job of management isn't hard (I'm doing it)
What signals would you look for to tell the difference between these two possibilities?
A. This person has so much tacit knowledge of good management that they don't realise how much skill they are applying day-to-day.
B. This person has zero awareness of how their team is burning out underneath them.
I’d ask a few questions about the bits of management that I think are hard.
How do you get your team aligned on the company’s priorities as they shift?
How do you foster growth?
How do you assess who needs to be promoted/given a raise?
How do you handle feedback for employees that aren’t doing well, or aren’t meeting your expectations (or even harder, employees who think they should be promoted but you think are just solid at their current level)?
And the big/meta one - what do you think the job of a manager is? (Could just be a semantic disconnect on what the job entails).
1) that’s interesting! What do you consider the hardest people management issue you’ve run across? 2) what is the people management problem you think most people overrate in difficulty?
It usually will surface if they, for instance, consider people management easy because they have zero emotional affect and hence never bear any emotional load, or if they’ve been bless by ignorance and don’t see the work their peer and senior managers are doing to avoid them setting everything on fire, or never consider coaching or growth of someone to be a problem - because they never do it.
The most important skill to have in the workplace, management or not, is humility. This absolutely does not mean that you’re a pushover, but it does mean that you should never deceive yourself with the notion that you’re infallible.
I've been doing this for some 23 years and had a stint as a proper manager for a year, where I spent about 20% of my time coding, and I was more starved for time than just about any other phase in my career.
I'm currently a principal eng/ arch at a mid-size medical device company, and my principal eng/people manager complement, perhaps one of the strongest devs I've ever encountered (close to a fabled 10x dev), barely has time to code at all. He's just slammed all day every day with general meetings, doing 1-on-1s, presentation prep, working on process improvements, Scrum/product owners for backlog grooming, interfacing with other managers, etc, it just kills his day for anything more than tiny bits of coding here and there, and because he is such a great dev, he does provide meaningful contributions.
I have worked at small startups where things are a bit better, but I can't recall ever seeing a case where a good manager has more than 1/3 of their time to code. 80% dead time would mean hardly managing at all.
You as a manager don't need to do all that. If you can't delegate most of that to reports then you have a problem.
If you’re sitting around with nothing to do, either you’re in a dead end, or no one actually trusts you with more once you’ve ‘succeeded’ because you’ve burned too many bridges or alienated key people - even if the org chart looks good.
Of course if someone is finding themselves in that churn all day for any length of time, you are quite correct - they are busy not succeeding.
And no, delegating a lot of those tasks doesn't mean that you as a manager have nothing to do. Instead you can spend 20% time doing management tasks and 80% time coding. Each person in the team sharing the "management" burden makes it pretty manageable. (it isn't really management to coordinate with other teams or present to people etc though, no reason you should have a bus factor of 1 for that role)
I have seen a few people convince themselves this is what they were doing (usually in a line manager/tlm role), while everyone around them was suffering from lack of a proper manager, which their lack of EQ was hiding.
If you somehow found the secret sauce for this, please do share!
You might think you're doing a good job, but you really aren't. 20% of your time are only 8 hours. Even if you just spend half an hour with everybody on your team of 8, 4 of those are gone. You haven't spent any time yet coordinating the team as a whole. You haven't spent any time planning. You haven't even answered e-mails yet. Neither did you do any signficant coaching. Nor did you spend time hiring. Or even writing a job description. Or planning compensation. Or helping your two star engineers who are at loggerheads to come to an agreement. Prioritized the backlog? Set up a triage process? Spent way too much time to find out why your junior is super-withdrawn and doesn't ask questions? Set them up with mentorship? How's that design review coming along? Talked UX of the latest "luxe UI" ledge? Got yelled at by them because one of your engineers decided that specs are just suggestions? How's that training program for the new toolkit coming along? Also, the team is kind of nervous because the big project will end in 9 months, and there isn't a new big project yet?
TLM roles are the biggest mistake this industry makes. They work beautifully for 3-5 people, start crumbling for 6-10, soak 100% of your time for 11-14 people just managing while you despair you can't do technical work any more, and become an incredible way to burn out people at 15+ direct reports.
If you're that good at delegating that you're only using 20% of your time and your team is humming along at a high level... congrats, we've got these other four teams that AREN'T being managed that well, you're now the senior manager in charge of all of them, please get those other managers up to your level too!
Just because you've never seen this dynamic work successfully doesn't mean that it doesn't. The best manager I've ever had operated like this. She spent most of her time coding and made sure to know what everyone on the team was up to. We were all competent professionals, so we did a perfectly fine job of prioritizing our work and working with others within the team and across teams to get things done. It helped that much of our work could easily be undertaken in parallel with strong ownership of different parts of the code by a single person, but when there were projects that required strong and frequent collaboration she just carved out a sub-team and designated a lead then trusted the lead in the same way she trusted us as individuals. Not only did this mean that we got the benefit of her very impressive technical contributions, but it also meant that we were all able to be more productive because we spent vastly less time in BS meetings.
Afterwards, I moved to a company with a more traditional structure. Ostensibly there were three people in charge of me: my engineering manager, my product manager, and my designer (since we are "design lead"). It was a pretty big culture shock. One difference is that there are a lot more junior people in my new company (the average age was around 50 in the first one), and I think younger engineers may need a firmer hand, but I'm not sure that that explains it all. I joined the first place right out of college and thrived in that environment.
I think most people don't understand just how effective a minimal management strategy can be because they've never experienced one that works well.
Of course the more senior ICs do more than simply code AFA talk across teams and divisions to scope and define work, present workshops and presentations to the team and cross-departments, contribute to architecture decisions, present as SMEs across various parts of the stack, and mentor juniors. None of the ICs year on my team spend more than 80% of their time simply coding, the more senior staff spend probably more like 60-70%, and I spend about 50%.
I’ve worked at 14 companies over 23 years, from 3 Fortune 500s, to a couple mid-sized, to a bunch of smaller companies, to a handful of early stage startups. Have had probably close to 20 supervisors over this time and interfaced with dozens of other managers on related teams, and been a team lead about 5 or so times and a manager once.
I’ve never seen this dynamic play out. IME you're talking about a team lead not an actual people manager. Even in the most streamlined/simplest environments, I don’t think I’ve ever seen a people manager spend the majority of their time coding, not unless they were pushing 60+ hours doing so. Something as simple as 1-on-1s should be done at least once every week or two, and that can take up to an hour (or more counting prep) for every report.
Your mention of having multiple sups and junior heavy ICs at one place sounds dysfunctional and has little relation to any place I’ve worked at.
You may have worked at a lot of places, but your experience is still only a tiny slice of the different shops out there. My experience is likewise limited, and I acknowledge that such light touch management is probably very rare, but it can and does work.
You said she was a team lead not a real manager, which does have some truth to it, but it’s not like there was someone doing the “real” management work to pick up the slack for her. In the right environment that stuff simply isn’t needed.
Don't be too certain about that :-) I recognize the things you mention from my first job, I had a manager / CTO who were like her. (This was a 20-30 ppl startup, high trust, not many meetings)
Engineer -> Senior -> Principal -> Staff -> Distinguished
OR
Engineer -> Senior? -> Manager -> Senior Manager -> Director
In both scenarios though, they've been a more senior engineer.
The other was a founders child being promoted from SE I or SE II into a middle management role. That also did not end well.
There is nothing special about software engineering as a technical track this way. There is no one way to set up an organization. To a large degree they are how they actually work (i.e. not what's on paper).
This balance has been an issue in managing technical teams for about as long as that has been a thing, which is a lot longer than software has been a thing. There is a fundamental tension though, in that the focus you need to maintain expertise in your field contends with the breadth you need to understand the context well enough to make good decisions.
I suspect the real reason that you don't see more of it in practice is that it's actually really hard to continue to do both well at a very high level, and it's also organizationally hard to do.
I'm trying to make sense of the rest of your post, but it uses a lot of pronouns that don't appear to reference anything.
I agree software has more leverage, sometimes but we are talking here about how decision making power is distributed in a company.
Regardless about how much impact the IC technical output can have that is about how. The skills & information needed to make good decisions about what and when are different.
Unfortunately, being highly effective at both requires spending time and focus in ways that are somewhat mutually exclusive, which makes this quite hard.
In companies doing this well, the high-level engineer doesn't report to the immediate team lead, but reports to the same director that lead does. Or VP vs director for even-higher-level engineers vs higher-level managers.
That structure, more than the title, is what shows you if you're really on an equivalent track.
There is no reason this has to be your manager. Your managers job was to understand that this was something you needed, and find a way to try and provide it for you; it's unfortunate that didn't happen for you.
> It's my goal as a manager to be that manager
Can I make a suggestion? As a manager it's important that you respond to what your team actually needs, rather than your perception of what you would have needed in their place.
There are a number of ways to do this well, and a much larger number of ways to mess it up.
Another general comment on this theme. In my experience people making the engineer to manager transition typically need a mentor and guidance in management even more than they ever needed a technical mentor.
This is also true for communicating enterprise-wide considerations to coding teams. They have to trust you not to blindly push senior management priorities. If you know the cost of both capital and tech debt, you are more likely to have represented the coding team and influenced decisions, and be able to communicate decisions effectively.
I am glad you mentioned it, because communication and trust, on the flip side, are soft skills. You can foster trust through excellent communication and understanding Where the engineering manager does not excel in a particular area of expertise, he or she will defer to the ones that do. A good engineering manager knows their weaknesses, and how to ask for help. The good engineering manager will seek to gather understanding of the technical debts and use that to represent the coding team well. Again communicating those decisions effectively are orthogonal to that process (meaning you can communicate a poor decision effectively just as well as communicating a good decision effectively)
I think they're also very rare. And that kind of personality/social skills is not something most people, especially engineers, have.
I imagine someone with such skills went on to greater things?
There are many places were his skills would be very appreciated. The hard part may be to find them.
Unfortunately the smartest and most component engineers I have known have nearly always come across as being arrogant. They have a very solid grasp of their domain and a strong skillset, but they also expect everyone around them to be at their level and instantly follow everything they’re saying. These people sometimes even have disciples who follow the philosophy of arrogance and engage in gatekeeping. I have concluded that while this is not ideal, it’s often par for the course.
Conversely, the best engineering leaders I have known (architects, tech leads, product owners, requirements analysts, etc.) have had really strong empathy and encouraged healthy debate while also making everyone’s input and analysis feel welcome and valued. Their technical skillset is not necessarily the strongest but they’ve usually been good generalists who could talk intelligently about something at a high level without having to know the technical details. These people have also been able to take those arrogant engineers and have gotten them to successfully collaborate with everyone from the junior devs up to management. A good tech leader really is just a good mediator.
Funny, in my experience these aren't competent engineers so much as dangerous. Engineers who worship at the altar of complexity and get enraged if you point out their mistakes.
The smartest and most competent engineers I have ever known have nearly always been furries.
If an engineering manager (presumably one who attained this position because they were or are a good engineer) is going to fix something, they're going to apply best practices because they know what they're doing.
If an engineering manager was hired just because they know how to manage, well then they aren't really an engineering manager, are they? They're just a straight people manager and in my opinion, shouldn't be managing an engineering team. They should be a project manager.
>presumably one who attained this position because they were or are a good engineer
Why do you presume this? Management is a very different skill set than engineering. The best engineers having to become managers to advance their careers is an anti-pattern which most modern tech companies avoid. Managers thus tend to be average engineers who are good at people and process.
I refuse to believe that managers shouldn't code. Actual managerial tasks do not take up that much time. Like I said in a previous comment, in my experience (as a manager), managerial tasks take up maybe 20% of my time per week. What's going on with the other 80%? I'd be bored out of my mind if I wasn't coding as much as I currently am.
This.
I worked for a company that didn't encourage managers to be technical. In fact, they sometimes deliberately interfered with my efforts to remain technically relevant. They really lost some good stuff, that way. I'm no tech slouch.
Luckily, I didn't have a "shower clause" in my employment contract, so I did a lot of open-source work, in order to remain relevant.
They directly benefitted from that; though they would never admit it.
So did thousands of others. I did work for NPOs, and the work I did went towards a lot of lifesaving stuff.
The "empathy" part is every bit as important. It pays huge dividends, as a manager. It needs to be real empathy, though; not the two-faced kind that only appears when someone's watching.
He was a nice guy but useless in that he could not relate with problems the engineers were experiencing and advocate time to fix them - kind of like a black hole for complaints. Engineers by themselves had virtually no say in what they actually worked on here.
This, coupled with a non-technical PM, meant we were constantly adding features on top of a weak foundation which created plenty of fires. And for each fire we were only given time to wave away the smoke rather than put out the fire.
So I'd agree having true empathy and being able to act on it is important for managers - they don't necessarily need to code but they still need enough technical experience to fully relate to what the engineers are doing.
I don't need my manager to be a coder; I can do the coding. I need my manager to fight for me in our organization and to shield me and my team from various organizational BS. I don't believe that any of that has anything to do with coding ability.
Sad, but I have to agree. Self awareness is something people develop as a natural part of maturity. It is not a skill children have. For example play a board game or card game with children and realize they never know when it’s their turn to play despite watching the game, numerous reminders, and recitation of the rules. They are not self aware. That portion of the brain has not developed yet.
It is frustrating to encounter adults lacking of self awareness where a commonly expected skill of fully functional adulthood is absent. In some cases that can be due to wide spectrum disorders like autism but is more generally due to immaturity, the absence of expected normal development.
Another queue into this is a false expectation of soft skills. That doesn’t mean being soft or kind. Soft skills are perceptual skills associated is active listening and empathy, which sometimes requires being a mean asshole. People with a lack of self awareness tend to have a lot of challenge in this area. They are not the center of the universe, sometimes fail horribly and embarrassingly, and demand harsh unpleasant words. For people lacking of self awareness the harsh reality of corrective communication is likely poorly accepted as they either continue to fail or suffer emotional trauma.
"Empathy" after a social faux pas to me is kind of like a blameless post mortem. Blunt yet unjudgemental with a call to action and some discussion of what went right. Perhaps your words are so likely to fail because because you're taking the wrong approach?
You might be perceived more favourably than you feel yourself. Try asking people for feedback on your approach.
The environment is infinitely more powerful in most normal cases.
The problematic people are those that cannot self reflect AND are incapable of realizing the nature of their dilemma. The problem is present when a situation demands harsh words and the troubled person is utterly incapable of receiving that communication.
> Perhaps your words are so likely to fail because because you're taking the wrong approach?
If a person commits to an action that is potentially harmful they must be halted and corrected even at cost of some minor embarrassment. If that person then attempts that harmful action again they should be severely counseled. The harshness of the words should reflect the severity of the failure. Empathy doesn’t mean agreement or kindness which are akin to sympathy.
One such equivalence that I found to the above is to focus on regarding others honestly. Often times there are barriers to seeing people for who they are, so if you can focus on identifying those barriers and confronting them with yourself, you then have a shot at regarding others truthfully. The theory goes that if you can do that, you don’t need to have so much managerial social engineering polish. You can just be polite and honest and everything will pretty much work.
I have to say from personal experience that this has worked well with me. In the situations that it hasn’t it’s been due to others being caught in their own inability to regard me honestly. In such a case, I don’t think the smooth operating manager would fare any better or worse. So basically you can’t win at everything, but you can worry about yourself!
Strong agree.
Example: One of your reports says something that you perceive as self-deprecating.
It can be tempting to dismiss this as mere impostor syndrome. Doing so might soothe your fear that someone you manage lacks confidence but it does not serve them well as a leader. I advocate instead approaching with a spirit of curiosity: What about their experience drives them to that imperfect expression of their professional needs?
Applying a technique named "Clean Questions" can help increase clarity about that, if you're looking for something to google.
| Creator mindset
| Having a creator mindset over a victim mindset is great for leadership. The victim treats situations as if they can’t change them, while the creator takes responsibility and actively shapes reality. Creators turn every situation into an opportunity.
I've actually seen this more broadly labeled as someone having a Growth Mindset instead of a Fixed Mindset, and I 100% agree. This should probably be the #1 value that makes someone a great leader. In fact, I believe it's so important, that it should be the basis for all other qualities and skills a leader develops on their journey.It's actually a rare trait amongst software engineers and I think this is the trait that either propels someone into a great leader, or holds them back when they are forced into it.
My #2 on the list is perseverance and that goes hand-in-hand with having a growth mindset. The best way to test this quality on anyone is if you can successfully answer yes to the question, "is this person reliable?"
If you have a growth mindset and perseverance, then I believe you can pick up the other traits and learn on your way up the ladder.
I've thought about this a lot and wrote some more strategic thoughts on this topic of management soft skills here. It's written more from the perspective of hiring managers, but hopefully some of the content transfers: https://staysaasy.com/product/2020/09/06/soft-skills-for-man...
But in each case, by the end of the day, everyone had spoken roughly the same amount. ‘‘As long as everyone got a chance to talk, the team did well,’’ Woolley said. ‘‘But if only one person or a small group spoke all the time, the collective intelligence declined.’’
And the long form nyt article about it: https://www.nytimes.com/2016/02/28/magazine/what-google-lear...
https://apps.apple.com/us/app/bunch-daily-leadership-coach/i...
Likewise, your developers will feel they cannot learn much from you and have a meh attitude towards your advice.
- https://managingml.substack.com/p/the-myth-that-machine-lear...