Everything is a Draft
Do you think you are capable of doing something perfect at first try?
Do you think anyone does?
Do you think perfection exists?
My answer to all of those questions is no.
My View on Perfection
Before beginning, let me tell you that yes, of course this is about work. I am not referring to perfection in the overall sense of the word, I am referring to having something 100% finished with no room for improvement, be it a piece of code, a graphic design, a marketing text or a business model.
When I start something from scratch, if it is some area where I have a lot of experience and I am used to (like, for example, programming), I always have the sensation that the solution is already in my head. I only need the time necessary to actually do it. But many times, I find out there is something I was assuming which is not true. Or maybe I have something “finished”, but later I take a look and something obvious is wrong or could be improved. It is easy to think of something as perfect or finished, but always it turns out not to be. That's why I don't think perfection exists. Even in big projects, with years and years of development, something (if not everything) can be improved.
That can happen to problems whose optimality is measurable (how fast an algorithm is, how many users clicked on an add), but most of the time the problem with perfection is that it is something subjective. Usability, connotations, interpretation and personal experience come into place.
And that is why I think everything is a draft.
Why it matters
Ok, nothing is perfect or finished, so what? Well I would like to use this reasoning to reflect on some behavior I have observed in many individuals (myself included). And by doing that I hope to improve upon it.
Fear of deleting
There is generally certain aversion against deleting work done. I guess the main reason is that it feels like all the time dedicated was wasted. To be frank, sometimes that is the case, but most times something has been learned in the process and it is worth deleting everything and redo it with the new knowledge and experience.
Some quotes to back my point:
Bruce Lee – “One does not accumulate but eliminate. It is not daily increase, but daily decrease. The height of cultivation always runs to simplicity.”
David Heinemeier Hansson (Creator of Ruby on Rails) – “The delete key, my favorite key.”
Paul W. Homer in 97 Things Every Programmer Should Know – "More time gets wasted in trying to salvage bad work than it should."
Nonacceptance of critiques
This point is more widely accepted: You should accept critique. But still there is so many people who does not accept critiques very well. First, I think I made my point clear when I said that nobody does something perfect at first (or ever). But sometimes people think because they are experienced, opinion from less-experienced individuals is not worth even listening. There is something dangerous about experience; it blocks basic reasoning and common sense with layers of assumptions. Most of the time that is good because you don't have to profoundly reason everything you do, but that also means you're less thorough and it can be easy to miss something.
Following that, that's why I critique and I expect to be criticized on my work. Of course, constructive critique. I specially like to present some task simplified to someone with no experience on the topic because the new point of view can be something completely different. Sometimes it can result in something that makes no sense, but at least give it a thought instead of rejecting it (see Ad Hominem Fallacy).
Simplicity is not King
There is this saying that Simplicity is King, as well as KISS. And I actually agree for the most part. But don't be fooled in thinking that if something is really really simple, it is perfect (“if it cannot be simplified, it cannot be improved” is wrong). Even if a wheel is the embodiment of simplicity, maybe on the overall problem you shouldn't be using a wheel at all, a lever would be more appropriate.
So, Simplicity is King always it goes hand in hand with context.
Mark something as Finished
Yes of course, for practical issues we need to mark some things as finished to keep advancing on to new tasks. But be aware of that. We live in a Draft, every system, product or service you use is a draft. And that's why everything can be hacked some way or another. Have you ever heard this expression? “90% of the projects are 90% finished”. It is spot on.
Also the thought that if we spend infinite time in something it will be finished is completely wrong. It is similar to Zeno's Paradox of the Tortoise and Achiles; every step you take will take you half the remaining closer to the goal, but you'll never reach it.
All of that was kind of philosophical, so I would like to finish this post with some practical applications of this theory.
First, I think this is the root explanation of why Copy & Paste Programming is wrong. The whole point on doing something is to learn from it, so if you're going to copy/paste something, you better understand exactly what are you adding to your project.
From the fact that everything you do is a draft, it can be deduced that the probability of doing your best at first is not 100%. That's why it is important, at the start, to think different solutions to a problem. Or said differently, it is important to make different drafts before choosing which one to go on with. The technique known for using this concept is Brainstorming, and I would recommend to use it quite often.
Every time you need to improve something, maybe you should start by deleting some. When it was done, probably some expendable things where included. It is then an improvement to hack the unessential away. And it helps you to understand more the problem if you have clarity of what is done. For example, every time I start something from a template or a boilerplate, my first step is to check everything that has been included and delete whatever I think is not necessary for my project.
And of course, this post is a draft, so let me tell you what you think could be improved.