About Us
We are MMJ Vietnam, a product company. We are posting a series of articles about becoming a matured developers with a good mindset as we want to work with such people. We are now hiring front end dev. Contact to [email protected] if you're interested in us.
The previous article is Do you know how to think?
Introduction
In this post we discuss about what is team work, especially in a software company.
A stereotype of teamwork
If you hear the word "teamwork", what do you imagine? Maybe like this:
- Team members have a good relationship with each other like friends or even family
- Clear role and responsibility are defined
- There is a leader who assigns tasks
But I, as a software engineer, have a bit different view. Let me explain.
Types of teams
Before going into detail, let me explain that there are actually many types of teams in the world. And the best practice differs for each type.
So let's first see what types of team exists. I will focus on the following two elements so please pay attention to them.
- What are the main performance factor (deadline, value, win the game, ...)
- The decision making style
Group of monkeys
The most primitive type of team is a group of monkeys. They live together because they want to maintain safety. They collect foods and fight against enemies together. Basically they don't have any type of goal or objectives.
The main concern of them is to keep the peace within the group so there is one boss who rules the group by his physical strength.
Army
Army is a type of team to achieve a mission. They are required to strictly follow the commands made by the highest position commander who is assumed to know the best strategy or tactics. It has to be strict because wrong execution will lead them to death.
They use strict hierarchy, rules, and sometimes violences, to make people follow the commands.
Mass Production Factory
Factory is a modern type of team. It is a bit similar to Army but focused on the productivity. They have a work to produce a large amount of same items. The work for each person is simplified and clearly defined which is more like a routine work. The goal of the management is to increase/keep the productivity with the same quality.
Their work is highly plan based. They always have a detailed plan and try to follow the plan as much as possible.
Because their work is standardized, the productivity of any staff should be at the same level. It means how much I can produce in one day and how you can do should be similar. So staff are paid for hours of work. So management's concern is to make staff work as effectively as possible. Boredom and conflicts within the team are main blocker that slows down their work. Management tries to make working in their company to be fun. They also try to make all staff be in a good relation so that they don't have a conflict. That is why drinking together is called "team building" in such an environment
Creative team
Creative team is a kind of opposite type of team to factory team. They are a type of team to make creatives such as image, music, video, advertising,...
In this type of task, the amount of time you spent is not relevant to the quality of the work. A 10 minutes drawing by great artist can earn more than 1 month painting of mine. So they're not paid for the hours they worked. But they are paid for the value produced.
Friendship is considered harmful in this case. Imagine your closest friends draw a very poor painting. Because you don't want to hurt her, you couldn't give her hard feedback. As a result, your team produced a poor product.
There is no leader who decide what/how to do because each artist is the one who knows the best about the topic.
So in this type of team, what we need is a honest discussion and collaboration. We should have a lot of argue and conflicts with the goal of achieving the best possible result, without thinking too much about their emotion. We have to separate the hard discussoin at work and the relationship outside of work.
Sports team
Sports team is like football team who play game together to win the opponent team. The uniqueness of this team is that the situation in a game is quickly changing at each moment and players has to react immediately to it without talking with each other.
In a sport team, there is a head coach who makes the strategy and they can talk before the match starts. But once the game started, each player has to think independently and decide what to do at each moment.
Another important point is that, in a sports team, anyone can make mistakes. So even if someone made a mistkae, they still need to trust each other to achieve the best performance.
Emergency medical team
Emergency medical team (EM team) is one of the most difficult type of team. Basically their work is to treat patients who suddenly got an accident or sickness. So it is completely unpredictable when they have the next patients, how many patients, what is their symptom, how serious their situation is or what treatment to be applied. Sometimes multiple patients are delivered at the same time and they have to prioritize which person should be treated first. If they give slow treatments or wrong treatments, patients might die.
It is very obvious they have absolutely no plan for their work because everything is unpredictable.
In this type of team, they, as a group, have to make a right decision in a very short time. Being friendly with each other is totally useless or even harmful. Each person, as a professional, needs to give her opinion and make an agreement in a minute, with a very limited information. And once an agreement is made, you have to follow 100%. Your ego will literally kill patients.
Classifying teams
So as we saw there are many types of teams and we can classify these types by the following points.
- Expertise of each person. When most of staff are non-expert, we should have someone who have deep knowledge about the subject and give him the right to decide everything. When each member is an expert, the team is loosely organized at strategic level but actual tactics are delegated.
- Uncertainty of the work. When the work is clearly known (or assumed to be known), detailed plan and right execution is important. You can't change the plan later. When the work is highly uncertain, we have to assume that no one knows the answer. So we have to continuously learn and adjust direction. Discussion and collaboration to find the best possible solution at each moment is important.
- Performance evaluation. When it is possible to measure each member's performance (like factory), team is likely to be managed by numbers such as KPI. If not, such measurement or reward system will not work. Each member needs to have their own intrinsic motivation.
What a software team is like?
So what a software development team is like? Actually there are roughly two types of software teams: outsourcing team and product team.
Outsourcing team and product team are very different even though both their work is to build a software. Here are some typical difference.
Outsouring | Product |
---|---|
Deadline matters | Result matters |
We know what customer wants | We don't know what users want |
Product Owner decide what to build | Follow the unpredictable market and decide together |
Requestments should not be changed frequently | Requirements should be changed constantly |
Short term project | Long term project |
"No bug" is a good thing | "Quick release" is a good thing |
Paid for the time we worked | Paid for the result |
Outsourcing team
So from the comparison above, we can say outsourcing team is closest to Factory Team with some flavor of EM Team.
In an outsourcing project, what to build is often defined by customer. And the result (sales for example) is also taken care of customer. What you have to focus is to keep the deadline and implement what is promised. There is a hidden assumption that one senior developer's productivity is the same as other seniors (that is why they charge by man-month). Work is highly plan based. We get the requirement, give estimation, fix deadline, and follow gantt chart. It sounds like a factory, right? At least this is what an outsourcing is "defined".
But in reallity there are many unexpected things coming to you. Each developer's performance differs wildly. Each project has different requirement so we often have unexpected technical problem later even though we are using the same tech stack. Tasks are often changed but deadlne is never exntended. There are many similarity to EM team.
So outsourcing is Factory type by definition but is EM Team in reality. This mixture causes many problems in outsouring projects but I will not go into it here.
Product Team
Product Team is more like a mixture of EM Team and Creative Team.
They build a product so their work should be purely evaluated by the result, not by the hours of work or the number of tasks you've done. Even if you build a no-bug, perfect software, it is meaningless if no one uses. So it is like creative team.
Also, we work for the market which is highly unpredictable. We don't know what type of feature is really needed. We sometimes don't know how to build it. We have many tasks and bugs but the time is limited. We need to prioritize the task wisely and skip low impact work. They have a rough plan but they assume plan is always wrong. This is quite like EM team.
What we can say from this observation is that in a product team, the decision making style must be same as EM team. There is no leader who knows the answer. So we should speak out all the opinion without avoiding conflicts. And once a decision is made, we have to follow without complaining. We also have a role defined. But what we have to be responsible for is the result. Just doing your assigned task is far below enough. You have to raise questions and give ideas beyond your role.
Common view of team in Vietnam
When I talk to Vietnamese people I sometimes feel the definition of team is different between us. What I feel is the definition in their mind is more close to Factory model.
To be very frank, those who have a factory mindset will not work very well in a product company.
Next
That's all for the first part of this post. In the next part, we will discuss what is a teamwork and what is the best practice of software development team, mostly focusing on product team.