In my answer of the question about what are the important points to consider when starting your own company, I mentioned the fact that when the customers pay per hour of work, there must be a way for them to be sure that you don't make them pay for more hours that you actually spent working on a project.
But now that I'm thinking about it, how this can be implemented? In other words, how can you prove that you've worked on a project 32 hours the last week, and not 10 hours?
In our company, we use a basic home-made time tracking software which is very helpful but has its limits:
If the developer is browsing Facebook for the last hour but forgot to notify the application that he's not working on the project any longer, the application will still count the Facebook time as the time spent entirely on the project.
If an employee of the company has enough permissions on database level, nothing can stop her to modify time records for the last weeks or months (even if it can be more difficult to do with better audit and permissions control).
Finally, we don't even give to the customer some of the details about the time we spent.
- In our invoices, there are enough details to know that for a specific part of a project, a developer spent 121 hour working on C#/ASP.NET and 47 hours on CSS/HTML and that a database administrator spent 39 hours designing the database and 11 hours reviewing data access layer and optimizing queries,
- But there are nothing like that on September 24th, 2010, the database administrator was working on database design from 9:34 AM to 11:48 AM, then from 16:01 PM to 16:42 PM, then from 16:50 PM to 17:24 PM, and made two commits to the version control, the first one at 11:47 AM with the number 1234, the second one at 17:24 PM with the number 1239 as a proof.
So what is the current practice in other companies? How do you deal with time management to ensure that customers have enough information to be sure that they pay only for hours/days really spent on their projects?