Learning
- One dedicated to the things you’re not doing. Most of them you will never get to do, and you’d better accept this fact of life.
- Another one for the things you’re currently doing. Only one card at a time—two if you also include work stuff—may be placed here.
- A last one for the things you’ve done, which, of course, you want to be as crowded as possible.
- There are to-dos, areas (“of responsibility”), and projects.
- Projects can belong to areas.
- To-dos can stand alone or belong to projects or areas.
- I could see what I could do, and I could see what I had done, but I couldn’t see what I was doing. It sounds silly, but I wanted to see at a glance whatever I was supposed to be doing, lest I tackle a new thing before completing it. (Tags may have clumsily helped here.)
- I couldn’t easily sync my progress to Beeminder. Yes, there’s AppleScript, there’s a URL scheme, and there must be a SQLite file somewhere. Thanks, but no, thanks.
- The “Doing” column made it obvious what I was supposed to be focusing on at the moment.
- The card limit in the “Doing” column encouraged me to make tasks as small as possible, so I could keep one of the slots free.
- I could see the “Done” column growing longer all the time, which motivated me to do more.
- It has an API and a query language that lets me fetch exactly what I want.
- It is malleable enough to fit my “personal kanban” requirements.
- You can create cross-project boards and see all your work at once.
- You can limit the amount of work in a certain column.
- Since my day job uses Jira (of course), I can also track my progress at work.
(Too Many) Study Tools
For the first time in my life, I’m maintaining a daily study routine, and I'm shocked that it’s working. First, because I’ve tried many times in the past and always failed miserably. Second, because I attribute part of the success to an intricate assembly of tools, some of which I’ve built myself. It’s a mystery to me how so many moving parts work well together without stealing study time.
Regardless, if you’re curious, these are the tools I’m using.
Anki
What is it? A spaced repetition memory system. You enter facts you’d like to memorize, and Anki manages a schedule that helps you recall them. How is it helping? As I read, I write prompts and review them daily. I don’t open the same books every day; I might read a bit now and continue a few days later. Without Anki, this gap would be costly, but with Anki, it’s less noticeable.
Hypothesis
What is it? An annotation tool that lets users gloss on the entire internet, including PDFs and videos. How is it helping? I try to get a PDF of anything I want to read. As I go through it, I input explanations to myself in Hypothesis. From these explanations, I derive spaced repetition prompts: I use a shorthand notation for that, so both the explanations and the prompts are colocated with their source. Plus, Hypothesis highlights the areas I annotate, and I get a motivating overview of the coverage.
Suppositio
What is it? A command-line tool written by yours truly that fetches the spaced repetition prompts that I write in Hypothesis and saves them into Anki. It tags each prompt in Hypothesis with a unique identifier, so my Anki prompts are always up-to-date. How is it helping? Without Suppositio, the prompts I embed in Hypothesis annotations wouldn’t be of much use. As an extra, Suppositio lets me bypass Anki’s abysmal prompt editor and use Anki mostly for reviews.
Zotero
What is it? A reference management software. How is it helping? In Zotero, I store all my PDFs, including the subset I’m currently studying, so I never have to ask myself where did I put that reference. I used to use DevonThink, but Zotero is so much better for books and articles!
Madaf
What is it? A web app I’ve built for integrating Zotero with Hypothesis. How is it helping? I want to be able to annotate my PDFs with Hypothesis, which is a convoluted process. Two years ago, I created Madaf to make it easier, but in earlier versions, I had to upload each PDF manually, and it was a mess. Madaf’s latest incarnation simplifies that: if it’s in Zotero, it’s in Madaf.
And there’s a bonus: though Hypothesis annotations link back to the source—a must if you want to review your annotations (and prompts!) in their context, you won’t be able to reach the source unless the PDF is hosted somewhere. Madaf is that somewhere.
Beeminder
What is it? A web app for tracking habits. It offers ready-made integrations, but you can also cook your own with their API. If you make a habit but let it go, you pay money. How is it helping? A significant number of my Beeminder goals are related to my study routine. Some track my Anki progress (see the next section), while some track my reading progress. Beeminder keeps me accountable for both.
Beemind Maintained Progress
What is it? An Anki add-on that maps a progress indicator to a Beeminder goal. How is it helping? It lets Beeminder know when I’m behind, so I can review accordingly.
That's a lot, isn't it? Setting it up was painful, but it’s paying dividends. A tool like RemNote might replace this all; however, I’m still figuring out how I learn best, and I prefer to stick with my modular approach and the flexibility it affords.
Evaluating Clojure inside an Anki card
These days, I’m learning Clojure, and using Anki to memorize key aspects of it. Last week, I managed to embed an interactive ClojureScript snippet inside my Clojure-related Anki cards.
Even when I know the “official” answer, I often want to experiment and try out alternatives, and it’s great to be able to do so without having to reach out to the REPL. This also works on my phone!
Eventually, I expect another benefit: a better transfer between my spaced repetition practice and the programming practice.
All the technical merit should go to Michiel Borkent’s cljs-showcase. If someone is interested in knowing how I put this inside of Anki, please let me know in the comments, and I’ll write a follow-up.
Jira as a personal kanban
During the last few weeks, my requirements for managing my personal to-dos changed, and my system wasn’t able to serve me anymore. I tried several apps, but nothing worked, and I started toying with the idea of building my own.
I was indeed about to shave a big, fat yak. Luckily, the least exciting of all project management apps, the one that makes people wrongly believe they’re agile, came to the rescue.
Here’s how it happened.
I wanted to track how many tasks I was completing
I’ve recently begun treating my ADHD, and I’m suddenly in need of indicators. I want to measure how well my executive function is doing so that my doctor and I can tweak the treatment appropriately.
To track my habits, I’m using Beeminder. Despite its peculiar UI, Beeminder’s dashboard lets me see where I need to push harder and plan accordingly. I’ve used it on-and-off in the last few years, but something has clicked recently, and I’m loving it.
Yet, there was a crucial habit I couldn’t easily track in Beeminder: that of regularly checking off items from my to-do lists.
I also wanted a personal kanban to help me focus
I tend to start many things and to finish few of them, and something resonated with me when Oliver Burkeman discussed personal kanbans in his Four Thousand Weeks. He recommends having a simple board with three columns:
That is, you can’t start something unless you finish something else and make room in the “Doing” column.
Note that you don’t need a board to implement this system. Three lists, each representing a column, may also work fine—at least in principle.
I tried to keep using Things
Cultured Code’s Things is a beautiful piece of software. Its conceptual model is the best of all the to-do apps I’ve tried. To sum it up:
Sadly, two limitations prevented me from using it as a personal kanban:
Switching to-do apps is a clear symptom of procrastination, but I decided to start looking around. I needed an app with an API, and I needed a UI that actually looks like a kanban board.
Todoist’s boards didn’t express status
Todoist, a web-based clone of Things with an API and board views, seemed to fulfill my requirements.
Though it lacked areas, I could have replicated them with tags or even projects.
But I could not work around the fact that the to-do status—done or not done—is orthogonal to the position on the board. Even if you move something to the “Done” column, the task isn’t done as far as Todoist is concerned, and you need to check it off. I wanted the board columns to have meaning.
In addition, the “Today” and “Upcoming” tabs have their own predefined, date-based board columns, which I found confusing.
Trello did help me do more things
Trello looked super-dated, and Atlassian acquired it in 2017, which didn’t feel like a good presage. I always thought that Jira, Atlassian’s flagship product, was an over-bloated piece of software, one that, alas, all the companies I’ve worked for insist on using.
I put those thoughts aside and created a new account.
After setting up a “Personal Kanban” board and linking my account with Beeminder—it has a ready-to-go integration—I used it for about a week.
To my surprise, it worked well! I had to enforce the two-card limit in the “Doing” column myself, but otherwise I began to experience two advantages of a kanban board view:
Trello, as a personal kanban, was indeed helping me do more things.
But “doing more things” wasn’t enough
I set up Beeminder to track the number of cards in my “Done” column. Then I realized this number didn’t mean a lot to me.
First, when the “Not doing” column started accumulating cards, my system made it difficult to prioritize them. Trello’s “labels” are just colors, and you must keep the semantics in your brain. In addition, assigning them by opening a modal or by using Vim-esque shortcuts is tedious.
Second, some areas of my life were overrepresented in the “Done” column, while others were totally absent. My system wasn’t tracking balance at all. Trello would let me create multiple boards, and I could assign each to a separate Beeminder goal; there was no way to have a cross-project board.
Trello wasn’t a good fit after all.
Amazing Marvin wasn’t that amazing
Some people recommended Amazing Marvin. It has an API, and it promises to be malleable enough to fit any workflow.
To me, it felt more like a disjointed set of apps than as an app, and I didn’t have the patience to fiddle with it. The annoying Clippy-style mascot dancing around every time I checked off a to-do, because science, pissed me off.
Shaving the yak
Yak-shaving impulses had been latent all the time, but they ran amok at that point. No piece of software was going to ever fulfill my specific requirements, and I had a new mission and no other option: I had to create my own personal kanban app.
“I shouldn’t waste a lot of time, so let’s use familiar technology, such as Rails and Stimulus. Look what I did in a few hours, I’m a genius! But oh, no, I made a mistake when modeling, I should have used delegated types there. Damn, this wouldn’t have happened had I used Datomic. It’s a pity I’m so new to Clojure… But wait, why not use this project to practice Clojure and Datomic? It’s a win-win, I get organized and turn into a great Clojure programmer! And what shall I use for the front-end? Reagent and re-frame? No, no, I’m an SSR person and this goes against my principles. I’ll go with UIx… Oh, wait, Roman Liutikov is not at Pitch anymore—will Pitch still support it? And now that I think of it, didn’t Ryan Florence show off a Trello clone he did with Remix? I never used Remix, but I always wanted to, so that’s it—Remix for the front-end and a Datomic Ion for the back-end! Let’s get to it!”
You know.
And he saw Jira, that it was good
As I was already figuring out how to deploy my yet-to-be-written masterpiece, something came to mind: Jira.
Yes, Jira. The same Jira I despised the most. My whole identity is based on hating Jira. But, no, it can’t be possible. Using Jira for my personal tasks and for my personal projects?
Then I started seeing that it checked many boxes:
I quickly built a CLI tool (in Clojure!) that lets me map the number of issues that fulfill a certain Jira Query Language (JQL) predicate to a Beeminder goal and tried it out.
The integration is simple. It does all I want for now, and JQL will let me track whatever I want and put it wherever I want as my requirements evolve.
And it’s working great. I’m doing more things across all areas, and I feel less overwhelmed.
Jira is still ugly (though a bit less than a few years ago), slow, over-bloated.
But it has saved me from spending the rest of my life creating The Best Personal Kanban App, Try It For Free, No Credit Card Required, and let me instead do really valuable things, like writing this post.
WakaTime
Yesterday, I set up WakaTime, a sort of RescueTime for programmers. My first, sad insight: I spent about a third of my working hours waiting for Xcode to compile my SwiftUI app. I’m using a maxed-out last-generation MacBook Pro. I want to cry.