I recently answered a question that interested me on Quora, “What is the number one reason most developers never finish a personal project?” If you’re struggling to finish a development project, you might be interested.
I think it’s down to motivation at the end of the day. Which in turn is caused by a lack of planning. You start off super keen on a new idea, but then your enthusiasm wanes. Why? Here’s some common reasons for struggling to finish a development project.
Failure to set a scope for success
What are you actually trying to achieve? If it’s just a case of learning a new language or framework, then what constitutes reaching that goal to you? Without an end goal in sight, then you’ll lose motivation — both through (perceived) lack of progress and scope creep (I’ll just learn one more nice feature, just lint this a bit more, refactor that a bit more.
A bad way
I wanted to learn Domain Driven Design (DDD). I had a cricket scorebook application app that I wanted to write. Cricket scoring will be a perfect candidate, right? It’s got some rules for me to encapsulate logic, it’s got lots of data to capture and persist. There’s events that cause other behaviour. For example, batsmen swap ends, the bowler takes wickets, the end of the over causes things to happen. This should be a great project, right?
Except I hadn’t decided on what the components should be upfront. I hadn’t decided which aspects of DDD I wanted to focus on. I’d also tried to build an app at the same time as learning DDD from a book. There was too much context switching. Oh and then there was Java 8 — that had some new funky stuff in it at the time too. It’s not wonder I was struggling to finish a development project – I had no end state in mind.
I lasted about 3 weeks.
A better way
When I wanted to learn Python a while back, I had a better idea. I’d try it out as the ‘glue’ between an old app and a new one. I had a GTD app where the vendor wasn’t replying to any customer queries. From this I worried that this app could disappear at any minute. Luckily I found a way to screen scrape and get all my data as JSON from the old provider.
Once this happened, I was able to migrate to another provider at my leisure. Then, I investigated TODOIST and found it had a REST API. Bingo! A project for Python to convert some JSON into some rest calls and automate my migration of data into Todoist.
So my measure of success was clear:
Example measures of success
“Once I can take all of this JSON , which has concepts such as recurring tasks, future tasks, project tasks and contexts and task comments and upload them into Todoist, then I’ve succeeded.
If I can compare both sites, and see that the concepts are mapped from one site to the other that’s success.”
Failure to set a schedule
After you’ve set the scope of course, you need to plan, even for a personal project. Previously I studied for an AWS Certification, so after setting the scope (by reading the exam guide) I built own my own schedule to see exactly how long I expect things to take. If might take an afternoon to do this, but more likely less. And in any case, that’s a fraction of the wasted time than if I dive straight in and see I can’t sustain my commitment.
I’ve attached a portion of a training plan I made for myself. I add estimated and actual times to the weekly plan and make notes of any ‘surprises’ — next time I want to pick up a project if have a reminder of what pitfalls/bad assumptions there may be to trip me up.
I also set daily reminders (I sync Todoist with Google calendar) to allocate a block of time to the task. In my case, I allocate time rather than outcome as that’s something I can control. In other words, I can control dedicating an hour a day, but I can’t control my energy levels/speed of comprehension on a given day. Control the controllable, as it were.
Likewise with allocating time, the planning lets me fit in the rest of my life. My wife and I will batch cook on Monday nights, and we like a beer at the end of a working week on Friday night. So those evenings don’t make it into my GTD app. But then I do wake up early on Saturdays whilst my wife sleeps in, so I plan ahead to do the project when it won’t eat into ‘personal time’.
Misalignment when compared to your ‘five year plan’
I put this one last, even though it should really be first. The reason for this, is that I’m assuming people reading this are probably already underway with a project that’s slipping. Struggling to finish a development project actually start subconsciously, way earlier. Because really, anything you pick should be in some way aligned with your career and/or five year plan.
- My reason to learn Python was down to it becoming more widespread at work — the GTD app migration just presented me with a perfect opportunity to practice at home.
- At work, I’m transition to DevOps as a role — now knowing the AWS fundamentals becomes crucial because the in-house tools that abstracted it all are actually a hindrance to me.
GTD itself is, for the most part, a tactical solution, it’s something operational. But that’s not to say it doesn’t play its part with your five year plan. As you get more proficient with GTD, you come to learn of Horizons of Focus and see that the steps lead you to more high level steps.
These same steps are true of your project plan.
- The calendar/daily reminders set you up to commit to project actions.
- The project actions form part of everything you have to do (including personal projects to learn frameworks/languages).
- Areas of focus and accountability – sounds grander than it is. It just means means ‘does undertaking these projects fit into where you want to be in your current role?’.
- The one to two year, and the five year plan horizons are an opportunity for you to think a bit. As in, ‘determine if this project is actually getting you that little bit closer to where your career to be.
- The highest horizon of purpose and principles — is this getting you closer to the person you want to be.
Ensure by fixing the current, you’re not breaking the future
Now, if those last 2 points might sound a bit ‘new age’ or even a bit too ‘mechanical’. It’s not meant to be – I get you just want to do a fun project and try something new.
It’s just that you’ll be more efficient if your project ties in with something you can use in your career. Sure, your employer might get some expertise for free (your practice at home). However, you get some budget for free too. Your employer will have to allocate you some upskill time if they want you to learn something.
You might as well carry those things over. Also, if you’ve already spent some time at home on the technology, then you’ve done the “Hello World” examples. You’ve built the simple template app. By the time you’re doing the work for your employer, you’re onto building things using best practices. You’re making nice self-contained modules and re-usable libraries. I’d be mentioning in my appraisals that I’d picked up a new framework quickly, was suggesting best practice, etc, etc.
As for ‘being the person you want to be’ - horizon number 5 – just remember this. ‘What you want to do’ tends to top ‘what you think you should do’ over the long run . When you’re thinking about side-projects to pick up, think about where you want to be career-wise in a few years.