Good teams challenge their approach every single day and keep up a constant dialogue.
This one is my favorite. When a team stops communicating and just continue the coding process day-in and day-out, bad things are going to happen. Having whiteboard discussions is an essential form of communication for a team. This way every one can contribute to the design of software. As Eric Evans mentioned in his essential book Domain-Driven Design: Tackling Complexity in the Heart of Software:
Software development is all design.
All teams have specialized roles for it's members, but overseparation of responsibilities is going to fail in the long run. Communication between team members about design choices is essential in creating maintainable software.