Side Projects

Work and Goal Tracking: Tips and Scripts for Working at Home


My scripts are free to download, modify and distribute, and the readme file gives a detailed description of how to use them: https://github.com/MalcolmAR/LWT

The article below describes the history and design behind my work and goal tracking system.

Tracking work as a way to stay motivated at home

Using a count-down timer for work and break sessions is a good way to stay motivated and focused. When I first started using a timer to track twenty-minute sessions (work + break), I would record an entry in a spreadsheet, indicating what type of work I did, then when a project was completed I would have stats for what types of work were involved and how much time was spent on each as the days progressed. As a freelance public engagement specialist and an employee of universities, I end up doing a lot of different kinds of writing, content production, and administrative work. I’ve found a record of the time spent on different types of work makes planning a lot easier, not just for similar jobs, but for new types of projects that have similar work-types. This data ends up being particularly useful for setting quotes for freelance jobs.

The idea becomes a website project

A few years ago I started practicing Python. In my initial enthusiasm I decided to give myself the project of designing a website for “Work Tracker”. I designed it well enough that I could track my work locally off my laptop, and save the data to a PostgreSQL database. The website asked for the number of work minutes plus the number of break minutes, then ran a countdown timer and, at the end of the work session, it asked for the work type, then ran the break timer. 

While I developed the website and used the project as a reason to read the Python and Django manuals everyday, I also brainstormed a new layer for the system: goal tracking, and this is where I think my design becomes something unique. At any time while the timers ran on my website, I could start a new goal. The goal would be saved to a goal-tracking database table that time-stamped the entry as the goal’s start-time, and recorded the projects the goal was associated with. At any other time I could declare the goal accomplished, and Work Tracker would tell me how long it took to finish the goal. But the time wouldn’t simply be the duration between the start and end time-stamps, but the sum of minutes from all work tracker entries for the affiliated projects that occurred between the time-stamps. 

The work-tracking and goal-tracking database tables both had many-to-many fields (one goal could be associated with many projects, and one project could be associated with many goals). Today, using the same database structure, Local Work Tracker (LWT) has python scripts that have built on this idea to produce a lot of interesting stats that show the life of goals superimposed over parts of various projects, and project flows in terms of what goals were accomplished during the project. 

In the next stage of work I want to affiliate goals with work-types (regardless of the project, or for a certain set of projects). Actually there are lots of potential plans for add-ons and improvements, but as I learned with the website, I can only dedicate so much time to Work Tracker, so whatever ideas I come up with have to be manageable and, most importantly, result in a system that’s stable, efficient to use, and accomplishes whatever I’m trying to accomplish with that particular build. 

The website project gets put on hold

My ideas about goal tracking started rolling around the time I had successfully learned the fundamentals of building a Django site and using web-languages to produce a decent design for this particular project. My learning phase was complete, and I had worked out the database design, the pages and features for the site, and the plan for launching Work Tracker as a commercial project. This also meant that I suddenly got a good look at just how much work is required to launch a commercial website (or application). It was far too daunting, so the next time my development work led to a state where I couldn’t use work tracker myself, instead of working furiously to the point where I could use it again, I simply wrote out documentation for where I left off the project, and what the steps should be for what sensibly should come next: a complete rebuild (and that is where the commercial website still stands). 

I’m forced to live without Work Tracker for a while

Without the website I would have had to return to simply recording the data in a spreadsheet myself, but I found it hard to do this again. Every time I tried, I would get flashbacks of Work Tracker, like I was remembering good times at work with my little robot buddy. One of the things I started doing at the same time I started recording this data was to write a “congratulations on completing a work session of [work-type]” message to myself, because I read something by a psychologist that said our brains react  positively to messages that declare accomplishment, and it really doesn’t matter how big or small that accomplishment is, or even if it’s you congratulating yourself. Work Tracker is coded to give the congratulations message after each work session, or after a goal is accomplished, and I think that’s had the effect of making Work Tracker feel more like my robot buddy. Going back to writing out the message myself wasn’t happening, I missed Work Tracker too much

Running Scripts from a Python shell, this is what it’s all about

I was missing Work Tracker at the same time that I was missing my partner (who was working for a few months elsewhere) and feeling unhappy with my job. For a period when work was slow (the work that I love doing) I was briefly in a position where I did long hours of some very monotonous data entry stuff. Trying to make the best of it, and to keep myself busy, I spent my weekends developing scripts that facilitated the monotonous work, scripts that I ran from a Python shell in Windows Command, and that worked with Google spreadsheets. 

My work life eventually brightened when I signed a contract with a long-time client’s Social Innovation Research Group, and in the time before I started as communications manager there, I committed to finishing a redesign of Work Tracker that I could use from a Python shell, and with spreadsheets (local files this time), where I would save the work and goal data as it rolled in with my new position. 

I think running scripts from a shell in Windows Command or Mac Terminal is what I’ve come to love best about Python. One of the things I think is important in life is keeping track of what activities are for that thing called work, and what activities could be defined as active leisure (active as opposed to passive, which has a murky dividing line that everyone must learn to see for themselves). I define a category of active leisure called “house”: it’s very broad and encompasses cooking, cleaning, sorting through old photographs, organizing my digital life, and now writing and using python scripts from a shell for personal reasons. LWT is a python project that exists as active leisure for me, and so not only is it rewarding in its functionality, it’s rewarding because active leisure is what makes life worth engaging in, worth getting better for. 

All that being said, Work Tracker is still a commercial project in terms of future plans. I hope by sharing the scripts and the idea, I can get some feedback and some cool peeps involved. The readme file on LWT’s Github page gives a detailed description of how to use the scripts, and the notes in the scripts provide a lot of info as well. The notes at the top of each script file (lwt.py and goals.py) indicate work I plan on doing next. Please let me know if you end up using them, modifying or adding to them, or if you simply think this is a cool project. If it does attract contributors and an audience, then you can expect to see more articles in the future.

Work Tracker: https://github.com/MalcolmAR/LWT