Software Engineering Soft Skills Part 2— Team Work & Collaboration
Welcome to the second article of the Software Engineering Soft Skills (SESS) series! In this installment, we’ll delve into the different types of teams, their variations, and the importance of collaboration. We’ll also discuss tips for improving team collaboration, as well as your personal collaboration in overall processes.
Team Concept
Team as a concept defined as: a number of people or animals who do something together as a group. Everyday, as software engineers we work very hard on delivering projects on time with high quality. None of our work can’t be defined as a personal work that can be done in solitude.
Let’s focus on what are the type of teams we work:
Functional (Direct) team
These are the people that you interact with most of them in everyday. For software engineering teams, most of your team members are engineers like you. You probably have technical leads and engineering managers as well, who are responsible from making sure team is in the right direction and unblocked in technical issues and people in the team are happy and productive. You collaborate with one or more of the other engineers in your direct team in one or more projects.
Sister Team/s
Sister teams (I don’t know why we call them sister teams and not brother or sibling teams) are the teams that you work very closely on the same product but expertise and goals of those teams are different than your team. An obvious example is the backend and client side teams of the same product. Clearly the technology stack and the goal of the teams are different but the end product of the teams are the same. While backend teams can write Java or PHP to expose new non user facing API’s for new capabilities, client teams can use Android or iOS tech stack to create a user facing screen for mobile devices. Generally, these teams do not work together day to day. The meeting cadence can be once a week to share updates and talk about potential risks.
Cross Functional Teams — XFN
XFN can be defined as interdisciplinary or multi-disciplinary as well. People from different backgrounds and with wide range of domain expertise gather to accomplish a goal. Some common XFN that most of the software engineers encounter during their career are: product designers, content designers, technical artists, business engineers, partnership teams, budgeting teams, legal and privacy teams, integrity teams, marketing and sales etc.
The tricky part while working with the XFN people is engineers might forget them not being engineers and consequently the written or spoken language is too technical. I’ve seen this happening quite many times. It is easy to observe that they got bored quite easily from the engineering topics and they want to change the subject. On the other hand it is hard for an engineer to speak business language as well. However, I’ve also observed that the engineers who good at grasping the domain, business and the problems that the product is solving all together and articulating them well in meetings, coming up with new solutions are successful in their careers.
It is a good exercise to look your day to day work from a higher perspective, think about the user experience or business problems. Also it is fun, you use some other parts of your brain and it helps to connect few more neurons to each other.
Leadership Team
From time to time and depending on the seniority or the criticality of the project you work on you work with the leaders of your organisation as well. What I mean by leader and leadership is starting from your skip manager or director to even the VPs or head of engineering.
It is crucial to remove your engineering hat and wear a business hat while collaborating with them. In most of the cases, the reason why an engineer meet with them is either a regular meeting (where the cadence is either bi-weekly or monthly) where you provide project updates, talk about risks you see and try to establish a good impression on their eyes or there is a risk in one of the projects you lead and you need to explain the situation in more detail. However, don’t forget if you mention risks you need to be prepared to talk about the potential solutions and remediations as well. If not that’s not a good impression.
Customers
Depending on the situation, customers can also become valuable teammates. For instance, when developing a new product and searching for product-market fit, conducting alpha and beta tests is crucial. During these tests, you expose your product to selected customers who provide honest and constructive feedback to help you improve your product for public release, fix bugs, and hopefully generate new feature ideas.
After these tests, you may gather with customers in a meeting room or ask them to fill out surveys. In these scenarios, potential customers or third-party companies can function as team members as well. They have a vested interest in seeing you implement these features that will make their lives easier or help them increase their profits.
Collaboration
Collaboration means ‘the act of working together with other people or organizations to create or achieve something’. As I mentioned above, most of our work is with people and for people. Being good at team work means, you are good at collaborating. For software engineering point of view, there are couple things that I see which increases the collaboration and facilitates team work.
Knowledge Sharing Sessions
Personally, I respect wise people, I respect knowledge. Knowledge is the only thing that matters at the end and you never know everything. In our daily work, we will never know everything, and learning never finishes. Everyone has different pieces of knowledge with different expertise and understanding and collaboration means, connecting all these dots from different brains and find creating new things. Personally throughout my career I find the knowledge sharing sessions quite useful for this purpose. It is sometimes called brown bag sessions or tech talks. I believe, it is the time that people come together to learn, ask questions openly without being judged and at the end creating a synergy. The session might be only within your direct team, and in this case it mostly will be a technical session. However, I have seen in some of my teams that organizing a knowledge sharing session with XFN is quite useful. Depending on the project and organization dynamic, having XFN’s sharing their perspective about the product, end goal and their pieces is quite useful.
Review Sessions
Design Reviews: These are the sessions that you are reviewing a technical design for a project. You can ask your direct team for half an hour to go over your solution, ask for their feedback and on your architecture and share ideas.
SEV Reviews: In the event of a bug or infrastructure problem that affects a large number of users, oncalls are dedicated to mitigating the issue, which can be both stressful and time-consuming. To prevent similar issues from occurring in the future, senior engineers and managers hold review meetings called SEVs or blameless post mortems. These meetings are crucial for software engineers to attend and organize, as they provide valuable insights that help engineers grow and prevent future issues.
Organizing Events
Improving collaboration among teams can be achieved through purposeful events. One popular event for companies is the hackathon, where people from diverse backgrounds collaborate for 2–3 days to prototype their innovative ideas. The outcomes of these hackathons can be game-changing. For instance, the famous Like button on Facebook was created during a company hackathon in 2007 and became popular worldwide. Workplace, a tool used by millions, was also a product of a hackathon. Similarly, fixathons can be organized where engineers come together to focus on fixing bugs for a short period of time. A dashboard to track leaders and swag giveaways can help garner attention. Another type of event is the docathon, where engineers collaborate to improve documentation of wikis or codebase.
Meetings
Software engineering teams typically have a planning season, whether it’s quarterly, bi-annually, or annually. During this period, many meetings are necessary for the team to collaborate and share ideas, plan next steps for the product, prioritize tasks, and distribute work among team members. Organizing these meetings, creating agendas, leading discussions, taking notes, and documenting outcomes all contribute to improved team collaboration. Furthermore, periodic retrospective meetings can be scheduled, which are dedicated to open discussions about both the positive and negative aspects of the team, its processes, and its people. These meetings offer an opportunity to identify areas for improvement and enhance team processes.
Mentoring
Mentoring is a vast topic that deserves its own article, which I plan to create soon. Mentoring others is an excellent way to contribute to your team or organization. Sharing your ideas and wisdom with others when they need guidance is the essence of mentoring. However, it’s essential to remember not to make decisions for them but to direct them to the right places and provide the necessary thought processes for them to find their own authentic answers. Mentoring can be incredibly useful for both parties, as it fosters personal growth and development.
Benefits
Now that we’ve discussed teams and collaboration, let’s explore why they are crucial and what outcomes they yield. Firstly, all the practices we’ve discussed can help you grow as an engineer. These practices are widely accepted and applied by engineers to improve their impact and influence on others.
Secondly, they offer learning opportunities. When you try new things, you’ll gain a fresh perspective and a better understanding of your daily job. You’ll also be able to share ideas that improve team collaboration, come up with innovative ideas, and put them into practice in real-life scenarios.
Lastly, these practices have a significant impact. Most of us work in companies with high-performance expectations that can be demanding and stressful. The people axis is an essential aspect of performance reviews, where you’re expected to help others or your team and have a positive impact on them. The actions suggested in this article can help you excel in this regard!
I hope you found this article helpful. Please share your thoughts so that I can continue to improve!