Ten Amendments for Building Quality Software Systems as a Team

September 4, 2023

Coding by yourself is like singing in the shower: you can do it any way you like. But when you start working with a team, things change. You're not singing solo anymore, you're part of a choir. It doesn't matter if you have the best voice, what's important is how well you harmonize with the others. The same goes for coding.

Building quality software as a team requires more than just talented developers. This is because in a team, it's not just about skill, it requires a collaborative environment with shared practices, continuous improvement, and a focus on the long-term health of the codebase.

In this post, I'll share 10 key amendments for creating sustainable and maintainable systems when working in a team, since Quality is Systemic.


1. Celebrate Diversity of Skills and Backgrounds

Just like a choir needs a variety of voices to create a harmonious melody, a software team needs a variety of skills to build a robust product. Maybe one developer's knack for design can beautify the user interface, while another's data management expertise can optimize your backend. Celebrate these different 'voices'—don't just acknowledge them, but actively utilize them to create a more vibrant and versatile software solution.

2. Don't Blame Individuals, Question the Process

If a team constantly produces flawed code, look at the process, not the people. Consider this: If an experienced developer consistently produces bugs, is it their fault, or could the issue lie in unclear requirements or poor communication? Focus on improving the system, not blaming individuals.

3. Establish Shared Practices and Terminology

Not all team members will be up-to-date with the latest tech jargon or have the same working practices. Make sure your team speaks the same 'language' by investing time in creating a shared set of terms, rituals, and expectations. This will ensure that whether you're talking about "Agile", "Scrum", "Stand-ups", or "Retrospectives", everyone is on the same page, leading to a smooth, efficient workflow.

4. Foster Trust and Psychological Safety

People do their best work when they feel safe and trusted. In an environment where mistakes are treated as learning opportunities, team members are more likely to take innovative risks. Remember, the developer who 'broke the build' likely also learned a valuable lesson in the process. But don't forget to review blamelessly.

5. Embrace Pair Programming

Its benefits are abundant: instant knowledge transfer, immediate code review, enhanced team collaboration, and a sense of shared responsibility. I firmly believe that Pair Programming should be a fundamental part of a software developer's day. So, embrace this practice, because two minds coding together often outperform two working separately.

6. Cultivate a Test-First Culture

Cultivate a test-first culture in your team. Prioritize writing tests before code—it's like having a safety net catching any bugs or issues before they infiltrate your final product. Good software isn't merely functional; it's reliable, dependable, and trustworthy. And if you need more convincing, remember Jakob Kaplan-Moss's words, "Code without tests is broken by design."

7. Live the CI/CD Life

CI/CD isn't just a buzzword; it's a philosophy for modern software development and your business needs to embrace it as well. It means constantly integrating new code and delivering updates, ensuring problems are caught early and fixed quickly. Consider the alternative: massive, infrequent updates that are akin to changing the wheels on a moving car.

8. Do Not Neglect Internal Quality

High-quality code isn't just about external performance—it's also about maintainability and scalability. Refactoring may not add new features, but it keeps the codebase healthy and agile, and in the end High Quality software is cheaper to produce.

9. Reflect, Adapt, and Improve

Learning from the past is key to improving the future. Regular retrospectives can help you identify what's working and what's not. "Have one retrospective per week, unless you are too busy. In that case, you should have two!"

10. Shared Vision, Better Product

A team should be like an orchestra, each member playing their part in harmony to create a beautiful symphony. This can only happen when everyone shares the same vision of the final product. In the end, the hardest thing about Software Development is not coding, it is building the right thing.