A common element that exists in successful agile teams is that they are self organizing and have a mentality of shared responsibility. Typically these attributes are displayed when the following can be observed:
- Everyone signs up in sign-up
- A single person is never apologizing for a call he or she made on behalf of the team - decisions are made on behalf of the team, by the team
- Everyone gets involved and has an equal voice during estimation
- Iteration Planning Meetings involve the whole team, not just the client and Business Analysts
- Anyone can be absent from the team at anytime and all the work still gets done
- Certain parts of the software system are not owned by certain people
Shared Responsibility in an agile team is when the team is able to make calls together as a team and acknowledge that it is their decision and are happy to carry the consequences of that decision. Shared Responsibility isn't a leader making a call on behalf of the team and the team sharing the responsibility of that decision.
Self Organizing is pretty self explanatory. A team should be able to get tasks done without a clear leader waving their hand and delegating tasks to team members. At any time all the team members should be aware of what tasks need to be done, the priority of those tasks and should be able to work among themselves in an effective way that sees those tasks completed.
With people rolling off and ramping up on project teams all the time it is hard to have the right amount of stability for long enough to see all of the above happen. This instability typically results in there being a handful of people who know the ins and outs of the application, are extremely familiar with the domain and typically become the people who start to take on the leadership roles within the team. While sometimes teams do need leaders, I believe that the ideal team shouldn't.
In my opinion, the only way for a team to be self organizing with complete shared responsibility, is for everyone to make a personal effort to bring themselves all to similar levels of understanding of the software system, the domain, the problem the software system is solving and the path being taken to realize the solution to that problem. The onus falls on individuals to acknowledge that they might not have all the knowledge they should. Upon doing this they then have to make the exerted effort to learn off those that have the knowledge they need. This should be done until they are able to reach an equal level of understanding. Sadly though, unless everyone is motivated towards those goals, these ideals will never be reached and teams will continue to have to have leaders.