Monday, November 12, 2018

Perfect Code is the Enemy of Code

I'm trying to add a feature for CustomJournal prompts that auto expand and de-expand. This would come in handy when I do my daily review of 3 amazing things that happened today. I'll come up with 4 or 5 things and then just add them all in on the 3rd line. But it would be nice if a new line could be created instead.

So I'm trying to figure out how to write the code and I'm stuck because I have multiple ideas pulling me each way. I could get the feature done easily but the solution would be quite messy (because my previous architecture did not account for this) or I could do a whole bunch of cleanup and refactoring.

Which led me to think about the tradeoff of FaceBook's famous move fast and break things/Done is better than perfect motto. The idea is that speed and shipping is a feature too and if you take too long to ship you are depriving the customer of using that feature (even while not perfect) and also depriving yourself of getting valuable feedback.

As FaceBook grew, of course, they realized that they could no longer break as many things and move as fast. User's would complain and they had much more to risk than they had to gain. Thus the value of perfect (or near perfect) became more valuable than the value of getting a feature out faster.

I of course have an app that a small amount of user's love (but not many total users: ~150 monthly active to date). Its also making me about a sale a week which is pretty negligible (doesn't impact my life at all) for me.

So move fast and (but hopefully not) break things it is. Refactor when I need to