Great software development is a creative discipline that requires skillful individuals, effective organization and undying passion from all who are involved. There are many theories about developer productivity, engineering management and company organization, but few that make an honest attempt to reconcile all of these factors and present an approach that both builds from proven methods and defines limits on its applicability. All theories have limits of applicability and in this case the limits will surround small creative companies with a small number of products.
Most creative companies start with two to three individuals banding together to provide a product or service. From there, if the company is successful, the existing team should stretch itself until it becomes infeasible, then hire one more person to fill the most painful gap. These first few hires are crucial because both the productivity of the company and the team’s personality depend on their output. The company must make a concerted effort to hire people who are brilliant, passionate and compatible with the established personality of the team. The goal should be to unify and extend a single personality or culture across all team members; a disjointed culture is the first obstacle to greatness. This process of pain-based hiring can be successively repeated until the first inflection point in company organization is reached: forming teams.
Forming teams centered around specific disciplines becomes important when the communication and coordination among the current set of people gets unwieldy. It is often hard to tell when this point has been reached from inside the company, but it almost always happens at the point when daily interaction is required between eight to ten people. Depending on the products or services the company offers, the natural team boundaries in a software organization will be something close to: front-end development, back-end development, design, product development, marketing and business development. Each team will have to form at its own pace, but the most crucial step is the initial move from the amorphous blob of people to separate groups, each with separate concerns.
The structure of each individual team is also important and there are many established models to choose from. In a small creative organization, the best results will come from teams that have a solid direction and strong leadership, but maintain the culture and closeness found among equals. Instead of installing a manager for each team or expecting all team members to have equal leadership, a hybrid approach will prove more successful. Embracing the concept of team leads—team members who still work directly with their teammates, but use about twenty percent of their time to coordinate efforts and tend to the performance and concerns of the team—will pay off immensely in the long-term. These team leads stay close to both the work and the people by spending most of their time accomplishing the same tasks as others, but also embody the passion and leadership needed in a small team to maintain direction and accountability to the company as a whole.
These distinct teams with separate concerns should create greater focus and lead to more individual productivity, but because there is no regular communication at the project level between all people, a need will eventually arise for meta-level coordination and communication. Project managers are those who shepherd a project from inception to creation, launch and maintenance. They work directly with all teams in the company to ensure that things are done well and on time. Most of the time the project manager will be dealing individually with team leads and workers on specific projects, coordinating and communicating to ensure dependencies are met and dates are set for different phases of the project. When a company is just forming teams, a single stellar project manager should be able to manage all projects in the company for a while, leaving the hire of more project managers for much later in the company’s life.
With team leads, a project manager and a steady flow of projects, an infant startup can transform into a coordinated and productive small company with a plan for controlled future expansion. The limits of this approach revolve around the same communication bottleneck that requires the first split into teams: communication between eight to ten people. In the case of an individual team, there will always be inter-team coordination that adds to the number of people, so the ideal maximum team size with a team lead ends up being five or six. Extrapolating this limit to all teams in a small creative company, plus meta-level workers, the maximum limit of applicability for the whole theory comes in at about forty people. Beyond this limit there are other theories for growth and maintainability, but for small companies this theory will prove to be one of the most efficient and sustainable ways to run a productive software development operation.
Through the publication of the methods and practices comprising this theory I aim to establish its viability and tested success for those interested in creating or helping a software development business. The basic structure and limits described so far are only small parts of the larger, detailed version of this theory which will be expanded upon in future articles. The intricacies to be described will take into account the people and challenges in today’s business world, rather than relying solely on any past model. The hope is that with a relevant and proven theory in hand, creating and growing a business should become easier and thus more prevalent, for the benefit of all who are involved.
Originally published:
May 25, 2008
Archived at:
http://h3h.net/technology/forming-software-teams
Let me know what you think by emailing me.