Done is better than perfect

I recently got a chance to work with Expo, which provides a set of tools to build React Native apps faster across both Android and iOS platforms. Using Expo, one can work completely in Javascript and doesn’t have to have Android or XCode setup for building the native apps.

Expo has created an ecosystem to access the device’s functionality such as Camera, Location, Contacts etc. and also manages the Assets and Push Notifications too.

Apart from that Expo also provides Expo Snack, to try ideas online, then publish and share them with anyone.

It really helped us to build the app faster, especially making a lot of decisions such as the plugins to use. We as a team felt smart when we were able to experience “write once and run anywhere” and also could easily test the app across different simulators and/or devices while developing the app.

That doesn’t mean that Expo was perfect. It had issues, for eg: the scheduled local notification in Android was not expandable and it was a problem for us because we wanted to show a longer message for a scheduled local notification. We also faced some issues for generating .ipa files for distribution. The reason for failures was not clear and took some time to figure out the problems.

And Expo was very opinionated too. It imposed constraints on us because of the opinions and at times because of the issues mentioned above. But most of the time it helped us to deliver faster.

Expo focused on “done” than on perfection and it helps many of us developers for getting things done. If Expo team had focused on perfection instead of done, am sure the value would have been far less. This is the case with initial versions of many great frameworks or libraries or even great products that we use today.

But as developers I believe we don’t follow this enough, we try to focus on perfection and fail to get things done. And this affects the value that we can provide to our users.

“Done is better than perfect” doesn’t mean that one is delivering a mediocre or crappy product. Expo was always reliable and provided high quality stuff. Expo had rough edges in some areas which were by design. Because investing time and effort in fixing those rough areas now would have affected them getting more useful things “done”.

So why don’t we focus on “done” than being perfect? And this is very important for delivering in Small Batches. Because we need to know how to get things “done” for each batch, otherwise it will always be a work in progress. Like Steve Jobs mentioned: