At the highest level I feel that delivering applications that are maintainable, reflect user needs and tradeoff appropriately between the expected budget, timeline and functionality comes down three things: Getting the right estimate Development process