Dan Griffiths (shown below) is Managing Director of Buffalo, a UK-based web design, development, and e-commerce shop. The company uses git for version control and has recently hooked it up to Basecamp in order to log time there. Below, Griffiths and Jasper Tandy, fellow Buffalo director, explain how the system works.
Time tracking is one of the biggest bugbears for anyone. We've all got our rituals, but the minute you're in a rush and you forget, you're either losing money going through work history or losing money not charging.
A while ago, we began to experiment with time tracking via git (our choice for version control). Checking each commit message for a specific machine code, we used this to calculate the time spent on each commit. This data was then saved, along with the commit message so that we could easily look through our history and see who'd done what and how long it took. This was only mildly successful as we'd invariably forget something and have to trawl through our git logs database table or memories to infer timings. Not the picture of accuracy we were all hoping for.
Like many companies, we use Basecamp to track our projects and I'm sure we haven't always squeezed everything we could out of it. We used personal to-do list managers to keep track of time and activity, we used a combination of starred email, Basecamp messages and luck to manage what people needed from us.
This Basecamp screen shows our support to-do list. Clients email a special address and it gets added as a to-do.
There's only so many hours you can spend editing a spreadsheet of boring log data before you need an alternative. Our idea was to improve workflow and change as little as possible doing it:
- everyone start using Basecamp to track our todos
- log time spent on every little thing you do against your todo list
- manage all client requests through Basecamp
Tracking todos in Basecamp is easy (especially with the new mobile webapp), but when it comes to logging time against an item, you have to save and commit your work, then log the time, then move onto the next thing. This might not seem like much, but the fewer steps you need to take to achieve something, the more likely you are to adopt it as a habit and make it work. We integrated our git hook with Basecamp's todos using their API, taking our machine code and logging it as time spent on Basecamp. Our commit messages look something like:
Something more useful than this
time:h:2 # h=hours, also responds to m and d, minutes and days
:resolve
:BASECAMPTODOITEM
Everything that matches a machine mode our system recognises is removed from the body of the commit message and posted as a response to the thread, so we have an easily accessible audit trail of what's been done toward something. Now our process goes: work, save, find todo ID (we always have a Basecamp window open now), commit and push. Much easier and now we can track time easily. Once you work with your todo list in mind, this becomes really easy. We also find ourselves creating todo items for chargeable work just so that we can commit against it.
The git commit process in Terminal.
Managing client requests is a little more tricky. Clients don't care about our process and it's unreasonable to expect them to. We wanted them to be able to email an address that we could use in a decentralised way as our todo list. Once we have that in place, it's a natural progression to keep a Basecamp todo list for bug reports or requests that clients email to us. We simply have a script that checks the email address for new items and creates a todo item for each new mail. Even if a client forgets to use it and emails us, we can just forward the mail to our monitored address to get it out of our inbox and somewhere it's not going to get lost or accidentally deleted.
We've been using this process for a while now and it's been working great for us. The most significant gain has definitely been in time tracking. When typing a commit message, we consciously ask if this is billable work then, if it is, we know there's a little work to be done to maximise the effectiveness of the commit message. Even if we forget, there's always git commit --amend, and if it means we don't have to spend hours looking at timesheets, we are more than happy to do the little bit of extra work!
The power of Basecamp becomes clear when you get clients to use it how you want them to. To help with this we also include a mini-guide showing how we use Basecamp on our first message in a project:
This is Basecamp “where the magic happens” you might say!Firstly some general bits about Basecamp:
Unless there are specific private conversations that need to happen Basecamp replaces the use of CCed emails and other confusing forms of communication.
Nothing can replace a good old chat on the phone but in conjunction with verbal conversations Basecamp is really useful.
Messages
These replace email for general conversation, if you have an idea or you want to upload some images it is usually here that you would do it. For example a message to kick off a project or an update on general progress.Todos
If you have a specific task for a company or individual you can create to-dos here. For example “Provide images for company page” or “Supply copy for about us”Milestones
Simply put these are important dates in the project. For example “Site launch – July 21 2014”Chat
This allows us to Instant Message(IM) about the project etc – everything is stored so you can use it in conjunction with a telephone call or just to cover things in text. We also have a system that allows us to open this up to other people that are not registered on Basecamp so they can chat as guests.
Do you use a 37signals product in an interesting way? Let us know.