Home / Blog Menu ↓

Blog: #productivity

31 posts / tag feed / about the blog / archive / tags

Momentum intro

Another entry in the neverending series talking about my personal productivity tools.

Momentum is my daily goal app, for keeping a goal chain/streak going. It’s a Python app running Django. The name comes from the momentum that a long streak gives.

Overview

Goals can be either binary flags (whether I did it that day or not) or timed (in which case Momentum keeps track of the time spent). The default mode is focus mode, which shows only the top unfinished goal at a time and looks like this (with dummy data):

momentum-1.png

The thin red line along the top is a progress bar showing how close I am to finishing my Momentum goals for the day. The red boxes show the last few weeks of the streak, the green box at the right is the button for saying I’ve completed that goal for the day, and the blue text under the goal name shows how long the total streak is.

When focus mode is off, it looks like this:

momentum-2.png

You can see a partially completed timed goal along with a binary goal. Momentum also supports ignoring goals for Saturdays and/or Sundays (the gray boxes among the red), which I use for things I don’t usually do on the weekends.

When the timer on a goal is running, the favicon changes and the page looks like this, with the pink box at right showing the elapsed time for the current session:

momentum-3.png

(The idea with the timer is that it may take multiple sessions spread throughout the day to meet the daily goal, by the way — if I wanted to make sure I spend an hour writing each day but don’t usually have time to do it all in one block, for example.)

How I use Momentum

On my laptop, I have Momentum open in Firefox as a pinned tab. On my phone, I have it saved to my homescreen as a PWA.

I use Momentum every day for my morning routine, primarily on my phone. The goals I put into it (as opposed to just adding things to my to-do list in Liszt) are things I want to do each day and, to some degree, are things I might not do if I didn’t have a streak pushing me forward (thus “Momentum”).

The future

I’m happy with the app as it is, but I’ve been thinking about merging it into Liszt, since goals like these are fundamentally to-do items. (Every morning Liszt already automatically adds all the items in my ::streak list to my ::today list, so that I can work off my to-do list without necessarily having to go back to Momentum as much.)

Giving Liszt items the ability to be timed is already in place with belt mode, so I’d just need to add the ability to keep track of both partially finished goals and total streaks. Seems worthwhile.


Reply via email or office hours

Liszt intro

First in the series introducing my personal productivity tools. Buckle up, this is going to be nerdy. And long.

Liszt is my to-do list app. Named after the composer, though I regret it a little since I butcher his name by pronouncing it lisht to differentiate it from the ordinary list. Heresy. The next version will have a better name, though. It’s a Python app running on Django.

Disclaimer: I don’t think this app is perfect. (Or any of the other tools I’ll talk about, for that matter.) I’ll describe things as they are, acknowledging here that there’s a lot of room for improvement.

Overview

This is what the dashboard looks like, populated with some dummy data:

liszt-1.png

And on mobile, where the controls move to the bottom for easier access:

liszt-1mobile.png

The top bit is my stats panel, with the data pulled in from my other tools’ APIs. Daily writing counts, daily words left, total words written on the novel (all three from Storybook), daily pages left (from Bookshelf), and daily goals left (from Momentum). I’ll cover those tools later.

There’s also a slide-in menu on the side, with my most commonly used top-level lists:

liszt-2.png

Double-clicking on a list item opens up an edit panel, which also allows me to move the item to another list with some commonly used lists included as buttons (this whole panel is kind of clunky and needs improvement):

liszt-7.png

Payload syntax

The basic idea behind Liszt (and this is common to many of my apps) is the text-based payload, which enables some nice cross-app integrations (more on this when I cover Gate and Quill). Adding items looks like this:

liszt-3.png

A Liszt payload (the text entered into the add tray) has one item per line, with optional blank lines and optional list specifiers. If there’s no specifier, it’ll assume the current list if there is one, otherwise it’ll default to ::inbox. (I use the double-colon prefix to mark lists, with a slash to specify sublists.) Here’s a fuller example of the syntax, again with dummy data:

Process email :5
Review the merge requests :10

::work/notifications
Read up on Python futures ::: https://docs.python.org/3/library/concurrent.futures.html
Refactor [::work/notifications/refactor]
Write up the design doc

The first two items (which have belt-mode durations, I’ll explain those in a minute) would go into the ::today list (which is the dashboard list). The last three items would go into the ::work/notifications list, as pictured here:

liszt-3b.png

Of these, the first line sets a subtitle by putting it after the triple-colon marker. I use this all the time.

The second line is a symlink of sorts, pulling in the top item from the linked list (different meaning here) and showing it in place, with the Refactor text shown as the subtitle. I used to use this more often but haven’t as much lately.

You can also see that this list has a child list (::work/notifications/refactor).

Belt mode

liszt-4.png

If an item has a duration marker included, that triggers belt mode (ala conveyer belts), as evidenced by the new bar at the top of the screen in the image above.

Brief backstory: I initially wrote an Electron app called Belt that did the same sort of thing, then a few months ago ported it to Go as a menubar app. Shortly after I finished that, I realized it would make much more sense in Liszt and brought the functionality in.

And what is that functionality? It’s just an easy way to time tasks from the list. When I hit Start, it switches into belt mode (also changing the favicon so I can tell that it’s running and turning on focus mode so I can only see the task I’m actively working on):

liszt-5.png

When the timer runs out, it plays a sound and brings up a panel allowing me to continue on to the next item in the list, stop belt mode, or add more time to the timer. (There are also keyboard shortcuts for all of this.)

liszt-6.png

How I use Liszt

On my laptop, I have Liszt open in Firefox as a pinned tab. On my phone, I have it saved to my homescreen as a PWA.

Every morning I go through the main lists and move the items I’m going to work on to the today list. I then work out of the today list the rest of the day, opening it often.

I use belt mode most days, primarily to help me stop avoiding tasks I don’t really want to work on (but that still need to be done).

The future

Lately I’ve grown enamored of the idea of storing data as plain text files in directories, rather than using an actual database like Postgres or Mongo. There are plenty of apps where this doesn’t make sense, but for personal, small tools, it works nicely, so I’m planning to migrate Liszt off SQLite to plain text, and I am very excited about it. Yes, I am that kind of a person.

While Django is fine (we use it at work and I love it), I’m planning to move to FastAPI, which I’m already using for Ditto and Arc. It’s a bit faster and feels more lightweight. I think in my mind I mostly use Django because of the ORM and admin; once I’ve given that up, the baby goes out with the bathwater.

I’m also looking forward to simplifying things, removing vestigial functionality, and sanding down as many of the friction points as I can.


Reply via email or office hours

Over the last several years I’ve built a number of personal productivity tools (almost all of them web apps) that I’ve never written about here. In the spirit of working in public, that’s about to change.

There are around fourteen twelve of them, though, so I’ll be spacing them out a little, with other posts interspersed here and there for the sake of our sanity. Also, while you’ll be hearing about them in a relatively short timeframe, remember that they weren’t written all at once, and that the older ones have been iterated on for a long time.

I generally won’t be releasing the source code, FYI. I still fiddle with these apps on the regular, and feeling an obligation to maintain stability for outside users would put a severe damper on that. Sorry. That said, the ideas are all free for the taking, and I’m happy to answer questions. (I feel I should lower the expectations here. These apps aren’t amazing or groundbreaking. Consider them small curiosities.)

I’ll have the first post in the series up soon.

Edit: Here they all are.


Reply via email or office hours

By way of the Glue chat comic (interesting ideas, by the way), I came across John Palmer’s excellent posts on spatial interfaces and spatial software. Mmm. As a productivity nerd and a hobbyist toolmaker (there are probably ten or so personal tools I’ve been using over the past several years that I’ve never blogged about, but that’ll change soon), I’m very, very interested in these kinds of ideas. Particularly in using 3D interfaces for productivity. I’ve thought a bit about doing that in VR, but I hadn’t really considered building tools in 3D even outside of VR.

No concrete ideas yet, just little threads leading off to various areas that I’m interested in exploring (todo lists, website/blog engines, writing/outlining tools, etc.).

At this point the plan is to use Three.js for prototyping some ideas to see if it’s viable. My initial sense is that for the kinds of tools I’m interested in, I’ll probably need a good way to render/edit text from within Three.js, and it looks like rendering to a canvas and then using the canvas as a texture will work. Anyway, more to come.


Reply via email or office hours

Came across Cal Newport’s phone foyer method this morning. My wife and I tried it out today and what do you know, it really does feel different. Who knows whether we’ll actually end up sticking with it, but at this point I hope we do.


Reply via email or office hours

I used to keep track of genealogy research todo items in an app of my own make (Gent), but lately I’ve had better success with a combined todo/notes approach using Google Docs. (I create a document for each family I’m researching — or for groups of families when I feel like it makes sense — and pretty much just use lots of bulleted lists.)

As for the research itself, I recently made compact family charts (I’ll blog about those sometime soon) and have been filling in the gaps in my lines. As part of that, most recently I’ve been sourcing everything on my Iorio line in Morrone del Sannio, since I did most of the research on microfilm back before sourcing was easy. (Sidenote that’s probably also a post for another day: in the last month or so I’ve found that I can now do pretty much all the research on my phone, which has led to a fairly big increase in how much time I spend doing genealogy.)


Reply via email or office hours

Productivity in small slices

Over the past few months I’ve been getting Cal Newport’s newsletter, the focus of which has been largely on deep work (go figure) and the need to block out enough undistracted time to do truly great work.

That’s the ideal situation, of course, but for me — where my creative pursuits aren’t my day job, and where I want to spend time with my wife and kids — I end up having to work mainly with small slivers of time here and there. It’s not perfect, but you can get a surprising amount of work done in small chunks over time.

I find that three of the things that help me be productive in those moments are:

Think. More specifically, I try to spend some of my downtime (shower, walking) thinking about and around and through current projects. This is especially useful in pushing through problem spots. For me, the work goes far more smoothly when I take time to think through things first.

Journal. As a close counterpart to thinking, journaling about projects helps me talk myself through what needs to be done and how to go about it. A month or so ago I started doing a daily brain dump journal entry where I talk to myself about what I’m working on, and it’s been really, really helpful, especially because I now have something external I can look at to remember where I was on a given project (important when I’m not able to work on every project every day) (I tend to work on several projects at a time).

Next actions. One of the main things I took away from David Allen’s GTD methodology, identifying next actions is an integral part of how I work. My available creative time often comes in chunks of two or three minutes, which is just about the right length of time for a concrete next action. My daily journaling has turned into the best time to identify these.

There’s nothing groundbreaking here, of course, but hopefully these are somewhat helpful.


Reply via email or office hours

Gent

For a while I had been itching to have a better way to track genealogy research todo items — something that organizes items by family and links back to Family Tree, mainly. And thus Gent was born:

Gent.png
Gent-2.png

I’ve been using it for a couple months now and really like it. Before, I felt disorganized and didn’t know where all my notes were; now, even if I come back to my research after a month or two away, it’s easy to get back into it.

The app is built on Django (Python), and I’m calling it a 0.1 release since there are almost certainly bugs I haven’t found. But it does work for me. (For what that’s worth.)


Reply via email or office hours

The power of next actions

I have a habit of not finishing illustrations I’ve started. Right now, for example, my art tracker spreadsheet tells me that eleven of the forty-one illustrations I’ve started in 2011 so far are unfinished.

Ordinarily, if I still haven’t finished an illo and it’s been a week or two since I last worked on it, it’s basically dead in the water. I forget about it. It languishes. And then it makes my list of abandoned projects for the year.

Sometimes that’s a good thing. If the idea behind the piece can’t support its own weight, it’s better to let it go. But more often than not, the idea was just fine.

So, what I’ve started doing (and should have started doing a long time ago) is making a list of my unfinished pieces and then deciding what my next action needs to be for each one. For one piece, it’s to draw the characters more clearly and clean up the linework. For another, it’s to try a new perspective to make the object in the distance loom larger. For another, it’s to rework the idea so it’s more interesting, because right now it’s kind of static. And so on.

It’s working.

Take my “Return from Exile” piece the other day. It began as a loosening exercise in Photoshop that looked kind of like the inside of a cave. I then forgot about it and kind of stopped caring. It was definitely in danger of being abandoned forever. But when I made my list and figured out that my next action was to smooth out the rough strokes, bam, I got back into the illustration and I was able to finish it.

Sometimes I forget that the project management techniques I’ve learned from coding and design and my other projects can just as easily be applied to art. Art isn’t voodoo.


Reply via email or office hours

Project tracker PDF

For those who liked the project tracker, here’s a PDF version (I’m now calling it a project tracker instead of a project calendar):

project_tracker

You can print it out, fold it up, and carry it in your pocket, or post it on your refrigerator or desk, or three-hole punch it (there’s room on the top margin for that) and put it in a binder. You do have to fill out the month, days, and days of the week manually, but there’s a little more flexibility this way.

Project Tracker Printed

Reply via email or office hours