This was originally posted on my blog
I've always been a huge procrastinator. I've read tons of books about productivity, habits, how to live your life better and so on. While each book has a story to tell and things to teach, these are the things I've learned that stuck with me the most.
One of the major problems I had with productivity systems in general was that they were goal oriented. You were supposed to take a project and break it down into smaller and smaller chunks. You were then usually supposed to break those chunks down until they became small tasks and then you were supposed to schedule those tasks to form Monthly, Weekly and Daily goals. The big issue I had with this is that if I failed to meet these goals I felt like I had failed. This is kind of how I feel about Sprints in SCRUM as well. Once I had failed a weekly goal I scheduled less work for the next week and then I overshot the goal instead. I ran out of things that I was supposed to do that week and then I had to schedule more.
What is the point of this? The point is to keep you focused. You have these things that you are supposed to do and then you are supposed to do them first. Anything else is a distraction. Focus on the task at hand and move that project forward. But this is personal productivity in my personal life, this is not some deadline at work we are talking about. Is it really helpful to impose deadlines on things there? For me it wasn't.
What I did to combat this was to scrap the goals completely. I broke the project down into chunks and then tasks. Each task is supposed to be about a Pomodoro in size. I then took one of these tasks from each project and put them in my Backlog. Once these tasks were done I put more tasks in. No goals, just a cycle of tasks, one from each project, until the project was done. No more stress about how much work I had to do or whether of not I was going to be able to complete the Weekly deadline.
No more schedules means that it is hard to tell when a project is supposed to be finished, but that doesn't really matter to me. If the project has a natural deadline then I'd make sure to schedule more tasks for said project to make sure that I met the deadline.
This is apparently coined by Jerry Seinfeld and is aimed at writers. You are supposed to do the thing you are supposed to do, in this case writing jokes, every single day with no exceptions. The idea is that this forms a long unbroken chain of work and you will be more motivated to keep going as you want your streak to continue. This sort of worked for me when I tried it for my meditation. Until I eventually broke the chain. Everything went completely down the drain because I knew that I had to meditate for like another 20 days or so to get back to where I was. This caused me to drop the activity that I was supposed to build a chain for.
What worked for me was to try to do something from my backlog every day. I then knew that that at least one of my projects was moving forward. I did not keep a record of my "unbroken chain" though since I don't need that kind of pressure in my personal life.
One way to really not get anything done fast is to have too many projects going at once. This is especially true for me when it comes to programming side projects. If I had let's say 5 or more side projects in active pre-release development going at once then I would almost certainly have a single one of these that was a lot more interesting than the others. If I then tried to split my time between these projects then my brain got really distracted when working on the less interesting projects and I would drift into working on that one instead leaving the others an unfinished mess.
So what this means is that I try to stick to a single programming project at the time. This will combat the itch of wanting to try something new. This is especially true later in the project when you just have to grit your teeth and finish it. It is quite easy to pick the project to focus on because it will be the one that you wish that you were working on when working on other projects.
This is however also a good idea for other projects. If you have too many things going at once then you will almost certainly spread yourself too thin and nothing gets finished. Personally I try to limit my total number of projects to 5-10 or so. Mind that these are projects that I can finish, not projects such as learning how to play guitar which will end when I'm in my grave and can ask Jimi Hendrix for some much needed advice.
In the classic book The 7 Habits of Highly Effective People you learn that you have multiple roles in life. For example you can be a Father, a Programmer, a Spouse, a Philanthropist and so on. You should focus your effort on things that matter for these roles and make sure that each get your attention. So, do not have only programming projects going. You need to make progress in all your important roles in life, not just one of them.
However, you should also make sure that the roles you have are the roles you want to have. Don't waste your time on things which are not important and don't add more roles than you want to have.
I don't know about you, but when a project reaches somewhere between 50% and 80% completion I tend to get bored and distracted, especially for programming projects. I've found something neat I want to try instead or the project simply got boring to finish. This is when you really need to buckle down and do the work.
Finishing a project is such a rush of energy and creativity for me that I try my very best to do so these days. Once you get the urge to move on to something more interesting you simply have to do whatever it takes to keep going. You'll be happier in the end for it.
I recommend keeping a list in plain sight of all the projects that you have finished. Make sure to celebrate every single time you add a project to that list and be thankful for everything that you have accomplished.
I tend to start a bunch of projects that make no sense. For example I had this idea about building a nice web application to keep track of upcoming video games. This was a bad idea from the start as there are many such websites already and mine wouldn't be any better than those, at least not in it's MVP State. Getting it to rank well on Google compared to the major gaming sites was all but impossible as well. I spent a good month or so building this thing that was kind of doomed from the start. This was a Ruby on Rails project and once it finally launched it didn't go anywhere so I abandoned it. Then I had this brilliant idea of rewriting it in Elixir/Phoenix as a learning experience. I have no idea why. This time however I managed to stop myself about 20% through. As a side note, rewriting a project in another programming language is super boring. However, I did learn that I really like Elixir so it wasn't a total bust.
The takeaway here is that you should Marie Kondo your projects:
- Is this project going to move my life forward?
- Does this project relate to my roles in life in a meaningful way?
- Does this spark joy?
- Am I going to be in a better place when this is finished?
- Am I learning anything from this?
- How much time will this take? Will this ever be finished?
#5 also applies to projects that are already going. You need to be very careful here however since this might clash with "Finish the thing". You need to carefully evaluate projects if something major changes. Say that you are building something that you think is unique and then 50% through the project someone else launches a way better solution than yours. Is it still worth finishing the project? It might be. Probably not though. Beware of the sunk cost fallacy.
Relentlessly abandon projects which are wasting your time but make sure that they are actually bad before doing so.
This is especially true for programming projects. There is probably no need to add caching to your web application to handle more traffic if the traffic you're getting is zero. If you're building a minimum viable product then you should spend a lot of time thinking about which features are critical before you start building. Then you need to stick to this list and not get distracted. Mind that this does of course not apply if the project is a toy project for the sole purpose of learning or something similar.
Once I get going with a project and the work gets a bit boring somewhere in the middle then I tend to procrastinate by adding features that the project doesn't need. Do you really need user registration? Does the thing really have to send a weekly newsletter to your 0 users? Not every site needs a blog section and so on.
Make an MVP, release it, then think about adding more features. Don't just throw stuff at the wall to see what sticks though, you need to be very careful about which features you add. Make sure that each new feature adds to the project in a meaningful way.
It is amazing what habits can do for you. I once decided to take even better care of my teeth by adding an additional two minutes of dental care a day and that eliminated any issues at the yearly checkup. As a child I used to play the keyboard at age 6-12 or so. After that I quit when my teacher got a chronic illness. This year I decided to learn how to play the guitar because I always wanted to be able to play the blues. I got into the habit of practicing every single day(well..) for about 30-45 minutes. After just 6 months I can play the guitar better than I could ever play the keyboard. It is amazing what you can do if you stick to a routine. It might also have helped that I chose to play the guitar myself, while the keyboard was kinda decided for me as a kid
What is even better is to have a habit that makes something better over time. Like spending an hour or so a week improving your editor/IDE, terminal setup and general development environment. These things add up. It goes without saying that the most important habit to have is probably exercise.
Find a way to build good habits. You won't regret it.
When you work: Work. Focus 100% on the task at hand and eliminate as many distractions as you can. Turn Slack off for starters. Make sure that noone bothers you if you can. If you use the pomodoro technique then do not check Twitter during the break. Get up and walk around, get some water or do a quick mediation session instead. The next tip will deal this kind with information overload in more detail.
It is also important that you know what you are supposed to do. For me it is hard to concentrate when the task is something super generalised like "build a navbar". What kind of navbar? What's in it and so on. Add as much detail as possible to the task before you get to work to make sure that you can really concentrate.
If you find yourself procrastinating a lot on a certain project then make sure that the project is actually interesting. Maybe it is a complete waste of time?
A sure fire way to get nothing done is what I call information overload. Whenever I have new information coming in there is a high chance of losing my concentration completely. So no Reddit, Twitter or Facebook obviously. I would also recommend putting your phone on "do not disturb" mode while working and placing it far away from you to curb the temptation of checking something. Check your email as few times a day as possible. Do not check your phone first thing in the morning. Getting a flood of information, often times irrelevant information, first thing in the morning is a horrible way to start your day.
I recommend reading newsletters once a week or so to keep yourself up to date rather than checking dev.to or Hackernews every chance you get.
I would also recommend that you don't listen to podcasts while working, at least not when you are trying to concentrate. Any information that is not relevant to the task at hand is another risk of losing your concentration. Save the podcasts for when you do have to do simple tasks or at the gym.
This tip can probably be found in every single book about productivity on the planet. There is a good reason for it though as it is super important. You don't need to eliminate things you like like browsing Instagram or binge watching Stranger Things. What you absolutely must do however is eliminate mindless activities. If you are just endlessly scrolling Reddit for no reason in the middle of the day then you are probably procrastinating. Do whatever you have to do to make sure that you are doing what you are supposed to be doing at any given moment and give it your full attention. When you work: Work. When you relax: Relax. Don't mix.
So there you have it. That is all I know. If you follow the advice above then you will be as productive as me in no time at all. Which is to say not very productive, but a lot more productive than I used to be! Hit me up on Twitter if you have any great productivity advice to share!