Where this happen:
Analysing: Understanding problem domain 100% and delivering the ideal solution to the client will be the ideal case. However in reality lack of understanding problem domain cause less achievement of client goals which can cause a re-work.
Agreements: Lack of understanding to end point and clear objectives, both developer and clients get confused causing clients to change their mind at the last minute which can cause re-work.
When you are coding: If we can write a programme like we write a love letter, it will be the ideal case. But this is not. But having a proper plan what you are going to implement you can write programmes. But in really we develop programmes. Development involves revisions and iteration and re-work.
How to minimise repetitive work:
- Spend fair time of background study and understanding the problem. For example if you implement an accounting system, it is better to have some background knowledge of accounting.
- Produce mock-up as much as possible. Get mock-ups agreed by the client.
- Document requirements properly and re-wise and get sign off by the client.
- Provide a good architecture to the solution. Consider using multi-tier-architecture. Use object oriented programming concepts. Occupy common software patterns as much as possible like MVC and Active Records
- Document the plan. I know this is painful but this save time a lot. What I would do is at least implement high level ER-Diagram and Class Diagram.
- Avoid copy and paste. If you use a common mark-up in several places implement a user control. Even better, if little repetitive segments of code you can implement custom server controls.
- Use asp.net master pages and asp.net themes and skins.