How Not to Do Time Tracking for Software Developers
7pace.com
7pace.com
I read this article and I think it's missing the point about what's so hard about time tracking.
What's hard is: Implementing the trigger on the context switch.
You're working on one thing, something happens and you make a context switch to something else - and in order to track your time, you need a trigger to fire to prompt you to record the switch. It doesn't matter if it's in a spreadsheet or an app or on a piece of paper - I find that my brain doesn't fire that trigger very reliably. Especially if I'm busy.
If someone can solve that problem with a fancy app, I'd be impressed!
I've said it in another thread [1]: I want a robot that watches me and quietly makes intelligent decisions about what I'm really doing, and tracks that.
* 08-23 * * * ~/.local/bin/with-i3 '~/.local/bin/record-active-window'
this is record-active-window: # set LOGFILE to whatever place you want to record things.
echo "DATE = $(date +%s 2>&1)" >> $LOGFILE
echo "IDLE = $(xprintidle)" >> $LOGFILE
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | sed 's/.*# //') WM_CLASS WM_NAME 2>&1 >> $LOGFILE
this is with-i3 #!/bin/bash
source <(cat /proc/`ps -e | grep ' i3$' | awk '{print $1}'`/environ | sed -r -e 's/([^\x00]*)\x00/export \1\n/g')
bash -c "$*"
I was too lazy to figure out what env vars were missing from the cron (probably dbus socket) so i copied them all from the i3 process aboveThat plus the habit to lock the screen while I'm away from it works fairly reliable.
edit: you also have the idle time in case you want to ignore result where you've been idle for way too long (forgot to lock screen)
edit2: a sample log entry (idle is in miliseconds, date is unix timestamp in seconds)
DATE = 1550608681
IDLE = 2456
WM_CLASS(STRING) = "google-chrome", "Google-chrome"
WM_NAME(UTF8_STRING) = "Edit | Hacker News - Google Chrome"
If only Slack changed the window title when I change chats, I could also track how much time I spend talking where :) The web version does it though, so I might stop using the electron app...This is not perfect either, but its just a little extra work to convert it to JSON and put it in elasticsearch to use kibana on it.
Say I'm supposed to write some code, so the IDE should be the front window. But I get carried away trying to test an edge case, so I spend 4h in a shell doing stuff that's 100% related, but not in the IDE. Not really a contrived example. Or spending 3h in a browser researching something and reading docs and forum posts about $software when I was supposed to write a one liner fix.
TLDR: Didn't work, gave up with it.
Not perfect but decent.
But just take the category "browser usage" as an example.
Semi-relatedly, one reason I hate web apps for "persistent" things that should be standalone, e.g. stuff like Slack or E-Mail. Not only does it not fit my mental model with alt-tabbing, it also lumps this uselessly together like "GUI usage vs CLI", so broad is "browser".
As crazy as it sounds, I've even experimented with 5 minute "pomodoros" using this technique - 5 minutes on and 1 minute reflecting. What can you do in only 5 minutes? When I first started it was hard to think in those terms, but as I got better at it, I realised that almost everything I do takes less than 5 minutes. If it takes more, then it's an indication that I need to rethink my approach.
For example, if I'm reading code, it makes sense that it would take more than 5 minutes, so I'll make a goal -- find out how X works. If I'm not finished in 5 minutes, in my 1 minute retrospective I think, "Am I approaching this task in the right way? Is there a better approach?" If no, then the next 5 minutes will be the same as the first. However, I often find that having that break snaps me out of doing unnecessary things.
I can't do the 5 minute thing every day (it is exhausting). I'm dramatically more productive with it, though (surprisingly so). It's made me realise that these kind of enforced reflection periods are really valuable. While you are reflecting, it's easy to write down what you just did, so it's kind of 2 birds with 1 stone.
I built myself a solution that means I can add events to a calendar that describe my day. Different calendars for different clients and different event titles for each project.
This worked well for me and now I’m trying to build it out and sell it. If you’re interested it’s here: billabl.co. I’ll warn you though, it’s early days and likely to break (although I’ve been using it for years).
The UI is great for that as well - identify a block that is made up of several 1-minute back-and-forths between browser and IDE, drag across that, and enter task, for example.
The further complicating wrinkle for me personally is that I work at a robotics company, so I spend a bunch of time at ssh terminals to remote machines (robots, shared VMs, etc) where it is neither practical nor desirable to install vim plugins hooked up to my personal time tracking setup.
So I'd love for the observer to be able to be able to also watch my remote shell sessions and record things like which file paths I'm editing and commands I'm invoking, from which I could fairly easily construct rules about which general problem area I'm working in.
I still feel like some type of foot switch would be better though.
The provided reports are also great, but if I need anything crazy, I can easily extract the data from the SQLite database.
It's been working for me for many years now.
I get a notification 15 mins before a task change occurs so I can decide either to continue because I’m on a role (often not the case, actually just flailing at a bug) or move on.
If plans change I can usually retrofit my day as the calendar reminds me of the general structure.
It’s worked significantly better for me than reactively tracking my time unless the task length is small e.g. sub 30 mins (something like marking a single students work).
Pomodoro forces a context change, every half an hour. This way I don’t end up yak shaving for half a day when all I needed to do was realise that this solution would require yak hair, go find a different solution.
Rescue Time helps me figure out what I was doing as a kind of forensic tool. There’s heaps of prodding and follow up available in the premium package (apparently), but for me just knowing that I will need to explain to myself why I spent three hours on HN and Reddit today helps me stay away. Mostly.
Using the desktops is an extra bit of information I can use to give context to the robot to help with tracking.
"They’ve taken a tool that could give people more ownership over their own work and distorted it into a mechanism for managers to exert control over their team."
This is true for every company, no matter the tool. This could equally apply to a Methodology, meetings, deliverables, timelines, or any other top-down approach designed around coercion.
I'm reminded on Tom DeMarco's thoughts about Control and what kind of projects need such controls [1]:
To understand control’s real role, you need to distinguish between two drastically different kinds of projects:
- Project A will eventually cost about a million dollars and produce value of around $1.1 million.
- Project B will eventually cost about a million dollars and produce value of more than $50 million.
What’s immediately apparent is that control is really important for Project A but almost not at all important for Project B. This leads us to the odd conclusion that strict control is something that matters a lot on relatively useless projects and much less on useful projects. It suggests that the more you focus on control, the more likely you’re working on a project that’s striving to deliver something of relatively minor value.
Can I really be saying that it’s OK to run projects without control or with relatively little control? Almost. I’m suggesting that first we need to select projects where precise control won’t matter so much. Then we need to reduce our expectations for exactly how much we’re going to be able to control them, no matter how assiduously we apply ourselves to control.
[1]: https://www.computer.org/cms/Computer.org/ComputingNow/homep...
It seems to me that human values like happiness and respect can only exist where a market isn't efficient yet. It certainly seems so if you look at worker treatment vs. margins/competitiveness.
I suppose then you're still left with competitiveness between countries.
In comparison, with software, we often don't know what we want to build except in vague terms. It's a bit like one of those failed movie projects where they know they want to make a Superman film, but they don't actually have a script and are constantly rewriting as they go. Also, unless you have a very enlightened group, usually there is nobody that is responsible for the vision of the project except in very vague terms. If you have a question, "Should we collect the user's login data before we allow them to see the welcome splash screen?" usually nobody knows. When someone makes a decision, it's not necessarily due to having an overall vision of how the product works, but more a random choice. Often the people making the decisions about how the product will work are marketing, sales or management figures, instead of people on the creation side of the equation.
I think the latter issue can be fixed and I think it would go a long way towards making better products. The former issue, though, I think is not fixable. We tried the "analysis upfront" approach for decades and it never worked well for software. Usually you can't tell what you need until after you built it at least once.
Your comparison is silly.
I was suggesting that the script is a bit like what we used to do when we wrote requirements documents. I doubt many people do it any more, but a long time ago we used to describe all of the workflows for an application before we did any design even. It was a description of exactly what would happen in every scenario. Sometimes it would have UX descriptions, but often not -- those would come later. This almost always fails because usually people's initial ideas are poor and it takes iteration to come up with a product that actually works well.
I don't think it's too far of a stretch to compare a script to a requirements document. Of course apples aren't oranges even though they are both fruit. You can find commonalities in anything and also differences. My main thought was that the OP suggested that filming a movie required complete control over the process, even though it was a lucrative endeavour. I thought, what's the difference between a movie and a software project, then? Are we missing opportunities because we don't apply enough control?
I don't think so. I think a movie project has a lot more information about what they are building before they start than a software project. That's the reason that control works better for them. However, I do think that software projects often lack vision because often nobody is responsible for that vision. Interestingly, as I said, movies appoint someone to be in charge of the vision of the project. Would the same thing work on a software project? I think it would.
If you think that my comparison is silly, then how do you rationalise the OP's claim that control is necessary for making a movie, while it appears that control is something we want to avoid for software projects? Or do you believe that software projects do require control in the same way that film making does?
> We’re outspoken advocates for tracking time. After all, we are a team of software developers who willingly and knowingly created an application specifically for the purpose of time tracking, right? Our philosophy is simple: time tracking is like fitness tracking, it’s a way for you, as an individual, to assess yourself. We think that it’s totally normal and healthy for developers to want to own their time in a quantifiable way, measure their own abilities, and master their craft.
> But it’s no secret that most developers have a visceral reaction to the very idea of tracking time, and the truth is that most companies do time tracking entirely wrong. The reason why developers hate tracking time so much and fight tooth-and-nail against the idea of having to log hours is because companies have royally screwed it up, they’ve taken a tool that could give people more ownership over their own work and distorted it into a mechanism for managers to exert control over their team. It’s like the company’s way of saying, “Sure, we trust you to do your job… but – just in case – we’re watching you.” What kind of employee-employer relationship do you think that creates?
> With almost anything in life, there’s a right way to do things and a wrong way, and time tracking is absolutely no different. It can be an effective tool for helping developers own and improve their own abilities, but only if management resists the temptations to use it in other ways. In most cases, if the developers on your team hate time tracking, it’s because of how it’s being implemented (or because they have PTSD from a previous job where it was implemented poorly.)
* I only have time for bullet points :)
What counts for time tracking and what doesn't? If I spend an hour emailing back and forth with a stakeholder, none of this is reflected in my GitHub activity. So there is a delta between what is billable time and the actual deliverable.
What if I spend an hour researching a solution for a feature? Or debugging my environment? Again, that implies delta between billable time and the deliverable.
What about my level of expertise? I might be a junior or senior level developer; I might have certain specialized knowledge in an area of programming (or lack it). Again, more delta that tracks closely to the specific logistics of a small feature and less with overall "time".
Suppose I had a machine that strictly tracked the amount of time I spent "doing something project-related" (whatever the specific rubric). At the end of the day, I now have a number. What does this number actually tell me? I am not sure it is that useful and it definitely depends on however the rubric was defined (which would be inherently arbitrary anyway).
To me, it makes sense to just allot hours to devs and trust that they are doing their jobs. When people stop doing their job, peers notice anyway, hour tracking or not.
It shows when you started and stopped working for the day.
An example chart: https://wakatime.com/blog/27-fill-the-gaps-in-your-coding-ac...
I've done this with good success when I was required to track my time. If I'm not required to do it, I find that I just dont bother.
The key to making this work, when I couldn't make it work in Jira, is lack of friction. In Emacs, if I want to switch tasks I'm working on, it takes the following sequence of keypresses:
C-a a -- switch to Org Agenda
C-s taskn... <ret> -- find new task "taskname" via incremental search
i -- clock in, automatically clocking out the previously active task
s -- save all open org-mode files
q -- close Org Agenda window
It's in my muscle memory, and I can do that faster in there than it takes for a single Jira page to refresh (reason #123 I prefer desktop native over web apps, and don't consider the latter as proper tools).I've found that I'd have no issues tracking my time by day or at most half-day increments, especially since for the most part that's how I end up working on things in a lot of cases (as a developer, not a manager).
I feel like it would give most of the same benefits with a magnitude less work, but I haven't ever tried it out in a real situation before and I'm curious if it holds up.
These days I use Emacs org-mode for todo items and time tracking (+ pretty much everything else), which makes it much easier to be extremely granular in my tracking without having to expend much effort. Since I have my todo list in front of me for any task anyways, starting the clock is just one keystroke away.
That said, I try to keep myself from calculating how much time I 'need' to save to offset the time it took me to get everything set up and to get comfortable with Emacs/Org-Mode ;).
Between increased efficiency, less proverbial papercuts from alternative ways of doing things to cause your death, and things you just didn't do before you reduced your friction, switching to Emacs/Org-Mode has probably paid for itself many times over :).
2019-01-08
fos.hledger.sup .
adm.email ..
adm.finance .... .... ..
fos.plaintextaccounting .
fos.hledger.issues.941 .... .
has-res ...
biz-res ..
I've trained myself to update this often while at the computer, and before walking away. Delayed retroactive logging is also pretty easy. Working in quarter/half/whole hour chunks, and in rhythm with the clock, and having a pane showing recent sleep/wake/timelog-saved events, all help. Not every day is the same; this system has been quick and flexible enough to suit a range of conditions. I can set daily/weekly/monthly time budgets if I want. Some more details at [2].[1] http://hledger.org/timedot.html
[2] http://hledger.org/Time-planning.html#simons-hledger-time-da...
Time tracking and continuous code code review is an important way to spot workers who can't stay on task or are way over their head. If you can catch issues early, you can help them and the team succeed. If you lack time tracking and continuous code review many developers will "fall through the cracks" and it will take much longer to discover they are a net negative to the team. Even if it becomes apparent, it becomes much easier to point to sometime somewhat objective then gut feelings.
Time tracking is good for accountability. Time tracking should be simple. Time tracking should only loosely be associated with tasks.
* Email 0:45 * Meet with customer 1:00 * Program Complete solution and deploy it (TASK045) 0:05
I would be very wary of developers who refuse to accurately track their time.
In your example email took 15 minutes in reality it took 1 minute and I've used 14 minutes to get a coffee speak to an employee about upcoming company bake sale, holding the door for the CEO and getting to the conference room 5 minutes early to meet the client.
Hmm. As a software developer you get really frustrated when you have to deal with this expensive piece of software.
Blessedly, it was an internal tool rather than a way to track client billing; the standing instructions were to just choose some random block of hours corresponding to your total time worked, so that you could get to the project-hours fields that actually mattered. But internal usage also raised the question of why they were voluntarily keeping a tool slightly less effective than a century-old punchclock.
One of my reports worked 4 days a week ... so if they took a half day of leave at any point come the end of the year they would typically have 0.499. or 0.999. left to take.
>if we don't report whole number cap-ex hours on our return, we'll avoid an audit!
When the hours of the tasks didn't add up with the daily attendance you had to tweak your data or you couldn't close the day. Either added or removed 1 minute to the work day.
So a work day with 8 hours maybe had 7.98 hours of tasks. You tweak around a bit so that they both matched.
This was a reported bug (incl. explanation from a programmer) that wasn't fixed for a very long time. Maybe it's still broken.
This feels hyperbolic. There are legitimate reasons to measure time spent, and it doesn't amount to lack of trust. And similarly, failure to meet time expectations doesn't amount to shirking or lying.
That said, I personally think it's wise to track your own time for a variety of reasons, one of which is to have some defense against someone else's measurements.
I worked at a game studio where the employees were on average reporting 60+ hours of work. The managers wanted to verify the survey data, so they implemented opaque time tracking (meaning they didn't show the employees the data, and they anonymized the data and didn't use it to come down on individuals, only to collect aggregate information.)
The result was that employees were factoring their commutes as well as optimistic expected arrival and departure times, and fairly dramatically over-estimating how much they actually worked. The average was much closer to 40, and 25% of the company was working less than 40 during final production crunch. I personally tracked my own time at the same time, and it turns out I was also working less than I thought. There's no doubt that crunch feels like more work, but measuring revealed a discrepancy between feelings and reality.
Personally, I was working much more than 40. I thought I was working 75-80 hours, but it was closer to 60-65 at the time. It legitimately felt like 75 even though I know exactly what 80 hours a week feels like, even though I had worked those kinds of hours for long stretches before that.
One of the issues is that during crunch when people start staying late, often they start coming in later as well, so the day slides. The studio would buy dinner at 7 for the employees staying late, so quite a few people would roll in around 10:30 and leave after dinner. They felt like they were working a lot of overtime because they were staying late, but not accounting for coming in a bit late.
The code and design quality turns to shit in such places. Everyone is trying to keep to the beat of their allotted time. Here’s your shovel. Dig a tonne of soil. You have 2 hours. No one is thinking of hiring a JCB because well thinking about that takes time from your time tracked task.
Places that don’t track time probably get better results although they can’t prove it with metrics. Compare it to parenting, why aren’t we timing nappy/diaper changes? Oh because it’s mostly instinctive. A bit like programming!
Sure we need to make sure we are on track but this can be done at much a higher level. Story points used properly fill this goal. Where I work we use them but there is no punishment for not meeting the story points. Not even a frown of disappointment that when we added up some numbers from a random distribution, they didn’t add up to some arbitrary number. Story points are a useful indicator, but they are part of a vector of information. We didn’t meet the story points because we worked on some technical debt, because ... for example.
So in conclusion don’t you dare track my time and pull me in a room because I didn’t dig that hole quick enough.
All workers deserve autonomy and respect, should resist work "speed ups" at management's insistence, and should demand sane working conditions. We should show a united front across all sectors, not try to claim that our job is special.
As a lead/director it is rarely useful to know exactly which task I am working on, but better to know that I spend the right % of time on each project or type of work.
Even adding a spreadsheet row with macros takes a few clicks, but simply reaching over and pressing a physical button would be the fastest way to do this.
I personally work in a semi small product based company and we don't track time, but we have a few "point in time goals" where we need to get a solution sorted by a specific date.
I started with extreme programming in 2000 and used to use the planning ideas and velocity indicators, which is okish, but kind of a blunt tool. However the real mechanism to deal with problems is scope management. So now I just work on the idea of continuous focusing on goals and scope management of those goals. This works pretty well in a small team and time frames that are not too long (2 - 3 months).
However a lot of our development is purely feature based, which is often not time critical, but are scope managed to what I'd call "worthwhile" increments
So instead of worrying about time, my emphasis is goals/focus, feedback on progress and scope management. This tends to lead to good time outcomes.
That's the problem right on their website[1]. Developers shouldn't have to waste time manually time tracking, it's been automated already[2]. Unless your programmers' time isn't worth much, you're better off not manually time tracking at all. Due to context switching, manual time tracking actually hurts overall productivity. I've heard people say they get in the habit of manually time tracking and don't think about it anymore, but that's just getting into the habit of getting distracted from the real work: shipping changes.
[1]: https://www.7pace.com/timetracker
[2]: Many tools already exist for automatic time tracking.
I eventually solved the problem by telling them I would finish the current project but “this isn’t working for me”. Poof, no more time tracking requirement.
"If you really want to demoralize your engineering team and galvanize their distrust for time tracking and management, then you can use their time sheet data against them.
Call them into a meeting. Pour over their time entries line by line and pick apart how they spent their week."
=> Useless meetings are much worse than useless timetrackers.
https://timeular.com/?gclid=CjwKCAiA767jBRBqEiwAGdAOryNJfX4e...
It is an 8 (or more) sided shape that you flip to change tasks. The jury is still out as the people who are testing it havent had time to set it up..
My current company it makes sense to try my best to the hour/half-hour, because we're consultants and that's how we bill our clients.
A past employer for me was the worst of both worlds because they had a consultant's mindset towards billable hours having been born of a law firm, but not the consultant's approach to billing software development work. We were classified purely as "overhead" and not allowed to "bill" our (internal) clients. Meanwhile, despite starting life as a law firm it was by that point mostly a call center, and call staff to lofty law firm partners look like babies that need a strict panopticon.
Where things fall apart for me is logging overhead time, like time spent waking up with the first cup of coffee while reading company emails or doing IT-ish tasks on my dev system. I have no idea how to account for those times that doesn't make a mockery of the "Other" time entry.
In fact, I had to log X keystrokes and Y LOC every hour in order to be paid for that hour...talk about being a factory worker.
One tracked time to attempt to get r&d tax credits on certain work. The other was an agency that tracked time in case of disputes with unruly clients (such as the time we had gone through 3 project managers and 2 CFOs while we worked with them, and they were desperate to recover money from their own bad mistakes). The rest didn't track time at all.
Not to mention that LOC as a metric has been an industry joke at least since the early 80's: http://www.folklore.org/StoryView.py?story=Negative_2000_Lin... I've heard of funnier versions of that story, but haven't tracked them down yet.
Some of the most productive hours are LOC removed.
Counting keystrokes?
That sounds nightmarish, man.
Now that I manage my own team I let them abuse the Other time entry. I only expect 70-80% billable anyways, which lines up with studies on productivity. Anybody expecting 100% productivity is an idiot and anybody reporting 100% productivity is a liar.
Now I think about it - should have been a cron job, maybe that was why it was rejected.
I'm getting this:
Secure Connection Failed
An error occurred during a connection to
www.7pace.com. Cannot communicate securely
with peer: no common encryption algorithm(s).
Error code: SSL_ERROR_NO_CYPHER_OVERLAP
The page you are trying to view cannot be
shown because the authenticity of the received
data could not be verified.
Suggestions? Yes, I've read the article via the Google cache.I removed the s in https and it loaded but redirected to the https version, confusingly.
Here is one possibility. The developer checked on the lead system every day, which mostly ran itself. After the developer left, they checked a few times and then stopped looking at the lead system's reports because it was always good. Then months later another team replaced a key system that the lead system needed. Nobody noticed until sales reports sucked. By the time they fond and fixed it, they lost $X million and the people who got fired got fired for not having followed the recommendation to keep the system monitored.
I've seen variations of that story before. And I've seen companies get hurt because of it.
Now there might be blame for the developer. But there are enough ways that the developer wouldn't deserve blame that I wouldn't assume the worst.
A software that brings a hundred million dollars couldn't fall apart, the company would get guys to reboot the server and have a look.
The rare cases of software suddenly dying is when the source code and/or the setup is lost. The software or the database stops one day and nobody can figure out how to start it again. There is a lot of blame to put on both development and management for reaching this situation.
> fell apart without me
not only that but, this is not reddit. citing a subreddit means nothing.
and yes, some people are too important for a product.