The level of upfront thinking and the formality of expression must depend on the cost of changing the particular part of the system later on.Someone on the team has to decide what the right amount of formal design, the right amount of separation between coding and design, the right amount of quality assurance, etc, should be for different kinds of interfaces.