Effective Development Teams, Part I
by David Florey, principal software architect, Sage Software
Editor’s note: This is the first of a three-part series on Effective Development Teams. The second and third articles can both be found online.
The effective development team is a cross-functional team of like-minded individuals striving for a goal. To understand how an effective development team operates, we first need to understand how to construct such a team. In this part we will learn about the team members, the role of each team member, and how each team member contributes to the overall effectiveness of the team – in short, the people and the importance of checks and balances among them.
The people Effective development teams consist of the following people:
- Users
- Product managers
- Developers
- Technical writers
- Test engineers
- Team managers
Users. Users are the main stakeholders in all of this. Presumably, they have a problem that your software will solve. The problem may be with your software, or the problem may be a general inefficiency in the users’ day-to-day tasks that you believe your software will address. Either way, users are a part of the team and should be involved early and shown progress along the way.
Practically, this means identifying a good cross-section of users who are willing to be available throughout the development of the software. To do this, you must first understand different user “personas.” A user persona describes a type of user through his/her role in the company and his/her motivations and actions within that role. Once you have identified each user persona, you must solicit users that represent these personas to help you build the right software.
It is important also to make clear the distinction between customer and user. Though a fine point, customers are considered the ones purchasing the software and users are the ones using it. Customers are important in this process, but making the users happy is more important. Customers need to be wowed by the software, but users have to be satisfied. When you consider this economically it makes sense: if the users aren’t satisfied, the customers are going to stop buying it.
Product managers. Product managers are the users’ advocates: the ones who implicitly understand users’ needs. Because others on the team will be busy building the software, product managers become the conduit between users and the team. Product managers must completely understand the users’ needs and, ideally, empathize with users. Empathetic product managers do more than just understand users’ needs; they have actually experienced the same day-to-day tasks and struggles.
Finally, product managers must also competently and consistently communicate the needs of the users to the rest of the team. Therefore, they must have a sense of organization and the ability to generalize issues to help the team better understand the larger picture.
Developers. Developers provide the technical skill of the team. Developers – or at least the lead developer – must be creative and knowledgeable of architecture and design patterns and principles as well as usability guidelines. They also must have a solid grasp on all the technology involved and an eye on other technologies that might be able to solve the users’ problems. They need expert coding skills and a commitment to regular unit testing and code reviews; they also must be dedicated to users and their needs, rather than to a technology.
Technical writers. Technical writers must have a solid understanding of the domain and of the product as it is developed. They should be involved in all workshops and meetings with the others on the team as they will be translating the technical aspects of the software into the jargon of the target audience.
Test engineers. Test engineers must ensure that the software not only functions correctly but also meets users’ needs. Test engineers can either test the software as a black box or help the developers through white-box testing. Either way, they should be considered a secondary resource from a testing standpoint as all of the software should have been unit tested by the developers before any hand-off to the test engineers.
Managers. Effective teams have very few personnel issues, yet issues can and will arise. Team managers must be able to minimize any impact from personnel issues, predict and prevent such issues when possible, and otherwise stay out of the team’s way.
This makes the manager’s role a careful balancing act of keeping the team productive while not getting too involved in the day-to-day.
Checks and balances Effective development teams consist of at least one person from each of these disciplines to provide the all-important checks and balances to ensure that the right software is being built in the right way. The developer, for example, cannot also be the test engineer.
In the same vein, the technical writer should not also be the product manager. This illustrates a subtle point: the producer of something should not also be the consumer because he/she will ultimately think primarily of his/her own needs. In other words, if the developer or technical writer is also the product manager, he/she might consider only enough information to get his/her job done, but perhaps not enough to communicate the requirements to the rest of the team.
With the team in mind, we are now ready to study how this team can be effective at each stage of software development. We will explore the team in action in the next two parts of this series.
About the author David Florey is a principal software architect at Sage Software in Beaverton, where he is focused on using the latest technology and practical development methods to deliver high-quality software to Sage customers. He has more than 12 years of experience building software and working with effective development teams. While hard at work with Sage, he is also working on his master’s degree in computer science at Portland State University. He can be contacted at dzflorey@yahoo.com.
|