Ask HN: How to finish personal projects?

59 points by aaossa ↗ HN
Hi HN, how do you do this? My current workflow is this:

1) Begin a new projects

2) Work in this project 1 or 2 days

3) ...

And that's it... Do you work everyday in your projects? You decide to work X days in a project and then "is finished"? Maybe you have a feature list and once everything is ready you stop working?

How you do this? :)

Thanks!

37 comments

[ 3.1 ms ] story [ 47.1 ms ] thread
Two approaches:

1. Solve an actual problem. E.g. I built a library based on some use cases I saw at a training session I did at Cisco. Building yet-another-thing-that-has-900-implementations doesn't count.

2. Set a really hard deadline or limit. E.g. "must be feature complete by end of the weekend."

The goal either way is not to end up in place where it's 20% done: either you have problem or a deadline to keep you focused on completion

Longer writeup: https://codewithoutrules.com/2016/09/09/side-projects/

I had never really finished a side project until recently. First one was something I was going to sell. It took over a year because of changing UI and redoing a lot of stuff (unnecessarily) but I managed some sort of soft launch. My most recent project was writing a mix task in elixir. It solved a pain point I was having and gave me a better insight into the Elixir language. I'm working on another library for Elixir that I plan to use in a website I'm working on that I want to set up in hopes of making money.

Bottom line, both of the projects I've started and finished have had monetary gain to it. The product and then the task. The task is helping with contracting I'm doing so making my job easier is sure a big incentive.

3) Make a list of what you think your project needs before launching, but put as much as possible off until after launch, recognize that you can still work on it then

4) Do something on that list

5) Go back to #3 until you are launched

By postponing additional work you give those ideas time to mature while making concrete progress and finishing your project at least to some sort of functional state. By the time you're up to those tasks you will probably have identified why most of them weren't ever worth doing let alone derailing projects for.

I'm struggling to finish writing my third book right now. Here's what works best for me:

* Know the definition of "done" from the start. Working against a moving goalpost is a motivation killer.

* Have a consistent way to measure and track progress (word count, features completed, etc), and graph it over time.

* Break the big project into smaller, bite-sized projects. Each time you mark a small part as complete, you'll feel a sense of relief.

* Make progress every day. Even if it's just a bit, it'll feel good to know that you're that much closer to finishing.

Here are my suggestions:

1. Work on your project most days. It doesn't need to be long - 15-30 minutes. This is mentally doable most days, and you'll find days that you just work. After a while, this becomes part of your daily routine and it gets easier. It might be even easier if you do right after something else you do every day - yup, make it a habit.

2. Have a variety of tasks to choose from when you can. This helps with the motivation as well.

3. Be able to congratulate yourself for getting chunks done - or something similar. Whatever works for you.

Inevitably, you will miss a bunch of days in a row. Then what? #1 changes quickly from a positive to a negative pressure producer.

My preference most of the time is to optimize for discontinuity since it is usually inevitable and I want to minimize negative pressure producers. "Being in the flow" is great for productivity and all but I'd rather not count on it or optimize for it. Instead:

#1 When exiting a work session, I write on a Post-it note the next immediate steps/chunks/steps in order of priority. I usually also write down the next theoretical milestone/goal these steps are part. Sometimes I'll even write down the tentative 2nd milestone.

Note that this is separate from my Github-based task tracking and kanban board. That system is for when I'm in the flow and can have reasonable expectations of continuity (and when working with others).

This technique minimizes "spinning up". Instead of having to mentally conceptualize the project and all its tasks to start working, I just start working and let the full scope of the project flow into my brain as I progress.

If I enter flow state as a result, great. If I don't, no biggie — something gets done and I'm off to the next thing in life. #2 and #3 fit right in here. Rinse and repeat.

Disclaimer: I like colored Post-it notes.

Three steps to make sure you get more than 1 or 2 days out of it.

1.) Make it very crappy, and put it live for the world to see.

2.) Be embarrassed that this thing you made is so crappy.

3.) Use that embarrassment to make it better.

However, I suspect that the problem might be something else.

They say you should always be working on your best idea. Maybe you are jumping from project to project too fast?

Maybe you need to take more time to think about why you're starting certain projects.

Maybe the answer isn't finding more time working on projects. Maybe the answer is spending less time working on projects and more time thinking about possible projects.

Some random thoughts here. Sorry that it sounded a little Seth Godin-ish.

To be honest I think that you're right. I'll try to spend more time thinking about projects before working on them. Thanks @rcavezza
This is also my opinion. When users start complaining about this or that being broken or just sucking in general, you have a little bit of a fire lit under your ass to fix it.
Thats how I do it for my website projects.

I usually plan the main process (User entry => Checkout) and make sure its working, and leave things like design and user experience for later. I always add live chat support on my projects so users and prospect-buyers can complaint anytime.

Embarrassment + Money makes good source of motivation to make my websites better. Also another good thing about this approach is you never waste time on bad ideas.

What I do is spend a bit of time, and write down all of the features I could possibly want in my program as GitHub issues. I sort them in the order of usefulness/ones I want most, and I set a timer for 25 minutes and write as many features as possible (the code can get a little messy but you can fix it up later.) Rinse and repeat until you're burned out.
If I haven't launched in 3-4 months I'll dump it and work on something else that is more exciting. If you can't launch in 3-4 months you've either bitten off more than you can chew or don't give a damn about it.

On a day to day basis, I dedicate 2 to 3 hours to my side project (side business). This includes maintenance for previously launched projects and work on the "new" project.

I only ever have one "new" project going that hasn't been launched.

Wake 2 hours earlier every morning and make that your scheduled time for the project. You would be surprised how quickly a project can move this way.
My recent workflow has been this:

1. Put the project in a private GitHub repo. Paying for it adds incentive to work on it.

2. Break up the work into small tasks and add them as issues in the GitHub project. Aggressively separate them into milestones to stay focused (Milestone 1 == MVP, less important stuff in Milestone 2, etc).

The reason I think this works is that it is easy to get overwhelmed by all the work on a side project, and you have limited time to work on it. Now when you have time, you grab a ticket, complete it. Each ticket should be doable in a few hours or the scope of your ticket is too broad.

(comment deleted)
Tip; if you have a home server check out GitLab-CE.

I run it in a docker on my Unraid (file)server, all easily managed via webinterface.

I've always lost motivation sometime shortly after starting on a new side project.So what I've done lately is when I think of something I'll then determine if there is a way to get it built and usable by the end of the day, even if it is just a simple script. This way I can actually later use the thing and when I have another idea to expand on it I can take that on later as another day's work.

This might not work for everyone but for me I've actually built a few useful tools that I use everyday and have been able to continue building on. The only 2 requirements needed before I undertake something is 1) that it is something I see myself using on a semi-daily basis and 2) that I can build it within a day.

I've found the nature of the idea is quite important as well.

For example for a long time I used to do very "philosophical" projects.

Huge ambitious ones where before you even start you already know it's by definition going to take years for it to get to somewhere worthwhile.

Except I wasn't ready to commit to such things, and I knew it.

That tiny half-assed part of a huge project will not amount to anything.

So overtime I accumulated a great graveyard of "this would be cool if I had worked on it for a year instead of 2 weeks" projects.

On the other hand if the idea is small and practical you can work on something for 3 weeks and have something nice and practical that is a concrete achievement.

So if finishing is your goal and you don't have tons of time to dedicate to a project my advice is to ask yourself how practical and realistic is it for you to finish an implementation of that idea in your desired time-frame?

If it's a huge idea you have to accept the reality that in your amount of time you can't finish a significant % of it.

And 5% of a huge project is often not as useful or impressive as 120% of a tiny project.

Do people find it worth the time to read books on productivity like Getting Things Done, Eat that Frog, etc.? And learning more about things like Org mode? Or are those essentially procrastination enablers? Is see that most people are working on software personal projects. Anyone have thoughts getting "hardware" projects done?
I bought Getting Things Done and I regretted it. If you're constantly forgetting things and completely unorganized then it's probably worth it. I'm a naturally motivated, self-starter kind of person and I found GTD was just overkill for me.
Just like it you do at a company..

1-Plan, prioritize, schedule; 2-Use a scrum.. even if you are the master, the team, the stakeholder all at the same time. Tip: don't forget the stand-up meeting.

I've learned it from a German colleague (and great friend) who even use scrum to manage his own house activities... yeah he was kind of sick.

Nah, he was just very German.
If you're procrastinating your brain is telling you it's not important. You can push yourself with motivational tricks but you might won't get anywhere.

It might be better to get some value out of it and/or convince your brain why it's worth doing.

I've fit this pattern for most of the things I build, though I'd replace "days" with "weeks" above.

The things I have finished are nearly all things I have put a price tag on.

They may have been done before I shipped them, but most weren't. But once there's the threat of real users sending you money and expecting things to work, that's incentive enough to actually wrap up loose ends and polish what's there.

Notice that what actually happened was a slight redefinition of "finished" to include all the features that currently work, with non-working features hidden and no pointy bits sticking out the sides. As distinct from "all the things I wanted to include are now working to my satisfaction."

Eventually you can work toward including all those other things, but step one is to polish what's there. Then it's just a matter of polishing each additional feature after they're built and before they're exposed to users.

I treat personal projects like therapy. Doing something for me, trying something new makes me feel good. Even if I just have a working prototype I have the sense that I've accomplished something. It doesn't matter much if nobody sees it. If that were the case, those personal projects would turn to work and I have enough of that already.

That being said, I do finish side projects from time to time, mostly because I can still see the potential after working on it for a couple of ours.

My workflow is usually to lose interest and motivation right around the time I have it rough, ready and working. Rather than do the last polish and site to release I would end up doing other hobbies.

It's been frusrtating.

A few things that seem to work:

1) Define a single, easily understood high-level goal. Something that's easily understood and can be accomplished in a timespan of days or weeks. It's important that this is not defined technically, but in terms of what the application can actually do.

2) Repeatedly ask myself whether what I'm doing is directly contributing to the current goal, or is required to reach it. If it's not, stop doing it and figure out what's going to get me there the fastest.

3) Wake up early and work on my project before doing anything else. Every morning I wake up, take a shower, kiss my partner on the forehead and then I am out the door to work on my project at the cafe down the street. This is the part of the day where my mind is the most fresh, and it's not possible that something else has taken my attention and distracted me from the goal at hand, or tired me out so much I don't have the energy to work on it. Also once you get in the habit it's hard not to work on it once you wake up.

1. Time box it. Pick a date that you will release, go live, ship, whatever. Pick a date.

2. Break it into smaller tasks.

3. Prioritize those tasks and start with the easiest.

4. This is not time to learn, this is time to build. Use only tools that you know. Even if you know there is a better way, do it the best worse way that you know than the better best way you have heard of but don't know and will have to stop and learn. This is key, separate learning and building.

5. Work on it everyday, at a consistent time, preferable first thing in the morning.

6. Since you will be waking up early, go to bed early too and get enough sleep.

7. Work on only one project at a time, meaning, you can't work on other projects in between. Everything else goes on hold till this is completed.

8. Find ways to motivate and inspire yourself when you are feeling mentally down and low and focus is hard to come by. If you really like music, don't listen to it all the time. work without it, when you find yourself drained, that's when you should turn on music. Unless you absolutely can't work without it. Whatever that gives you extra boost, hold off from it till you really need it. Coffee? Don't drink it, till you need it. Think of it like power up. Save it till you need it.

9. Is it ship date? Release it, only 70% done? Release it!

Start it and never stop it until it is released, and after it is released based on response - keep continuing it.
My strategy is to push out the first working version in that first 2-3 days and get feedback. I have recently, compiled and published my experience and thoughts on this exact topic as a book : http://amzn.to/2iUYaOH
Finish the minimal viable part of the project very quickly.

Add the housekeeping parts and extra features later (if it's worth it i.e. being used by you or others).

Eventually when you do enough personal projects you will find that the housekeeping parts are the same and can be bolted on easily. That's another reason it's not worth doing anything except the minimal viable part of the project.

I suggest you read "Just F*cking Ship".

It's pretty good, and it goes into details on why we can't launch products/finish personal projects.