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.

  1. 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 on

    I like to invoice monthly, so make a new one of these every month, and archive old ones as I enter a month.

  2. 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: Hours Summary
    I can even give a rate to see how much money I've earned: Hours Summary with Rates

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: How I record my hours

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!)

2 Comments

  1. James Says:
    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?
  2. doug Says:
    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.

Leave a Reply