Despite it being a long hard road, one of the skills I have inadvertently picked up over the last few years is knowing when to stop a project. It hasn’t been easy nor am I perfect at it, but every project should end at some stage, this is even in the Project Management Institute definition of a project.
A project is temporary in that it has a defined beginning and end in time, and therefore defined scope and resources.
Having an end in mind is key, I think moreso to personal projects. As a personal project is most likely self driven scope creep is easy to justify as you are “doing it for yourself”. I have found in my projects it is easy to add new features, bug fixes, architectural changes, etc. leading to projects meandering on for weeks, months or even years.
One of the projects where I particularly struggled on this was CMD Resume which had features continually added and scope expanded. Although the project went on for years, I would say it is fair to say it was built in 3 bursts of coding. With any non-novel project, the list of things you can do is almost infinite which is something I was guilty of. Towards the end it felt like I was changing things without much benefit to the project or educational benefits for myself. It really affected my motivation to finish the project.
Since this project I have been mindful of when is the end. A few of my projects since have been finished without dragging on too long. I think I am getting progressively better at it, some of the lessons I drew from it were (in no particular order).
Keep track of tasks
Although this one might feel like you are taking the creativity out of the project but I found it effective. Initially write down the features and technologies you want to use, eventually adding bugs and changes. Review regularly, allowing you to have an updated view of your project and what the end result looks like. I like to use ZenHub as it gives me a kanban board using my Github issues. Particularly I use milestones to help me group tasks so I have stages, all leading to the final milestone.
When you go to add a feature or change something, ask yourself these questions:
- What is the benefit to the project? Does it justify the effort?
- What do I learn from this?
- Does it improve the project? If so, by how much?
- Is the technology interesting to me?
- Is the technology useful in the job market? This helps me consider if I really need or want it.
When I feel tempted to add or change something not originally planned, I remind myself that any time spend doing unnecessary tasks on this project means I start my next project later.
Note: Sometimes if I am not sure if there is a benefit, regardless I will add the task and put at the lowest prioritization. Sometimes feedback will help you know if these features are actually beneficial.
This one depends on whether you are showing it publicly or more importantly if you want other people to use it. Sometimes it is very easy to be perfectionist about your project, as it doesn’t necessarily have an end date. I find picking a set of features (something akin to an MVP) and releasing to an audience helps with forcing myself to focus on finishing.
Sometimes your audience might not vibe with what you are doing, you may lose motivation but that is alright. If it solves your problem but doesn’t solve other peoples problems, you can focus on what is important to your problem and not worry about others.
If you completely lose motivation in the project? That is also alright, you can move onto something else! Personally, if I were working on something that I was hoping other people would use, 3 months solving my own problem is preferable to 6 months solving problems I think other people have. I believe the best possibly result of sharing is feedback, this can also help drive the other steps: Keep track of tasks and Necessity.
Note: The internet is an unpredictable place most of the time, due to the way the stars align your project may be overlooked, keep that in mind.
This is based off my experiences with my personal projects, I found some dragging on with no real goal which really affected my motivation levels. So I worked through how to know when to end to avoid this. It has helped me with future projects and I hope it helps you with yours.
Got any comments or feedback? Feel free to go over to the Hacker News Discussion and let me know your thoughts!