How I Stopped Procrastinating and Started Working on Coding Side-Projects
--
Side projects are a great way to implement and expand our course knowledge. Launch School even gives us a list of basic projects we could work on after LS175/185. Since I finished LS175 I have wanted to work on small projects. However, procrastination is my nemesis.
Every time I sat down to work on new side projects, procrastination reared its ugly head. Every time I think I’ve cut off its head, two more seem to grow back in its place. Since you’re reading this, perhaps you feel the same way.
Rather than continue putting it off, I sat down with myself and planned out a way to break this procrastination cycle when it comes to working on coding projects.
I’m now 2 weeks into working almost daily on my simple project. Below are the tools and strategies I used to get myself from procrastination to working a bit each day. I’m not suggesting this is the best or only way to get started, nor that it will work for everyone. It’s just what I tried and it seems to be working.
Here’s what I’ve done so far:
Decide I wanted to work on projects
This has been the most effective jumping-off point for every new habit I’ve adopted. I actually say to myself, “I’m going to do this. I’m going to make this a priority going forward”. Sometimes I write it down. Sometimes I tell other people.
In this case, I simply sat down with myself and said “I’m doing this — I’m prioritizing practice projects going forward”. I also made it specific: “I’m going to work at least 30 minutes per day on my project on weekdays and 2 hours per day on weekends.”
The simple act of deciding is a powerful way to commit to getting started.
Reflect on why I hadn’t started yet
First, I looked at why I was procrastinating. I was avoiding starting in part because it felt big and scary. Not in my rational brain, but in my subconscious.
I also made up excuses for each idea I came up with: “That’s too simple”, “That’s too complicated”, “Other people will think that one is dumb”, “You won’t enjoy that, it’s too boring” and the most meta excuse of all “That’s too uninteresting, you’ll just procrastinate more if you choose that project”.
I was looking for the perfect starter project and it never popped up, so I never made time for it and therefore never started working on it.
I also worried about what other people might think. I’ve spent so much time learning, but what I can build even in a few weeks will still look quite basic.
Every time I tried to start and didn’t, I’d feel shame and guilt — “Here I am, procrastinating, yet again, on something important.”
Going forward, I looked for ways to combat each one of these obstacles. Thinking through them helped me realize what was holding me back and what I needed to do to move forward.
Schedule it
This was key. What I add to my to-do list and calendar is what gets done each day. I’d intended to work on projects in the past but it never quite made it to my priority list for the day, and certainly not onto my calendar.
Putting it on the to-do list signals intention and reminds me that I’ve already decided to do this work. Putting it on the calendar ensures that I’ve thought through my day and have a planned time to sit and work on this particular project (nothing else at that moment).
Pick a project
This was hard. At one point I couldn’t think of a single project I’d actually want to build (that I thought I could accomplish). Now, I have a list with dozens of ideas for projects I’d like to build. Plus the suggestions from the Launch School curriculum.
I got stuck at this choosing phase a few times. So I needed a new strategy to move past it.
The criteria I set for myself:
- A project I could reasonably accomplish using the tools I learned so far — I wanted to build database-backed applications earlier in the curriculum but didn’t have the skills yet.
- Something I might actually use myself if it existed. This has been key to my understanding of the problem I’m solving and staying motivated.
- I had to be OK with it looking simple since I’m still learning basic HTML/CSS. The idea I went with was already simple, but the functionality would be useful even when it looked basic.
- Room to grow — I wanted to have ideas early on for how to expand beyond my current skills. I wanted to stay excited as I built out the basics with stretch goals.
The project I decided to start was a dead-simple application that I might actually use with my wife and others if it existed (it probably does already elsewhere, I haven’t looked yet). The idea is based on a ritual my wife and I adopted offline using note cards and a jar, loosely based on the Jar of Awesome that I first learned about from Tim Ferriss. I’ll share a bit more about the project down below.
Suitable project idea in hand, it was time to lay out a plan.
Make a plan
With projects that never got off the ground, I did not make any kind of plan. I just thought I’ll start someday and it never materialized. Other times, I spent too much time planning and not enough “doing”.
This time, I’ve not spent days or hours strategizing. I have been intentional about what I’m doing next and have taken some time upfront to chart a path.
I set a limit — a single planning session of ~30 minutes. I captured notes about what I wanted to do, ideas I had for features, challenges that might come up, etc. I started just randomly listing these and then a few common themes began to emerge:
- Tasks — Things I knew I’d have to do now and in the future (sometimes even the distant future — this was OK, I’m just brainstorming at this point). This task list was especially critical because I was able to order the tasks and start on the first one the next time I sat down, without floundering for an immediate next step.
- Resources — As I was thinking through the project structure I did some quick googling about a new tool I wanted to use later on in the project (Twilio). I captured helpful links so I could refer back to them later and avoid repeating my initial research.
- Features — Once I started thinking through features it was difficult to stop. There was so much I could add! Once I had a big long list I came back and thought through some of the most basic: I want to be able to create a new list. I want to be able to add a new card. I want to be able to edit a card. I didn’t worry too much about organizing or editing these at this stage (again, still in brainstorm mode)
- Data structures — Next, I thought through the basic structure of my data. I thought about the nouns I knew about already and how they might interact. I added an item to my task list to outline a basic schema later.
My new task list was great for the entire planning process. If I came across anything that seemed like it would take a while or wouldn’t be critical for the next few days of work, I put it on the task list and moved on.
The task list also became critical for getting started quickly each day. I didn’t need to think about what was most important, I just took the next task from the list. I organized the initial list a bit before leaving my initial planning session and continued to refine it each time I sat down to work.
Now I’ve got a plan, some tasks to work on, and I’m ready to start building!
Start with the first task — Do only as much as I can in X minutes
A big part of procrastination is just getting started. One way to address this is a short, easy time limit.
So, I set an alarm for 30 minutes and sat down to work. I knew exactly what I wanted to do first: sketch out the schema based on my initial list of nouns. I did this for a few minutes, got distracted trying to use an online schema tool, then flipped back to my Notion notes to do it simpler. Suddenly, 30 minutes was gone and I didn’t have a schema done.
Instead of getting down on myself for getting so little done, I remembered that I was in this for the long haul and I’d met my goal: simply working on this for 30 minutes. This was 30 more minutes than I’d worked on it before! A win!
Stop when the time is up — or don’t
For the first few days, I wanted to stick to my 30 minutes only and not work longer.
I didn’t want my work on this project to interfere with the rest of my day. If I got in a flow state and worked 2 hours on this project, maybe I’d be procrastinating on something else and ultimately give up the project because it was interfering with my other critical work.
So I stopped when the timer was up. I had other things on my to-do list.
Now, I’m comfortable extending the timer if I’m in the zone. It just depends on what else I have on my task list that day.
Repeat
I’ve continued with my time blocks, though I’ve struggled to get time in on the weekends. I keep putting the project on my to-do list each day and on my calendar. I notice it’s easier to skip when there is no calendar block.
I’ve refined my to-do list and checked off items as I go through. The process I thought I’d follow hasn’t been exactly what I needed once I started. That’s fine. I adjust it quickly and move on.
That’s It
As with most habits, it’s been simple to understand and challenging to consistently put into practice.
Your turn
Is there something you’d add to this list that might help me stay motivated with my new goal? I’d love to hear your ideas! Let me know in the comments (or @benjamin on Launch School Slack).
Cheers!
Ben
Here’s a bit more about the project I’m currently working on.
The simple thought behind this Jar of Awesome ritual is that we remember the big highs and lows of our life, but there is so much more joy within our day-to-day experience that gets forgotten. If remembered, these joys can help us live more grateful, better lives.
How it works in practice:
- When something great or memorable happens, write it down on a notecard
- Put the note cards in a jar
- Once a year (or month, or quarter) take a look at all the cards in your jar
- Enjoy remembering some great experiences/milestones you otherwise may have forgotten!
I’m excited to implement this as a web application because it is so simple and yet there are so many new directions to take it once the basics are built.
I’m planning to experiment with text message platforms like Twilio to get data into the database using SMS. I’m working to connect multiple users with a single Jar so cards can be shared. I have ideas for how to customize the notifications and viewing of cards so each person can interact with the jar how they’d prefer.
There’s a lot to do with this project and I can’t wait to get it working and share it with you.