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.
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.
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.
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:
Have a vision or goal. Start working on them immediately, today, as soon as possible.
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.
Reach a point of saturation Exert your mental powers and feel as if your mind has been drained like a sponge.
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.
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.
You should also be careful about the kind of task that you postpone. Procrastination can only help with certain kind of tasks:
Creative tasks demand you to generate ideas out of the void. It causes much resistance, but once you hit the flow, you’ll produce your most exceptional work. To successfully procrastinate in this domain, you have first to have entered the zone, created something great and then backed off from it for a while. Leave it in the back of your mind to work upon, go for a walk, meditate or relax, and then get back in the zone either later in the day or the next.
Cognitive tasks demand processing information or anything that makes your brain hurt. These activities put incredibly high energy demands on your neural network. You’re burning it all off with your mental powers. Too much heat though can make things catch on fire. I don’t think it’s a great idea to fry your neocortex for too long. What’s more, our willpower and psychic energy are finite, which means we need time to recharge our batteries. Back off for a while and return to the fray with newfound vigor.
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.
E-mail, text messages, voicemail Whenever you get an e-mail that expects an answer, respond to it right away. Think about it. If you’ve opened it, then the best thing to do would be to respond immediately. Doing it later means you have to put it off, keep thinking about it, re-open it, maybe procrastinate some more and then be finished with it. You’ve wasted precious time and resources which could’ve been spent on something more meaningful.
Secondary cognitive tasks The insignificant small bits and pieces contribute to the whole don’t demand an immense amount of cognitive or creative output but still, require massive action. If you procrastinate here, then you won’t have a solid foundation. To create something magnificent you first have to put in the effort of having a great spark of an idea.
Commitments, responsibilities, ties Don’t push off stuff you have to do for other people either. Chances are they’re super simple – you’re just avoiding the idea of having to put in the extra effort. If you said, you were going to do someone a favor then get to it as soon as possible. You don’t want these tasks to clutter your cognitive headspace nor to damage your relationships.
Habits, plans for action, preparation These activities involve changing some of your damaging patterns of behaving and thinking. They also include all of the intentions you have for the future. Most people procrastinate on their revelations and thus won’t ever accomplish what they want. Don’t be just a dreamer because it’s of no use – become a strategic action-thinker who aspires for greatness, puts in massive amounts of effort and is doing it. Focus on your purpose.
Your health Don’t procrastinate on your health. Your body is the only thing you have and your most valuable asset. The mind is your best tool as it influences your intelligence, cognition, and creativity. Exercise and nutrition are detrimental to both of them. You won’t be able to focus if you have brain fog nor can you be happy if your gut is inflamed. I have a ton of articles on these topics.
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.
Go for a walk and let your subconscious mind process the information. Doing this in nature is especially useful because the natural environment is both soothing and therapeutic.
Read, watch videos and research about the topic you’re currently working on. Don’t think of it as a chore but merely do it as part of your leisure.
Look at it from a different perspective; maybe you can find something interesting.
Come up with as many potential solutions to your problems as you can.
Generate new ideas just for its own sake. Write down anything that interests you but at the same time contributes to your more excellent work. Start with just a few and build up the muscle every day.
Physical exercise and movement are great cognition enhancers. They make the brain work faster and increase cognition. There are also other activities, like cold water immersion, heat saunas and anti-inflammatory compounds that hasten recovery and reinvigorate the body.
Just relax and remain silent. It is essential to allow your body and mind to recover from the intense work you’ve produced beforehand. Don’t try to do anything but just chill. Lay in your hammock, look at the sunset and don’t force anything to happen. You have to let go entirely from time to time.
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.
As we all know being a competent software developer or engineer means continuously learning throughout your career. It’s great! That makes this profession exciting and allows to escape everyday routine at work. In fact, it’s not a job anymore - it’s a lifestyle 👩💻👨💻