I'm a serial over committer
swanson.github.com
swanson.github.com
I am not completely cured of the habit, but what helped me with this -- and more importantly, what helped me actually begin finishing things -- is simply being very careful to only talk about what I've done, not what I'm working on or what I'm planning.
There's this thing called "substitute for completion" where if you talk about some project, even one with hundreds of hours of work remaining, your brain gets the same reward as actually completing it. A smaller dose, perhaps, but essentially the same thing. So your brain figures out that it can just keep coming up with new ideas and telling people about them and it will get an echo of the same feeling of accomplishment as actually doing it, without the hard work.
So what seems to work for me is only talking about my projects in the past tense. When I want to say "I started a new game last week and it's going to be the most awesome augmented reality zombie squirter ever", instead I say, "I wrote a new game event system last week and it turned out pretty good," because that's as far as I got. It's also motivating because I can't wait to tell people about all the cool stuff I have planned, but I have to wait until I actually do it.
I put out a second beta of my current project on TestFlight yesterday. It was a good feeling. It's been a ton of hard work so far. But it's not in the app store yet, so I'm not going to post about it until it is.
Personally, I don't mind lying a bit in my personal projects.
To lie, you simply make a new branch for each feature or otherwise related changeset such as a hotfix. Within that branch, you make as many commits as you want, the more the merrier.
When the branch is ready to merge, you use "git merge --squash branchname" which will pull in the changes from branchname in an uncommited form. Then, you can use "git diff" to view the differences and make one single commit with an appropriate commit message detailing each change.
The upside is that it is atomic without needing to use the git-workflow no fast-forward business. The downside is you're lying.
[1] http://paul.stadig.name/2010/12/thou-shalt-not-lie-git-rebas...
The commit message is like a title. All diff lines must be related to it or they should be in another changeset.
Without commit messages.
Boy, did I pay for that one.
Derek Sivers has a suggested approach for over-committers: "Hell yeah, or no." It's helped me cut down on my projects (and leaves me with more awesome things to work on, on average). Give it a read: http://sivers.org/hellyeah
And when the over-committer Bob ducks out of the project due to time constraints, the manager will come back to you, knowing you have a good track record of completing tasks.
I have a few bad experiences with "the guy who gets things done".
There's an old saying that the last 10% of the work takes 90% of the time.
If you stop after the first 90% (or why not at 80%?) and jump to the next exciting project, you will be percieved as very productive. And because you don't put in the time to properly document things, you'll be the only one who knows it all and you'll be percieved to be a guru who knows everything.
Sure, it might not work perfectly, but it's only minor flaws that someone else can fix. Right? You're too busy being productive in your new project, leaving a mess for people to maintain in there.
And it works. Your managers see you as the go-to guy. You will get things done. And the fact that people then spend ages of time to patch your work just proves how much more efficient and better than them you are.
Yeah, you probably guessed it: I spent the day yesterday cleaning up someone elses unmaintainable, undocumented mess. Someone who is now working on a new project.
That's actually a really good way to 1) be known for hustle 2) be known as a finisher 3) work on mostly cool stuff.
There is no shortage of awesome possible work. Ever.
After all, I developed a small app for myself, I hope it would help you while you're doing your side project ( I try to not sound like I'm doing advertising for my project... since it's free of charge, feel free to use it and give me some feedback if you like ).
www.vodolist.com is what I come up while I was still employed at my old employer. What I could do with this app is that, I decided to do only "3 tasks" for my side project. ( and only 1 task for some other smaller project. you can customize it ). With only a few tasks involved each day, I can force myself only work on the important and only crucial components of my side project.
This post gets a little long with the help of scotch so I guess I'll just stop here for now.
People say finishing is everything, and they are right, but like most skills finishing is not binary "yes" or "no", once you can finish things you can progress to being able to finish them better, faster and with less code. Ironically, owing to the nature of learning and the human brain in general you will have a hard time improving your finishing skills unless you regularly wind up in the situation where it is very difficult, or impossible to finish.
I commit to small one-off projects for friends, longer-term work with acquaintances, and whip up my own projects all the time. Sometimes the projects are freelance, and sometimes they are simply "free." All this serves to satiate the needling feeling in the back of my brain that I might just be missing out on something.
Here's the rest of my thoughts: http://blog.glenelkins.com/the-over-committers-dilemma/
One thing I've found - while handling many side-projects is to know each one has a priority based on how much I'm invested in one of them and the benefits that one will bring. If you have the priorities set upfront, it'll be easier to make decisions in case something gotta give. But if you "under commit" to a lot of different commitments, you'd still have some space :)
A shared success is better than no success.
On another note, you are not alone. It is an anxiety that, IMO, emanates from you not being able to read the pattern correctly. And that only comes with experience and exposure. Once you get to a point where you can "see" the general direction of things you will be able to accurately filter the probably-doomed-to-fail from the probably-a-bang-in-the-making projects.
Lastly, think of this; Who do you prefer to be?: - being the guy that doesnt know how to say no and never finishes anything fully (like a drift wood that never reaches a shore)
- being the guy that is selective but dedicated to the projects he chooses to work on. (like a power boat)
Anxiety is not something you can beat in 2 days but being aware of it is a major step. Work on it!
(FWIW, if you're a contractor who has more work than they can complete, I absolutely agree with your analysis)