I believe that in an ideal team, members should have different but complementary abilities. But is that true about software development teams?
As an example we are a small team of 5. We almost have the same abilities and interests but with different levels of skills. Regarding such situation I think we don’t cover our teammates’ weaknesses.
- Is there any pattern to follow to manage and improve such team?
- Should I setup a team with different abilities and interests to maximize the performance and productivity?
— EDIT —
Our current team has a specific lifetime. We work together in a per-project manner. In another word we may change the team arrangement for each project depending on the project and developers situation. Actually we’ve provided a sort of floating situation.
In short, we are a network of developers rather than a fixed-size development team.
0
I would never encourage taking on a lesser quality developer because this will some how provide better balance for the team. Ideally, you want the best person to perform every task, but that becomes impossible with large projects and short development time goals. If all the team members are top-level programmers, it doesn’t matter who does what. Anyone should be able to research and learn any skills that the team lacks (Sort of a trait of good programmers.).
In the real world, it is difficult to find and compensate an entire team of top-level programmers, so you find ones that are good enough. Initially they are given tasks they can handle which may help motivate the top performers since they can take on newer and tougher tasks. Hopefully the mentorship provided to the entry -level developers will allow them to improve their skill set.
It will become more difficult to maintain this team. People get bored and there is not always enough compensation to go around. A top level team should be able to provide the software to generate enough revenue, but management, market trends, and other unavoidable factors can prevent this.
To keep entry-level developers motivated, they can be encouraged to learn one of the skills the team lacks if it is not too critical.
There are many ways to make teams with different abilities and skill sets function.
6
It works fine as long as those weak points never come op. If no-one in the team knows how to speak swahili, but it’s never called for, so what? Or handling big data. Or producing hardware when you’re a software company.
If there’s something that is likely to come up, there’s a chance someone on the team can become an expert in it. Go grab the rosetta stone and give it a few months. Other topics are simply too deep. Switching from crunching Java to IC board fabrication is a REALLY big jump. Something you could learn, but you’d probably want to start with college courses.
I don’t think firing everyone and starting from scratch sounds like a good idea. It depends on the business model. If there’s a skillset you’re missing on the team, and it’s needed, go fill that skillset. Even how you fill it depends on the problem. You could tell someone to go do it and leave them for a month, or send them off for training, or have the whole team tackle it together, or hire a guy.
1
I think your initial premise is invalid. What matters is that you cover the needed skills. Ideal in one situation may be disastrous in another. It also matters that you have someone avaliable who can step in when someone else is out, so each necessary skill should have at least one really strong person and someone else with enough knowledge to fix emergencies if a person is out unexpectedly.
There are different ways to cover the needed skills and most of them work just fine depending on the situation. In a C# shop that uses SQL Server as the database, you need a different mix of skills than in a place where every project uses a new set of tools. If you do work that is highly specializzed in several different ways, you may need to hire specialists. If the team is large, you may need a mix of generalists and specialists. If you are expecting to grow rapidly, you may want to have a mix of senior and junior people being mentored to become the senior people as you expand your work force. If your workload varies a lot through the year, you might want a mix of full-time and part-time or permanent and contract workers. A team of people doing embedded systems may need a narrower skill set that everyone on the team has and a team of web devlopers might need a mix of web designers, UI specialists and backend application developers who cover a huge variety of languages. A team doing Enterprise devloepment might require more specialists such as Big data specialists, BI specialists, reporting specialists, DBAs, QA personnel as well as application programmers specializing in two or three main languages, architects, etc. And of course the larger the group, the more you can afford to (and by the nature of the workload, need to) specialize rather than everyone having the same rough set of skills. You might even need people with specific domain knwoldge (espcially in medical applications and finance) that is more critical that the specific technical skills.
But is that true about software development teams?
Every software development team will have different levels of skills and complementary abilities. This is a reflection of the exposure to technology, the depth of knowledge, the level of interest, etc.
I think we don’t cover our teammates’ weaknesses.
Then cover them. Training? Activities? Address the weaknesses to enable a strong development team with greater cohesion.
Is there any pattern to follow to manage and improve such team?
There are a plethora of team management resources but perhaps what you want to do is address a specific area of technical expertise and the best way to do that is have your team do it. If members of your team must get up to speed, then create ways in which that can be done without stifling the team.
Should I setup a team with different abilities and interests to maximize the performance and productivity?
I think that does maximize performance and productivity. creativity and other factors that cause a team to be successful comprises diversity and brings results.
I asked myself two questions:
- 1) If a team member take a month long vacation, is the team exposed?
- 2) If a team member walks out today, is the team exposed?
If you are not comfortable with your own answers, then you will know what skills need to develop in the team and who to learn what. It may take some time get the team to the level you feel comfortable with.
Updated
It answered the question precisely if you think about it.
Same abilities and different skills are fine if you are in the env that you have enough of same skill level to cover the needs like one of the key folks take a longer break or walk out. This approach is much more effective that any prescriptive approach or formula.
2