Navigating Rough Waters

Navigating Rough Waters

Lessons learned from a turbulent voyage

In every project, challenges arise that test the resilience and adaptability of the team. Our recent "Voyage" was no exception. By sharing this experience, I aim to offer advice that will help other teams navigate similar paths more smoothly. Let's transform this turbulent experience into a roadmap for smoother sailing.

Setting Sail: Pre-Voyage Excitement and Enthusiasm

Our voyage began with immense enthusiasm and high hopes well into our kickoff meeting. Ideas were flowing for logos, team names, application names, and more. We were discussing ambitious goals like using AI to determine eye color, and all sorts of other wild ideas. It was an enjoyable stage, filled with creativity and excitement.

Lesson I: Ensure All Key Members Are Present at the Kickoff Meeting

The Situation: Our kickoff meeting began on a shaky note as key members, including our Product Owner, were absent. This left a significant gap in leadership and direction from the start. I stepped in temporarily to fulfill the Product Owner's role and began helping us craft a backlog while sharing my screen with the team.

Lesson Learned: Engage Key Stakeholders Early. Ensure that all critical team members, especially the Product Owner, are present from the beginning. Their involvement is crucial for setting the vision and goals of the project. If a key member is absent, consider delaying the kickoff until they can participate or appoint a temporary stand-in with a clear mandate.

Lesson II: Charting the Course: Crafting the Backlog

With grand ideas flowing, we eagerly began crafting our backlog during the initial meeting.

Unfortunately, the initial backlog created by a partial team within GitHub Projects was quickly forgotten. In the second sprint, our appointed Product Owner introduced Jira as our task management system. However, the transition was rocky, with incomplete tasks and lack of proper integration with our existing backlog.

Lesson Learned: Develop a Well-Structured Backlog. A well-thought-out backlog, created with input from all team members, including the Product Owner, ensures clarity and focus. This shared vision helps maintain a cohesive direction and understanding.

Lesson III: Navigating Tools and Technologies

Our pre-formed group had a predetermined tech stack, allowing us to dive into development quickly. While this seemed advantageous, it left little room for discussion about the best tools and technologies that suited our team's strengths. Not having this conversation as a team set the tone for the entire voyage. From this point, we missed out on critical relational and operational experiences other teams enjoyed.

Lesson Learned: Align on the Tech Stack Early. Engage in discussions about the tech stack to ensure it aligns with the team's capabilities and project requirements. This alignment helps unify the team and ensures everyone is on the same page regarding the tools and technologies being used.

Lesson IV: Implement Regular Code Reviews

Code reviews foster collaboration, improve code quality, and ensure all team members are on the same page. This practice became particularly crucial when I temporarily had full control over the codebase but advocated for reviews to maintain quality and cohesion.

Lesson Learned: Conduct Regular Code Reviews. Incorporate consistent code reviews to enhance collaboration, catch issues early, and ensure quality and uniformity in the codebase.

Lesson V: Ensure Smooth Integration of Task Management Tools

In the second week, our Product Owner introduced Jira as our new task management system, disrupting our initial process. This transition was rocky, highlighted by incomplete tasks and a lack of proper integration with our existing backlog.

Lesson Learned: Plan Thoroughly for Tool Transitions. Ensure a smooth integration of new task management tools by planning accordingly and aligning them with existing workflows to avoid fragmentation.

Lesson VI: Foster Open and Respectful Communication

One of our significant challenges was communication. Some decisions were made without the entire groups consent. With a group as large as ours it was impossible to do such a thing. I would opt to ask for another developer to help me with something rather than just do it and push it by myself. So for a little while it was me and a couple of other developers doing neat things in the repository like adding our names to the footer with an array of objects. Despite doing this in the open, by creating pull requests, requesting reviews, and waiting for at least partial review to merge, somehow not everyone was seeing these things. And at a meeting that I was unable to attend due to attending a wedding; All of this code was removed. Naturally this sparked a sizeable conflict within the team.

Lesson Learned: Promote Open and Respectful Communication. Address issues transparently and respectfully to resolve conflicts and maintain team cohesion. If possible, avoid text-based communications when conflicts arise. Always opt for a virtual meeting - with mediation whenever possible. I was unable to always remain composed throughout some of these conflicts and I quickly apologized for getting heated at times, but naturally it happens. The best thing we could have done is to try and organize a cooldown period but then have a face-to-face virtual meeting. I think this person hates me and I wish I could have done more but bridges appear to be burned at this point. I am sad for this, so please try and learn from this in particular and do not have a keyboard clash like we did.

Lesson VII: Be Flexible with Scheduling

Despite giving ample notice about my absence for a meeting, no attempt was made to accommodate my schedule, leading to critical decisions being made without my input. This rigidity caused unnecessary friction and setbacks as mentioned above.

Lesson Learned: Accommodate Schedules Flexibly. Be flexible with scheduling to ensure everyone’s input is considered, fostering a more inclusive and collaborative environment. Consider a 24 hour / 7 day When2Meet to allow for accommodations to your teammates. We had a teammate willing to meet with us at 2AM in her time, but we didn't even have an option to offer the same courtesy.

Lesson VIII: Encourage and Accept Support

Throughout the project, I offered my support to the entire team, yet it was sometimes not accepted, leading to missed opportunities for collaboration.

Lesson Learned: Support Each Other Actively. Encourage a culture where support is both offered and accepted, leading to better outcomes and a more collaborative atmosphere.

Conclusion: Charting a Course for Smoother Sailing

As we navigate the final weeks of our sprint amidst lingering tensions, it’s clear that shared vision, open communication, and mutual respect are foundational for successful teamwork. By distilling our experiences into actionable insights, other teams can navigate similar waters with greater clarity and cohesion. Harnessing the power of collaboration, maintaining transparent communication channels, and fostering a culture of shared ownership can fortify teams against uncertainties, steering them toward collective success.

I hope that these shared learnings illuminate your way forward, guiding future teams toward calmer seas and brighter horizons. Safe travels on your own voyages!