A self-managing team is a team without supervisory managers. Everyone who works toward the mission is an active member of the team. This kind of team can also be called a flat team. I find there to be many upsides to being part of a flat team. These mainly come from the fact that it allows the subject matter experts a great deal of freedom to decide how the work will be done.
Mutual decisions based on shared responsibility
It seems widely accepted that a software product development team needs a product owner. Someone who is a kind of customer representative, and keeps track of progress towards the long-term vision of the product and the business. Another widely accepted role, either implicit or explicit, is the technical lead, or technical product owner. The one person who can be relied upon to make the final decision on technical matters. We may not always agree with their decisions, but we respect the decisions. Because they are part of the team they share our lived experiences and should be taking them in to account.
Should we have any other 'special' colleagues apart from these two roles? Perhaps not. We take away shared responsibility every time we give a specific person a specific title. For example, people feel a bit less responsible for sticking to the product vision if they are not the product owner.
There can be downsides to a flat team too. In thinking about software teams and product teams we tend to forget that these are made out of people. The people in the team have a big impact on the success of the team's mission. People also need tending to. In a hierarchical team this responsibility would fall to the supervisory manager. In a flat hierarchy we can get in to uncomfortable situations if teams don't have a specific person to discuss people problems with. There is nobody to go to for an outside perspective if there seems to be a problem in the team. There is nobody who is in a position to make a decision. If this person is part of the team they might become biased. If they are outside of the team they won't know what is going on.
This principle can also apply to other topics, such as budgets and spending.
The average business consists of more parts than just the one flat team. There are sales teams, account management teams, customer support teams, and others. A common outside influence on a software development team is when the sales team or account management team makes a promise to a customer that is up to the software development team to fulfill. It is not acceptable if someone else can make a decision about what the team can work on. The team is not a self-managing team if someone else can make a decision without involving the team. In that case the team is at best just a normal team. It doesn't have the power to say yes or no. At worst, the team can become stuck between conflicting decisions by others. This will reduce the team's impact and quality of work.
There is nobody to protect the team because there is no officially appointed team manager. The self-managing team must protect itself and clarify that any commitment that involves the team must be pre-approved by the team.
Flat teams are great. Generally people feel their shared responsibility and really come together to solve problems. However, even in a flat team there should be someone that is authorized to make decisions on specific topics. And the topic 'people' should not be forgotten.