While shopping for some posters the other day, Rob noticed two contradictory ones on StartupVitamins.

Here are the 2 posters:

Done is better than perfect
You have to make every single detail perfect ...

So if done is better than perfect, but we have to make every single detail perfect, when is it done?

Done is different than perfect

When working on a web development project, you always have multiple constraints.

First the time, which subsequently will define the cost.

Then, what we can call the feature context knowledge: why was this feature requested? What will the customers get from that feature? Is it expected to change in a near future?

And lastly, you have the client’s expectations: this feature needs to go up as soon as possible as we think it’s affecting our bottom line. Or the classic ‘But, it should be easy, it’s just a button to add, isn’t it?’

With those variable in hands, it’s almost impossible to deliver perfect features 100% of time. And in fact it might not be healthy for your project.

I’m certainly not saying that we should rush and produce bad code quality just for the sake of speed, but trying to make everything perfect will lead to delays, because there is always something to improve.

A feature that is done and working as expected is a feature that will be usable on your application by your customers. You will be able to measure if it’s worth spending more time making it perfect, or if it’s good enough and serves a small percentage of your customers.

So, when is it done?

We consider a feature done when the feature is useful. The end user can perform a certain action, and most edge cases are ironed.

Done equals useful and measurable.

And when is it perfect?

Well, that is the catch. A feature will never reach perfection. Web applications are always improving, so your main features will not stay still for a long time.

And why would you change something that is perfect?

Having said that, a feature is always perfectible. Sometimes, the tests can be improved. Or a new edge case is discovered. Some refactoring might need doing.

More than perfection, we should look out for value

If something reaches perfection, it will only be at one point in time. Until something new comes along and destroys your idea of perfect.

How many times did you work on something (say a design) and thought that it was perfect as it was? It was using the latest trends, the cool kids technologies, the wording was beautiful.

Give it a couple of weeks or months, and one day you re-open your design and you see that it’s not so perfect anymore. New trends have destroyed your idea of perfection.

Instead of seeking perfection, our role as developers should be to seek value for our clients.