Strategic procrastination and software design  

I want to share a straightforward but yet compelling software design and architecture technique that has been very effective for me over the last couple of years.

Some time ago spent a bit of time thinking about some of the successes and failures that I have experienced in different projects in my career as a software engineer. I tried to extract the essence of the successes and failures to try to find some principles that I could follow in the future. I found this exercise very useful, and it provided me with ideas for a few blog posts that I plan to share with the community at some point in the future. In this post, I want to focus on an idea that I like to call Strategic procrastination.

An expert strategic procrastinator is a mix between Napoleon Bonaparte and a Sloth.

 Strategic procrastination

Procrastinators have a clear goal and know how to reach it, but still, they don’t put the time necessary to achieve it. A procrastinator is a creative person that can come up with a vision and a plan but cannot put in the required effort that enables the manifestation of an idea.

I’m personally a procrastinator, and I have experienced a fair amount of anxiety and frustration while fighting against myself. Fortunately, I somehow managed to learn to control my procrastination habits over the years. However, in the last couple of years, I’ve taken my procrastination management skills to the next level, and I started to take advantage of what is known as strategic procrastination.

Strategic procrastination is deliberately not doing what you’re supposed to do for a short period so that your subconscious mind could generate new ground for massive action.

I’ve been thinking about this blog post for a good while. I knew what I was experiencing, but I was unable to come up with a term to describe it. Fortunately, one of my workmates pointed me out to the term strategic procrastination after having a chat about my experiences with him.

 Strategic procrastination & software design

As the maintainer of an open source project, I use to get many feature requests from the users of some of my projects. I usually start by having a chat about the feature with the user that request it, and I have found very beneficial to procrastinate and avoid implementing features straight away. I do understand that one of the secrets of a successful open source project is responsiveness and I recommend to write back with some comments to acknowledge that you are aware of the feature request. However, postponing the implementation of a feature can have some benefits.

Sometimes, other users get involved in the conversation and the rise concerns new previously unknown concerns.

It is also common to receive feature requests that are too specific. This kind of feature has minimal use cases, and it adds almost no value to all the other users. It instead adds more complexity to all the other users. I have also found that when a feature is too specific it is better to avoid implementing and procrastinate for a while. More users join the conversation and share different points of view that can help you to find an abstraction that transforms a single purpose feature into a general purpose feature.

In general, you want to avoid many single-purpose features in favor of fewer general-purpose features. Being able to envision the general-purpose features is not something easy, but I have found that procrastinating helps. Sometimes users share multiple single-purpose feature requests, and you can feel tempted to close them as soon as possible, but if you procrastinate, you are giving the project enough time for other feature requests to be created and then you might be able to envision a general-purpose feature that can cover multiple uses cases in one go.

I believe I’m not the only developer out there that uses procrastination as a powerful tool to refine system requirements. I once attended a talk by Daniel Rosenwasser (TypeScript Program Manager at Microsoft), and he explained that the engineering team went through hundreds of uses cases before being able to come up with a feature known as “Conditional Types” in the TypeScript compiler. This feature closed hundreds of issues in one go while the overall complexity of the solution was much lower than the aggregated complexity of many single-purpose features.

Procrastinators usually feel anxious and frustrated because they have visions but don’t do what is required to achieve them. However, their vision remains the same, and they continue thinking about them. The good news is that thinking about specific topics for a long time allows your subconscious mind to work on them and come up with novel solutions. Pushing things off can help you refine your mediocre ideas into those of a genius.

Procrastinating is one of the best ways to enhance your creativity.

After the requirements are precise and when a feature makes sense to me I go ahead and I implement it without overthinking about it. Sometimes the implementation goes quite smoothly. However, other times the implementation turns out to be much more complicated than expected, and it required some changes that feel somehow wrong or unnatural. In such a case, I found that the best option is to procrastinate: stop the task and move on to other tasks.

If you haven’t made significant progress or feel like you’re stuck somewhere without having a clue what to do next, then chances are your subconscious mind is fatigued and your creativity is paralyzed. Time to strategically procrastinate.

You work on other tasks, but the previous task stays on the back of your mind. Then one day, entirely unexpectedly and while you work on something else you see something in the codebase that enlightens you. Complicated and unnatural implementations become elegant and straightforward solutions.

Other times the features originate in your mind. You have an idea that seems beneficial for the project, you get excited, and you start working on it straight away. We have to be careful about this behavior. Don’t fool yourself; new features always mean increasing complexity and a real user need should justify all features. In some particular scenarios, it’s better not to take action, although putting in the effort just for its own sake is a great way to build discipline and willpower. There are situations where doing nothing can be useful. In the context of software design, this is manifested as the You aren’t going to need it (YAGNI) principle or the Keep it simple, stupid (KISS) principle:

Always implement things when you need them, never when you only foresee that you need them.

Most systems work best if they are kept simple rather than made complicated.

 How to procrastinate strategically

To benefit from procrastination, you have first to create the right conditions for it. You have to give your mind something to think about and set a solid foundation for future productive work.

Don’t presume that this is going to eliminate your responsibility of putting in the actual work. This strategy only works if you couple periods of little to no activity with short bouts of extreme productivity.

Strategic procrastination involves taking massive action in both physical and mental aspects. You put in extreme labor, back off from it to recover, allowing your subconscious mind to process all of it and then enter the fray with newfound vigor.

Before you start slacking off, remember that you need to have already begun with something. There needs to be a vision or a goal which you’re already working on; otherwise, you’re only procrastinating.

You should spend most of your time putting in the effort and do something that moves you closer to your desired outcome every single day.

The process of strategic procrastination looks as follows:

  1. Have a vision or goal. Start working on them immediately, today, as soon as possible.

  2. Take massive action every single day and move closer constantly. Put in significant amounts of effort and work. You have to become obsessed with your thing if you want extraordinary results.

  3. Reach a point of saturation Exert your mental powers and feel as if your mind has been drained like a sponge.

  4. Initiate strategic procrastination and back off and focus on recovery. Walk, exercise, play around and relax. Don’t forget about your work entirely but don’t manically focus on it either. Ponder over it quickly but not too hard.

  5. Get back to work After proper recollection of resources, you have to start putting in the work again; otherwise, you’re only procrastinating not strategically procrastinating. This part is essential and the one in which you produce your most excellent work. You re-enter the zone with newfound vigor and creative insight so that you could achieve glory.

Strategic procrastination increases recovery from intense bouts of productivity and helps you to maintain progress for the long-term.

Now, all of that needs to be taken with a grain of salt. Before you start thinking: “Oh, I’m just procrastinating because I’m waiting for my ideas to sprout into a god-like level.” No, procrastination is only beneficial if you keep putting in enormous amounts of effort alongside occasional periods of slacking off.

There’s the danger of thinking that you’re productive when you’re only distracting yourself from doing what you need to do. On the flip side, you may think you’re creative when in reality you’re just lazy and slothful. You can only make the best of both worlds if you have a strategy.

Strategic procrastination creates an easy-going balance between work and leisure, although that’s not its primary purpose. The central aim is to maximize productivity still while still promoting creativity and recovery. It’s about deliberately sustaining yourself from doing stuff so that you could get things done better afterward.

You should indeed strive for a balance in life, but it doesn’t mean you should remain still and stagnate in your development. Balance itself is an act of being in constant motion. You’re moving to some degree all the time and maintaining integrity. To make progress and expand, you have to periodically go off-balance, struggle for a while, eventually adapt to the new conditions, re-establish your ground, recover, get comfortable again and then venture forth again. Strategic procrastination is an individual component between these steps that glues them together.

 When to procrastinate

You should also be careful about the kind of task that you postpone. Procrastination can only help with certain kind of tasks:

 When NOT to procrastinate

On the other hand, procrastination doesn’t work well with the following kind of tasks. It’s best to get over with them right away to prevent your precious mental resources from being wasted on useless tasks. The longer you put them off, the more energy they’ll drain from you.

 What to do while strategically procrastinating?

What you do is as important as what you don’t. Although you’re supposed to back off from your work, it doesn’t mean that you shouldn’t think about it. You have to be thinking and pondering to create the ground for new action. Whatever you spend most time focusing on grows.

Keeping your problem in the back of your mind is essential. You are not working on it, but you think about it.

I hope you enjoyed this article and that it helps you. Please let me know your thoughts in the comments or on Twitter via @remohjansen.

Also, if you are interested in Functional Programming or TypeScript, please check out my upcoming book Hands-On Functional Programming with TypeScript.

 
4
Kudos
 
4
Kudos

Now read this

Decorators & metadata reflection in TypeScript: From Novice to Expert (Part II)

An in-depth look to the TypeScript implementation of decorators and how they make possible new exciting JavaScript features like reflection or dependency injection. This article is the second part of a series: PART I: Method decorators... Continue →