I recently answered a question that interested me on Quora, “What is the number one reason most developers never finish a personal project?”
I think it’s down to motivation at the end of the day. You start off super keen on a new idea, but then your enthusiasm wanes. Why? Well my own experience my mistakes are pretty one or more of the following categories.
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) and 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 (batsmen swap ends, the bowler takes wickets, the end of the over causes things to happen) — this should be a great project!
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, so there was much context switching. Oh and then there was Java 8 — that had some new funky stuff in it at the time too.
I lasted about 3 weeks.
A better way
When I wanted to learn Python a while back, I had an idea to 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, so 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:
“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. Currently I’m studying 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. But 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 mean that your reasons for 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 mean ‘think 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 sound a bit ‘new age’ or even a bit too ‘mechanical’ (I just want to do a fun project!) it’s not meant to be.
It’s just that you’ll be more efficient if your project ties in with something you can use in your career — since your employer might get some expertise for free (your practice at home) but you get some budget for free too (since your employer will have to allocate you sometime too if they want you to learn something for work purpose. You might as well carry those things over.
As for ‘being the person you want to be’ — just remember that ‘what you want to do’ tends to top ‘what you think you should do’ in the long run — so when you’re thinking about the project you want to do, that might be decided by your current career, but your future career really needs to be decided by you.
By James Bowen on .