Ultimately, high quality software comes from high quality people.
There is only so much you can do with environment, process, tools, and coaching.
For example, take soccer …
Try replacing all the players from my favourite English Premier League (EPL) team, Manchester United, at the start of a season, with the players from my local team team, Exmouth Town, who play in the South West Peninsula League (many levels below that of the EPL) . With all due respect to Exmouth’s players, after one season of wonderful environment, good processes, and great coaching, they would be better players, but …
… they would still not produce the quality of football that the Manchester United players would …
… and, almost certainly, Manchester United would be relegated because the time taken to improve would be far too long and the amount of improvement not nearly enough to win enough matches.
In most companies, it is unlikely we are going to hire the software development equivalent of Manchester United’s star players. Nevertheless, there are numerous things we can do to ‘raise our game’:
- In our team, agree to expect, help, and hold each other to the highest quality levels of source code, testing, and documentation possible … successful sports teams insist on the highest levels of quality from each other, and spur one another on to reach them.
- Remind each other to consider testing and testability from the earliest design discussions of a feature … successful sports teams do not rush or skimp on preparation and training.
- Ensure code reviews are finding issues. Refuse to let them deteriorate into a quick-glance, low-value, box-ticking exercises … successful sports teams back each other up and cover for each other to avoid letting the opposition score.
- Identify missing skills or gaps in expertise within the team and look to build that knowledge within the team … successful teams work hard to improve on their weaknesses.
- Interrogate bugs ruthlessly in retrospectives, looking for ways to improve the way the team works and prevent similar bugs in the future … successful sports teams review past performances to improve future ones.
- Involve team members with more quality backgrounds, mindsets, etc., earlier in the planning process … successful sports teams know and play to each others’ strengths.
- Connect with more people from other teams, and shamelessly steal all their good ideas for your own team’s use.
One of the most obvious results from better quality soccer players is the speed at which their team can do things: the speed of passing, movement off-the-ball, counter-attacking, and reaction to events. Similarly, the more we raise the quality of our game in software development, the faster things get done and happen … we produce better software faster.