The highly effective teams I have been a member of used a rapid prototyping approach to help bound uncertainties/risks in the project and delayed making decisions when more information would improve the situation, unless any further delay was effectively a decision. I think that a lot of individual productivity comes from problems avoided by a high level of trust, cooperation, and teamwork.
I think that there are broadly three classes of skills needed to develop software that customers pay for and use:
- Customer Development: figuring out what the customer really needs, and will use and pay for,
- Design: architecting a solution,
- Deployment/Operations: getting it debugged and into operation.
I have seen folks that were excellent in one of the three areas and good in the others, but the best teams seem to have different people taking the lead on these three aspects of defining and delivering a system.
Inspired by Steve McConnell’s Productivity Variations Among Software Developers and Teams: The Origin of “10x”