I have a confession, I prematurely optimize.
Looking for efficiencies in some code you have just splurged seems like too much fun. We have all done it; one moment we are motoring along, knocking features out left right and center, next minute you disappear down the rabbit hole looking for optimizations.
It feels productive though.
What if my app needs to handle 1m users? What will 0.2ms extra download time do to my SEO rankings? Will users go somewhere else if my code is not running as fast as it could?
These are all semi-legitimate concerns, but at what stage does it become essential to address them?
YAGNI (You Aren’t Gonna Need It)
The truth is, most of the times, there are plenty of more fundamental issues to address, most of them related to the question “What do users really care about?”. Optimization is only important after users decide your product is actually worth using, not before.
If anyone asks, in principle, I am totally for the essence of YAGNI (You’re Not Gonna Need It), in practice, however, my track record is mixed. Theory says we should develop minimum viable products, get these products to customers without delay, defer commitment as late as possible for irreversible decisions, reduce waste, reduce inefficiencies etc etc. But far too many times I have spent hours optimizing something which:
- Delays the time it takes to get to the customer, thus reducing time for feedback.
- Makes technology selections too early based on optimization concerns.
- Creates deep and incomprehensible inheritance models, because that’s what a book told me to do.
- Introduces unnecessary complexity to the solution which developers behind me have to take even more time to learn (decipher).
All on things that:
- Weren’t eventually even used in production.
- Didn’t need as optimized as much as they were. Not now. Not ever.
This is time I could have used discovering what users actually liked or disliked.
Permission Granted
Hopefully by confessing my problem to you that it is the first step in my rehabilitation. Next time you see me pre-optimizing you have my permission to slap me, Batman style, and shout “YAGNI”.