8/01/2008

On the Failure of our Team

About half an year ago, I joined a big cloud infrastructure team(15p+). During these days, I learned a lot from those things that we may not deal well. In this article, I will try to summarize what caused the team management problems and what we can do better if we had the chance to do it again.

What makes us fail?
1. Team Culture
no culture is a kind of culture.
no trust, no cooperation
respect to individual team member and domain experts
software developing is art but also scientific activity

2. Team Vision and Goal
Define the goal of our work and project. How to define success criteria? many times, people say, we should make this component runnable(把系统跑起来). But how to define "RUN"? what test cases to pass? what code coverage to cover? what user scenarios to pass? what's the performance goal? what's the scalability goal?Are we doing research or engineering? If engineering, be careful about the engineering excellence. If research, what's your uniqueness/innovation?

3. Team Moral
team moral. Salary is not the only way to burn team moral, sometimes, it's not the most effective way. Team building activities(lunch together, team activities(true man CS), hiking together), exciting project vision, comfortable team environment and simple colleague relationship, training courses.

4. Team Member Diversity
Roles: Architect, Developer, Test
Background: Junior, Senior, Experienced Leader

5. Team Leadership
Shield team members from outside interference
Give ownership to team member, they are not just coder

6. Cross Team Cooperation
Platform and Application should be partner relationship, don't challenge, don't be aggressive, just work together.

7. The root cause of all the problems lies on some leaders. Some people never do any risk analysis and challenge estimation. Such unrealistic characters have very bad influence on the project and the whole team.

Things Learned from the Failure:

1. Cooperation: open to partner and other domain expertise owners. Learning from others,leveraging existing knowledge will reduce our risk and cost.

2. Personal development: encourage team member to think, to dream, to be open, to be passionate and to grow. Only in this way, can the team be stable and grow. When team member grows, the reputation, confidence and capability of your team grow.

3. Control your ambitious: "志存高远地梦想固然值得钦佩,但必须要脚踏实地地行事". Daring to dream is always a good thing, but we should be realistic and have to approach our goals step by step. We must be self-aware and know what's our strength and limitations.

4. Good mindset: Clever is important, but not that important. Most projects failed not because of the IQ of the team members, but the chaos of team/project management. For the success of the software project, I think all team member should have following attitudes in mind:
a. Be open and respectful, among team members and with our partners.
b. Pursuing engineering excellence and personal excellence.
c. Passionate about technologies and learning.
d. Teamwork and work with others.

How to improve team moral?
1. Open and respectful among team members, between staff and leadership
2. Trust, passion
3. Exciting project/team vision/goal.
4. Willing to dream and to make dream come true
5. Team building
6. Do important things and make big impact
7. Make team member think their work are of great importance
8. Grant ownership of small components to individuals, don't treat any member as yet another coder.

How to build great team?
1. Build team uniqueness
2. Build domain experts
3. Help team member to think and grow
4. Build Studying organization
5. Set proper team membership bar
6. Control team ambitious, build team reputation/confidence gradually
7. Keep proper amount of new hires to keep team freshness
8. Communication effectiveness (don't treat people as machine, they need to talk with people, not just those cold, boring, harmful, annoying machines)

How to be great team member?
1. Identify your uniqueness and improve it
2. Accumulate domain expertise
3. Improve time/project management skills
4. Learn communication skill
5. Build your personal insight
6. Build great social relationship among colleagues

No comments: