Programming can be stressful. This is a lesson we learn pretty early on. Anyone who has wrestled with bugs and compiler errors will tell you the stress is simply a part of the job. We are constantly pushed by well-meaning colleagues and managers who have a vested interest in releasing a product on time.
Stress often comes from the challenges inherent in estimating unknowns, fighting bugs with a fast-approaching deadline, and poor work/life balance. In all this hustle, programmers often experience the uneasy feeling that there is something they should be taking care of—the nagging sensation that they might not be doing their part.
I have found a way to combat some of this stress. It’s not a magic cure-all, and it can certainly take some getting used to. However, I guarantee the disciplined among you will reap the same benefits I have—peace of mind, professionalism, and better relationships with your clients and managers.
So what do I do? I track my time. I track every second, every task, every day, and there are plenty of reasons why any sane software developer should do the same.
We work in an industry where all too often there are more unknown factors than known ones. For this reason, programmers can find themselves at odds with their managers. Regardless of how much we love to write code, other people need estimates. Time tracking is the only way you will figure out what those estimates should be.
What Should Programmers Track?
Assuming your project is well-managed, it is probably going to have four major task categories: Features, Bugs, Chores, and Meetings. When you track your time, each task should include a simple description of one of these four things.
The idea is to keep your tasks simple and to the point. You want to avoid falling into the trap of tracking “general development,” but you also want to avoid being overly specific. There is a sweet spot that is both accurate and easy for all stakeholders to digest.
Examples of How to Label Your Tasks:
- Feature – As a user, I want to see the nearest Pokemon on a map.
- Bug – App crashes after I delete a grocery list item.
- Chore – As a developer, I want to set up crash reporting with Fabric.
- Meeting – Daily Standup.
You can see that each of these items is clear and focused. If you find that the thing you are working on covers many different features or bugs, that’s a huge red flag! It means you haven’t sliced the project into the right kinds of pieces. Try to trim that feature down or split it into a few separate features.
As a general rule, you want tasks that are bite-sized: anywhere from a few hours to sixteen hours is a good range.
This is software project management 101. Pretend you are about to present your timesheet to a manager or some other stakeholder. If you could pick one of the following things to say, which would you go with?
- “I built the login module, and it took 9.5 hours.”
- “I built some things with logging in and also fixed some bugs with account creation, and it took a few days.”
The first of these is assertive and confident. It is focused. The second one makes you look like you are all over the map. Good time-tracking practices go hand-in-hand with solid project management skills. You need both. Working on one helps you develop the other.
Mastering Estimates
When faced with the task of estimating, most programmers are like deer in the headlights. We have no idea what we have gotten into. It’s scary.
People are saying we can do all this amazing stuff in so little time, and we just stare off into the distance hoping our feet won’t be held to the fire when these expectations inevitably clash with reality.
Believe me, I know the feeling. I have been there too many times. So what do you do?
To start, you can relax. This is no time to get defensive. After all, there is no need to be. You have the numbers on your side!
When you track your time, you can look back at similar features you have tracked to see how long it took you to build them.
Joel Spolsky, the creator of Stack Overflow, advocates keeping track of the accuracy of your estimates. If you are a chronic underestimator like most programmers are, you can factor it into your overall project estimate. Just take the time you estimated and divide it by the actual amount of time it took to build the feature.
Each estimate is a single data point on your own personal track record. In as little as a few weeks, you will start to see how good (or bad) an estimator you are. This habit is extremely valuable. You can use it to accurately predict your project’s ship date, even when your estimates are wrong.
What Joel discovered is that most developers actually aren’t that bad at estimating. Even when a developer messes up an estimate, there is usually some kind of pattern to the behavior. He found that most people either overestimate or underestimate by roughly the same degree.
So let’s say Mike is a chronic underestimator, and he has been tracking his time. Over the course of a project, his estimated/actual ratio for the hours put in will resemble a series of fractions, each less than 1.
It might look like this:
{0.4, 0.5, 0.3, 0.6, 0.5}
If you take the average of these ratios, you end up with the number 0.46.
What does this number mean? Roughly speaking, it means that when Mike says a programming task will take one day, he actually spends about two days on it.
I cannot stress how important it is to know that as a project manager. You can use those estimates to accurately plan the development timeline for your product. In fact, I would say it’s beautiful because you don’t even need to scold Mike about being wrong. He can keep on underestimating, and so long as his estimates fit the same pattern, you can still predict when your product will get released.
It’s also good news if you’re someone like Mike. It means you can improve your estimating skills just by tracking your time and seeing which of these two categories you fall into. Are your estimates too optimistic? Positivity is a great quality in all other respects, but you may want to add in some padding to improve the accuracy of your future estimates.
There is one other point Joel makes that everyone should be aware of. Developers should be the ones doing the estimating. We are the ones who know which programming tasks need to be performed, so only we can judge how much time each task will take.
If you aren’t being asked to do your own time estimates, and estimates are simply handed down to you from some authority figure, it’s a strong sign of a dysfunctional work environment. When you don’t have a say in the delivery date, it’s hard to feel all that motivated to deliver the feature on time.
I can’t tell you exactly what to do in a situation like this, but you should calmly try to explain why it’s so important for you to take ownership of the project. Good managers will trust you to do your own time estimates. Reward them by staying with the team.
Keep the Non-Techies at Bay
How would you feel if your car mechanic told you she found a problem with your engine and has no idea how long it will take to fix it? That is often how project managers feel when we try to explain problems in our code to them.
From their perspective, it’s all a bunch of techno-gobbledygook. They don’t care how we’re going to solve the problem. They want answers, and they want them right this second.
If you just stop answering, you are in for a world of hurt. Stakeholders will start to worry that the project has gotten out of control. They might take some rather drastic measures to bring everything back on track. In other words, you could get fired.
You’re the developer. You know everything is probably going to be okay, but I urge you to see the world through your client’s eyes. They don’t know about the one or two lines of code where you forgot to call this one function that will make everything okay. They are afraid of the unknown.
I have worked with brave leaders who can confidently stare into the unknown, and I have worked with people who flip out the second anything goes wrong. You can’t control how others will react to what is going on around them, but you can make stakeholders feel more comfortable by keeping them constantly updated on your activities.
When they see your timesheet and what you have been working on, people get a sense that you are a detail-oriented sort of person. This isn’t going to solve all of your problems, but it will definitely help.
If you are sending a daily progress report with an itemized list of tasks, you are going to appear more trustworthy and professional. Maybe the client is concerned about a bug or a missing feature. If they can see it in your daily task list, they will at least know you are working on it. This can earn you some major points if tempers start to flare.
Work/Life Balance
It is the job of managers to push you. Sometimes they do it for good reasons. They need to keep a client happy in order to pay your salary. Sometimes their intentions aren’t quite so noble, and they want to see if they can get a 10% boost out of you at no extra charge.
If you have a great relationship with your manager, this advice isn’t really for you. It’s for people who fall into that latter category, those who often find themselves pulling extra weight after hours.
Time tracking is crucial when you need to make your case to a pushy manager. You can show them exactly how much overtime you’ve been putting in, on which features, and for how long. It’s a great way to justify a raise or to simply walk out of the office at five o’clock on Friday, confident you’ve done your 40 hours.
Time tracking is also a great way to identify organizational bloat. If you find that you have tracked more time in meetings than in actual software development, it needs to be addressed. When you diligently track your time, you can sit people down and explain how all of those meetings take away from the time needed to do the work.
Xavier Morera does a great job of explaining why it’s so important for you to protect your productive time. He discusses the many distractions you can run into during your day, and how you can disarm them in a way that respects your colleagues.
Email can really kill your productive time, and it’s something you will start to notice once you start tracking your tasks. Xavier suggests picking a short time window during the day when you can respond to emails. This limits the endless back-and-forth you can get with email threads.
He also points out how important it is to communicate with your colleagues in other ways. Instead of keeping that email thread going forever, why not respond to it in person by walking over to their office? It’s nicer than simply ignoring it.
You have to slowly nudge people in the right direction. It takes time for people to adjust to the idea that you won’t be able to immediately respond to each request.
In my own experience, most managers are pretty reasonable when you explain your need for uninterrupted time. They will probably be impressed that you kept track of all those hours in the first place. When people see the actual numbers in front of them, you barely need to do any explaining. Your point will be clear as day.
Eight Hours Is Actually a Lot of Work
I keep saying this because I keep finding it to be true. Most people don’t even come close to working eight hours a day. That’s not to be taken as a judgment. It’s a basic fact.
Most of this is out of our control. Modern offices aren’t the kind of space where real productive work happens. There are too many distractions and interruptions to keep people from performing at their peak.
When I was working in an office, I maxed out at six hours of real work each day. I found that most of my time was either spent in meetings or spur-of-the-moment discussions with co-workers. There was little time for the mostly solitary, long-term sessions that produced the bulk of the work.
I have a simple challenge for you. Sit down, start tracking your time, and put in a real eight-hour day. You will be amazed what you can accomplish.
Most of you will find that working a full eight-hour day is pretty difficult. It takes some serious discipline. My point isn’t to make you feel guilty about not working a real eight-hour day, but to illustrate just how much of your working time goes to other activities that aren’t work-related.
This isn’t bad news. In fact, it’s the exact opposite! It means there is room for improvement.
There might be some dream project of yours, something you have always wanted to build if only you had the time. When I started tracking my time, my dream projects suddenly felt within reach. It was simply a matter of steadily putting in the hours, one day at a time.
I can now confidently say that with a little discipline, I could release six apps a year if I wanted to. Assuming just a few of them are successful, I can have a solid revenue stream to keep me afloat. I wouldn’t have known that if I hadn’t started tracking my time. Oftentimes, the real reason you’re not productive is a basic lack of discipline.
Figure out if You’re Wasting Your Time
When you start tracking your time, you might discover you’ve been wasting most of it. Don’t get discouraged if you do. Instead, consider changing your outlook.
- If you have had problems with pushy bosses in the past, perhaps there’s a good chance some of that has been your fault. That’s okay. Claim ownership of your mistakes and do your best to change your work ethic in the future.
- The next time that client tries to yak away on the phone for three hours straight, calmly state the need to stay on task. Most people will appreciate it.
- Is there some task you do each week that sucks up all of your time but doesn’t give you all that much back in return? Just stop doing it! Your future self will thank you.
I track my time because it gives me a clear conscience. At the end of the day, when I’ve put in my eight hours, I know it’s perfectly reasonable to unplug and go on a walk or play video games with my partner. I don’t need to do a bunch of mental gymnastics to justify why I need to take a break. I can just relax.
Programming doesn’t have to be stressful. Managers and customers are always going to be pushy. There is always going to be some bug that needs fixing. And oh yeah, it’s always going to be your fault.
That’s okay. Just take a deep breath. Count to four. Realize you are doing your best, and there are only so many hours in the day. If you are tracking your time, and you have put in a full eight hours of actual work, you have done more than your fair share. You can chill if you want to.
Track – Simple Time Tracking & Invoicing
If you are interested in tracking your time, and you happen to have an iPad, you should download Track – Simple Time Tracking & Invoicing.
I built Track for developers like us. Track makes it easy to create and share timed tasks by focusing on your workday and workweek.
Each day, you get a totally clean slate to work from. When you add a task, it goes up to the top of the list, and the timer starts counting. From this screen, you can see your total working hours on this task, today’s tasks, and all of your tasks from this week.
Track is designed to make it easy for you to switch tasks. I noticed that I keep returning to the same tasks during my workday, so I built Track to give a higher priority to my more recent tasks.
Let’s say you are working on an important feature in the morning, and then Bill Lumbergh barges into your office to call a meeting about the TPS reports. No problem! Just create a quick task to track the time for the meeting, and your software feature task will go directly beneath it.
Once the meeting is done, you won’t have to go searching all over the app for your task. Because your task is the second most recent thing you have worked on, it will be second in the list. Tap on it to start it back up.
Track is designed to help you focus on one task at a time. You can’t run multiple timers, and when you tap to start another task, Track immediately stops the task that was running. This helps to keep it simple.
When you are finished with your workday, workweek, or work month, you can tap on the share button to send an itemized list of your tasks to your manager or client.
If you want to bill for your task, just flick the switch and set your rate. Then tap one of the selections to share your tasks for Today or This Week.
You can share your tasks in email or an iMessage. Other export options are coming in later releases of the product.
Track also has a calendar view that lets you edit all of your tasks from this month and others. From the calendar, you can export all of your tasks for a given month. This is handy if you want to do more detailed bookkeeping.
Track is pleasantly minimalistic in its design. You don’t even need to create an account to use it.
If you happen to be signed in with your existing iCloud account, Track will automatically backup your tasks. That way, if you use Track on another Apple device (or delete the app), you won’t lose your data.
In the not-too-distant future, Track will be available on the iPhone & the Mac. Your tasks will seamlessly sync between the different devices, giving you access to time tracking everywhere you go, all without ever having to sign up for an account or remember passwords.
Track makes the complex simple. It takes the headache out of tracking your time so you can focus on creating great software.
If you have feedback about Track or this article, I would love to hear it. Shoot me an email at tedbendixson@me.com