- I have heard so many times during my career "The testing was not done properly" or "The delivery guy doesn't have proper business knowledge" or "Delivery was not done on time". People rarely realize that following steps ensure that any delivery for customer (internal or external) is done "On Time In Full"
- Requirement gathering- Ask as many questions as possible while collecting information at this stage. Don't get dishearten by people who say that you are asking questions because you don't understand business. In fact you are asking because you are having hawk's view of the entire situation, which in most of the case is better than any specific user community. Capturing more and more details will help in preventing re-development of output and hence sticking to timelines
- Feasibility Study - Don't get surprised if user asks for a 8000 CC car while offering to pay for a 600 CC engine and expecting it to get delivered as on yesterday. Do a stock check before you commit on what can be delivered in your current scope of delivery
- Modular development - No one will ask it specifically but will expect every part of your delivery to be independent so that it can accommodate last minute "Eureka" moment inventions and discoveries
- User based testing- Ensure that the user who has given the requirement, tests it to the best of his capability. You might have to scrap entire output just because it was not tested by the user
- Go-live- Always be ready to mitigate any mishap during this stage (trust me Murphy's law is not a myth). Start with a small user base in controlled environment so that anything going not as per expectation can be corrected without any major impact to business.
And I strongly believe that support cost will be minimal if above points are handled properly.