Created · Updated

Problems in My Life

TL;DR

To avoid procrastination, have better task management, and overcome perfectionism, I rely on:

  • Clear priorities — know what matters, do that first
  • Time-blocking — plan ahead, track progress, and time-box tasks
  • Start now — doing it later won’t make it easier; the best time to start is right this moment
  • Reframe tasks — break tasks into small pieces and aim for one at a time
  • Friction — lower it to start, raise it for distractions
  • Progress over perfection — 80% right is more than enough

I wanted to write about this as a reflection of what I’ve been dealing with in my life. I kept not getting enough done, and it made me feel stressed. Worse, it was costing me opportunities to grow both as a software engineer and as a person.

So I dug into why. I found a few problems behind it, and once I understood them and built systems to deal with them, I became a much better version of myself. This post is about what those problems were and how I deal with them now.

The Problems

Looking back, I was never in an empty state where I didn’t have anything to do. There had always been things I had to do, or things I wanted to do. But having lots to do never meant I’d get the right things done.

One obvious problem was my poor task management. There’s only 24 hours in a day, so there were always gonna be things I couldn’t do if I got too ambitious and had a really long to-do list. But I realized I wasn’t actually following my priorities. For example, I would be learning a new programming language that wasn’t immediately relevant to the tasks at hand, while a course project was due in a week. If you know about operating systems, I was like a bad scheduler that regularly executes unimportant tasks and starves the important ones.

Another problem was perfectionism. Yes, perfectionism is a bad thing, if one doesn’t really have time, which I assume is true for many of us. Perfectionism had greatly impacted my productivity. I spent too much time making things exactly the way I wanted, with diminishing returns. One example would be me trying very hard to write comments in a course or personal project’s codebase that are consistent with one another in format, punctuation, quality, and so on. I’d also obsess over a commit message that perfectly describes the code change and follows standard commit conventions. But the truly important part of a project is the code, not the perfect Git commits or comments I wrote. All that polishing left me too little time for anything else, and sometimes I couldn’t even finish the project because progress was too slow.

Slowly, I came to realize that my perfectionism and poor task management weren’t separate problems — they both fed the big boss problem: procrastination.

Let me explain. In the example where I started learning a new programming language while a project was due soon, it was actually procrastination in disguise. I was doing work, but not the work I was supposed to be doing, so I was procrastinating on the important thing.

Why did I procrastinate then? At its core, I was overwhelmed by the time and energy a task seemed to demand. I didn’t have that much of a problem finishing tasks that didn’t need a lot of time or mental power. However, for time-consuming or mentally demanding tasks, I found myself uncomfortable starting them because they felt so daunting, so I subconsciously drifted toward easier tasks or anything else just to take my mind off how intimidating they were. To make it worse, my perfectionism would easily make the tasks even more overwhelming by raising expectations. The thought that I wanted to make them perfect was just adding friction to starting.

The Solutions

I just needed to figure out how to stop procrastinating, improve my task management, and keep perfectionism out of the way.

How? For my task management, I need clear priorities. Find the objectives at this stage of my life, and prioritize the ones that move me toward them.

How do I keep myself accountable? Make plans and time block my calendar so I know what to do and don’t get distracted by other stuff that’s not on my priority list. How do I know if I’m on track? Again, time blocks! They are supposed to be flexible so I can move them around to reflect my everyday activities. At the end of the day or week, I check whether I got the right things done and made consistent progress.

How do I make sure I actually start doing things when it’s time to do them? Or, how do I stop procrastinating? A question a friend once asked me stuck with me: Will I feel more prepared if I do it later? Probably not. So, really, the best time to start is right now. Reframing the task makes it easier to start. Try to break the task down into smaller pieces, and aim to finish just one at a time. This reduces the friction to get myself started by downplaying the effort I need to make. Once I’m able to start, the rest will get much easier. Here’s an example. I have no problem jumping right into finding the root cause of a bug in an open source project on GitHub, or cooking up a quick POC of something. They make good first pieces of big tasks, because there’s nothing at stake: I just need to find the bug, not fix it — and even if I fail to identify it, no big deal. The POC is just a POC, and the implementation can be as ugly as it needs to be. Once I’ve started, the rest just feels natural: I fix the bug and open a PR, or polish the POC/demo and add features to it.

After I start, how do I make sure I stay focused during that one session? Use friction! Try to add friction to the things that would distract me. For example, I put my phone in my backpack and stash the backpack out of sight, sometimes even 30 feet away if I’m somewhere I know no one’s gonna steal it, like the office. This way, there’s nothing at hand but my laptop with work on it. The friction of grabbing my phone back and starting to doom scroll is just too much to even bother with.

Perfectionism is easier to deal with. I think I’ve already been treating myself with exposure therapy in a way, like I sometimes force myself to accept that things aren’t perfect, and it seems to be working. I guess the important mindset is progress over perfection. Making consistent progress efficiently is always better than being stuck trying to make things perfect. A lot of the time 80% right is more than enough. Time-blocking helps here too: planning ahead how long a task should reasonably take gives me a sense of when I’m overdoing things.