Running with hired guns: Building High Performing Software Engineering Teams

And how you can do it as well. But it requires the right people for the job.

--

In my career as a DevOps engineer, software engineer, and team lead, I’ve read many great books and other resources on the challenges of building and operating software engineering teams. I have never found, however, a guide for a specific problem: building an outsourced high performing software engineering team.

Over the years, I’ve been a member and later led (and still leading) these teams in building different services and products, watching them succeed, or fail, in their job.

With this article, I aim to provide a basic guide for the challenges of building and leading a software engineering team in this competitive, fast-paced environment.

Before we start, a couple of words about “rock stars”, “ninjas”, and other mythical creatures from the world of software development

FFFFSource: Giphy

Let’s start with the basics: these people don’t really exist.

Even if you, by some miracle, are able to hire one, remember your task is to build a high-performing team. Referring to anybody as a rockstar or a ninja connotes some other types of behavior that may not fit well in your team dynamic, (remember rockstars are famous for trashing hotel rooms and not following rules,). To go one step further, these labels may sound discriminatory to other team members. Instead of chasing mythical creatures, try a more data-driven approach.

Start off by analysing your successful hires: what are the main characteristics of those people? What aspects of their personality or skill set makes them successful in what they do ? How to evaluate those qualities in new candidates ?

In my experience, cool-headed, problem-solving oriented and kind people with proven experience in the field will get the job done, in most cases.

Contractors never die. They go to hell and regroup.

Let’s make this task even more challenging.

What if you need to build and manage a software engineering team in a startup-building company that leads decentralised teams who build products for other companies? It is a well known fact that companies who hire outside contractors have extremely high expectations of them. This sounds like you’re building and managing a team of hired guns, right?

Hired gun — an expert who is brought into a company or an organisation to deal with a particular problem or situation.

This defines the term very correctly, agree?

So — let’s see who fits the bill. What kind of engineers do you need to find in order to have a high-performing team in this type of environment?

In my personal experience, besides technical know-how which is mandatory, there are only two characteristics that can be categorised as “the most important” and will determine the quality of your team’s performance:

the willingness and ability of team members to help each other and other stakeholders on the project.

Photo by Ministry of Programming

Willingness to help and truly contribute to the success of the project and the team pretty much means elevating yourself from narrow personal interests and acting towards a common goal with openness and willingness to assist in any aspect of the project where you have domain knowledge.

Ability to help in this context is more challenging. “The road to hell is paved with good intentions.” Being able to give AWS infrastructure advice or suggest better code architecture and communicate that in the right way requires not only technical expertise but also good communication and sales skills. And most importantly if you want to talk about improvements and to criticise existing systems be ready to offer and implement better solutions.

With this mindset prevalent in your team, mutual trust and psychological safety will come naturally, and bonds holding your team together will be strong.

I’m not alone when stating this.

In his book “Building Great Software Engineering Teams”, author Josh Tyler defines a simple 4-level model for evaluating engineering performance. I find this model rather insightful:

  • A mediocre engineer does what is asked.
  • A good engineer does what is asked, and does it well.
  • A great engineer does what is asked, looks for possible problems, edge cases, and overlooked issues, and solves those as well.
  • An outstanding engineer does all of the above, but also tells you about problems you didn’t even know existed, and plans for situations you never envisioned.

According to this model, great and outstanding engineers will not only do what is asked from them, but will also actively support and help others, all while selflessly contributing to the success of all stakeholders on the project.

So, when evaluating candidates for your team, a simple question like: “How much can a candidate improve the happiness and productivity of others on the project?” should be considered seriously.

Get this question right, and your team is one step closer to creating impactful results.

A word on leading/managing team

In conventional Silicon valley wisdom, a group of smart talented people in the same room, working on the same goal, is enough to build great products. While this may be true in early-stage companies, as your company and team grows, the logical next step is instalment of middle management that will lead and manage different teams that constitute your company.

When you’re leading creative professionals, the best results come from creating the environment, structure, and processes in which those people can flourish.

More importantly: after creating the right framework, you must do your best and try to stay out of their way and remove obstacles. How? To name a few:

  • Clear Expectations Setting
  • Delegating ownership
  • Empowering team members to make autonomous decisions
  • Setting Testing As First-class problem
  • Ship Early and Often

Remember, these people don’t work for you; you work for them.

If you disagree with this, ask yourself: if your team leaves tomorrow, how much work actually gets done?

Summary

Don’t forget that building any kind of team that works toward a common goal is a very broad and challenging subject. There is no one-size-fits-all solution.

Yes, there are great books and literature on this subject. Read, listen, watch and you’ll be smarter. Your willingness to learn and influence your team’s status quo is a solid indicator of your dedication to make a difference in your team. There is no step 14 without step number 1.

But learning is of greatest value when applied.

If there’s anything I would like for you to take from my 10+ year experience as a seasoned team leader, it’s that:

  • Leading a high performing engineering team requires a great dose of humility, discipline, and clear communication. It’s not about you. It’s about the team.
  • Whoever you decide to hire, think about the collective energy and dynamics. Ask yourself: What will happen when he/she joins the team? Will the collective energy go up or down?
  • Seek for team members that are willing to, not only do the job, but actively participate and contribute to your team’s success.
  • Set up the framework for the team and then get out of their way and support them in the daily work.

These may not be the all-encompassing thoughts that lead to a positive permanent change within your team. But, they’re steps forward.

They work for me. More importantly, they work for the team.

When you’re leading, there’s a lot of work to be done and sometimes it’s challenging to decide where to start.

I’ll make it easier for you — make your team your priority.

Ministry of Programming is a supercharged startup studio specialized in building startups and new products💡 We were voted in the top 1000 fastest growing companies in Europe by Financial Times. Twice.

We offer product management, design, development, and investment services to support entrepreneurs and startups towards product success.

Building your next startup? We would love to hear more. If you want to work with us on your startup feel free to reach out at — https://ministryofprogramming.com/contact/

--

--