I make use of an agile, iterative development process: At first all requirements are gathered and prioritised. The most important features at a time will be implemented in a two- to four-week sprint. You can test the intermediate status regularly, give feedback and adjust the direction of advancement.