When putting this site together a friend asked me – “What’s your philosophy that’s driving all this?”. Good question – one that I’ve lived by for years, but never really wrote down… until now….
What makes a successful software development team? Why do some teams constantly deliver innovative, highly successful products, while others deliver late and miss market expects? While many causes exist, I believe it boils down to this: successful teams are constantly building for the customer.
How can this be you may ask – all software teams are busy, developing functionality, meeting requirements and in the end shipping a product. My answer – being busy doesn’t make one successful. Being focused on your customers, collaborating with them and building to meet their needs makes one successful.
Unsuccessful teams aren’t building for their customers, if anything they are building for themselves. They’ve lost contact with their customer values and instead drive functionality to meet an abstract concept of the customer, which more often than not represents the development teams desires.
Additionally, some organizations appear more concerned about their operational processes than delivering functionality. Operational structure, procedural rigor and success metrics are comforting and can give one a true feeling of success. But a team is not delivering operations artifacts, they are delivering customer value in the form of a product.
When meeting a new Engineering team, one of the first questions I ask is “What does the team do?”. If the answer is mostly focused on operational process or organization structures, I get concerned. However, if they talk about customer successes, or how they delivered key functionality, I dig in and try to learn from this team.
I’ve found that successful teams fully understand their users and have relationships with key customers. If they have a question, want to do a site visit or even trial a prototype, these customer relationship deliver a easily accessible channel for gaining market ground truth.
On top of customer knowledge, successful teams are always building, tweaking, iterating — trying to find that successful solution for the customer. If they have a question, the first action they take is build a prototype, try something out, sketch out a possible solution. If it doesn’t work, they try something else. Failure isn’t failing, it’s an indication you’re pushing the boundaries of your knowledge. Software development is a continual learning process – successful teams embrace this dynamic and as a result are in constant development motion.
It’s not to say successful teams don’t following an operational process to manage their efforts – they do. But they use the process as a tool to aid them in delivering a product, not as the defining structure of the team.
With all this in mind, I’ve always believed successful software teams exhibit the following traits:
- Highly interactive dynamic within the team – communicating constantly
- Focused on their customers, maintaining strong relationships with the user community
- Are constantly building, refining and trying out new concepts
It’s a simple recipe, but one that’s surprisingly hard to follow – especially as organizations grow. Organizations must focus on the end goal — enable relationships between the developers and customers and more importantly keep the entire team building things!