Before I even begin this post, I’d like to preface it by clarifying something. This is not an instance of public shaming, but rather me using a better avenue for getting my point across than exists elsewhere. In fact, let’s get the major griping out of the way first:
I Tried, I Really Tried
My biggest gripe is that I couldn’t find an avenue to discuss this with Harvest and their community. Harvest used to have a forum where one could ask support questions, but also bring up feature requests. If I recall, feature requests could even be voted on. It was so long ago though that I can’t remember. I seem to recall that the forum felt like a bolt-on, hasty addition to the site in general, and it was hard to navigate and grasp. It must have been too hard to maintain, because I can’t find it anymore. Maybe it still exists, but try as I might, I couldn’t find it.
I could have made a direct support request using their ticketing system. I’m personally not crazy about that method. In fact, I’m downright skeptical of it. Who gets my request? Does it really end up in front of people that can make a difference? But most importantly, public feature requests can garner momentum from other users who want the same functionality. Private requests have no community discussion around them.
I did try and bring it up with Harvest’s Twitter account roughly four months ago from the date of this post. To their credit, they responded back and said it was noted. However, 140 characters really didn’t allow me to express my thoughts fully.
I could post on their Facebook page, circle them on Google+ and nag at them, or even message them through their LinkedIn account (except now we’re back to private, one on one communication that fails the community test). I’m showing that Harvest has made a good effort at having multiple avenues of contact and outreach.
However one of the most important means of communication, an officially support forum to foster community discussion, doesn’t appear to exist. That’s the kind of communication that would have benefited me most for this scenario, but in its absence (or extremely difficult discoverability), I’ve taken to my blog to hopefully find other Harvest users that can either get some momentum behind the idea, or tell me where I’m wrong and what I could be doing better.
What Harvest Is
Harvest is time tracking and invoicing software that has a great web interface as well as an iPhone app, an Android app, a Mac OS app, and heaps of integrations and plugins for many different business tools that I’m sure you’re familiar with. In my experience, Harvest is probably a top three contender, if not the #1 product, for time tracking and invoicing in the freelance, consultant, and small business realm. Overall, I think the product is great.
What Harvest is to Me
For nearly four years I’ve been a full time consultant operating my own LLC in the USA. For nearly three years I’ve been using Harvest as the one and only way that I track time for my business. Not only do I use it to track billable time spent on clients, I track non-billable time internal to my business (professional education, working on internal services and systems, etc.), as well as even sometimes tracking the time I spend on personal things (just how much time do I spend folding origami, anyway?). I use it on my Mac, iPhone, and in the absence of those devices, I like to use their handsome web interface. I use it more consistently than any other application in my life except web browsers and email clients.
Why I’ve Lost Money Because of Harvest
The Short Story
The user interface that keeps track of different projects you’ve spent time on shows no visually distinguishing elements, other than black text, to differentiate between projects and clients. As a result, I’ve run timers for the wrong clients, only discovering the mistake later. When I’m aware of a time tracking mistake, I remove time to be above reproach and therefore lose that billable time.
The Long Story
As I mentioned above, most of my experience is with the OS X app and the iPhone app, with the web interface being a distant third option. Nevertheless, all of the interfaces are impressively similar across platforms. For example, a few weeks ago, my OS X app looked like this:
And at the same time, my iPhone app looked like this:
My timer represents three companies that I’ve worked for on that day (including my own, doing some internal documentation and writing) and seven different segmentations of work between them all. For the client with the partially-redacted name Net* I’ve done some PC support, server work (two whole minutes!), and email / phone communication. The same goes for the client with the partially redacted name Alp*. That’s how I separate my work. I show clients how much time I’ve spent on PC support, server and network management, email / correspondence, and some other common tasks that an IT consultant would work on.
But look closer. How would I know when I’m starting PC support for one client versus another? Even when pausing and making a deliberate effort to choose the right timer based on the text, I’ve made mistakes and chosen to start a timer for one client / project when I should have started another. It’s especially hard when I get an emergency call and have to quickly stab at the correct timer. I sometimes don’t recognize the mistake until hours or days later when reviewing timesheets and the notes I make for each entry. Sometimes I’ll notice notes referencing people and systems relating to one client are on a time entry for a totally different client. That’s one way I know I’ve made a major mistake.
In cases where I know I’ve made a mistake, I’m usually not able to remember exactly how many of the tracked hours for one client were really supposed to be assigned to a different client. For example, let’s say I notice the wrong timer has been ticking for the last few hours. My methodology for fixing that problem is to remain above reproach by generously estimating how much time was wrongly assigned, and then continuing to remove time until I sense intrinsically “Okay, I know I’m losing money on this.” I’ll move the remaining time after my deduction to the proper client. In this way, I never mistakenly charge anyone more than I’ve worked, and I eat the probably-excessive time that I removed. I’d rather know I’ve lost money than wonder if I ripped someone off.
“That’s not a case of Harvest costing you money, that’s you being a careless idiot and costing yourself money!” Okay, fine. I’ll accept that. I’ve disciplined myself over the last three years with Harvest to be very careful, and instances of mistakes being made are fairly low nowadays. Maybe once a month. I could take it further (and hopefully not commit the fallacy of reductio ad absurdum) and say I don’t even need to use Harvest. I could just use stopwatches and spreadsheets. The point, however, is that Harvest is an otherwise great tool that just lacks some good visual organization elements.
Working With What I’ve Got
The best I can do right now is to rename my clients in ALL CAPS WITH ☞☞CUTE ✿UNICODE✿ CHARACTERS☜☜ that will catch my eye and be memorized based on shape. Except the reports that I print out at the end of a month will have those on them and be rather… unprofessional.
I could still keep client names in CAPS ONLY so that when I glance at my timesheet I know anything in ALL CAPS is a client name. That way, as I cast my gaze across my day’s timesheet, I can perhaps select the correct client a little easier with some mental training. That’s all I got, unless I want to use the web interface exclusively and make my own Chrome plugin to colorize and otherwise make a more visually distinguishing user interface. That seems a little overkill. At that point, I’d just make my own time tracking web-tool and open source it, or offer it as a freemium service or something.
How it Could be Better
There are two big ways that I believe Harvest’s apps could be made better.
Harvest’s topmost tier of delineation is clients. Within clients are distinct projects. Within projects are tasks. To get a timer started, you must first select a client, a project within the client, and finally a task.
The biggest problem is when time gets assigned to the wrong client, so at the very least, being able to make a visual distinction between timers for one client or another would help solve the problem. Even if time is assigned to the wrong project within a client (which is still problematic because certain projects and tasks might be billed at different rates) at least the error is within the same client which has less potential for disastrous invoicing.
In my mind, I invision an entire task being highlighted by client. So, using my über-leet GIMP skills, I’ve made a miniaturized representation of what I’m thinking, using the OS X timer that I posted above (but I’d love it if this entire discussion from here on out was also applied to every Harvest interface):
So now I can see that my client named Net* is teal, and my client named Alp* is red. Or perhaps the tasks can stay the same grey, but allow the text to be colorized based on client:
I think that’s a bad idea since colored text can be hard to read, but it’s an option I suppose.
I’ve considered the possibility that projects should also be visually indicated; some kind of sub-distinction, such as a vertical bar on the left side that is colored differently. While making sure I’m billing the correct client is of utmost importance, even within a single client there can be some important reasons why I want to keep time absolutely precise between projects. Let me give an example.
Let’s say that most servers I manage for Client A are covered under a managed contract and I thus don’t bill hourly for work on them. However, let’s say that some new servers, or outliers that just didn’t fit a managed contract weren’t negotiated into the contract and would be billed hourly for any work needed. Thus, I’ll have “Client A -> Managed Services Project -> Server Administration Task” as one timer and “Client A -> Hourly Work Project -> Server Administration Task” as another timer. I still want to track the time I’m working on managed services projects and tasks to make sure that my contracts are turning a profit. It would really hurt if I timed myself for an hourly-billed task on the managed services timer and then wasn’t 100% certain how much time I needed to alter. Once again, I’d rather know I lost money than wonder if I ripped someone off.
Here’s one way that I envision a sub distinction for projects (please don’t let my utterly lame GIMP skills distract form the core concept):
In the example above I’ve got my documentation tasks labeled as the yellow and black stripes. My server and network administration tasks are wood grain. My professional writing is leopard. My PC / Desktop support tasks are marble. Now I can not only quickly determine which tasks are for which client, but I can now see which tasks are documentation vs. Server Administration, etc.
I’m not saying that the project visualization element needs to be textured, or vertical, or anything too specific like that. I’m simply saying that I’d like two layers of distinction. Most certainly clients need to be visually distinct. It would be great if projects could also have some kind of sub distinction that doesn’t dominate the client distinction. As for individual tasks within a project, I understand that they can also be billed differently than projects as a whole and thus potentially important to distinguish, but I’m not sure how one would visually distinguish tasks in addition to the project and client distinction without making it cluttered. I think it’s worth a little bit of thought though, but only by people who are way better at design and UI/UX than me. =)
Do you see something a bit chaotic in the pictures above? The clients are scattered across the entire interface. Often, at the end of a day, I’ll have six or seven individual tasks that have been timed, and not a single one is physically close to other tasks for the same client. What happens as time goes on is that when I’m switching between tasks, I have to squint extra, extra hard to make sure that I’m clicking on the right client.
I would love there to be the ability to click and drag tasks around so I can arrange them together (horrible GIMP skills, activate!):
Or, better yet, I think that any new timer that gets activated should automatically group together with other timers from the same client. Perhaps there could be a nice horizontal rule that delineates sections of clients (yes, the GIMP examples are getting worse.):
Advanced Time Segmentation
The last idea I have is perhaps a little complex, but I could really use this, and it would play a part in making sure that correct times are recorded in spite of user error. I’d like to see at what times of the day I’ve started and stopped a task in a 24 hours period. Imagine if you worked three hours on one task in a day, and it was split up among four separate chunks. That would mean there were three interruptions. One was a bathroom break, one was signing for a UPS shipment, and another was a coffee refill.
I’d love to see a linear representation of a 24 hour day, and have bars for each task that stretch to cover the times that I was working on them. Then, if I realized I was timing the wrong task, I could at least check and see all the times that I’ve clicked to start and stop a task and thereby know exactly how much time was wrongly spent! Here’s another horrible GIMP representation of what my mind’s eye is envisioning:
In the above example, the blue lines would be times that I’ve worked to come to the total amount of time spent on the task. I imagine that the leftmost point on the linear scale would be 00:00 hours and the rightmost point would be 23:59 hours. I’d love to somehow see actual start and stop times annotated for each segment of time spent working.
As long as I’m dreaming, I’d love to be able to drag and drop segments of time between tasks. That way if I realzed that, oops, I’ve been timing the wrong client or task again, I can rectify it with a few clicks of the mouse:
But there’s another reason that I’d like to see individual start and stop times within a task! I had one client that was a larger MSP and would subcontract me when work got out of hand and they didn’t have enough internal employees to handle it. That MSP really wanted to know what times of the day I started and stopped a task. The MSP’s clients were pretty picky about knowing when work was being done during the day or night. Hey, I don’t know why that was important, but as long as the money flows in I’ll comply with weird demands and apparently knowing the times that work is being done isn’t an unusual demand for certain markets. With Harvest I was unable to provide that data and had to simply make notes on each task about the times that I started and stopped during the day. I was able to make it work, kind of, but once more I was just hacking the product to get it to work for my needs.
And as long as I’m listing out everything on my wish list, I want a feature that funnels new clients with excess money to spend right to my door on a weekly basis. And a pony.
In My Own Perfect World
If I lived in a world where Harvest was perfectly tailored to my desires, this is how it would work. I’m not saying this is The One True Way, but just how I interpret timesheet perfection for my own work. Ordered roughly from the most important new feature to the least:
- Each client is visually distinguished by color.
- Each new task is auto-grouped on the timesheet with other tasks for the same client.
- Start and stop times are recorded for each task no matter how many times a task is started and stopped in total.
- Start and stop times are visualized for each task and can be moved around between tasks. (Right-click >> Show time details?)
- Projects and/or tasks can have a sub-distinction that distinguishes that task separate from the distinction that is client-wide.
- I can move whole tasks up and down within the collection of tasks for the same client.
If all of the above is too much, just let me right click a clock and change it’s color with the option to remember that color for future tasks that have that same client / project / task combination. That would work as a quick fix.
AND I WANT A PONY!!
While I’m on a roll, and since you’ve read this far, I have one other feature request that’s driving me nuts lately. I need to run multiple timers at once. I’m an IT consultant. These two scenarios happen a lot:
First, let’s say a client wants me to work on a problem that involves lots of vendor communication. I end up being on the phone a lot. Listening to hold music. Bad hold music. For inhumane lengths of time. It involves lots of waiting (and air guitar), and of course the client expects me to track all the time I spend on their issues, not just for billing purposes but for their own chargebacks, project timing, and profit/loss estimates. While I’m on hold for one client, I can and often am updating the documentation for another, or checking dashboards and making notes or responding to client emails. That’s two clients at once that can and should be legitimately billed for the time.
The next situation that happens a lot is that I have maintenance windows that sometimes involve watching the patching process for critical systems. Sure, Q/A, staging, and production environments are ideal, but not many small to medium sized businesses have those for their systems. Thus, I have to patch systems and watch the update process while it happens to make sure things don’t go awry and stay that way for long. It’s a matter of educating myself about the patches that are available, and researching what potential problems are known, and then applying them after taking rigorous backups. That’s real life for many businesses, even if it’s not the ideal life. However, once the patching starts, I’m supposed to be sitting and watching the progress bars move across. Easy money? Sure. But I could also be updating some of the documentation or responding to emails for another client while I’m minding the progress bars on the other screen.
In either case, I’m not willing to sit and stare at chicken on a raft for tens of minutes on end listening to hold music or watching progress bars inch along. If I can responsibly be working on one problem while I wait for another problem’s roadblock to clear, I will. However, it’s legitimate time spent on two clients simultaneously. Time for which they want to know about. Time for which I bill. It doesn’t happen every day, but once or twice a week for 30 to 60 minutes is enough to feel the inconvenience that Harvest’s one-timer-at-a-time limitation imposes on me.
In my current situation, I end up running one timer in Harvest, and then using my phone’s stopwatch to time out the other client. When the proverbial progress bar is done for the one client, I stop both timers, manually add to Harvest the client’s time that was tracked on my iPhone, and then move on with Harvest timer.
Yes, Harvest my dears, there are legitimate reasons to run two timers at once. I’d love to have an option for that implemented somehow. Currently, if one Harvest timer is running, and you click the play button on a different timer, the currently running timer stops and the new timer starts. Perhaps an option could exist where right clicking on a new play button allows you to select “Run additional timer” or maybe a double click on a second timer’s play button would add it to the existing inventory of running timers.
Let Us Hear The End of the Matter
Harvest, you’re great. I think you could be even greater. I wished there was a better way to get this message out than shouting on my blog, but maybe my thoughts are so lengthy that even a forum wouldn’t suffice. Nevertheless, I think there’s an argument to be made for a more accessibly community discussion place for Harvest users.
But seriously, Harvest. Thoughts? Can you help a freelancer out with some better UI elements and maybe advanced time logging and simultaneous time tracking?
Does anyone else use Harvest? Maybe (and I'm not trying to foment discontent with this question) there's a better time tracking tool that has more customizable user interface elements and more granular insight into task times on a daily timeline? Comment below and let's get this discussion going.