Building a strong team is a prerequisite to shipping successful, innovative and good quality products that customers love. But how do you build a software development team capable of doing it? You build it lean and mean. In How To Build A Team And Not A Random Group Of People I outlined the basics of building any team and today I will focus on building a small, agile, engineering team that will be resistant and able to execute. To recap the basics from the previous post. I would urge you to:
- Hire for strengths
- Hire for gaps
- Hire for cultural fit
- Hire the right, not the best, person
- Hire by committee
It starts with technology
And now to our engineering team. It all starts with technology. Or does it? What technology stack will you be using? If you are hundred percent sure on programing language and technology stack it is an advantage to hire for these, but I would argue that ultimately it doesn’t matter. Unless you work on some legacy product where the technology is given by its environment or business constrains I believe that it is better to hire great, smart and talented engineers who will be able to flexibly shift between technologies as needed, than bunch of experts in one particular programming language.
Hire for smarts not knowledge
We are living in fast moving world and especially in technologies the world is moving even faster. Yes, you may be building your products in C++, Java, or .NET which could be considered stable and even old languages but if you are (un)lucky you may need to build applications (like SaaS) using whole bunch of relatively new technologies and what is worse there are constantly evolving, changing, and new are emerging. For a team that builds brand new product it may be required to learn new things as they go and as the particular needs demand.
With this in mind, hiring a great Java or .NET developer might be a good call but that is not a requirement. The most important is to hire a brilliant and talented engineer who is able to solve complex problems and pick a technology as needed to get the job done. You recruitment process needs to be aligned with this requirement. And yes, if your technology is set, then by no means, hire also for skill in a given language since it will save you time to get that person up to speed. I would suggest you check this article first Effort And Attitude Beats Talent And Knowledge.
Hire for flexibility not experience
You need some experts on your team but when developing modern software flexibility will be more desirable. When it comes to expertise you need someone with a domain knowledge. Bring a true expert who can mentor the rest of the team, but make sure the team can pushback otherwise you run into danger of the “old thinking” and any competitive advantage in the form of innovation will get out of the window.
When it comes to technology there are some circumstances when you need someone with a deep expertise in a given technology. For example, if your product needs to handle huge amount of data you may need someone who is really good at database performance, data optimization and similar topics that are difficult to study from a book and come only with experience with a particular database engine.
When hiring an expert who is focused on one technology make sure you balance the team with bunch of other people who will bring the smarts and flexibility in case the technology shifts.
You hire for cultural fit
Mindset is everything. For all this to work you need to build a sense of ownership and accountability. These things don’t come easily to everyone so your main concern should be to finding people who will identify with your goals, who will share the passion for building a great software, who will share the need to make a difference and to help solve problems for your customers. If you have these on board you keep the team together in good and bad times, you give them autonomy and they will build together something great.
So how could your perfect team look like?
As usually, it depends. It is always a question of what you are building, whether the team sits together in one time zone, what is the management structure in your company, what budget restrictions apply, what processes will be used and many other aspects. But assuming you want to build a solid product development team that will have the right skills, will be given the needed autonomy, will work within some agile processes like SCRUM, you will need these:
- Product owner who owns a vision and requirements for the product and works closely with external stakeholders
- Product designer who ensures the overall design of the product and that it solves the problem you set to solve
- Architect who leads the technical direction of the product and have the final word on technologies used and any technical arguments and will be responsible for performance and scalability
- UX designer who is responsible for designing workflows and usability
- UX researcher who is able to gather data from customers or potential customers to ensure that feedback is gathered well in advance of the final shipping date
- Graphics designer who is responsible for all the visual aspects
- Writer who ensures all the textual descriptions are easy to understand for the target customers, and the right amount of text is presented
- Backend developer, or two to build the core technology that does all the magic, deals with gathering, storing and manipulating data
- Frontend developer, or two to build what the designers came up with and provide a great simple to use, scalable, and responsive interface to the user
- QA dude to ensure end to end quality of the release, ensure that quality is built in through code reviews, unit tests, automation, and other means and is the last line of defense against shipping broken product
- SCRUM master to have a servant leader who keeps the machine running and removes obstacles for the team
Lots of people, huh? The good news is that not all of them need to be actual full-time employees but many of the roles can be combined. You probably don’t need a full time UX researcher and can combine it with the Product designer or other role. You don’t need full time Writer and can combine him with another role. And you definitely don’t need full time SCRUM master. That is a virtual role that can be even regularly rotated across the team.
The bad news is that for this to work really well you need to build in redundancy. You may get one strong UX designer but you need someone else on the team who will have at least decent UX design skills. Why? To be able to deliver even if your main UX guy goes on vacations and to actually constantly challenge the main UX guy and to be able to challenge the expert and keep him at his best. And the same applies to any other role. What does it mean for the software developers? Well, it leads to the need of hiring a full-stack developers rather than experts focusing on niche. You get one strong frontend guy, but anyone on the team needs to be familiar with frontend technologies and step in. You may have one strong backend guy (most likely the architect) but even the frontend guys should be able to write backend and deal with databases.
So again, when you are building your next team think about expertise, smarts, flexibility, culture, and redundancy.
What is your recipe for building a great engineering team? What sort of people would you require to build a new successful product? Do you have a completely different approach to building software development teams?
Originally posted at LinkedIn.