Institutionalizing a Development Methodology
We differentiate ourselves by the complexity of the problems we are able to take on and by the quality of our deliverables. This requires a multi-faceted approach: we need to find the best engineers, ensure they are trained according to a rigorous set of practices and procedures, and we need to institutionalize this across a distributed organization.
Recruiting talent is a difficult problem anywhere in the world. At Thumbtack, we look for people who are creative and take pride in their work, with specific skills being a secondary concern. We can train people on skills, but we can't train basic professionalism and pride.
In order to attract people who will thrive in our environment, we:
- Seek out interesting problems for them to work on, especially those with architectural or design complexity. This not only helps us differentiate ourselves to customers, it attracts the kind of engineers we're looking for.
- Create an environment where developers are encouraged to experiment and share ideas. We have group social events, internal conferences for developers to show off their research to their peers, and an environment where we function as a team instead of silos of teams that don't interact.
- Maintain close relationships with technical institutions and societies. For example, we teach several classes at Omsk State University and sponsor several of the programs there.
The best process only works if the people using it enjoy it and benefit from it themselves. We have a highly structured process we use in virtually all of our work, but one that provides benefit both up to our customers and down throughout the team:
- Developers perform unit testing as part of any standard development. Measures of their productivity focus primarily on their code quality and only secondarily on metrics such as points closed per week.
- Dedicated business analysts and quality assurance resources sit next to developers and interact with them throughout the project. By keeping a business focus first, questions tend to get resolved internally, fewer things get dropped, and there is less frustration up and down.
- Cross-team code reviews ensures that a fresh set of eyes is always looking at a problem. It also helps spread knowledge throughout the organization, allowing us to staff up and down while reducing ramp-up times.
Maintaining quality and process as we grow our organization is a central concern to us. In order to keep ourselves distinct from larger shops, we manage growth very carefully and take several steps to not lose sight of who we are:
- New hires are brought onto existing projects as unbilled understudies, learning how we work even if they have extensive prior experience.
- We maintain a central repository where we keep track of coding standards as well as interesting solutions to difficult problems we've encountered in the past. Unlike some other companies, these repositories are not routinely ignored, but are instead brought up regularly at internal events and reviews.
- While we use a scrum-based process for software development, we include external review steps as part of every project. This forces other teams not directly involved in the project to learn new technologies and see how others in the company are doing it.
- Low turnover. Our company has been blessed with very low turnover. We do occasionally weed out a few bad apples, but those that we keep tend to want to stay here and grow.