This is part 5 of a six part series based on a talk I gave in Trento, Italy. To start from the beginning go here.
So, let me talk a bit about people. Software is made by people. Sometimes individuals but more likely by teams. I’ve talked earlier about some aspects of our architecture and our frequent rewrites but it’s people that make all that work.
And, honestly, people can be an utter joy and a total pain. Finding, keeping, nurturing people and teams is the single most important thing you can do in a company. No doubt.
Finding people is really hard. Firstly, the technology industry is booming, and so engineers have a lot of choices. Countries create special visas just for them. Politicians line up to create mini-Silicon Valleys in their countries. Life is good!
But the really hard thing is interviewing. How do you find good people from an interview? I don’t know the answer to that. We put people through on average 8 interviews and a pair programming exercise. We look at open source contributions. Sometimes we look at people’s degrees.
We tend to look for potential. An old boss used to say, “Don’t hire people who’ve already done the job, hire those who can learn to do it”. It’s an interesting idea. People naturally want to hire people who know how to do something. But technology changes all the time, so what you are really looking for are people who are curious.
And you won’t find curiosity by looking at degrees and qualifications. You’ll find it by asking about what people do and think. What they enjoy and what they’ve done when no one was looking.
Another thing that’s really important is to ask, “Can this person express themselves?”. It’s rare that it’s OK to have someone who can’t communicate with others. Sure, you may come across that one genius who you want to hire who only speaks in grunts. But real magic happens when teams (especially small teams of 3 to 12 people) make software together. And teams are built on communication. So, look for people who can express what they are thinking: might be through email, or drawing, or speaking.
Letting People Go
You’re also going to find that you’ve hired the wrong people or built the wrong teams. Don’t be afraid to move people around. Last year 16% of people moved to a different job inside Cloudflare (not just teams!). You should constantly be looking at your teams and asking how well they are performing.
It’s not a failure to change a team, or reorganize, or move people about. In fact, it’s a failure as a manager to NOT do that.
Don’t be afraid to let people go.
It’s sad but you’ll think someone is great when you interview them and then they turn out not to be. Or someone gets too big for their boots and starts behaving like they own the place. Sometimes people need to leave the company. This is by far the worst thing a manager has to do (to this day I hate letting people go).
Over the last few years I’ve been in the position of having to decide whether to remove people from senior management positions in engineering. Making those decisions is really hard. You might enjoy working with someone but realize that their team isn’t doing so well, or they don’t seem to be achieving what you expect from them.
I know from my own experience I’ve always taken too long to make changes. I always want to give people a second or third chance. And usually it’s been a mistake. Actually, not usually, always. It’s unbelievably tough to say to someone “I don’t believe that you are the right person to be X and so I’ve decided to replace you”. But if you do that be 100% clear. It’s fairer to the person being moved on that they know that a concrete decision has been made.
I think one of the most important things I say to people who work for me is: “You need to tell me if the job you are doing isn’t making you happy”. Because I may not realize. I’m only human after all. One of my engineers took me up on that one day and I’m glad he did. This was someone who reported directly to me: a staff engineer with a ton of experience.
One day he came to me and said, “I don’t want to work for you any more, I want to work for X on Y”. Perhaps he was nervous to say that to me but putting people in jobs they enjoy is key. A manager isn’t successful because they grow a big team, they are successful when their team builds awesome software and awesome software gets built by people who feel they are doing their best work. That should be your goal: help people do their best work. Help people grow and learn.
Diversity and Inclusion
There’s a lot of discussion in the software industry about diversity and inclusion. Many years ago, I had a small team of engineers in one of my first management jobs. There were five of us: Alice, Tanvi, Roman, Dan and me. Two women, three men. It was one of the most fun teams I’ve ever worked on because of that mixture of people and backgrounds. We built a really nice piece of software.
Lots of research shows that diverse teams are stronger, happier and do better work. You’re really losing out if you don’t have a diverse team. This is an area Cloudflare is working very hard on (and especially in the engineering team). Not because it’s trendy or cool, but because it means we’ll be a better, stronger, smarter company.
To do so we’ve looked at the language we use in job descriptions, the way we interview people, and how we source potential candidates. It also meant reviewing our benefits and internal policies to make sure that the company is attractive to all sorts of people. It’s working and I expect that by the end of 2019 we’ll be able to talk about all that we did.
Bottom line: there are great people out there from all sorts of backgrounds. Go find ‘em!