“The team, the team, the team” were the words used by the Hall of Fame, University of Michigan coach, Bo Schembechler. He also mentioned that no one person is more important than the team. These words are extremely important to remember, as they not only apply to a sports team, but to any group of people working together as a team, regardless of the scenario. Great teams will deliver great solutions.
One of the 12 Agile principles, is “The best architectures, requirements and designs emerge from self-organizing teams”. However, getting to a self-organizing team requires the team to have gone through Tuckman’s four levels of group development; Forming, Storming, Norming and Performing. It requires the team to stay together, develop trust and work as “The Team”. Whether you are a new or an existing team, with a new project, the temptation is to jump into the deep end and start writing code. But it is important to take some time first to see where you are in the four levels and where you want to get to. Below are some ideas you can try out.
While iteration 0 is often discussed specifically in the context of a project, the activities done as part of iteration 0 can be done at any time, whether if you are starting a new team, new people have joined your team or an existing team just needs to get together to reset their expectations from each other as a team. It is important to take some time, could be a day to a few days to try out some of these:
Creating & Sharing the Vision
Having a good team vision helps drive team behavior, commitment and creativity. If you think back to the Agile Bootcamp, the vision exercise involves designing a box, with your product name, graphic and 3 – 4 selling points. You can go through the same exercise in a context of your team; what would you name your team (besides the one listed in your org structure), be creative, make it fun. Involve the team in determining the vision and use this exercise as a way to encourage the culture you want on your team.
Logistics of working as a Team
Having defined some logistical rules for your team will help in reducing chances of friction and improve team dynamics. Some logistical questions to consider:
- Define team roles; Product Owner, ScrumMaster, Technical Lead, Engineers, Client contacts etc.
- Responsibilities of each role
- Time that works best for the daily scrum (some people like to come in early, others stay late)
- Time and days for planning meetings, story reviews and retrospectives
- Get agreement on the definition of done
- Are you going to use Scrum or Kanban? Physical or Electronic board? What does the workflow on the board look like?
- Would you as a team like to enforce no-meeting times; a day, an afternoon?
- How are questions handled on your team? Is it ok to disrupt others at any time? Or would you have time slots setup daily?
- How will reviews (requirements, design, code, and test) be done on your team?
- Are certain roles for a type of review?
- Is there certain level of test coverage required?
- How will support (investigations, external questions, defects) be handled on the team? Will there be a rotation? Do we have any turn-around time expectations?
- How will the incoming requests (enhancements or defects) be reviewed? Who is the Product Owner on the team to route the requests to?
Sketch out the Architecture
Use the iteration 0 to sketch out the architecture of your solution and how the code that the team owns fits into it. It also helps the team in understanding everything that they own, rather than focusing on one or two components they might initially work with. You can also use this time to discuss things like build and test automation and get agreement on how they should be done and set team-level goals for those.
User Story Workshop
You should also consider a user story workshop during Iteration 0 to build an initial backlog and having it estimated and prioritized. Part of the exercise will also help generate a high level roadmap and also build a capability tree.
Team Building Activities
Team building activities are great way to develop trust among a team and trust is essential for building a successful team. Here are some quick ideas:
Monthly team lunches are an easy way to get your team together outside of the work environment. It could be celebrating a birthday on the team, a project success or just for fun. A more informal setting allows team members to know each other better and potentially learn about each other motivators, outside of work.
Retrospectives as Team building
Retrospectives often have a very project focus. However, retrospectives is just a way to look back to learn from it. It could be done on anything and should not be scoped on just projects. Team logistics, releases, projects, support should all be in the scope of a retrospective. If you are having trouble getting team members to participate, try different ideas. Every so often, look to have a retrospective outside of work; have it over a team lunch or leave at 4 pm and meet somewhere else.
Pair programming is not only a good development methodology, but also is a great team building exercise. Pairing up allows team members to learn more about each other; thinking process, skills, work ethic etc. Pairing not only prevents social silos, it also prevents from technical silos to be built within a team, to where if one person is an expert on a component, another who might be a novice on the same component can pair up and expand the knowledge base of the team.
Team outings such as picnic or a baseball game are another team building activity. This is where you would block half a day and go out for lunch followed by some other team activity.
Take the Strength’s Finder or similar class. The class is helpful for you as a team to find your strengths, how to best apply them in your daily work and learn about any gaps you want to fill.
Team Knowledge Sharing
On your team, you want to establish a culture of learning, both from external sources and each other. Below are some ideas:
Book clubs are easy to start, find a book or books that you as a team are interested in, setup an hour a week, over lunch or other time to discuss the assigned chapters.
Depending on the span of team(s) involved, you can set up technical communities around a certain concept or themes that meet on a regular basis to have more focused discussion.
Meetups & Conferences
Join internal and external meetups, such as DevOps and AgileKC. Figure out opportunities for team members to attend conferences such as StrangeLoop and KCDC. The key however, is not just to attend these events, but setting the expectation and figuring out ways on how to bring the knowledge from these events back to rest of the team.
Lightning & Other Talks
Lightning talks are a great way to bring the knowledge from the meetups and conferences to the rest of the team. If someone on the team tried out something new, encourage them to do a lightning talk around it. You should have a recurring invite for these talks. And if there are no lightning talks scheduled, you can use the time to watch a TedTalk or recordings of talks from conferences.
The goal is to build a successful team. These are just a handful of ideas to try to build great teams. If you have other ideas you have tried out, in the spirit of creating a culture of learning, please share your experiences here. Also, read this short blog on what a great team feels like.