I have been working with a colleague on building a timer this week. What started out as a simple feature request has been under development for more than 2 weeks now.
Building a new feature is always a learning lesson. You have so many decisions to take. From use cases you want to consider to edges cases that you choose not to build. Timer as it turns out has a lot of use cases. What if they have the same timer running in multiple tabs?, Can I resume the timer on my laptop at home if I started it on my desktop machine in office?.
You can spend a lot of time writing code for all the use cases or take a stand on why you did not consider a use case. After all you can always improve the feature once it’s out there. Its important to get the feature out in front of user’s and improve it based on their feedback.
Over engineering a new feature is never a good idea. Always make gradual improvements.