Post

Software development is a team sport

team

Software development is a team sport, not a single-player game - at least when we are talking about company-level software development. The times of lonely heroes who can create everything alone, who don’t talk with others, don’t mentor, and are afraid of sharing their knowledge, have expired already. In a team, an expert who is not a team player is simply a persona non grata. A good team with average developers is much better and more productive than a malfunctioning team with great developers. In a good team, a member enjoys being a member, enjoys working in the team, and thinks twice before leaving it even for a better salary.

Essential Elements of Teams

Every member embodies the following values:

  • Passion: Each member is passionate about their job; they enjoy what they do, and it feels more like a hobby.
  • Impact: Each member dedicates effort to their tasks and provides significant value. That means everybody should aim to make a difference that fits their own level. Each teammate brings their own flavor of impact to the table.
  • Judgment: Each member understands that sometimes it is necessary to take a step back or stop a task. Sometimes judgment is simply recognizing that you don’t need the most sophisticated solution, or acknowledging when your code is a mess and applying the boy scout rule. It’s also about knowing when to say no to a deadline or feature request from above, or when to put in extra effort to meet a commitment on time. Occasionally, judgment means recognizing that you’re having an off day and allowing others to take the lead, or even finishing the day early. And you know what? That’s okay. It happens to everyone, especially in a creative field like software development. Nobody can always perform at 100%. Sometimes it’s just 30%, sometimes it’s 150%. So judgment is about seeing the big picture and not being afraid to act based on that.
  • Communication: Each member has the opportunity to express themselves freely. It’s a safe space where everybody can and should talk openly about anything, and they will be listened to. Every idea is considered, and the only bad idea is the one left unspoken. Communication also means the way of it, both verbal and non-verbal. In my opinion, as long as nobody is being harmed in any way, there’s no problem with using swear words or jokes; in fact, it could even strengthen relationships within the team. What’s important is honesty. Whether you have an introverted or extroverted personality, it’s crucial to maintain control over yourself in order to express your thoughts effectively. It’s absolutely valid to acknowledge when speaking up is challenging for you, or if you find yourself speaking over others. The team is here to support you. To be transparent, whenever we onboard a new member, I sit down with them and explain that when I’m direct, it’s not to hurt anyone’s feelings, but rather to provide clarity without unnecessary rounds. If they ever feel uncomfortable, they’re encouraged to speak up, as it’s not about being against them, but for them. It’s about helping them to evolve professionally, feel comfortable, and become an organic part of the team.
  • Professional Knowledge: Each member understands, through self-assessment, that they possess the necessary professional skills or have the potential to become a valuable member of the team. They also acknowledge these qualities in their fellow team members.
  • Respect: Each member respects others, as they have earned their place on the team. This fosters a sense of belonging, contributing to the team’s greatness.
  • Trust: Each member knows they can not only ask for help from anyone but also count on receiving support when needed. In the team, helping each other isn’t just a possibility; it’s the cornerstone of our collective success. This attitude of mutual assistance is what enables us to achieve our goals together.
team spirit
  • Team Unity: Our team operates on two fundamental mottos: “Trust in the team!” and “Team spirit!” These guiding principles are more than just words; they’re the essence of how we work together. Each member brings their own life experiences, with ups and downs, into our collaborative environment. Even through the challenges posed by the COVID-19 pandemic, we’ve adapted to virtual interactions, sharing our workrooms or living rooms through video calls. This closeness isn’t just about proximity; it’s about understanding and supporting each other through whatever comes our way. Whether it’s through virtual meetings or in-person interactions, our commitment to trust and team spirit remains unwavering, guiding us towards shared success.

Who are the members of the team?

Within the team, there are various essential roles contributing to our collective efforts:

The developers serve as the creative minds behind the product, bringing technical expertise and innovative ideas.

The team lead, who is also a developer, takes on additional responsibilities to guide and coordinate our collaborative efforts, ensuring cohesion and progress.

The product manager plays a vital role in overseeing the product’s development, coordinating and communicating with stakeholders, and handling tasks such as project planning and prioritization.

While each member has distinct responsibilities, our collective goal remains the same. We operate with the understanding that many roles are interchangeable within the team. A well-functioning team can adapt and work even without a designated team lead or product manager, as tasks can be picked up and solved by other members of the team. It is unhealthy and uncomfortable but manageable, at least in the short term.

Working in a team

In daily teamwork, collaboration is key. We all build upon the same foundation, recognizing the unique strengths that each member brings. While we may have our preferred areas, we understand that problem-solving often requires a collective effort.

unity

Within the team, there is a collective commitment and ownership over tasks. When issues arise, we all take responsibility without assigning blame, recognizing that a member’s fault is also a team’s fault.

Personal duties are respected, and team members readily support each other when needed. Feedback is valued and integrated into the daily workflow, driving continuous improvement.

The shared commitment to quality and timely delivery fosters a sense of pride in our work. This attitude not only earns us respect and trust within the team but also from those we collaborate with externally. As a result, we enjoy increased autonomy and recognition for our contributions.

How to create a team?

Creating a strong, successful team goes beyond simply assembling individuals with technical skills. It requires fostering a shared set of values, methodology, and culture that align with the company.

One approach to creating an effective team is to leverage existing successful teams within the company. By rotating newcomers across these different teams, individuals have the opportunity to immerse themselves in the company’s values and culture, gaining valuable insights and adapting accordingly. Once they have internalized these principles, they can come together and form a solid team.

Alternatively, if leveraging existing teams is not feasible, consider building the team around someone who embodies the company’s values and culture. This individual can serve as a guiding force, helping newcomers understand and embrace the company’s spirit.

No matter which path you take, the goal is to make sure everyone is on the same page. By building a team that shares the company’s values and way of doing things, you set everyone up for success.

How to Hire into the Team?

In the hiring process, it’s crucial to involve a member of the team from the outset, starting with the technical interview. If the applicant succeeds in this stage, the next step is the trial days.

The trial days differ from the trial months and are an integral part of the hiring process. They should involve legally compliant compensation, ideally lasting three days. During this time, the applicant works alongside the team as a member, participating in ceremonies, real tasks, pair coding sessions, and engaging with team members.

Following the trial period, each team member evaluates the applicant based on criteria such as Passion, Impact, Judgement, and Communication, with each member having the right of veto.

Upon completion of this process, the hiring phase concludes, at least from the team’s perspective. This hiring process is highly favorable as it allows both parties to gain insight into one another, enabling them to work together before the applicant makes a decision about leaving their current job. It promotes transparency and eliminates unnecessary ambiguity, ensuring a mutually beneficial arrangement.

Dealing with Challenges?

When faced with difficulties or tension within the team, it’s essential to take proactive steps to address them. One effective approach is to conduct a team retrospective, distinct from sprint retrospectives, to evaluate both the positive and negative aspects of team dynamics. This retrospective aims to identify what went wrong and explore potential solutions.

At times, resolving conflicts may require individuals to set aside their egos or focus on improving their communication or professional skills. Sometimes the solution just simply to go and get drunk together. Honestly, this is one of the simpliest and the most effective way to solve an inside conflict. And sometimes everyone have to go and build that team.

In rare cases where an individual’s behavior becomes disruptive and cannot be resolved through other means, termination may be necessary, regardless of their expertise. While it may seem difficult, removing such individuals ultimately benefits the team as a whole. A cohesive team thrives on mutual respect and shared values, without the presence of hierarchical structures.

How to build that team?

When discussing team building, I’m specifically referring to activities conducted at the team level. While company-wide team building events can be enjoyable, they often lack the depth needed to truly enhance team cohesion and effectiveness. It’s unlikely that you’ll interact significantly with colleagues outside your immediate work circle, limiting the impact on overall team dynamics.

However, team building events focused solely on team members, or including their families or close collaborators from other teams, can be highly effective in fostering stronger relationships and reducing stress.

In my experience, simple gatherings where we share a meal and drinks together have been the most successful. When the company covers the expenses, it creates a relaxed atmosphere and removes any financial barriers.

There’s no need for elaborate activities like hiking or dancing, as they may not appeal to everyone. Instead, sticking to the basics—enjoying food and conversation—can be universally enjoyable. For those looking for added fun, activities like LAN parties or board games can provide entertainment without excluding anyone.

Advantages of a Team Like This

success

A team structured in this manner offers numerous benefits to the company:

  • Timely Delivery: Even if development timelines are underestimated, the team is committed to delivering the product on time. Members are willing to put in extra effort to meet deadlines, ensuring timely delivery.
  • Code Quality: With collective responsibility for the code they produce, the team prioritizes code quality. This commitment stems from the desire to avoid late-night fixes due to poor code quality, fostering a culture of excellence.
  • Clear Communication: Transparent communication is a hallmark of this team. Whether discussing feasibility, challenges, or limitations, team members provide straightforward feedback. A clear “no” is often preferred over ambiguous agreement, promoting clarity and alignment.
  • Creativity: This team is a breeding ground for innovative ideas that can lead to significant cost savings or revenue generation. The collaborative environment fosters creativity, enabling the team to devise inventive solutions to complex problems.

Things that helps

Maintaining this kind of team culture requires active contributions from everyone involved, but the effort is well worth it. Embracing Agile and XP methodologies can be immensely helpful as they inherently promote these values.

However, it’s essential to recognize that there’s no one-size-fits-all solution, as each team operates slightly differently. As the saying goes, if you apply all the agile rules, you probably do it wrong.

When new members join the team, I often recommend a selection of books and articles that have been beneficial in aligning our perspectives. I believe these resources can be valuable for anyone, so let me share them:

  1. The Art of Agile Development - James Shore, Shane Warden
  2. Refactoring: Improving the Design of Existing Code - Martin Fowler
  3. Clean Code: A Handbook of Agile Software Craftsmanship - Robert C. Martin
  4. The Law of Leaky Abstractions - Joel Spolsky
  5. Don’t Shave That Yak! - Seth Godin
This post is licensed under CC BY 4.0 by the author.