This happens a LOT in software development:
It's critical to make sure you and your customer has the same idea of "done" in your mind before work gets started.
You waste time building the wrong thing. The customer wastes money on something they don’t want. Nobody is happy.
You can avoid this by agreeing on a definition of done before writing any code.
A good definition of done answers the question: how will the client test the feature when it is done?
- Customer: I want a real estate website to browse listings
- You: How will you use this once I have built it?
- Customer: I will need to show it to potential customers in a meeting
- You: What will you do in the meeting?
- Customer: I will show them a map of pins in New York, I will filter by price, then I will click on a property to show a full description
- You: Are there any good examples to copy?
- Customer: Yes, please go to getoliver.com
- You: I see there are a lot of features on this page. What features do you want to eliminate or simplify?
- Customer: I don’t need any filters besides price. And you can just make it a dropdown.
- You: I see they are grouping pins on the map. Do you need this?
- Customer: No not now actually. We can do it later.
- You: OK great!
In a short chat, you have clarified what "done" means.