Do you feel part of a real team? Or are there moments when you feel isolated, uncertain, and disconnected, even though you're surrounded by colleagues? In the early stages of my career, I had the simplistic view that bringing together a bunch of high achievers would naturally create an outstanding team. However, the reality was quite different. Instead of creating synergy, there was noticeable discord. The team didn't seem to gel; it was akin to cogs not aligning in a machine. Every top performer, exceptional in their own right, appeared to follow their own path, often pulling in different directions. The amount of energy and time lost to internal strife was significant, and the expected outcomes? They remained just that – expected. This experience was a clear lesson that the success of a team isn't merely based on individual talent; it's about harmony, alignment, and collaboration. With today’s workplaces being more diverse, widespread, digitized, and ever-changing, achieving this is certainly challenging. So, in my quest to understand the nuances of high-performing teams, I reached out to my friend Hari Haralambiev. As a coach of dev teams who care about people, Hari has worked with numerous tech organizations, guiding them to unlock their teams’ potential. Here are his top 5 tips for developing high performing teams: 1. Be Inclusive ↳Put a structure in place so that the most vocal people don’t suffocate the silent voices. Great teams make sure minority views are heard and taken into account. They make it safe for people to speak up. 2. Leverage Conflict ↳Disagreements should be encouraged and how you handle them is what makes your team poor or great. Great teams mine for conflict - they cherish disagreements. To handle disagreements properly make sure to separate discussion from decision. 3. Decision Making Process ↳Have a clear team decision-making method to resolve conflicts quickly. The most important decision a team should make is how to make decisions. Don’t look for 100% agreement. Look for 100% commitment. 4. Care and Connect ↳This is by far the most important tip. Teams who are oriented only on results are not high-performing. You need to create psychological safety and build trust between people. To do that - focus on actually knowing the other people and to make it safe to be vulnerable in front of others. Say these 4 phrases more often: ‘I don’t know’, ‘I made a mistake’, ‘I’m sorry’, ‘I need help’. 5. Reward experimentation and risk taking ↳No solution is 100% certain. People should feel safe to take risks and make mistakes. Reward smart failure. Over-communicate that it’s better to take action and take accountability than play it safe. Remember, 'team' isn't just a noun—it's a verb. It requires ongoing effort and commitment to work at it, refine it, and nurture it. Do give Hari a follow and join over 6K+ professionals who receive his leadership comics in his newsletter A Leader’s Tale.
How To Improve Collaboration In Software Development Teams
Explore top LinkedIn content from expert professionals.
Summary
Collaboration in software development teams is essential for delivering high-quality products, but it requires overcoming communication barriers, aligning goals, and fostering trust among team members. By improving how teams work together, organizations can minimize delays, reduce miscommunication, and create a seamless development process.
- Establish clear communication channels: Minimize confusion by creating shared understanding through open discussions, regular check-ins, and well-documented processes.
- Create a safe team culture: Encourage psychological safety by allowing team members to express concerns, admit mistakes, and share feedback without fear of judgment.
- Define team agreements: Develop a set of guidelines that outline how team members collaborate, such as timelines for code reviews, communication protocols, and decision-making processes.
-
-
"Do you understand the requirements?" "Yes!" = "I don't know" "No!" = "I don't know" *silence* = "I definitely don't know" After 20 years of building engineering teams, I've learned the hard truth: binary questions kill collaboration. They're a false comfort that masks deeper communication gaps. The real problem? Both "yes" and "no" often mean the same thing: "I'm not comfortable having a deeper discussion about what I don't understand." This silence tax is expensive: • Features get built based on assumptions • Teams work in isolation, duplicating effort • Architecture decisions made without crucial context • Integration issues discovered way too late • Deadlines missed because the real complexity stayed hidden Game-changing questions I now use instead: 1. "What parts seem unclear or could use more detail?" 2. "How would you approach implementing this?" 3. "What other systems do you think this might affect?" 4. "Walk me through how you'd test this" 5. "What concerns you about this approach?" Because here's the truth: Great software isn't built on yes/no answers. It's built on collaborative problem-solving and shared understanding. The most valuable conversations start when we move past "Do you understand?" to "Let's understand this together." What questions do you use to spark real technical discussions?
-
Let's be honest: extensive cross-team coordination is often a symptom of a larger problem, not an inevitable challenge that needs solving. When teams spend more time in alignment than on building, it's time to reconsider your organizational design. Conway's Law tells us that our systems inevitably mirror our communication structures. When I see teams drowning in coordination overhead, I look at these structural factors: - Team boundaries that cut across frequent workflows: If a single user journey requires six different teams to coordinate, your org structure might be optimized for technical specialization at the expense of delivery flow. - Mismatched team autonomy and system architecture: Microservices architecture with monolithic teams (or vice versa) creates natural friction points that no amount of coordination rituals can fully resolve. - Implicit dependencies that become visible too late: Teams discover they're blocking each other only during integration, indicating boundaries were drawn without understanding the full system dynamics. Rather than adding more coordination mechanisms, consider these structural approaches: - Domain-oriented teams over technology-oriented teams: Align team boundaries with business domains rather than technical layers to reduce cross-team handoffs. - Team topologies that acknowledge different types of teams: Platform teams, enabling teams, stream-aligned teams, and complicated subsystem teams each have different alignment needs. - Deliberate discovery of dependencies: Map the invisible structures in your organization before drawing team boundaries, not after. Dependencies are inevitable and systems are increasingly interconnected, so some cross-team alignment will always be necessary. When structural changes aren't immediately possible, here's what I've learned works to keep things on the right track: 1️⃣ Shared mental models matter more than shared documentation. When teams understand not just what other teams are building, but why and how it fits into the bigger picture, collaboration becomes fluid rather than forced. 2️⃣ Interface-first development creates clear contracts between systems, allowing teams to work autonomously while maintaining confidence in integration. 3️⃣ Regular alignment rituals prevent drift. Monthly tech radar sessions, quarterly architecture reviews, and cross-team demonstrations create the rhythm of alignment. 4️⃣ Technical decisions need business context. When engineers understand user and business outcomes, they make better architectural choices that transcend team boundaries. 5️⃣ Optimize for psychological safety across teams. The ability to raise concerns outside your immediate team hierarchy is what prevents organizational blind spots. The best engineering leaders recognize that excessive coordination is a tax on productivity. You can work to improve coordination, or you can work to reduce the need for coordination in the first place.
-
The key to progress on hard, complex projects comes down to latency and bandwidth — the interfaces through which teams communicate. 1 / Latency is the delay. How long it takes for information to travel, decisions to be made, or problems to surface. High latency slows everything down — people wait, guess, or lose momentum. Strong leaders reduce latency by creating environments where: Feedback moves quickly. Problems are flagged early and acted on decisively. Communication loops are short, direct, and clear. 2 / Bandwidth is the capacity. How much information can flow between people. Low bandwidth leads to confusion, blind spots, and misalignment. Strong leaders increase bandwidth by ensuring: Teams share the right context at the right time. Communication is open, transparent, and efficient. People trust each other enough to exchange ideas freely. When latency is low and bandwidth is high, progress accelerates. Teams collaborate seamlessly. Small signals get noticed before they become big problems. Decision-making improves. Great leaders don’t just manage — they optimize the interfaces of communication within the team. They create systems where ideas flow, feedback happens in real time, and no one is stuck waiting for clarity. Because in the end, the speed and quality of progress aren’t just about individual talent — they’re about how well the team interacts. Thoughts??? If you’re building hard things and want signal over hype, subscribe to Per Aspera. 👉🏻 Join here: https://lnkd.in/gacTgUkh
-
Tired of arguing with your coworkers during #codereviews? Why not start a Team Working Agreement with your #softwaredevelopment team? A team working agreement sets the ground rules for your team and how they review code. You should discuss and document key things like: 1. How fast should reviews happen? Agree on an appropriate turnaround times for reviews and state that in your TWA. Also describe what can be done if someone isn't adhering to the turnaround times. 2. What's our limit on PRs? Define PR size limits: whether that's roughly the amount of lines changed or a maximum on the number of files to be reviewed, a guideline can help keep a #pullrequest small. And remember: Small PRs mean faster, more efficient reviews. 3. Are you allowed to self-approve? Handle self-approvals: Can authors approve their own PRs? If so, when and under what circumstances? Are you making sure this won't be abused? 4. Determine whether you'll allow nitpicks. While I strongly suggest taking nitpicks out of the review (because most are subjective or can be fixed before the review), state if you'll be allowed to bring up nitpicks in a review at all. If you do, be sure to use the "nitpick: or nit:" prefix and explain what should be considered a nitpick. 5. What's allowed to block a review? Clarify what can block a #PR from being approved (and ultimately, merged into prod): Security issues? Missing tests? Missing documentation? Readability? Something else? The clearer your team is about blocking vs non-blocking issues, the fewer your debates will be during the #codereview. By drafting your own Team Working Agreement, you can start to make reviews less painful and more productive. And remember, you can always revisit this document and make changes as your team evolves. Just make sure you discuss and agree to the changes as a team! Get a TWA template in my book: https://lnkd.in/dKwGg667 And follow (theLGTMBook to be a better #codereviewer! https://lnkd.in/gJaDvkEu
-
+4