Team Charters for Software Engineering Teams
Posted on October 29, 2022  (Last modified on November 9, 2022 )
6 minutes • 1259 words
What is a team charter
A team charter is a document that defines the purpose, scope, and objectives of a software engineering team. It is important for teams to have a charter because it helps to ensure that everyone is on the same page and working towards the same goal. Having a charter also makes it easier to hold team members accountable for their actions and performance as well as prevent disagreements and conflict within the team.
A team charter effectively captures the working agreements for the team and how long those working agreements are valid. This makes for a very unique document per team as the important items to include are different per team.
Why a team charter is important for software engineering teams
Software engineering is a process of designing, creating, testing, and maintaining software. In order to do this effectively, it is important for teams to have a clear understanding of their roles and responsibilities. This is where a team charter comes in.
A team charter is a document that outlines the team's purpose, goals, and objectives. It also includes information on the team's structure, processes, and communication protocols. Having a team charter helps to ensure that everyone on the team is on the same page and working towards the same goal.
There are many benefits to having a team charter. For one, it can help to prevent scope creep by keeping everyone focused on the task at hand. Additionally, it can help with conflict resolution by providing a clear set of guidelines for how disputes should be handled.
Common items in a software engineering team's charter
As mentioned before, team charters are effectively unique to their team. There really is not a one-size-fits-all charter that you can slap on a team and expect to work. That being said, there are some common items that I've found exist in most team charters that I've been a part of. These are as follows:
- Expectations around culture, respect, and conflicts
- Etiquette and strategy around getting code into a central repository and ultimately deployed to production (this includes pull requests)
- The roles of members on a scrum team (what does the scrum master do? What does a product owner do? What does a developer do?)
- How new members are added to the team and how this document is readdressed to include their values, too.
- Processes around ceremonies for Scrum teams (How often do we retro? How long is a sprint?)
- Information around the team's permenant slack channels, notion homepages, or similar
- The date that the charter was agreed upon. This may sound simple, but I highly recommend dating the charter as well as edits.
The benefits of having a team charter for a software engineering team.
Having a team charter provides many benefits to a software engineering team. First, the act of creating the charter as a team gets everyone in the same room to speak their mind about what matters to them. For long-time employees, many may voice concerns that they've had but have not felt that they had a forum to speak them. New employees have an opportunity to ask questions about existing processes and help codify that into the team charter provided the team wants to keep those processes.
Additionally, the charter can be referred back to should someone deviate from an item that has been agreed upon by the team. For example, if the charter outlines that all feature development be done in feature branches and then merged into the main branch but a developer starts merging code directly into the main branch the team can point back to the agreements they made when the team formed to help avoid a conflict around branching strategy. Perhaps that developer is persuing this branching strategy because of an issue with the existing strategy of feature branches. If so, the charter can be revisited as a team and adjusted as needed.
Finally, when onboarding new developers, the charter becomes a great source of information regarding team processes, working agreements, roles and responsibilities and more. A thorough charter can help speed team members through the worst parts of the onboarding processing such as "Who do I talk to if I have a problem?" or "Which slack channels do I join?".
The drawbacks of having a team charter for a software engineering team
There are two primary drawbacks of a team charter, although one can be mitigated with proper education around how the charter works. The first is that it can be difficult to get people to take time and spend energy forming a team charter. If the team has a lot of differing opinions on what belongs in the charter, there can be a lot of churn while discussing and that can be viewed as a "bad use of time." I strongly feel that this is a good use of time, actually, but I can see how others may not feel that way.
The second drawback of a charter is that it creates extra processes. Technically the team themselves create these processes and they are not comparable to the process handed down from middle or upper management so they should not be treated the same but some people do view all procesess the same. Codifying expectations in the charter may also deter some people from speaking up when they have differing opinions (as we grow, we might outgrow things captured in the team charter) but again, education around the idea that the charter can be revised is key here. In fact, a team I have been on revisited their charter every 3 months during quarterly planning and every time we added or removed a team member. I believe we had one more "ad hoc" revisiting of the charter when we realized that a team member needed to flex into a different role to help meet the businesses needs.
How can you create an effective team charter for a software engineering team?
When it comes to creating the team charter, the first step is to get everyone on the team together to talk through what a charter is. You'll want to find time for all contributing members of your team and, if you feel it would be valuable, the business stakeholders as well. Once everyone is educated around what a charter is, you'll define your team's purpose. For example, "Build TwinSpire's best android experience" was the purpose of one of the teams that I helped build a charter for. Next you'll want to identify what is valuable to capture in the charter. If you're facilitating this discussion, let the team start with anything that immediately comes to mind. If they find themselves stuck or off-topic, suggest looking at how code is reviewed, merged, and deployed as well as any "homes" for the team (slack channels, intranet pages, etc). Finally, ensure that you're addressing any pain points that have come up in the past. Do people continually go to your developers with new feature requests? Document that the role of the product owner is to evaluate feature requests and if the development team is asked to do so, that they should send whomever is asking to the team's product owner.
Conclusion
Team charters can help set expectations around a team's working agreements, roles and responsibilities and whatever else is important to your team. Team charters are flexible to fit your team's needs and are fairly easy to build. Ultimately, the team charter is a documented representation of what is important to your team and should be updated as those items change.