- Good coders. If your team isn't talented, nothing can save them. Your developers should be good coders; your testers should be good testers; your architects should be good designers, etc.
- Good System Understanding. You need to know the system from top to bottom, inside and out. Every member of your team should be able to describe the system in detail, from a user's (black box) perspective, all the way to the inner workings and interactions of the components. Your problems almost always lie at the outermost (black box) and innermost (component interaction) level. Note the semi-gratuitous zoom video describing a system and how your team should be able to traverse it!
- Commitment. If someone on your team says he will do something, then the entire team needs to be able to trust that commitment. A good team is one in which every member says something will get done and it does get done on time every time. Trust is only built by keeping your end of the bargain all the time.
Of these, the first two are mostly a matter of hiring the right people and helping them get to know your system. The last part is the hardest, and regularly dooms groups of really smart people. If you're lacking any of these three, you are shipping software in spite of your team, not because of it.