Practice 1. Design Vision
From a project management standpoint, iterative development is really hard if you don't have a vision. Hence, just as you need a vision for the project as a whole, you should have a vision for your design as well, even if all you are doing is adding to an already existing code base. A design vision, or conceptual design, is an overall picture of the pieces of your software: what they are, what each does, and how they interoperate to solve the task at hand. Without a design vision, oscillation will likely result because the team will not have a clear idea of how the software is and should be structured.
The design vision can be a simple hand-drawn annotated sketch on a whiteboard or a UML diagram. My personal bias is toward a hand-drawn UML diagram on a whiteboard that is kept up to date. However, it doesn't matter what form the design vision is captured in, as long as it exists.