Sunday, November 30, 2014

Challenges and success practices for agile distributed team

Challenges

Time zone, culture and language differences
One of the main major problems in distributed team is time difference. In order to communicate, resolve problem, people need some of their activities to be synchronized. More overlapping time during the days normally result better engagement and collaboration. When working with different time zones, individuals can be a day behind of getting something done. The other barrier could be different language. All over the world people have different languages. If the communication is not clear, it can easily create misunderstand and lead to mistrust among team members. Finally, cultural issue also plays an important part. Western culture likes fast response while Vietnamese culture expects to carefully craft their responses and the idea.

Communication
As outlined above, different time zone, culture and language can create communication challenges for teams. A major problem with the geographically distributed team members is how precisely they address questions or pass on information to their colleagues.

Technical alignments
Team members from different background and regions have different preferences about technologies and tools. Misalignment in engineering best practices can also create conflicts between team members. Maybe some members will want to be aggressive about their work and others would not want to be like this because they do not believe in being that way. With the co-located team, these misalignment can be generally resolved over time by discussion to gradually build mutual understanding.

Managerial issues
As the team members are distributed over different locations, there’s a need for online project and process management. In distributed environment, transparency and visibility are essential for all members in order to engage all members in the development process.

Building trust
Finally, the most crucial thing of a team is building trust. Because of outlined above things, it is a challenge to build trust when team members are distributed across different location. It’s often easy to blame and critize the other groups and the team can break down into competing tribes.

Success practices

Exchanging program
Regular visits by sending members to other location will foster collaboration. During the visit, the onsite team member will work as a regular team member at this location. This enhances understanding and also creates personal trust between the onsite team member and local team.

Knowledge sharing
There is a need to implement the single source for information across all teams to foster greater understanding among team members. The knowledge base should be accessible online in real time by all locations. As set of tools can be used as follows:
  • Wiki
  • Shared mailing list and folder
  • Online project management tools

Communication
In Scrum, face-to-face communication is recommended as the most effective means of exchanging information. However, it is the most challenging in a distributed environment. In order to achieve the same high level of engagement, we need to make a lot more effort. Following practices can be used to foster better communication:
  • Overlapping working hours needs to be established as much as possible.
  • A comprehensive suite of video conference, desktop sharing and instant message tools should be provided. These channels must be readily available and easily accessible to all team members.
  • Each local team can hold their own daily stand-ups, retrospectives. The action items and information should always be visible and shared to all teams. Moreover, it is quite effective to have a Scrum-of-Scrums few times per weeks to share enough information.

Remote paring
Team member can pair with another remote team member which can lead to great knowledge transfer. The understanding was much deeper and an immediate bond was created between the two who paired. Remote pairing should be done frequently to share the knowledge and experience and avoid code ownership.

Engineering best practices
It is important to establish a set of common best practices across all remote teams. Scrum Master must facilitate and ensure agreement from all remote teams. It will re reinforce the trust and shared values between team members.

No class system
No distinction should be made between team members at different locations. With a class system, it will lower the trust relationship between teams. The ‘lower’ class will always feel that they are left out.

Saturday, November 15, 2014

Leadership in Agile Environment

In all Scrum documents, you would have come across that one of Scrum Master’s main responsibilities is servant leadership. Let’s look at what is servant leadership and how you can use to become a more effective leader in agile environment.

What is servant leadership?


According to wikipedia (http://en.wikipedia.org/wiki/Servant_leadership), servant leadership is both a leadership philosophy and set of leadership practices. Traditional leadership generally involves the accumulation and exercise of power by one at the “top of the pyramid.” By comparison, the servant-leader shares power, puts the needs of others first and helps people develop and perform as highly as possible. Robert K. Greenleaf introduced the phrase “servant leadership” in 1970. In his essay, Greenleaf said that “The servant-leader is servant first… It begins with the natural feeling that one wants to serve, to serve first… That person is sharply different from one who is leader first, perhaps because of the need to assuage an unusual power drive or to acquire material possessions.”
Ten characteristics are believed to be the central of a servant leader:

How can the Scrum Master be the true servant leader?

  • Facilitate daily scrum, and other meetings to know where the team is at and impediment items.
  • Manage a team not by telling them what to do or force the team to follow the Scrum process. Instead of that, they work with team to explain the benefits and coach the team in agile best practices.
  • Help the team to collaborate better
  • Shield the team from diversions and distractions
  • Recognize and encourage the efforts the team members
  • Understand and willing to work with team members through their challenges.
  • Help people to solve their problems and conflicts.

Friday, November 7, 2014

What is most important things SCRUM?

Few days ago, I organized a SCRUM training at one of my friend’s company. Their company just started to adopt SCRUM in their product development. We had lots of discussions during the training session. Scrum Masters or Team Leaders claimed that they did not follow SCRUM exactly and just picked up only something that is the most important things in SCRUM. According to their belief, they chose to do things such as 3-weeks sprint, product release at the end of 3-weeks to get customer’s feedback quickly. And here are the following things that they did not follow:
  •  The sprint planning happens with the participation of Scrum Master and Product Owner only. The Scrum master will negotiate with Product Owner about what will be done in the next sprint. Then, Scrum master will assign tasks to each person in development team.
  • Similarly, the Sprint Review will happen only between Scrum master and Product Owner.
  • There’s no Sprint Retrospective.
  • Daily Scrum occurs, but can be skipped if Scrum Master was absent or there’re urgent tasks in that day.
From my point of view, what they are doing is still following traditional software development, with team leader as a centric person. The only good thing is that now they have shorter release time and are able to receive feedback from customers more quickly. However, it’s NOT a Scrum. The most important thing in Scrum would be self-managed and self-organized team. Without self-managed and self-organized team, decisions are still based on team leader only which leads to less effective decision making. As the decisions are come from team leader, no commitment is shared between team members. Thus, there’s a high chance that wrong decision or over-commitment was made.

Wednesday, October 22, 2014

What is to be Agile?

There is a lot of talks among people in software development industry nowadays about something called as agile. Courses are being written and delivered about how to be "an agile team". In all of these courses, they are always emphasized that agile is defined by its values and principles. Despite that, some people still believe that agile can be turned into a set rules. You must strictly follow exact steps such as the team must do pair programming all the time or constant sprint is always the best for the team. It's completely WRONG. Something might work for this team, but not for the other team.

In my point of view, agile is the way to achieve the best result for the team. The team could decide that they want to do pair programming, TDD, or want to have a 2-week sprints. However, these decisions should come from the team. It should not be the decision from a manager or a senior guy that forces the team to do these things. The goal of any decision should be to address one of following questions:

  • How to improve each member's competency and skill? How to make them feel that they're carrying the work by their self-interested, not by order of someone else?
  • How to improve the team spirit and make them feel that the success or failure of the team is their success or failure?
  • What shall we do to improve our products to have better quality? What needs to be done in order to prevent or reduce the chance of problem in the future?
  • What can we do to bring more values for the customer? How to improve the collaboration between us and customer? How can we get feedback more frequently?
  • Which suggestions that we can raise to the organization so that it can help to improve the organization as a whole, not just for our team?
As the world nowadays changes rapidly, the last importation thing is that we should keep in mind that we need to keep continuous improvement over the time in order to response to any upcoming changes. In my opinion, continuous improvement is the most vital point in agile. It doesn't matter if we make few wrong decisions. We can try something and adapt it later if it does not work. It's a lot better than we just do not do anything.

I believe that all above things are what TRUE AGILE means.