Every programming job I've had has required me to track my hours, entering them into a system once a week. I've never been good at it. For the past few years, I've been running Timesnapper * on all my machines, and on the night before hours were checked I'd slog through the records and painstakingly enter the hours in.
The alternative, of course, is to enter the time as I work, but I've never been able to stick to that. I get busy, or in the zone, and I forget about it.
What do you recommend?
*Timesnapper has some timesheet integration, but I haven't been able to get it to work with my development work, since some of my time spent browsing the web is development related, while some of it isn't.
Maybe you could check out RescueTime  - it gives good granularity with browsers (you can register stackoverflow as work, and xkcd as personal and it will keep track of how much you spent where), but won't really be able to help tell the difference between working on Project A and Project B if they are both in Eclipse (it will just put them both against Eclipse).
Time is based on the the currently focused app. http://www.rescuetime.com/
I'm using Slimtimer . One click to start working on an existing task, one click and typing to start a new task. I was always anti-time-tracking myself, but once you get into the habit, you won't even notice it. http://slimtimer.com
I use three methods:
Timesnapper gets you the stuff you forget; Rescue time does most of the hard lifting and the pen and paper is a really intuitive way to enter times with a great user interface.
Try paper, specifically David Seah's Emergent Task Timer . You print it out, write down your tasks or project titles as they happen to you, and fill in the blobs every fifteen minutes:
Every time I feel like I'm not getting enough done, I print five ETT sheets and use them for a week. That puts me back on track. http://davidseah.com/blog/the-printable-ceo-iii-emergent-task-timing/
For those of you looking for a low tech solution.
If you are working on a single project and you are curious about the amount of "effective" time. You could use a chess clock.
At the beginning of the day set both clocks to zero. If you start on the project, check the left clock (the effective time). If you stop to do somethinge else (like checking stackoverflow), check the right clock (the ineffective time). At the end of the day you know the amount of time spend on the project and other "things".
TimeSnapper  - I have used this to remind me of what I have done all day (with how much time I have spent on each thing). This helps a lot in time tracking. http://www.timesnapper.com/
I use Fogbugz  to keep track of my development hours. I never enter in out periods, I just select the current case number I'm working on and keep on trucking. Not only does it give individual detail onto how much time I spent on individual tasks, it also keeps my ADD/wiki linking mind on one task at a time.
For a couple of users, I believe you can get a free license for their on demand services. It's great for project management and fits nicely into an agile development life cycle. http://www.fogcreek.com/FogBugz
I've used two different approaches, depending on how accurately the times are required to be.
One is just to keep a list of what I work on during the day, and then do an estimated split at the end of the day. This works pretty well for the level of time tracking information I'm interested in myself, but it's obviously no good if you're billing people and need to be accurate about it.
The other way is to force yourself into the habit of keeping track as you go. You'll still need a list of things you worked on, and the easiest format I've seen is the one recommended in the Personal Software Process , which is something like this (it's been a while, so forgive me if I'm a little off)
Task Name : Start time : Finish time : Interruptions (mins)
The interruptions column is probably the useful insight here. You're frequently going to find yourself interrupted by a quick question from someone which doesn't warrant being tracked as a new task, but does need to be subtracted from the time you spent on the main task. It should just he a comma separated list of the number of minutes for each interruption.
All in all, though, it will depend on how accurate you need to be. If lawyers can train themselves into tracking and billing in six minute increments, there's no reason we can't - it's just a lot of overhead. http://rads.stackoverflow.com/amzn/click/0201548097
my main point  when discussing how to get things done  was to create a TODO list. If you religiously stick to your TODO list throughout the day then that will at least form the basis for your time tracking. Write it down at the start of the day with estimated times against them. Throughout the day you can then quickly update the list by ticking of your items and possibly noting down any variations (like +10 or -15).
I found that this was very useful especially when I worked as a contractor. Obviously if you need to track specific sites or applications you use very closely you could benefit from installing one ore more of the apps that have been suggested. http://stackoverflow.com/questions/19155/how-do-i-become-a-programmer-who-gets-things-done#19159
For Linux I suggest Hamster . It's a neat little Gnome application that runs in your panel and makes it easy to track time spent on different activities. If you forget to update your current activity you can easily correct past data. http://projecthamster.wordpress.com/
I use a simple AutoIt  script to save the active .EXE name / window title every minute in a log file. To analyze that information, I use an Excel worksheet that imports the logfile and generate a PivotTable.
This way, at the end of the day I can see how many hours I spend in StackOverflow instead of Getting my Things Done :) http://www.autoitscript.com/autoit3/
In Linux I've used both GnoTime and gTimeLog. They're both very different.
GnoTime is good if you have a fairly short list of projects you switch between - you can just double-click to work on something else.
gtimelog is good because you don't have to tell it what you're going to do, you just put in what you have been doing since the last entry - and if you forget to make an entry it's very easy to modify the log. This works best for me if I think I'm going to start work on project A, and then realize 15 minutes later that I never started on A but actually distracted myself with email for the last 15 minutes, then I can just log "email" and then try to point myself at A again.
Jon, have you used the "keywords" feature of the Productivity Scorecard  in the current version of TimeSnapper Pro? This can help with separating "productive time" from "non-productive time" spent in your browser of choice. (It might not help if what you're looking for is to tie time spent on specific web sites to particular projects, though.) http://timesnapper.com/professional.aspx#qProd
I've used loads of solutions. My favourite one at the minute is Manic Time . It sits in your system tray and monitors the current used process. This helps you know which project in VS you were using, which remote desktop etc....
I only need to do my time sheets once a month now and my results are far more accurate. See the Lifehacker review here . http://www.manictime.com/
If you already use JIRA  to manage development tasks, then its time tracking  is very convenient, and the time sheet report  is not bad. This works well for me, at least, because it integrates well with the task tracking that I already use to manage my development work, so I am less likely to forget to fill it in.
However, JIRA is commercial and not every project is going to be using it, so this may not be a realistic option if you are working as a contractor. http://www.atlassian.com/software/jira/
I also use TimeSnapper, and each morning when I arrive at work, I fill an excel file according to yesterday's movie (rather than waiting for the night before hours are checked, or the end of the month).
If discipline is your problem, then use a method that's more tolerant to ommissions: simply write down every now and then (couple of times a day, maybe) what tasks you worked on and how many hours you spent on it. Put it in an Excel sheet or something simple that allows for fast entry.
I've tried several programs, timesnapper, rescuetime, etc. but still find pen and paper, or simple txt file is the most useful when end of week comes around.
I use InerTrack  by Inertron Software on my iPhone. The interface allows me to have different projects. You tap a project to start the clock, tap again to stop it. It emails you a csv file to import into excel when you are ready to bill. http://www.inertron.com/mobile/inertrak/index.html
I wrote TimeKeeper  specifically for this. I use it every day, as do several other people in our company and I find it works extremely well, and it extremely simple to use. http://www.softwaremonkey.org/Program/TimeKeeper
I use Redmine  for tracking my time and my tasks. It's pretty nice. http://www.redmine.org/
Clicktime and Harvest are great web apps for that.
I've used timepost and fogbugz  with great success. Unfortunately you have to use a mac for this, but it's as simple as selecting what you're doing, clicking the buttons and you're away. http://www.fogcreek.com/FogBugz/blog/post/FogBugz-Time-Tracking-Integration-with-Timepost.aspx
Since i have a Palm Device which i like to sync with my desktop I use Responsive Time Logger . Very Good. http://www.responsivesoftware.com/
The trick to tracking hours, for me, is working off of a defined task list. At the beginning of each week, I create a task list in Outlook. As I "work" the list, I mark item completion status along with hours. I typically perform these updates at the end of each day. As I need to submit my hours to my boss weekly, I tend to quickly review/cross-check my hours for the prior week before submission. I find a quick review of sent emails and last week's scheduled meetings provide a good reference point to help with the cross-check. It's a rather rudimentary approach, but it works for me and it can be implemented no matter which tools you might be using.
i find the using the spreadsheet appropriate for my needs...
i use the format pretty similar to the one mentioned above by Matt Sheppard - the PSP (never came accross that book and principle, i've started it on my own):
Task : Start time : Finish time : Interruptions (mins) : Total time spent on task
where last column (time spent) is computed in the spreadsheet automatically.
for the tasks - i sometimes use 1 column to describe the task and write everything into it, sometimes i split it to several columns to keep track about parts of the project i'm working at, and the smaller tasks as smaller chunks of work on particular part i'm working on...
I've been looking for a braindead tool to track it for me. Braindead as in no thinking on my part required, however I've never found anything decent or compatible with the time tracking system used at my job. Now I don't really mind the latter, but the first is an issue.
Nowadays what I do at the end of the week is look at my 'Sent Items' mailbox and look at the topics I replied to. That usually gives me a nice guestimate of how much time I spent on which project.
I do it by the number of youtube clips I've watched throughout the day.
I use Axosoft's OnTime 2008  for tracking my time in projects. http://axosoft.com
A simple text file ~/wrk/TIME.txt like this:
Week 37: 8:45 Prj.Adm 10:30 New Foo Gui 13:15 Bugs Bar 15:00 Improve CruiseControl 17:00 9:00 Licensing Quux 11:15 Secure comm. Bar 16:15 bugs Bar 17:00 ... Week 36: 8:30 Prj.Adm 10:00 Interviews 14:00 Arch. Quux 15:45 Bugs Bar 17:00
I've used Punch Time Clock  for Palm on an off for five years. It has never failed me. The desktop app allows you to send data to Excel, and a report is just a pivot table away. http://psync.com/
I'll throw my hat in the ring for TimeSprite . It's not as feature-rich as TimeSnapper  -- for instance, it only tracks open window titles and doesn't grab screenshots -- but it's a little more focused and the data, I think, is easier to analyze. Anyway, worth a look. I like it and have used it for around 3 years. http://www.timesprite.com
I'd recommend a web-based time tracking app that allows you to stop and start timers throughout the day. We found it far easier to track our time if we did so throughout the day. Entering your time once a week is tough, but so is entering your time once a day. The key is to keep tracking your time in the moment, so you don't have to go back and remember it. Check out Intervals  for a web-based tool that works great at this. http://www.myintervals.com
A sheet of paper. We use a task-card where we write down the time use for the task and additional information. This information is used in the standup-meetings or during the pair-sessions.
I use Tick , they have a widget for the Mac's dashboard which makes the process pretty easy.
Also their free plan is enough for my personal monthly tasks. I just set a single project per month with the amount of hours i'm supposed to work i.e. "June 2009 - 160 hours". I just enter all of my tasks for my full time work and the occasional freelancing.
If you use this honestly it really helps you focus on the task at hand and avoiding procrastination. http://tickspot.com/
Premember. It's a new generation desktop based time tracking tool. It allows you to look back into time because it saves screenshots during the day. So by this means you can easily fill in your hours at the end of the day or week. There is both a free and trial version available @ hesiodsofware  http://www.hesiodsoftware.com
Free version of Timesheet Lite.
I have tried a bunch of manual approaches and recently started using the following. It's been about a week and its better than before...
Summary: Jira + worklogs + task-list-and-timer-timer gdesktop gadget
Jira is my issue tracker and its work log entries allow me to allocate time to jobs. So, every sizable task (30 min and up) get's a jira ticket.
The Google Deskop gadget Task List and Timer Timer  lets me create a series of tasks and switch between them (must like one of those chess timers).
I use the gadget to keep track of time and then enter it into the jira issues. I try to add quick summaries and nextsteps when I enter worklog so it's easier to me to pick up from where I left off. I'm usually switching a lot and I need to keep the cost of that low or there'll be pain. http://desktop.google.com/plugins/i/tasklistandtimer.html
This is how I am tracking my TODO lists and doing my time tracking now (in addition to keeping notes about the projects I work on). My work flow is very new, so it still requires a lot of refinement. But for the basics, I am happy about the reporting and planning capabilities. I already spend most of my working hours in my editor, so being able to use it as my daily planner and note-taking application is a big plus in my opinion. http://www.gnu.org/software/emacs/
if you using eclipse, Mylyn  is the best way to keep track of you time and context(e.g if you work on a task, it will keep track of the files you open, then automatically open all the files when you want to work on the task later on), mylyn is very powerful, highly recommended it. http://www.eclipse.org/mylyn/
My tool of choice is 88 Miles (http://www.88miles.net/). I'm very happy with it.
I just note the time I come in the office and the time I leave. Subtract them to get my total 'development' time. And enter that at weeks end into Microsoft Project Server that my company uses.
I use 37 Signals BaseCamp  to keep track of my clients and time spent for each. http://www.basecamphq.com/
German speakers might have a look at our web-based time-tracking solution called LogMyTime Zeiterfassung  (an english version is planned, but not yet realeased).
LogMyTime an AJAX application at it's core, but also comes with smartphone clients and supports an open API  for further extensions.
We have paid a lot of attention to making it as easy to track your time with it. We are after all using it ourselves to track our time :-) http://www.logmytime.de
Try Time Doctor, Its an alternative to Rescue Time  that can very accurately measure how much time a person has spent working and on which tasks. http://www.timedoctor.com/blog/2010/07/25/how-is-time-doctor-different-than-rescue-time