Meticulous research, detailed planning, choice of architecture, rapid software development using Agile methods and continual client participation.