Most people who have their own small business end up giving a lot of their free (un-paid, that is) time to a task they were never formally trained to do: bookkeeping. Some people are naturally good at it and find it a nice change of scenery from their main business, others hate it with a passion. Personally, I fluctuate. One day I find myself leaving the office with a great sense of satisfaction, knowing that I just printed my own paychecks and closed out another month's worth of work in such a way that I won't be scrambling come tax time. Another morning might find me, smoke billowing out my ears, cursing a blue streak about an entire morning of work lost to bitch-slapping Quickbooks into submission (or QB bitch-slapping me, which is more often the case). Lately, the thing that's been making bookkeeping a real pain in the ass for me is the mundane, everyday task of keeping count of my hours.
When I switched to Quickbooks early this year for all of my bookkeeping, I also started doing invoices in Quickbooks. Previously, I had invoiced by hand, keeping count of my hours in a text file. To make invoice generation as simple as possible in QB, I also tried using the weekly timesheet feature. Over the last few months I've come to hate this feature.
To use it, I have to interrupt my workflow, go to another window, do a bunch of slowpoke clicking and key-poking.
That sort of interruption is costly for me, especially since, as a contractor, I try to keep track of my hours as exactly as possible. If I have to switch off a project for a five minute phone call, I don't want the client to pay for that. Seriously. I want to be able to take those five minute phone calls without having to spend another five minutes inside Quickbooks recording the fact that I stopped work for 5 minutes.
So today I wrote a little program that lets me keep my hours the way I like, in a text file, while making it very easy to do a monthly (or weekly or bi-monthly) invoice in QuickBooks.
Here's how it works.
- I keep a little text file in ~/.hours/hours.txt. It's format is something like this:
Monday 7/2 # Bug-fixing and feature X 9:04 - 11:37 # Destroyed bugs 217, 381, and 113 12:02 - 6:23 # Implemented the hell out of feature X Tuesday 7/3 # Unit tests 9:03 - 9:07 # Sent quick email 3:23 - 5:30 # Wrote some unit tests for feature Z
... and so onI like to invoice monthly, so make a new one of these every month, and archive old ones as I enter a month.
- Whenever I need to find out how much to invoice, or if I'm curious about
whether I've been slacking this month, I run my little hours calculator
program:
I can even give a rate to see how much money I've earned:
Before I took the morning off to write this little application, I did play around with the many time clock apps available. None of them ever really fit into my work flow, as a programmer. It sounds so silly, but I was always frustrated with having to leave my editor to record a new couple of minutes or hours of work performed.
With this text-based approach, I just keep a link to my current hours.txt
file in my project (whether it's in TextMate or IntelliJ or Vim). Then I just
tab over to that file, enter in a line and forget about it:
If you want to experiment with keeping your hours this way, again, here's the program. (If you find this useful, please drop me a line!)
December 17th, 2007 at 07:31 PM Thanks for the tip. I used to think my simple excel sheet was simple enough but I like your tool even better. Question: How would it work for multiple vendors?
December 18th, 2007 at 06:57 PM Thanks. You know, for multiple projects, I usually create a separate hours file, and then pass it with the -f argument to the script. But honestly, if I were managing many projects simultaneously I might consider using something that supports projects better, like Ara's punch timeclock.