Building the RIGHT team for a project
Planner vs. Doer – Planners are programmers who plan to the very detail before starting to write a line of code where as Doers are programmers who would start to build prototypes with an expectation to grow them into final product with minimal to now planning.
Low Level vs. High Level – Low level programmers prefer to work in low level languages such as C and assembly where as High Level programmers like to develop components and objects and would prefer to use languages such as Java and C#/VB.
Individual vs. Team – Individual contributors prefer to develop code alone and would close them selves from others until done where as Team contributors like others to involve other team members and teams to create a team decision on the directions of a project.
Cowboy vs. Perfectionist – Cowboy in the true sense of the word are risk takers, he gets things done and many a times would be liberal with boundary conditions, managing exception conditions and time outs and would churn out code faster than a perfectionist.
Perfectionist also called Idealists on the other hand would take great pains to create software which handles every exception. He would check every error condition, every boundary condition and hence would take longer to produce the same functionality.
Similar to Briggs-Myers (http://en.wikipedia.org/wiki/Myers-Briggs) type indicator none of these types is "better" or "worse"; however, as Briggs and Myers recognized that everyone has an overall combination of type differences that is more natural for them. In the same way as writing with the left hand is hard work for a right-hander, so people tend to find using their opposite psychological preference more difficult, even if they can become more proficient with practice and development.
A good balanced team would need a good mixture of programmers with different types of personalities. The right mixture we believe depends on the project type, stage of the project stage, project uptime requirements, project complexity and project longevity.
Here are some guidelines we find useful when creating a team for a project:
When the project is complex and part of a larger product with 24/7 uptime expectancy and the product has a long shelf life – Planner, Team and Perfectionist personalities are necessary to build a good team.
When projects are small, interfaces with the hardware in known ways- Low Level, Individual and Conservative are important programmer personalities to have.
For project team building desktop GUI applications High Level, Team, Liberal and Doer are more important program personalities.
Here are some project examples:
Project Example 1: Messaging System of a multi-card real time telecom product
The messaging system is created for a complex telecommunications product which has a shelf life of over 5 years. This messaging system is critical for the proper working of the product.
This project would need a team with programmers with following personalities:
Planner – Planning is important to design for different failure conditions and traffic loads.
Team – Interfacing with many teams and within team to create the solution is important to create the right solution.
Low Level – Messaging system has to be efficient else it would bog down the system
Perfectionist – Messaging system has to be robust to withstand any potential failures occurring in the system and recover automatically from such failures.
Conservative – The right amount of correct code is required to perform efficiently. However Liberal comments are required when tricky algorithms are employed.
Project Example 2: Desktop Application with access to backend database.
This project is a smaller desktop application which is a client to a backend database.
This project would need a team with programmers with following personalities:
Team – Team work is required to help understand the requirements.
Doer - A doer would be able to pull this project off more cost effectively.
High Level – Needs a programmer who loves to creates and use components and objects.
Cowboy – A perfectionist may be an over kill for this project.
Liberal – Liberal comments would help others to modify and grow the project.
Project Example 3: Driver for a USB interfacing with a rotary motor.
Developing drivers is generally a one to two developers job. These developers much have the following qualities: Doer, Low Level, Individual, Cowboy, and Conserative.
Note that these are just guidelines and “points-to-ponder” when building a brand new team or adding members keep this in mind as if it helps creates a better team.