How to fix bugs and support people
What makes a great software manager?
TL;DR Talented software developer with great people skills, a healthy dose of common sense, not afraid of dealing with conflict and who is obsessed with building a successful team and looking after the people in it.
I can definitely tell you things that I believe make a bad manager…we are all good at talking about what doesn’t work or what we don’t like. It is a little more difficult to articulate what makes a good or even great software manager.
I have been a Software Dev Manager in 3 different companies managing teams of all sizes, and I’ve been a software developer for 14 years. I also have experience of a “manager-less” structure that was really hitting some scaling problems as an org structure as the company grew, just as GitHub did. There was a real resistance to hiring a manager — questioning the value of the role at all.
I have been lucky to work with some great managers. One of best managers I had helped me move across teams and areas within the company, helping me do what I wanted to do in my career and not worrying about how he would fill the gap. That is type of action that you remember for the rest of your career.
I will use my experience to try to answer the question about what makes a great software manager — so this will be subjective.
I also asked some friends in software development what they think defines a good software manager;
Brian, Dev Manager
A great software development manager is not a manager, the person must be a leader. Good software developers are educated, skilled and highly motivated. The role of the software leader is to help the team grow while focusing their talent, energy and creativity on achieving the business objectives. The leader must have an open mind and trust his/her team by supporting their technical decisions and not enforcing rigid technical requirements
I like Brian’s answer here — “helping the team grow”, “supporting”, “educated” (I take that to mean in software development), “focusing..achieving business objectives” is such a key one — if left to their own devices a software team can go around in circles or focus too much on over-engineering or cool stuff!
Steven, Games Developer
Someone who can code! Sounds like a no-brainer but I have had bosses that don’t even come from an IT background let alone have any programming skills. WTF? But it can happen and it has happened. These are the worst software managers because they have no clue about good programming techniques, how long it takes to write the code , write good code, allow for unit testing etc. Good software managers do not need to be persuaded or convinced about taking time to write good code because they take the time to write good code themselves.
Leads by example. Good managers will know about good programming practices, SOLID principles, agile techniques because they are doing themselves already, bringing to the team and leading by example. Furthermore, they are constantly searching for new techniques, design principles, learning new programming languages whatever and regularly bringing new stuff to the team.
Interested in development and growth of team members. Good managers may do regular 1–1s to stay in touch with the development and growth of team members to ensure they are being challenged and are adding value to the team. Often, team members may not be happy in the direction of the team, company or the software they are building or maybe looking to change; a good manager can be a resource here and supportive of team members to keep their goals aligned with what the company can offer.
Steve really appreciates someone who can code and knows what they are talking about. Leads by example, searching out new techniques and bringing stuff to the team. Someone who is interested in development of the team members.
Giovanni, Open Source Developer
understand the craft, have common sense, don’t be a dick, lead by example
Simple and to the point :)
I agree with all of the ideas shared there. Here are my thoughts on what I think a good manager does or possesses;
Remembers that they are managing people first and foremost
Most projects fail because of people, not technology. You are managing a team of people. Humans. Humans are weird, complex creatures. Read Peopleware and try to listen to and understand your team. Hiring, nurturing, coaching, maintaining and organising a team of humans and managing that team to success on projects is the main job of a software manager.
Has autonomy to create a successful environment for devs
The best managers I’ve worked with have had the autonomy to create the environment for developers to be successful including direct responsibility over (or at least strong influence over)
- Software dev methodology
- Tech Stack
- Coding and testing standards
They can change or tweak things in these four areas to allow the team to be more successful. They can listen to the team who hates scrum and introduce kanban. They can help the team by allowing a new tool or language be introduced to the tech stack, or they can equally help the team by not allowing a new tool or technology! They set the standard for coding practices and testing through creating the environment for continuous integration and delivery, to test coverage standards and API design guidelines. They are probably either a software architect or senior engineer. They can create their own interview process and have final call on hiring. In larger orgs a dev manager may delegate some of the first three. In an organisation with a Project Management office that sets the methodology being used, and an Architecture team that dictates design and other standards, a software manager can end up being neutered making their job impossible.
This means the manager has been (or still is) a software engineer. When a team member is complaining about the lack of unit test coverage or they are talking about refactoring some part of the codebase, you are at a huge advantage as a manager if you understand what this means to a developer and a team, and how to enable the team to deal with issues like this. Team morale will sink if you dismiss something like refactoring e.g. “we don’t have time to be rewriting code”. This also helps a great deal when it comes to performance reviews.
Supports up, doesn’t manage down
The best managers I’ve worked with have never made you feel you were reporting to them, in the traditional sense. It was more a sense of feeling that they really supported you and had your back. They give the team what they need — be it hardware, software, monitors, standing desks etc. or whether it is good process (if you control that), less meetings, better communication tools, right culture (okay to make mistakes), setting sane working hours, good team events etc. They create the conditions to enable this bunch of highly-skilled and highly-paid people to perform and get their stuff done. They are there for them when they complain or have a personal issues. They coach them along to plug gaps in their skills (both technical and soft skills), help them become better engineers and to gel as a team around a goal and vision.
Acts as a filter to keep team focused
Protects the team from as much outside noise as possible. This requires some common sense and a little bit of politics from a manager. Sometimes a team will benefit to hear about an upcoming change in the priority of a project, and sometimes it will have a terrible effect. Sometimes folks outside the team will try to communicate directly with them — support teams, other managers, or even your own boss, whoever — they could be communicating directly with team members, often requesting them to do other work. Control this as much as possible — it can be the biggest disruptive factor for a team getting work done. Dev teams need focus.
I worked with a manager with no filter. Everything they heard on the grapevine, every rumour or rumblings about change of direction etc. was passed onto the team and it had a very destabilising effect. An inexperienced manager will often revel in the fact that they now have the inside track that their new position gives them and will not be able to help themselves telling people about what they hear.
Informs when needed
On the flip-side great managers know when they need to keep their team in the loop, to avoid worry or rumours. Has someone important left the company? They bring the team together and let them know why in an honest way. Is there a re-org happening in another department that might impact your team and the relationships they had with that org? They tell the team, keeping them informed on important things to put their minds to rest on things they might hear and be unnecessarily worried about.
Does the basic stuff well, without fuss
Holiday requests, one-to-ones, reviews, flexible hours, expenses, sick leave etc. All the nitty, gritty boring things that you have to enter details for in some awful 15-year old ASP intranet app. Great managers do it well, fast and without fuss. “Jeez, I put in a request for holidays and she still hasn’t got back to me, I need to book my flights!” or “He keeps cancelling our one-to-ones, I haven’t had one in weeks”.
Sets a good example for behaviour and culture
Managers who tolerate disruptive people and behaviour are sending a signal that this is okay. Great managers influence the culture and behaviour in the team individually, and collectively. The best managers I have ever worked with have a lot of empathy for people and a seemingly innate understanding of people and what makes people tick. They do not let their team’s Slack channel end up being an terrible, passive-aggressive place to talk in.
Every single dev team I have worked in, the lead / manager sets the tone for what is acceptable around behaviour and culture. As a manager you may want to gossip and have a laugh but it’s probably best to just take a tiny bit more of a professional stance, set the right tone. It’s hard to do sometimes but whether you like it or not, you set the tone. And actions are louder than words. Is the manager telling the team not to work more than 9–5 but then sending them emails and working at 1am or 2am or working on a Sunday morning?
They also don’t disparage the company or other teams or people working there. They have to maintain that level of professionalism without getting involved. They are leaders who know the challenges that exist but face them in a positive way.
Actually wants to be a manager
This is so common. Developers get promoted to managers because it is the next step on the ladder. They don’t really want to be a manager at all. It is also the case that people end up doing some or all of the role of a manager through no fault of their own — they start out as a dev lead and more and more gets added to their plate. Now they are doing performance reviews, holiday requests, dealing with team conflicts and personal issues. I always enjoy managing software teams and it is definitely a full-time job. If you are a manager or have been asked to be a manager, ask yourself “Is this what I really want to do?”
Deals with conflict, doesn’t ignore it
Can you deal with a problem team member? Someone who is relentless, always thinks they are right, are disruptive to all the other team members, someone who is leaving work half-done, or not following the process, being personal on chat or in code reviews or wants to over-engineer everything to death. Managers have to be able to deal with this. They have to be able to resolve conflict between people. Oh, and if you are a manager then you will almost certainly have to fire someone some day. Great managers handle that well — the build-up, the communication, the aftermath.
This is probably the key one in so many ways. Great managers make calls on things, and take the flak for doing so. If you’re a manager, your team will come to you a thousand times looking for decisions to be made, a final call on some discussion they have been having. Use tool A or B? Refactor now or later? Estimate bugs or not? Release now or later? Response code 401 or 403 for this API call? Just a ton of small issues or discussions that they will look to you for a direction or answer on a daily basis. A great manager can make these calls when required and be fair and reasonable and back it up with why they’ve decided on something. A manager-less team can often end up with no decisions so people do their own thing. You can sometimes see it in the code — different ways of doing the same thing or different tools being used in various places/projects.
Represents the team
They deal with executives along with other managers in marketing, support, sales every day whether it is negotiating around what features to build next or what the next project to work on is, or simply informing them about how things are going and what progress is looking like. Great managers represent the team in these scenarios. And they do it well.
So that is my two cents on what I think makes a great software manager. If you are hiring a manager then ask yourself these four questions
- Can they manage people?
- Do they know anything about software development?
- Will I be giving them the autonomy to be successful and do they know what to do with that autonomy?
- Will they be a supportive, helpful manager or a classic top-down manager?
And if you have a team of software developers in a professional not-a-startup-sized company and you are asking yourself whether or not you need a manager — the answer is yes.