If you’re starting with this post you may want to read this earlier post for context: Management: The job of a manager
Introduction
Over the years I’ve joined software teams as their manager that other folks have built and I’ve built some basically from scratch and then evolved, grown and shrunk those teams over years and releases. A lot of what I have to say about the experience has been said by others, but I hope to add some of my own observations that might be useful.
Inheriting or founding a team
The manager before me had been an intense micro-manager, they had required all the engineers to include them in every meeting, every discussion with any stakeholder, they cracked down on engineers and stakeholders alike when this rule was violated. They made every decision, parceled out their team’s work in dribs-and-drabs, they deliberately constrained creative and productive engineers, they rewarded loyalty above competence and ability. In other words they had set the bar low for me and I knew I was going to be very successful...
Most of the time, I’ve joined teams that other folks have hired and organized. Early in my career I took a “they must have chosen these folks for a reason so I should work with what I have” approach. It turns out however that most teams have been formed haphazardly by people who were short-sighted and had no interest in the concerns of management or long-term team health. After torturing myself a couple of times that way, I shifted to a model of “I need to evaluate this team and see how completely fucked they are and decide on the one or two things that I have to un-fuck immediately” approach. There is a corollary embedded in this statement: All teams are a little bit fucked and you’re never going to completely address all the issues. You do need to aim for a good operating temperature for the team that trades off performance, morale, stress, interpersonal tension, happiness, and satisfaction. It is often an impulse to try and fix everything all a once; you should try to resist the urge. The less common case is starting a team completely from scratch, all of the advice below applies, but the first concern is to recruit a good lieutenant. If possible choose someone you have worked with before, someone who compliments you in terms of strengths and weaknesses. This person will be a key partner in choosing all the rest of your team members and in establishing the team identity. You will make mistakes, hiring is hard, people are quirky, combinations of people sometimes don’t work out… so even your hand-built team will be a little fucked up… it’s a process.
Gaining the team’s trust
The very first thing that a new manager with a new team needs to do is gain the trust of the team members. The first thing that I try to do is listen to the team, validate the problems they identify, and try to address one of the most important ones. This can come before any systematic or process changes. It can show that you as a manager are willing to work for the team, and that you are really listening because you are acting on their behalf. It doesn’t need to be the biggest thing, it can even be something that just requires some focused effort and attention. It is important that you do the work yourself. The second thing is to be transparent with the team, share as much information about what you’re discovering about the team back to them, along with your ideas about what’s important and what needs to be done. Then, you guessed it, listen… weigh the feedback of the team, adjust the priorities, adopt their suggestions if they’re better than yours. Finally, have integrity, for me this means being openly responsible for your decisions and actions. If you say you’re going to do something, do it. If you make a mistake, take responsibility for it. If you need to change a plan, say so and explain the reasoning.
The un-fucking process
As the new manager from the United States, from a just acquired company, from outside Europe, I didn’t have a lot of credibility with the team to start. I spent two weeks in-country with the team and talked to each team member individually and observed their interactions over the course of a release of the web service we were building. I didn’t change anything, I didn’t offer any opinions, I just watched them… Several things became obvious to me: their technical leader was incompetent, they had no experience building large scale web services, they weren’t competent to make the changes to the open source software we were using that they had made, they had no repeatable process to create a release and verify it’s quality, they had no logging or metrics coming from the production deployment and so ( it turned out ) they were missing the fact that 60% of requests from clients were failing, the architecture of their web service was a complete non-starter. I built all my future team and project plans on correcting these issues…
What should you choose to un-fuck first? Different teams will have different problems but first and foremost if the team is under-performing on their goals for the company, you should address that. Watching the team try and do a release is often instructive for diagnosing this sort of problem. Do they make a plan? Does everyone on the team have a role in the plan? Do they follow the plan? Is the work distributed in a reasonable way by role and by level? Are there people who hinder the planning or execution with discursive discussions, rat-holing, or introducing tasks that aren’t required? Does the amount of work in the plan make sense for the capacity of the team? Do they have any idea what their capacity as a team is? Do they just turn to you and expect you to plan everything?
What you want in a team is a group of people who take responsibility for the product or sub-system that they are tasked with owning and delivering. Based on your observations, find the real competent leaders on the team (or hire one) and empower them. If there are people who are corrosive and are breaking the team, get rid of them, even if they are “the guy that knows everything.” If the team has no process and no plan, help them to figure out what they want their process to be and to follow it. Do not dictate it, do not volunteer to operate the process. If there are people who are hanging back and using chaos to do little or no work, give them direct feedback, call them out at task assignment time, and if they still put in more effort ducking work than doing it, replace them. If there are people outside the team that are removing responsibility from the team by telling them what to do, work hard to redirect those people and get rid of them. If there is a yes-person who is signing the team up for huge amounts of work that they can’t possibly complete, stop them and reduce the expectations on the team and reset expectations about team output. Nothing will cause a team to check out faster than being repeatedly given impossible and, in the end, meaningless tasks to do and repeatedly failing. Fix these things before you even consider growing the team.
Setting the tone
I watched the two supposedly most senior technical people on the team regularly engage in yelling matches as the team sat by in stunned silence. It was probably going to get to a physical confrontation in the near future. The prior manager had not only ignored this behavior, they had often joined in… It turned out that neither of these folks were the right technical leader for the team, one of them I essentially fired and the other I sent to a team that had a complete void of leadership and technical experience. This created the space for a calm, productive, talented engineer on the team who had been doing all the real work behind the scenes to step forward and set a completely different tone.
Once you’ve got the team stabilized, you can look at team dynamics and behavior. A healthy team supports all the members of the team; nobody needs to be “assigned” to help anyone else, they just step up and do it. Even tense discussions should be civil and focused on arriving at a good solution based on facts and real requirements. The most common pathology on teams with regard to dynamics is hiring too many “big dogs,” people with lots of technical prowess and experience, and packing up the team with them. The problem with this in a group of humans is that inevitably, because there is nowhere to progress to, they tend to turn to snarking and sniping at each other and arguing over minor issues way past their actual value. Teams ideally have one or two “big dogs,” who are chosen carefully based on their ability to provide high level control and structure to others, and who are good communicators, good teachers, and good engineers. Then a mid-level of good, less experienced folks take up the majority of the team and a few talented entry-level folks. The actual proportions depend on the sort of work the team is doing.
Teams delivering software products or long-lived web services can skew towards the middle tier; inevitably, the most experienced folks will move on and ideally you will replace them from the top performers and leaders of the middle tier. Teams building custom solutions can sustain a lot more entry level folks and probably should; the work is repetitive and time-boxed. The middle- tier and top-level folks should focus on making the underlying platform efficient and resilient in the face of front-end churn.
When you observe bad interpersonal behavior (or someone comes to you about it or you hear about it in a 360 review), take action to bring the parties together in a discussion. Encourage folks to speak up and discuss interpersonal issues that they have directly with the people that are causing them. Provide mediation, where appropriate, to teach folks how to have a constructive discussion about an uncomfortable situation. In some cases, where intervention, discussion, and even direct feedback don’t solve an issue, removing one or both of the folks creating the behavior problem is appropriate. Of course this above and beyond issues like sexual harassment, which has a very clear process associated with it and which you should follow immediately and in all cases. Of course the opposite is also true: Reward and praise good behavior and encourage it whenever you have an opportunity.
Say out loud and in writing how you expect team members to behave with each other. Often, managers are afraid to talk about behavior, feelings, interpersonal matters: get past that. Everyone comes to your team with a different background and a different life experience, so they all need to be told what the expectations are. Back up these guidelines with appropriate actions, up to and including terminating people. One person can damage a team with their behavior and make everyone else on the team lose performance and fail. Nobody is worth looking the other way for, regardless of their skills or inventiveness. In order for any product to succeed, it needs a team that is going to sustain it for the long term.
As teams change, they often go through periods of dysfunction and chaos until a new team dynamic is established. It may take changes in structure or leadership or just some time for it to settle. This is why you should always be evaluating your teams as you did when you first formed or inherited them, looking for the same things, and addressing the same issues. Teams are always a work in progress. Another classic trap is the belief that your new 20 person team is going to look and sound like your first 5 person team of scrappy entrepreneurs. Ain’t. Gonna. Happen. And it shouldn’t. What worked for 5 people with no legacy, customers, or competitors doesn’t work ten years later with all of those things and more. Examine whether they are now effective for the company, operating in a healthy sustainable way. It doesn’t matter if it looks different from the five patron gods of the company and their mythological deeds.
Getting bigger
Several of the most senior members of the team were dilettantes, they only worked on things that they wanted to, they didn’t participate in the team’s regular processes, they checked in code that wasn’t reviewed or understood by anyone else on the team. I worked to dis-empower them, it was a delicate process, like a lot of folks that have been in a position for a long time there was a mythology about them that they were indispensable among the other executives. One by one I managed them out of the team, often with them believing that they were attaining an even better position. I replaced them with a well balanced group of people who could collaborate and were willing to do all of the work of the team. The overall productivity of the team grew and morale improved… within a year the dilettantes were gone from the company.
When you’re growing a team, think carefully about what that specific team lacks and put that on the list. Of course you want to hire very qualified folks for the level you’re seeking, but you should also look at the personalities on the team and be on the lookout for folks that would help balance those personalities. For example if the team is all mercurial, less experienced team members and they often build overblown solutions very quickly (that later take hundreds of patches to stabilize and make work), adding someone who is more experienced and more methodical at a higher level can help shape their productivity more constructively. If a team has too many big dogs, look for a couple of middle tier engineers with a good record of consistent delivery and then trade a big dog to another team and backfill to balance the team.
I recommend aiming for gender parity on your team; having a mixture of people who are socialized differently creates a strong cohesive team and helps a great deal with the atmosphere on the team. A very simple mechanism for this is to scan every batch of resumes you get for women, when you see qualified applicants that are women insert them into the process first. This works for other under represented groups too. You also need to avoid and root out systemic discrimination, questions or concerns that are only raised for women or other under represented group applicants. This often takes the form of code language like “too junior,” when the person has done and is doing the exact work you’re after, etc. The final step, you have to hire them. If you make it a goal and reinforce it as a matter of performance for yourself and your managers, you’ll be surprised how well it goes. Your interviewers should include women and minorities from your team. This reassures minority candidates that they won’t be alone on your team and it gives them someone in the interview process to ask questions about the team culture. It’s also a good social test for all candidates to see if they have issues with the women and minority members of your team. Several times we’ve passed over folks who decided it would be good to cut off and talk over our women interviewers and talk down to them when pressed.
Team morale
When I took over the team, one of the founders of the company had been “helping” what was perceived as a team in trouble. The founder’s model of how to help people was to give nebulous directions and then argue with people when they misinterpreted this direction or when they pointed out obvious conflicts in the direction. The team never received any praise, just constant criticism for not being engineers like the founder. Of course, the founder had no experience in the area that the team was working, or the technology… but, this didn’t dent his confidence that he could tell them what was wrong with them. The team was paralized, very few features could get completed because they were mired in senseless circular arguments. I started a process with the team to define who they wanted to be, what were their goals, what was their idea of quality, what were they going to deliver for our customers. Several iterations of this document engaged everyone on the team in forming a vision of themselves and how they wanted to be. At the same time I worked to manage the founder out of the process, noting that in our fast growing company there were many more vital projects that required the founder’s genius. I praised the team every time they lived up to their goals and standards and the morale on the team improved steadily.
The best team morale/cohesion-building is simply working together on meaningful problems. Morale is highest when the team feels in control, successful, and recognized. If your team doesn’t own what they work on--for example, if an overly controlling product owner insists on defining not just the business requirements but the solution, the architecture, and the technology choices--then no amount of building LEGO structures together is going to fix the disengagement that results. Consultants like these little exercises because you can basically take any arbitrary group and make them feel like they worked together and succeeded. That is mostly because: a.) the objective means nothing and failing means nothing, b.) the problem is simple and bounded, and c.) none of the decisions have a lifespan beyond the session. Apart from maybe being a game to play while you’re drinking, these exercises don’t have any impact on the real workplace. I do think that creating contexts for everyone to participate in planning, process decisions, and implementation decisions is good. By this I don’t mean everyone needs to agree or work on everything; instead, I suggest that when you are forming task groups, insert folks from other disciplines and levels into those groups so they work with team members that they wouldn’t normally and on topics that aren’t in their everyday workflow. This expands everyone’s knowledge of the product and what goes into building it, exposes them to evaluating and understanding requirements, and creates social bonds.
Don’t take engineers’ ideas about how to run the team too literally. Many engineers have naive ideas about how humans work and often devolve to trying to program them like a distributed system. Their ideas do have value as signals about what needs to be addressed in the team. All processes that the team adopts need to be humanized. Humans are not machines; the most consistent of them will vary enough and often enough to matter. They will respond to outside forces from their personal life, they get tired, they burn out, they have subjective responses to people and situations that are unique to them… Therefore team processes have to be fault tolerant and have mechanisms for fault detection and correction.
Getting to the right size
I had worked to build one of my sub-teams and fix it’s culture and staff it appropriately for it’s mission… but they were still struggling to deliver. I realized that their main stakeholder still treated them like outsiders, ignoring them until the last minute, not sharing plans and information, not considering the impact of their decisions on them. I decided to advocate that we move the team into the stakeholder’s organization, of course I had to make it seem like their idea… which I did, and the organization change worked wonders causing the team to gain focus, momentum and productivity. One could look at it as me losing talented engineers that I had recruited at great time and expense… On the other hand I now had a whole group of folks that liked me embedded in our stakeholder’s organization…
I would note that I talk about firing people a few times above, but in reality if you consider these issues as you grow your team, there should be little need. In a recent role, I grew a team from <20 people to >100 people in three years, I terminated five people for various reasons relating to performance or behavior over that time. The team had some of the best engagement scores and productivity of any that I have ever managed. Hire good people, build teams thoughtfully, and you will have a great environment filled with strong leaders.
Reducing the size of the team is sometimes called for. Products don’t work out in the market, companies make bad investments that catch up with them, and organizations need to be restructured to deal with macro-economic events. In some cases, you are allowed to choose the folks to retain in a restructuring. Think about all the topics above as you plan your restructuring. It is tempting to always choose just the most experienced, and most proficient folks, but doing this will result in a team that is out of balance after the restructuring. Reduce the scope of the team’s responsibilities as it shrinks. I have been asked many times to just go on with everything and do it with half the people. I just gave them back a list of the things we’d be failing at, which was also a good list of things that could be cut if they decided to be reasonable. Sometimes you get asked to lead a team that is already quite large and when you do the evaluation of the team you realize that it is too big and very wasteful. It is tempting to just add the new size of team to your resume and let the waste roll on, but teams like that are often riddled with behavior and morale problems, and eventually companies detect the waste and you are as likely to be disposed of in the restructuring. It is better to cancel wasteful projects, send sub-teams to some other part of the company where they can be productive, and, in some cases, even lay off folks to get the team to a healthy size relative to its real productivity and value to the company.
Conclusion
Finally, I would counsel managers to not meddle too much in the team. Even if there is tension on the team, give it time to be worked out by the team. If you do have to intervene, try as much as possible to do it by coaching the team in a process to identify and resolve their issues. The more that you insert yourself between members of the team, the less of a team it becomes. This also means that you should think about your own transition, try not to make every process dependent on you personally, this will limit the impact if you decide to leave the team or are promoted or reassigned.