Let's see I am imagining that I am sitting in my office one day and my boss comes in to tell me about a new software project. The excitement factor is pretty low right now. Why is this? Well I have to solve this problem with a minimal amount of staff, in some cases I have to write all of the code myself. Anyways this time, things are different he goes on to tell me that I have unlimited resources to construct the team of my dreams to accomplish this task. Now we're talking. The team of my dreams. First off, I sure hope that everyone knows what a team is. You know those groups of people whose aim is to a common goal to solve a problem. Those things really exist out there, trust me. I have seen them and been members of them. Anyways back to my ideal team, who would I have? Well let's see if I can come up with a list:
- An Analyst - This person would be in charge of talking to the customer, determining their needs and conveying them back to the rest of the team. The analyst would be critical in gathering the requirements for the new widget we are trying to construct.
- A User Support Representative - Someone from the helpdesk. This person is the who will deal with supporting this new product. Answering the end-user questions and in a word, helping them use the new application/service. So they need to know early on that this widget is coming. Their participation on the team could vary based on their other duties.
- A project manager - This person is responsible for the project. Making sure that deadlines are met and costs are under control. The project manager (PM) would also help deal with staffing issues.
- A technical leader - What is a leader anyways (well check out my ITLP blog for more info on that). The technical leader is responsible for all of the technical decisions regarding the project. He/she is the one who making the assignments as it related to the project. The technical leader can go by various names, speaking from experience. I was called a Lead Software Engineer (LSWE) and Lead Systems Engineer (LSE) in a previous life.
- One or more developers - these are people who will be writing the code for the application. They will be responsible for design, code and unit test. These will use a methodology to develop the software, whether its waterfall, spiral or XP.
- A Test Engineer - Again in our prefect world, this is the person who will be testing the software. You do not want the developers to do this job. Why? Because developers are prone to test portions of their application that they know will not fail.
- Quality Assurance and Configuration Management - All important people to have on a project.
- The customer - they are part of the team too. Why? Because they are the ones that are footing the bill. In the world of Extreme Programming (XP), they live with the project as it happens. Not sure how that would work for some of the projects that we do around here. I do not think we are going to want 80,000+ students sitting in a room with us while we code.
- Documentation Support - These fine folks take the documentation of the project and put into a form that the user can understand. Let's face it, programmers write in who knows what language when they do documentation.
So there is my list for the perfect team. Are there other roles that are missing? Probably yes. Have I ever been on teams like this? Yes. Do these teams work? You betcha they do. Now comes the bigger question, with a limited staff how do you accomplish the project with the staff that you have. Well people are going to have to share the roles, but a minimum you are going to need at least the following people:
- Customer (Without one of these, there really isn't a need for a project).
- Leader (Technical and Project Management Combo)
- Developer (Could assist the leader in the analyst role)
- Tester (we do not want developers to test their own code)
- Support (we still need someone to support this project. This person could also do the documentation)
Comments (5)
Jimmy,
I really like the composition of your dream team and your definitions of each person's function. All too often the developer has to perform all of these functions and we wonder why the project isn't successful. Or often it's not clear who gets to make the final technical decisions and it's important to know that up front.
I would add another person to your team: in my experience, a Sponser helps in a promoting and facilitating role - making sure the team has the resources it needs, communicating the value and priority of the project, batting off competing priorities, etc.
Posted by Mairead Martin | June 27, 2007 11:33 AM
Posted on June 27, 2007 11:33
Spelling Correction
That should be "Sponsor" not "Sponser" .....
Posted by Mairead Martin | June 27, 2007 11:35 AM
Posted on June 27, 2007 11:35
Jim -- I really like this post. A couple of good books about putting together dream teams like this:
Posted by Jim Leous | July 10, 2007 11:16 AM
Posted on July 10, 2007 11:16
And to add to Jim's list, Dreaming in Code by Scott Rosenberg. This is a very interesting take on a large project with distributed development aspects.
Posted by Jimmy Vuccolo | July 13, 2007 7:00 AM
Posted on July 13, 2007 07:00
You might be able to collapse your minimum list of 5 roles onto 3 people. (Not to say this would be ideal, but if you're really short on people, and it's a small project, then maybe.) You still have to have a customer, but the Leader and Developer could be the same person, and the Tester and Support could be the same person. But, as Jimmy indicated, you can't mix the testing and development roles; the conflict of interest is just too high.
Posted by Phil Devan | July 28, 2007 9:17 AM
Posted on July 28, 2007 09:17