Defining needs of the project and thinking about possible solutions. Consideration for future use and backward compatibility. Developing the boundaries and possibilities, leaving flexibility in the design process to speed up the research and development. Understanding costs and resources at every stage as to keep the product viable.