Weekly review: Week ending November 28, 2014

Okay! My brain is slowly returning to normal, I think. =) I might even be able to drop by my consulting clients again, go to meetings, and do other things like that. We’ll see.

Lots of writing time, a fair bit of coding (both for work and for personal projects), and family time too. Some geeking around with W-. It felt like I got a lot done even though I still spent about 40% of the week asleep (average of 10 hours). Yay!

Blog posts

Sketches

Link round-up

Focus areas and time review

  • Business (22.0h – 13%)
    • Earn (14.7h – 66% of Business)
      • Earn: E1: 1-2 days of consulting
      • Earn: E1: 1-2 days of consulting
    • Build (4.0h – 18% of Business)
      • Drawing (2.5h)
      • Delegation (0.0h)
      • Packaging (0.0h)
      • Paperwork (0.0h)
      • Quantified Awesome
        • Add deletes back
        • Deploy kitchen branch
        • Doublecheck that I can add note fields to a record category
        • Fix bug in saving notes
        • Investigate library renewal error
        • Fix Quantified Awesome registration process
      • Upgrade WordPress to 4.0.1
    • Connect (3.3h – 14% of Business)
      • Emacs Chat: Karl Voit
  • Relationships (5.3h – 3%)
    • Work on E
    • Set up file sharing on router
    • Go to Hacklab general meeting?
  • Discretionary – Productive (18.7h – 11%)
    • Emacs (0.0h – 0% of all)
      • Learn about edebugging macros
    • Writing (17.8h)
  • Discretionary – Play (26.1h – 15%)
  • Personal routines (20.2h – 12%)
  • Unpaid work (4.1h – 2%)
  • Sleep (71.6h – 42% – average of 10.2 per day)

Figuring out my own path to awesomeness

Following up on a previous reflection about working within my current constraints, I was thinking about multiple models of awesomeness.

  • There’s the 10X Hero Programmer idea of someone who can brilliantly cut through the clutter and write just the code that’s needed to solve the problem you didn’t know you had. Awesomeness might involve being able to perceive the true need, bring together different components, and create something solid.
  • There are architects and team enablers who can work within organizations (both formal and informal) to make bigger things happen. Awesomeness might involve balancing multiple trade-offs, keeping track of complex structures, and using soft skills to get stuff done.
  • There are people who envision products and services, bringing them to the people who need them. They might create things themselves, or they might invest in forming a team to create things.
  • There are people who create bridges for other people so that they can get started or they can develop their skills. Awesomeness might involve presenting things in a clear, logical, inspiring, and useful manner. Plenty of role models doing cool stuff in this area, and lots of ways to grow.

Oh, that’s interesting. That makes sense to me. I can see myself growing into that last one. It fits the things that tickle my brain.

I don’t have to worry about doing Clever Things or Big Things. As I get better at doing what I already enjoy doing, sharing what I’m learning and helping other people along the way, I’ll find my own path to awesomeness.

Keeping (financial) score with Ledger

I’ve used Ledger CLI to keep track of my finances since 2005, when I moved to Canada. I like the plain-text approach, and its support for virtual envelopes means that I can reconcile both my bank account balances and my virtual allocations to different categories. Here’s how we use those virtual envelopes to manage our finances separately.

Every month, I have an entry that moves things from my buffer of living expenses to various categories, including an allocation for household expenses. W- doesn’t ask for a lot, so I take care to be frugal with the difference between that and the cost of, say, living on my own. The way we handle it is that I cover a fixed amount, and this is credited by whatever I pay for groceries. Since our grocery total is usually less than the amount I budget for household expenses, any difference just stays on the tab. I used to write him cheques to even it out, but lately I just pay for the occasional additional large expense.

Here’s a sample envelope allocation:

2014.10.01 * Budget
  [Envelopes:Living]  
  [Envelopes:Household]  $500
  ;; More lines go here

Here’s one of the envelope rules set up. This one encourages me to classify expenses properly. All expenses are taken out of my “Play” envelope.

= /^Expenses/ 
  (Envelopes:Play)  -1.0

This one reimburses the “Play” envelope for household expenses, moving the amount from the “Household” envelope into the “Play” one.

= /^Expenses:House$/
  (Envelopes:Play)   1.0
  (Envelopes:Household)  -1.0

I have a regular set of expenses that simulate the household expenses coming out of my budget. For example, here’s the one for October.

2014.10.1 * House
  Expenses:House
  Assets:Household  $-500

And this is what a grocery transaction looks like:

2014.09.28 * No Frills
  Assets:Household:Groceries  $70.45
  Liabilities:MBNA:September  $-70.45

Then ledger bal Assets:Household will tell me if I owe him money (negative balance) or not. If I pay for something large (ex: plane tickets, plumbing), the regular household expense budget gradually reduces that balance.

I picked up the trick of adding a month label to my credit card transactions from W-, who also uses Ledger to track his transactions. It lets me doublecheck the balance of a statement and see if the previous statement has been properly cleared.

It’s a bit of a weird use of the assets category, but it works out for me mentally.

Using Ledger to track it in this way lets me keep track of our grocery expenses and the difference between what I’ve actually paid and what I’ve budgeted for. If I end up spending more than I expected, I can move virtual money from more discretionary envelopes, so my budget always stays balanced.

Ledger’s a powerful tool. Pretty geeky, but maybe more descriptions of workflow might help people who are figuring things out!

Figuring out how my temporary sleep schedule interacts with programming, writing, and drawing

I was thinking about how I can use these snippets of time to improve in programming, writing, and drawing. I realized that although I can easily imagine how other people can write or draw using fragmented time (writers scribbling in notebooks on top of washing machines, artists doodling on the subway), programming seems a lot less tractable. It doesn’t feel like you can break it up and squeeze it into different parts of your day as much.

It is generally accepted that context switching is evil when it comes to programming. So I’ve been carrying around this idea that Real Programmers are people who can pull all-nighters hacking on tough problems, holding elaborate structures in their heads. Your standard hero programmer stereotype, with the pinnacle being someone either building complex, cool stuff, possibly maintaining large and useful open source software.

Hence this little mental disconnect. I’m pretty certain I can get there someday if I really want to, but probably not if I extrapolate from current circumstances. Even maintaining a tiny piece of software sounds like more commitment than I want at the moment. (Heck, I might go a few weeks without responding to e-mail.)

Fortunately, I spent my first few working years in a corporate environment, where mentors showed me that it’s totally possible to be an Awesome Geek while still working a roughly 9-to-5 job, having families and hobbies, and getting plenty of sleep. Thank goodness. So I have this alternate model in my head, not of a Hero Programmer, but rather of solid contributors who keep making gradual progress, help teams of people become more productive, and who enjoy solving interesting challenges and expanding their skills.

So let’s say that I want to play with my assumption that programming is the sort of thing that’s hard to squeeze into the nooks and crannies of one’s day, at least not the way writing and drawing can. I know that I can go through technical documentation and design resources even if my mind isn’t completely awake, and I can still pick up useful things.

What is it about writing and drawing that make them suitable even in small doses, and how can I tweak programming? Writers can think about stuff during other activities. I can reflect on ideas while walking or cooking, for example. When I program, I still need more of that back-and-forth with a computer and an Internet connection, but maybe I’ll need less of that as I develop more experience. I can set pen to paper during any spare moment, sketching a quick line and seeing where it takes me from there. I might not be able to do that with implementation, but I can use that same playfulness to explore design. Behavior-driven development makes it easier to break projects down into tiny, clear steps, and have a way of verifying progress (without too much backsliding!). Getting deeper into frameworks and tools will help me do more with less effort when I do sit down at a computer.

Okay. I can do this. Worst-case scenario, I just move slowly until I get past this particular phase. I’ve seen role models who’ve pulled that off well, so that’s totally cool. Best-case scenario, I figure out how to hack around some of my current cognitive limitations, and maybe that might help other people who find themselves in the same situation too.

This could work.

Using Org Mode to keep a process journal

I (re)started keeping a journal in Org Mode – chronologically-ordered snippets on what I’m doing, how I’m doing things, and how I’m thinking of improving. I’d mentioned the idea previously on my blog. In this post, I want to share the workflow and configuration that makes it easier for me to log entries.

When I’m on my personal computer, I use Org Mode’s org-capture command to quickly capture notes. I’ve bound org-capture to C-c r, a remnant from the way I still think of it as related to the even older org-remember and remember functions. Anyway, org-capture allows you to define several org-capture-templates, and it will display these templates in a menu so that you can choose from them when creating your note.

Here’s the template I’ve been using for my captures:

(setq org-capture-templates
      '(;; other entries
        ("j" "Journal entry" plain
         (file+datetree+prompt "~/personal/journal.org")
         "%K - %a\n%i\n%?\n")
        ;; other entries
        ))

This stores a link to the currently-clocked task and to whatever context I was looking at when I started the journal entry. It also copies the active region (if any), then positions my cursor after that text. Unlike the default template, this template does not include an Org heading. That way, I don’t have to think of a headline, and I can also just clear the buffer and close the window without adding lots of half-filled-in entries in my journal.

The file+datetree+prompt keyword means that the entries will be stored in ~/personal/journal.org in an outline corresponding to the year, month, and day that I specify. This makes it easy to write an entry for today or for any particular date. For example, I often find myself adding more notes for the previous day (-1) because of something I remembered.

I’m thinking of making Fridays my day for reviewing what I’ve learned and writing up more notes. With the date-tree structure, it’s easy to review my notes by day and look for little things to harvest.

If I know I want to revisit something, I can also add a TODO right in the journal entries using the regular Org syntax or as a keyword that I can search for. If it’s a separate heading (ex: *** TODO Take over the world), I can use org-refile to move it to its proper project.

When I want to flesh out those rough notes into a blog post, I can copy the entry to my blog post outline, fill in the details, and then use org2blog/wp-post-subtree to post it to WordPress. Alternatively, I might edit my rough notes in-place to make them ready to post, and then post them directly from that buffer (possibly changing the heading).

Since I’m not always on my personal computer, I need to be able to pull in notes from elsewhere. I can add quick notes to Evernote on my phone. So far, I’ve been okay with copying snippets manually. If I find that I’m creating lots of notes, though, I might look into reusing the code that I have for building my weekly review list from Evernote notes.

Time-wise, I find that spending 15-30 minutes at the end of the day helps me braindump the key points. If I take little writing breaks throughout the day, that helps me capture more details (especially in terms of development or technical troubleshooting). Re-reading my notes is part of my regular weekly review process, so it’s pretty quick (plus a little more time if I’m writing longer blog posts).

That’s how Org Mode helps me keep a process journal. It’s great to be able to quickly write notes in the same thing you use to do everything else, and to tweak your workflow. Whee!

Thinking about word counts and chunks

I was talking to Frank Chen about blogging, and he mentioned that he’s experimenting with word count goals. That made me realize that I don’t pay much attention to word count when I write, and that I tend to write shorter posts. I think in terms of chunks of ideas. I write each post so that it covers one idea, either something I want to share or something I want to learn. Sometimes I cover a little more ground, if I can chunk the sub-ideas enough to hold them in my brain at the same time. Sketches help me a lot when it comes to developing thoughts further.

I rarely write larger posts that bring lots of things together. I guess it’s because I tend to write about:

  • things I’ve just learned: publishing small chunks helps me get my notes out faster
  • things I’m figuring out: nibbling away at questions helps me make sense of them
  • answers to specific questions: small chunks and clear titles makes it easier for me to find things and share links later

What are some examples of longer posts and resources I’ve worked on?

  • There’s How to Read Lisp and Tweak Emacs, which I published as a four-part weekly series and also as a single file.
  • There’s the No Excuses Guide to Blogging, which I published as a PDF/EPUB/MOBI. I linked the source blog posts into a series so that people coming across the posts in the archives can still navigate between them.
  • I post presentations like The Shy Connector as slides and a full blog post. That said, I usually try to keep my presentations to about 10-15 minutes anyway, so the resulting posts are not enormous.
  • Interviews or videos with transcripts can get really long because I talk quickly. For example, this Emacs Chat with John Wiegley is pretty long. I’ve experimented with breaking transcripts up into logical segments, but keeping the entire transcript together seems to make more sense to me.

What would it be like to experiment with longer posts that cover more ground? Based on the blogs I like reading, I think it might mean writing more thorough guides like the ones on Mastering Emacs – things that people would bookmark and refer to a few times.

Organized guides help beginners a lot because they don’t get lost trying to figure out the next step. They can keep scrolling down. On the flip side, it might take a bit more work to make long guides friendlier for intermediate and advanced users: a table of contents, links to alternative paths or related content, closer and more coherent discussion…

Hmm. I feel a little odd about drafting a long resource (takes time to write and takes time to read), and deep-linking into part of a blog post can be a little difficult.

I think I like working with short chunks that I can link to or assemble into different pieces. Maybe I’ll spend a little more time planning outlines and series of related posts so that I can link posts together and fill in the gaps. For now, I’ll leave the ultimate-guide-writing to other people who are better at linear organization (or to future Sacha when she writes books).

Onward to better writing and sharing!