Perspective is Hard
As knowledge workers, we often use digital tools to organize and track our tasks on the job but it can be difficult to do the same with tasks in our personal lives. Even on my most productive weeks, I sometimes arrive at Friday without a clear sense of what I was able to accomplish. Despite the amount of effort expended, the rush of the week can make it difficult to maintain perspective with regard to what I’ve gotten done.
When working on a software project, nothing is quite as satisfying as getting a new feature or bug fix merged in to production. The more I complete, the more confident and motivated I tend to feel. In this context, my accomplishments are self-documenting since all code is subject to version control. However, life as an adult presents us with loads of small, mundane tasks that are not measured in this way. Things like taking out the garbage, going for a run, or filling out paperwork are generally easy enough to do but without a way to measure them it can be even easier to put them off indefinitely. Having noticed this as an issue in my own life, I decided to turn to my computer for help.
Choosing the Right Tool
Using software to improve my life is, while certainly a means to an end, something of a pastime in and of itself for me. As a result, I’ve tried my fair share of productivity/goal-setting apps but I was never able to get the results that were advertised. This wasn’t necessarily because the apps themselves were flawed. After all, they often tout numerous testimonials from satisfied users. Some (such as Habitica) had novel features that seemed at first to be compelling enough to nudge me towards regular use. But over time, I found it difficult to integrate any existing apps into my regular work day. Since they weren’t already a part of my routine, the act of using the app effectively became another goal that was difficult to track. Eventually, I realized that I was approaching the problem from the wrong end.
Adapting to What Works
As I alluded to earlier, I already use several tools to help me keep my personal and professional lives organized. My favorite so far is the kanban-style collaboration service, Trello. I enjoy using Trello for a lot of reasons but what initially drew me in was the fact that it was extremely easy to access when I needed it. When I wanted to add a new todo item, I could quickly add it using the official mobile app or through my web browser. I realized that I had began tracking my daily accomplishments without even realizing it.
As a method of keeping a tally of what I had left to do, Trello was a great tool. However, what I was looking for was a list of what I had already accomplished . And while Trello does allow you to see a list of your past activity, it didn’t provide the context around those past actions that I felt was necessary to cultivate confidence and motivation. In my experience, a key ingredient of appreciating my accomplishments is making time to actively acknowledge them. Unfortunately, the passive list that Trello offers wasn’t scratching that itch. Again, my programmer-ly intuitions began to kick in.
Designing an Alternative
Writing software is something I’m interested in for both work and play so I’m always on the lookout for a compelling side project. This idea seemed to fit the bill nicely as it was manageable in scope, involved interesting technology, and would (hopefully) result in something that would improve my life.
Fortunately, Trello offers a public API – a means for reading and manipulating my Trello data from an external piece of software. This meant that I could continue to use a tool I was already familiar with and augment it to suit my specific needs.
Now that I had a vague solution in mind, I would need to formalize my requirements. After all, I didn’t want to recreate yet another piece of software that wouldn’t work for me. Sitting down with my trusty notebook, I decided I would need:
- A way to identify what items in my Trello account were considered “accomplishments”. Would they be archived cards? Completed check-list items?
- A timeframe within which to capture my accomplishments. Would I be looking at accomplishments for the past month, week or day?
- A way to deliver and display these accomplishments that would encourage (read: force) me to acknowledge them.
Identifying Accomplishments
Using Trello is relatively free-form so the definition of what could be considered an “accomplishment” can vary from user to user. Some people prefer to have separate “To-Do” and “Completed” lists, effectively allowing them to see what their accomplishments are, while others (like myself) prefer to archive their tasks (or “cards” in Trello parlance). While the former approach does provide a method for displaying accomplishments, there were a few drawbacks that caused me to prefer archival over a Trello list of completed cards:
- Effort of Maintenance: I wanted my list of accomplishments to include items from within a specific timeframe. A “completed” list would require me to manually remove cards from it in order to keep it up to date – a habit I would likely fail to form.
- Effort to Access: Similar to Trello’s built-in Activity Log, this would require me to dedicate time on a daily basis to logging into Trello and inspecting the list. I recognized this as another barrier that would prevent me from making regular time to meditate on my accomplishments.
In addition to these drawbacks, I realized that a programmatic solution could be expanded later to display weekly, monthly or yearly accomplishments. Together, these confirmed for me that card archival coupled with some custom software was the most effective way to go.
Identifying a Timeframe
While I knew I would eventually want to look at my overall productivity trends, I decided that it was best to focus on short term goals at first. I wanted to build confidence and momentum from small accomplishments which would, in theory, lead to larger ones. Because of this, I decided that my app should provide me with updates on a 24 hour cycle and only include items that I accomplished within that timeframe.
Acknowledging Accomplishments
While it’s easy enough to log into Trello to look at my list of recently archived cards, I knew that it was important to have that list delivered to me in some way that would virtually force me to see it. I considered a few options but eventually landed on the simple (and surprisingly effective) approach of sending the list to myself via email every morning. In addition to being cheap and easy to implement, this would also ensure that I would see the list regardless of whether I was at my computer or not.
Architecture
With my requirements and corresponding plans in hand, I began the work of translating them into code. I’ll save the dirty implementation details for another blog post but here is a high-level run down of the overall architecture and some of the technology that was used.
Mailer
Though it’s not much to look at (technically, it’s nothing to look at), the Mailer is the backbone of the entire system. This is the piece that is responsible for gathering information from a user’s Trello account, extracting the relevant bits (i.e. “what did they accomplish in the last 24 hours?”) and sending it to the user. I decided to build this piece first because it would ultimately be the test of whether my underlying idea held any water (i.e. “will seeing a list of my accomplishments drive me to accomplish more?”). After implementing this and trying it out for a few weeks, I decided it was working well enough to move ahead with the rest of my plan.
Technology Used
Account Management
During the course of developing the initial concept of this new tool, I had occasionally discussed the possible usefulness of such an approach with other Trello users. To my surprise, some of them expressed interest in giving it a try. Though the mailer could support multiple users on its own, anyone wanting to start (or stop) using the system would have to request my help. Because of this, I decided that I would need a complimentary system that would allow users to sign up for, manage, and close their own accounts. This would consist of two parts: a user interface and a REST server.
User Interface
Technology Used
- Vue.js
- Vue-cli (webpack, etc.)
- Spectre.css
- Hapi (to serve the production website)
- Rollbar
REST Server
Technology Used
Outcome
As the emails started to show up in my inbox each morning, I was pleased (and a little relieved) to discover that, even though they took less than a minute to read, they did offer a tangible boost to my satisfaction and motivation. This, in turn, caused me to add and complete more items in Trello much more quickly and regularly. And, perhaps most exciting of all, I received similar reports of success from others that had started using it.
Overall, the time investment I made in developing my own solution has been well worth it. In addition to gaining a better grasp of some of my favorite technologies, I learned that even a simple idea can lead into a surprisingly useful bit of software.