To evolve as a craftsman in any area is vitally important to keep the work interesting and to avoid getting stuck in the same old patterns. For me, I tend to focus too much on details and its specially true on personal pet projects. Typically it all starts by getting an idea (and I get a lot of them). I have the idea in my head for some time, thinking about what the core problem is, and how I would solve it in the most performance efficient way. Eventually I start sketching diagrams and writing keywords, perhaps do some test development, choosing DB server and do some DB schema performance testing and so on.
I rarely choose to finish these personal pet projects to such a degree that it would be commercially ready. Why? Because when I solved the most tricky and interesting issues I tend to drop interest. When it comes down to writing that UI that you done a thousands of times before and packaging it up, its just too boring to do those few late hours of the day when you have time for this kind of personal development.
As a professional developer I do however keep pushing out code on time, delivering what has been requested from me without a problem. So a while back I started think about how come I am able to keep producing a lot of code at a high pace when working, while on a personal level things are quite slow?
It struck me while reading a magazine article about being able to deliver work, and the downsides of being a perfectionist. I was a perfectionist! I was putting focus on the most optimized way of doing something, even though the same work could be done differently, but perhaps not be as blazing fast or maintainable in the long run. Focusing on silly things like perfect HTML markup avoiding that extra DIV or boiling down the page a few bytes. Being a perfectionist takes away from the ability to deliver.Â
So by understanding that everything does not have to be perfect from the start. That we actually can go live without pushing to loose those last few milliseconds of page response time, that we can deliver NOW. And then we can start thinking about those last milliseconds later, when we are in business.
I applied this principle on this site when I suddenly found myself in the process of going from an employment to starting up my own company. I wanted this site to have all the great solutions I never had time to do for customers in my employment due to time/cost constraints or external dependencies. It would be my code nirvana. But being a perfectionist would never get me there on time. So instead I focused on “delivering” and just do as much as I needed to get online NOW, and add all those fancy solutions later.
And there you have it, in a really short time I managed to get the site online and still I managed to get some of those close to heart solutions in there like:
- Responsive design.
- Lazy loading in small view ports, normal loading in larger view ports (ie. less data to load on initial page load for mobile devices).
- Anti-spam solution (to be “widgetized” later) with LB integration
- Cache layer integration (this page was most certainly served from RAM).
- 1 200+ page requests per second on a $5 VPS.
- Great looking code blocks ;)
I now consider myself a recovering perfectionist :)