Productivity in plaintext

An example of a plaintext to-do list and calendar system

I've been sitting on this post for a while, aware of the irony of spending any length of time reading or writing about productivity. But this article should be an axe sharpener, particularly for those interested in getting away from third-party or over-engineered software and back to basics. The goal is to take back control of the entire productivity workflow, operate at K, the speed of keyboard, regardless of computer spec and to eliminate complex and proprietary software. It's KISS, it's UNIX, it's boring. But does it work?

1. Criteria
2. Work environment
3. Tasks
4. Calendar
5. Email
6. Influences
7. Privacy
8. Other software
9. Concluding notes
10. Future improvements 

--------------------------------------------------------

1. Criteria

--------------------------------------------------------

Getting tangled in a variety of note-taking, calendaring, messaging systems as I bounced between 'solutions' for a few years has been ultimately frustrating. I was nudged in the direction I've set out below by several forces. The setup, has become an 'as near as damn it' full-capacity productivity workspace, for whatever that is worth. These nudges started properly around 2009, when I started using a Linux phone, the now much missed N900, eventually syncing notes and calendars between devices via scripts, txt and ics files and various calendar clients. Five years of experimentation and learning later, I then moved to Debian full-time (a minimal crunchbang clone via netinstall), all while setting up a succession of Raspberry Pis for various servering jobs. The final nudge was the growing newsstorm about online privacy and the now-old 'being the product' adage. 

Over these years of trying to set up a truly long-lasting productivity system for tasks, notes and calendaring, a simple solution has slowly emerged from the fog of apps and scripts. It has been boiled down to the essentials. 

What are the criteria for a system like this to emerge? 

  • Needs to be as simple as pen and paper, for mostly manual entry into a task list, calendar and messenging system with the additional benefit over paper of a machine handling any repetition, editing, archiving, backups and sharing. 
  • Needs to run on a Raspberry Pi-type device at speed. This would liberate my work environment and allow me to replicate my setup on nearly any device with a UNIX command line, if only my professional software were resource-friendly enough (accounts, translation) I could already do this. More on that below. 
  • Needs to be readable in 50 years. How many of the current slew of apps will still be around? Which might suffer a silent loss or leak? Insurance policy: text files. Backed up.
  • Encryption needs to be available for any files deemed sensitive enough - with decryption/editing on the fly. 
  • It needs a to-do list so as not to forget any jobs I might have been assigned by a range of clients. It should cover at least dozens of tasks at any one time, clearly.
  • It needs to work in the Kanban style. Like Trello, which I happily used for many moons before going plaintext.
  • It should also include a schedule/reminder overview for each month. This needs to remind me of personal and work deadlines, differing from the to-dos by either repeating on that date regularly or needing to stand out in an agenda style format for constant daily overview of approaching deadlines. Needs to be easily searchable.

No small order, then, as this system sounds quite complex on paper. In fact, the simplest solution is not complex at all in itself, yet allows for much complexity.

--------------------------------------------------------

2. Work environment

--------------------------------------------------------

I'll be brief here, as it's not the feature presentation of this piece, but it is still a key part.

Creating a productive environment has been a challenge as I battled with internal and external distractions. Half the battle is sometimes backing away from the screen when I drift into 'research' mode (read: non-productive mode). The other half is removing distractions, freeing up system resources, having an efficient and quick productivity 'suite' to make getting in and out of work tasks as efficient as possible. The whole point of productivity for me is to achieve my goals, spend less time doing so, for better remuneration, spending more time with my family and friends before my 30s disappear as quickly as my 20s did.

  • Removed: comfortable chair, long and wide desk with king-rat cable mess underneath.
  • Replaced with: bar stool, bar table, cable-tidy and cable-ties.
  • Benefits: more standing (with sitting option), less clutter-stress.
  • Added: a tiling window manager for efficient screen, window and context switching. The power and ease of i3wm has won me over, with either 1 monitor or 2, depending on the preference of the day:
      • Desktop 1 is called 'org' and handles messages, todo, calendar, notes etc.,
      • 2 is called 'web' and has w3m open for quick textual searches and browsing (cookies off to further avoid tracking), chromium for those persky bloatware saas apps (ublock and https-everywhere to block Sauron's beady eye),
      • 3 is 'pdf' for reading PDFs (setting this file type to open up on this desktop only stops them cluttering other workspaces),
      • 4 is 'vps' for web and VPS tinkering. It has been very easy to learn to flick between and set up split windows etc., much more so than the others I tried (xmonad, awesome, dwm in particular).

I use espeak to read from a file of ‘motivational quotes’, which are as cheesy as they sound, every hour and to give me a weather report at 9am. And also a few pep talks here and there. Espeak also starts and stops pomodoros for me throughout the day. I largely ignore them, but it does make for a 'worky' atmosphere more than not having them. I'll make the scripts I use for those available if anyone wants in on the nagging robo-Hawking motivation technique. I'll understand if you don't :) 

And now for the feature presentation:

--------------------------------------------------------

3. Tasks: vertiKan - Kanban in plaintext

-------------------------------------------------------- 

I've been keeping plaintext notes for years, particularly when I found out that notepad.exe had a timestamp hidden under the F5 key. I set up the same in notepad++ and then in Vim. I had messy notes files including unorganised to-dos and reminders scattered about throughout. I initially thought I could use tags for everything but that quickly became unwieldy and easy to lose track of which tags were in use as the files grew. I went all in with Trello for tasks at one point, enjoying the Kanban motion of shuffling tasks around various lists. I got that system down to a T but was ultimately left annoyed that I relied on an online, heavy-RAM consuming, third-party system. I toyed with using folding in the plaintext files for a variety of note topics in Vim and notepad++. This was nice, but still too cluttered.

After going CLI with RSS, IM, IRC, the next natural step was to replicate the Trello boards in a plaintext file, edited with Vim. One folding section for each list. Using 'dd', move, 'p' to shuffle the tasks around. Mainly from the active task list to 'TO INVOICE'. Rudimentary, but it worked. Over time I added timestamps, tags, an archive feature (either ddGp to dump the task in a growing archived task list at the bottom of the file or the preferred '\mv' mapping to do the same without moving the cursor - I should change the leader from the awkward backslash to space, perhaps). Tags are still in use, but I limit them to just the projects I work on and #home for personal things. I also have a more long-term strategy section to refer to from time to time.

The list needs pruning and sorting very occasionally if I slip up and let non-tasks onto the list - I've had too many cluttered to-do lists to let it happen again!

I did try to integrate some calendaring or scheduling of tasks/events into the to-do list, but it didn't work very cleanly. Separating them, in the UNIX way, each doing one thing well, seems to make more sense. And so the plaintext calendar was born...

--------------------------------------------------------

4. Calendar: vertiCal - calendar in plaintext

--------------------------------------------------------

This came much more recently, as I worked my way through various CLI calendaring and reminder options, settling on remind for a good long period, coupled with wyrd and tkremind. It's a handy tool but the complexity was a real barrier to regular use for me. It became a bit of a drag. Another case of it being extremely cool to geek out into moon cycles and other weird and wonderful calendar systems but... I'm not gaining much productivity that way. Learning new syntax just to set reminders seemed overkill. I just want to see what's coming up day to day, like a physical/paper calendar or diary. But those aren't searchable; plaintext is.

So here we go again! I set up every month, put my recurring reminders at the top of each month and the changing events below that. This will let me keep the recurring reminders when I copy the file the following year. Setting the Vim syntax mode to C (:set syn=c) made the dates appear in colour, which was nice. But much more simply, setting the filename to 2016cal.conf (instead of .txt) enabled coloured commenting and tags. Commenting a line when it is done distinguishes it nicely from the events still to come. The idea is then to completely replace this file next year, leaving the events in place as a record.

It's much quicker to enter an event into the 'vertiCal' than using software with a pop-up and myriad dropdowns. Quickly entering '25 - Event 3pm #project' under the current month takes seconds and can be copied/pasted elsewhere if required.

One issue that might bother some is that you can’t tell what day of the month an event is on. This is easy to infer in many other ways. Often with a quick mental check, otherwise typing 'cal -3' in the shell to figure out dates that are more distant.

These two files are synced to the pi (and phone if need be) via the FOSS syncthing, from where I can check them in a pinch on the phone via SSH. No more trying to export ics files and share those to various bloated clients, just a simple list that takes seconds to check and amend. 

I run these side by side in a Vim split buffer/window arrangement (':vs 2016cal.conf' then 'ctrl+w 30 <' to reduce the calendar to a sidebar - ctrl+w r to rotate if in the wrong place). Using autocomplete in vim is handy for many words I tend to repeat. Such as productivity. My .vimrc is in the examples repo also.

If sharing, it might make sense to have a work and personal version, or perhaps one for a certain group of friends. It's also easy to make a html version in vim (:TOhtml) and share that on a webserver as a non-editable version for reference.

I also keep a notes file for each year, but these are less interesting to describe. These have folding sections per subject and tags are used for quick searches and filtering. These are used less now as the to-do and calendar system duo takes over capturing ideas and tasks. 

----------------------

5. Email

----------------------

I've finally moved wholesale onto mutt. It took a few days to set up, a few weeks for me to transition fully, but now all that's done I can share the setup to hopefully help others get started quicker. See the examples repo.

It features:

  • Multiple imap accounts with shortcut keys
  • Sidebar for overview
  • GPG encrypted account password reading, once per session only, using gpg-agent
  • Simple PGP encryption and/or signing of mail
  • Threaded mail
  • Mutt's fantastic filtering, with either notmuch or similar coming soon for faster search

The major advantage it has over Thunderbird is its much faster mail handling and inbox cleaning, at a fraction of the system resource usage. It also forced me to implement Sieve filtering at the server level, which was well overdue, having relied on Thunderbird's filtering of SpamAssassin and custom rules until then. Finally my phone client no longer received spam Thunderbird hadn't filtered out. 

----------------------

6. Influences

----------------------

So this goal of a low-resource, CLI-driven workflow was once again nudged on when Google Reader closed. I moved onto Newsbeuter, permanently hosted on a Pi, that I'd SSH into for a read here and there. Before that though, I tried the miniflux client. In the FAQ the creator noted that it could probably handle 600 RSS feeds, then added 'but your life is cluttered'. That hit home. 

Mine were out of control in Google Reader, I couldn’t keep up and ended up focusing on the same few feeds. Trimmed them down to a reasonable number and tagged them into 3 categories in newsbeuter. This same cruft issue applies to todo lists too. I see people, org-mode users and GTD-ers even, with hundreds or even thousands of tasks in their lists. This can not be workable. How could anyone get around to reviewing and doing them all? Surely that's nigh on impossible. Maybe I haven't grasped GTD fully. Maybe they aren't doing GTD right or maybe GTD shouldn't allow for that situation to occur. My own experience of cruft has turned this issue into a red flag.

For that, and a few other reasons, I don't 'GTD'. Having to review and sort one's lists every week doesn't seem at all productive to me. Or if it is, call me crazy, but I have no motivation whatsoever to review any list of tasks on a regular basis. Let alone one I'd been happily dumping every thought into.

For similar reasons I don't use org-mode or taskwarrior. Hiding tasks for me is a recipe for losing tasks, even if the tagging system is extremely efficient. Also, any learning curve tends to scupper any productivity gains from using that particular tool, as does the tool not being available or set up correctly on other devices. Spending hours a week/month/year honing a config is not my idea of productivity. As much as I like tweaking a config, it can become an obsession in itself.

See this complaint about incompatibility between org-mode versions (yay, more config tweaking!). Or further down that thread my own comment on an often referenced how-to for org-mode, wherein the author reveals he has nearly 400 tasks awaiting completion, somewhere within his 10,000 word guide on being productive... 

Perhaps taking the point a little far, but it was interesting to learn that RMS doesn't use org-mode and pointing out that it 'seems to require a LOT of time'. So even RMS (at least in 2013) didn't want to take the time to familiarise himself with org-mode. And he *created* GNU/Emacs. 

Suffice to say, I have a healthy dose of scepticism for any productivity solution that has a huge manual, many software dependencies, a steep learning curve or encourages excessive config file twiddling. While I appreciate their technical approach most of the time, these tools can end up being counter-productive. There's just too much friction and too much discipline required for systematic use. So I have come back to basics. Very little discipline required, simple to use, very clear results.

----------------------

7. Privacy

---------------------- 

I’ve started to encrypt everything sensitive on disk with 7z archives (con: hard to search, pro: no performance hit with full-disk encryption, easy to backup encrypted blobs, files always encrypted, rather than only when PC off). This is after evaluating ecryptfs (turned out to be bad for lots of small files, which is my use case, but perfect concept) and full-disk encryption (which is off when my PC is open, which is most of the time). I could also have used PGP for this, but 7z was easy to implement with AES, encrypting filenames too. All fine for my threat-model, i.e. not that much under threat, but desirous of personal and professional privacy. And 7z can compress too, which is a bonus for much of what I archive.

For any note files I want to edit regularly, the above can't be used as they require manually decrypting and recrypting every time they are accessed. I came accross Vim’s :X command, set it to use blowfish2 (set cm=blowfish2) in .vimrc and now the file is decrypted locally while I work on it, and the synced version is always encrypted (even the swap file). Perfect. I might consider rolling this out to my calendar and todo lists, but they aren’t particularly sensitive and the extra friction might backfire. Fragile thing, this productivity lark!

----------------------

8. Other software

----------------------

  • cmus for music
  • rpi as media center, IM and IRC client (kodi running in tmux, finch, irssi)
  • newsbeuter for RSS
  • w3m for tabbed browsing and twitter in sidebar

I still pop open chromium (with umatrix + https everywhere plugins only) to check sites that require it from time to time, but it doesn’t sit open taking up 500-1GB RAM. Helps me stay focused.

Some handy shortcuts for w3m: ctrl+r to refresh, ctrl+t to open in a tab. ctrl+q to close tab. ctrl+{/} to move through tabs. B for back.

I still need FOSS book-keeping/accounting software. I did consider moving to (h)ledger, but it’s missing *simple* currency and UK/EU taxation features - would love to be able to build a web front end to it that covered those things, but I'm in no position to do that. Some benevolent accountant will hopefully step up one day and do just that. Or at least add those features to ledger (namely: automated corporation and personal tax summaries (for the UK), invoicing by PDF, easy currency loss/gain tracking for invoiced items, simple automated account imports...) would swing it for me. 

Finally, the big one for me, I would like FOSS translation software to replace the .NET application running in a Win7 VM. As this task is essentially just editing text, it seems like there should be plenty of options. There are some, but none I’d like to use now (have used OmegaT extensively). I won’t get into that now, but suffice to say I need an open, quick and highly capable CAT tool that operates on large translation memories and files without choking.

The ability to not have to run a Windows VM would support the goal of running the business on a low-resource machine. I have actually gotten as far as opening Office files in vim and looking at lxml in Python (and C) to extract text from these docs, but would need to then build out a translation memory, termbase, autocomplete, filter/sort, wordcount stats etc. feature-set to come close to competing with my paid-for alternative. All in good time!

----------------------

9. Concluding thoughts

----------------------

Of course I can still be distracted very easily despite all of these tweaks. The goal is really to just limit those distractions, while keeping the PC fast and ready for work. Otherwise I think I need to keep trying to step away from the PC when I’m done with work. It’s easier to strategise and see the bigger picture when my head isn’t in the screen. And by now I must have already read a life’s worth of productivity and business articles, comments and case studies, so really curbing that as much as possible and starting to trust in and implement what I already know should be the aim.

Other things that might come into play with improving productivity, like reflecting on loss of certain old motivators (goals of running my own business, writing a book, securing a stable life for oneself semi-achieved), should help to keep me focused on the new goals and motivators. Everything else in life continues to whir away, sometimes now faster than ever, and so a simple, no bells and whistles, reliable productivity system anchors things to one place. This gives space and clarity to make more long-term plans for life and business. 

I don't necessarily think my productivity levels are any worse now than before, in fact, if I do say so myself, I always get a fair amount of stuff done in a short time. I just have a touch more awareness or it and pressure forcing me to make sure I'm organised. Spreading my life tasks and reminders over several apps and websites was just a recipe for mistakes to be made. And as I said at the top, it was getting frustrating. 

There's a chance, but I've not seen it discussed elsewhere, that productivity matters more when you ahven't yet reached your goals, or are unsatisfied with current goals. I'll try to look into this problem more over time. The other side of the coin is that I genuinely do like to work efficiently and get frustrated by anything slowing me down. Again, this could be a personal demon of some nature to hash out as I reflect more over time. For now, however, the productivity system is in place that will hopefully see me through the next 5-10 years at least. If I've changed it next year, you have every right to point and laugh, but I wouldn't count on it :)

----------------------

10. Future improvements

----------------------

Obviously this is all still a work in progress, even if well on the way. Improvements to the system as a whole would already include the use of distributed version control and building/sourcing accounting and translation software to replace current expensive and cumbersome versions.

The use of Stickk or Beeminder to force certain tasks to get done when motivation is lacking is another tempting plan, but I suspect if I enjoy my work enough I won't need this.

If you're wondering where you can find out more about the wonderful world of plaintext organisation and productivity, check out the examples repo. Feel free to plunder it for the following:

  • vertiKan - Trello in a text file
  • vertiCal - calendar in a text file
  • .vimrc (autocomplete, timestamps, encryption etc.)
  • .muttrc (multiple imap accounts, sidebar, encryption etc.) 

I know none of this is anything groundbreaking or technically remarkable, but hopefully the often overlooked simplicity of plaintext and FOSS will appeal to others in search of a 'definitive' productivity system. 

Further reading:

 

 

Published by using 3675 words.

Next:
Previous: