I just finished watching Rick Hickey’s talk Simple Made Easy. Chris provides some very useful alternative views on achieving software quality. I especially like his metaphor of guardrail programming. This is a must see if you are a software developer!

So I have a few minutes left and while I am procrastinating, I’m thinking about procrastination. Why not also write a blog post about it!

Why do I procrastinate? Two reasons I can think of:

1. It provides immediate benefit by keeping an important task neatly wrapped up on the shelf, to prevent it from going bad.
2. It provides a useful slot of time, which can be used right away.

With all these benefits, we obviously would like to maximize procrastination.

In the back of our mind, right next to our intuition, there is a little voice saying that together with maximum procrastination, we need maximum efficiency, both during procrastination and also afterwards. This is because we are not stupid. We know time is finite, even though it goes around in circles forever. Besides, someone else might be waiting for us, and they might not be procrastinating as efficiently as we are.

With that in mind now, we could try to get the most benefit from this large vacant slot of time that procrastination provides us. One idea is to prioritize building a complex system, which will make completing any future task trivially easy. When the time comes, we will be hyper efficient and we will be glad we had an effective procrastination strategy.

Of course we don’t like complexity, but intuitively we know that real efficiency necessitates complexity. If things were so simple, we wouldn’t need to procrastinate in the first place!

So in order to keep complex goals manageable, we use some mental tricks to divide complex goals into sub goals. Now we have a bunch of smaller parts that we need to create. As smart developers, we begin by selecting the right tool for the job, and so we start a tools selection process. If those tools are not readily available in our toolbox, we can do one of two things:

  1. Use Google to find the best tool for the job.
    In order to be sure the tool is really the best, we will need to do an exhaustive search and fully evaluate everything that other people have said about the tools. We can use their experience so that we do not have to make the same mistakes they made.
  2. Build something ourselves.
    This involves a process called bootstrapping. If we’re building a tool, we need tools! We can often select powerful tools we may already be familiar with, like C and Photoshop (for mockups). But in order to really maximize the benefits of our free time, we can also use something unfamiliar and get the additional benefit of increasing our knowledge during the process.

So after we do 1) we finally choose number 2) because obviously none of the tools other people use satisfy our unique requirements.

We then select Clojure, a powerful Lisp based functional language that surely has the power we need to create a system for productivity. It will help us to reach the ultimate goal of making everything as simple as possible. Otherwise, we will be in real trouble once our procrastination time ends!

Fortunately, we know nothing about Clojure, except that it uses parentheses a lot and many things are backwards. We really need a book, so we head to Amazon.

We’ve come quite far already and our time has been well spent. The groundwork has been laid and we are nearly ready to start procrastinating for real. When the book arrives, we will quickly throw together a prototype and start eating our own dog food. It feels good to be in control and to have a solid plan on the shelf, ready for when the time comes.