How to build great software development teams
All software development teams exist to deliver value... but some are better at it than others!
So how do software development teams become great? How do they deliver value more quickly and effectively than mediocre teams? Let's take a look at the essential ingredients.
Agile is a working methodology that helps software development teams deliver value more quickly than its predecessors (e.g. waterfall). It has become widely adopted across the industry and it's the first thing a software development team should consider on the road to greatness. The Agile Manifesto has four guiding principles:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
These are great principals, and following them will lead to open, collaborative, reactive teams, focused on delivering value. But most teams often need a little more guidance on how to implement them. That is where Agile methodologies such as XP, Scrum, Kanban, or Lean come in (more here).
Engineering Best Practices
But Agile isn't enough. Great teams also need to define and adhere to great engineering practices. XP makes a start at describing these practices, but there are others that should be considered. Here are some suggestions:
Pair programming/code reviews
Regularly addressing technical debt
Comprehensive test coverage
Coding standards and architectural governance
A definition of done
Alerting and monitoring
Data-driven decision making
Combining Agile Methodologies with great engineering practices will get teams a reasonable proportion of the way there, but there's still one bit missing.
The final area to consider in building great software development teams is Engineering Culture. Culture is invisible and hard to measure, but ask any software development team what their team's culture is like, and you're bound to get an interesting answer!
Here are some cultural practices which should be baked into excellent development teams:
Provide individuals with autonomy, mastery, and purpose
Be part of a team but also part of a larger community. Knowledge comes from inside and out
Live and breathe the mantra of Continuous Improvement
Trust your team members to do the right thing and help them to achieve this
Coach individuals and share knowledge, removing single points of expertise
Give teams time to innovate and ensure there is a clear path to production for ideas that provide value
Encourage teams to measure their own effectiveness with regular health checks and retrospectives
Ensure there is reward and recognition from both inside and outside the team
Make sure work is fun!
Greats software development teams are Agile. They regularly deliver value in a sustainable fashion, continuously optimizing their processes and tools to increase productivity. They adhere to Engineering Best Practices to ensure they're building software in the right way. They also focus on Engineering Culture to make sure they're working collaboratively and having fun!