How to Build an Engineering Team
People are the most important asset an organization has, ultimately they are the ones building the product and delivering value. The importance of a high-performing engineering team cannot be overstated
HIRING
Finding good people is the hardest step, you can start with people from your own circle (former colleagues, from school, conferences, etc.). Interview candidates with a focus on problems related to the company, that test general logical and technical skills which will be crucial as a team member. However, don’t eliminate candidates solely based on exercises that require a very specific kind of knowledge (an advanced math concept or a tricky algorithm, for example). Test for core values; you want to have chemistry, not only talent.
Update the interview process based on feedback from candidates and employees. Furthermore, make sure the activity is inclusive, have a job description that is neutral and describes the impact the employee would be having, and include a review team that is diverse.
ON-BOARDING
Onboarding employees is a critical part of the integration process. First, Invest in reusable training materials (documents, sandbox environments where team members can practice) as these will greatly enhanced the learning experience. having newcomers collaborate on updating the training materials can be a great way for them to reinforce what they just learned. Create a mentorship program, it is great for a new team member to have the support of experienced people; it can also help the established team member keep motivated and reinforce their knowledge, there are few better ways to learn than to teach others. Additionally, be sure to define coding conventions, the code should ideally look like it was all written by the same person, this will make it more accessible to new team members. This can be enforced using development tools and code reviews. Although training is a vital part of the on-boarding process, ensure there is a balance between learning and producing, if the new hire starts making small contributions early, it will provide a sense of accomplishment and benefit the company. A good on-boarding process can also help identify bad hires faster.
In my experience, letting new engineers figure things out on their own can work (it can even give a sense of pride), but the return of investment might be slower as the resource will usually take longer to be productive, it will increase the stress level and reduce happiness. Some people might be frustrated and discouraged.
DIVERSITY
Employing people from different cultures and backgrounds strengthens the team, however, hiring diverse people is not enough, you need to create a workspace culture of inclusion.
Having different experiences and views enables team members to bring diverse solutions to the table, this increases creativity and understanding of different markets and improves the reputation of the company and its product, which in turn makes the organization more desirable.
CONTINUOUS LEARNING
Learning shouldn’t stop after on-boarding, implement a training program with specific goals for the employees. Create a culture of continuous learning and innovation; leaders should create a safe environment which fosters creative thinking, risk taking, and curiosity. This is greatly limited when resources are utilized at 100%. Organize retrospective meetings, brainstorming sessions, and hackathons. Encourage developers to get away from their desk and see where the products are created (or consumed) in a hands-on way. Some of the best ideas and solutions come from seeing the problems to be solved first-hand.
TEAM MOTIVATION
Short term goals provide a sense of accomplishment at the end of each day; these could come in the form of a code commit, closing tickets/stories, etc. Long-term goals give the team a sense of ownership, it’s important to understanding why the company exists and the value it provides to consumers. Once employees believe in the vision, they will want to keep contributing. Empower teams to make decisions, decentralized decision-making reduces delays and likely may improve quality, due to the local context that leadership could be lacking. Furthermore, stablish a clear career path for team members, giving them a chance to grow in the company; be transparent on what the expectations are and communicate the next step clearly.
Protect the team from distractions. Constant switching between tasks limits productivity. Don’t expose or blame them for mistakes, the manager should always take responsibility in such instances.
COMMUNICATION
It’s very important to educate the team on how to communicate effectively, by setting standards for meaningful updates, like the minimum information required, format and people who should be involved. The main communication channel should be a project tracking tool where individual tasks are updated regularly, this will make the information available where it’s needed. Although, it should not replace face-to-face communication, which will always be the most effective, but even information coming out of these meetings should be documented.
Create and maintain good relationships not only within the team, but also with teams you interact with; relationships are based on trust, enhanced by a common mission. Moreover, team members should continuously and actively engage with other teams to identify and manage dependencies and remove impediments.
DEVELOPMENT ENVIRONMENT
Due to the difficulty of moving from a gated, waterfall-type delivery model, it is critical to implement a Continuous Integration and Delivery (CI/CD) pipeline from the start, including automated end-to-end solution testing. This is critical for getting timely feedback on your product and enabling the team to adapt to changes quickly.
Technology stacks should be defined by the project’s needs and the team’s experience, by determining application components and collaborations between them. Consider maintenance and scalability when setting up the development infrastructure.
Each team member needs to have the appropriate tools to do their work, remember that they are your greatest investment, you don’t want to limit their performance with lack of equipment.
VALUE STREAMS
Define development value streams, which are dedicated to building the product and providing a continuous flow of value to the customer; break them down into features and users stories. Dividing projects in value streams makes the team scalable; some collaboration can be expected, but value streams should be as independent as possible, making it easier to manage each team.
Having a well maintained and prioritized work backlog, limiting work in progress and keeping a sustainable pace, will help with resource utilization. A project management tool like JIRA helps to visualize what’s on everyone’s plate and keep the team in sync; this also makes it easier to support the team.
MEASURE PERFORMANCE
In order to improve performance, you have to be able to measure it. First you have to define what good performance means to your team, the key performance indicators (KPI) need to be align to the company’s value streams and the business goals of your team. If a value stream is directly related to increase revenue, then revenue can become a KPI. Other metrics that can provide additional information are customer adoption, market share, etc. For projects or features that offer more internal operational value, you can measure more relevant factors like, user satisfaction, operational improvements, etc. Measuring trends is usually more efficient than using fixed numbers.
You should be careful not to overwhelm the team with performance indicators as having too many metrics can not only distract from development but it can also decrease motivation by creating a hostile team environment. Metrics should be concise, simple to understand and drive the team towards a common goal.
IN CONCLUSION
Create iterative and scalable processes at all levels, from recruiting to training and development. Without collaboration, there is no team, it is critical to have a good communication system, build trust and develop good relationships. Increase team’s engagement by empowering them, making them feel appreciated and accomplished.