Pat Dryburgh

Pat Dryburgh

Three years

It’s an easy date to remember, July 7, 2014.

7 / 7 / 14

7 + 7 = 14

We discovered the mnemonic that night.

Each of us said our goodbyes a few days prior. The morphine drip had been increased consistently for a couple of weeks and had gotten to the point where it had sedated her completely.

The family had spent the evening going up to our parents’ bedroom to check on her, but by 10pm the nurse was the only one there. I don’t remember whether Dad had gone to bed, but my sister was in the family room while my brother and I smoked outside.

Around 11:30pm, my sister came bursting through the garage door. Her tears were a dead giveaway. After a four-year battle with mesothelioma, Mom finally let go.

The funeral home was notified and indicated they’d arrive in a couple of hours to collect the body. My family and I huddled around her bed, crying the first of many tears to be shed that week. We left her head uncovered until the funeral people arrived. It was shocking how quickly her body turned cold.

We wrapped her body in bed sheets and I kissed her head as we carried her out of the bedroom. She felt so light on the stretcher. The funeral people hopped in their white hearse and drove away into the night.

In an open window in Things 3 for Mac, start typing the name of a project and hit return.

Knowing what I post to Twitter now appears on my site’s homepage and in my newsletter has changed how I think about tweeting. Hoping for less noise and more signal.

Prepping for the free @slack training session @ensibuuko is hosting at @hivecolab today at 3pm.

My friend Mark recently passed along some advice I’ve been taking to heart of late. Looking at the wide breadth of problems we’re trying to solve at Ensibuuko, I was finding it difficult to determine where to focus my time and attention. The product we’re working on is a complex system that has to integrate into an even more complex financial system and be distributed using a network infrastructure that often fails to reach the customers of the product. None of the issues facing us are insurmountable, but each day we uncover more problems to be solved.

Mark heard the challenges we’re facing and shared an insight he had learned reading the work of Andy Grove: when you are looking at an ever-growing list of things requiring your attention and deciding what to focus on right now, pick the thing where your input will have the greatest impact. Or, as Grove puts it,

An activity with high leverage will generate a high level of output; an activity with low leverage, a low level of output.

How to determine high-leverage activities

At this point, it becomes a matter of deciding what thing I can do now that will generate the highest level of output. In a talk given to the Mayor’s Advisory Panel on Poverty in London, Ontario, James Shelley presented an overview of Donella Meadows’ thesis on ‘leverage points’ and illustrated how to apply the framework to systems that impact the level of poverty in a given region. The framework Meadows provides is designed to help determine where to intervene in a system, in increasing order of effectiveness and impact:

  1. Constants, parameters, numbers (such as subsidies, taxes, standards).
  2. The sizes of buffers and other stabilizing stocks, relative to their flows.
  3. The structure of material stocks and flows (such as transport networks, population age structures).
  4. The lengths of delays, relative to the rate of system change.
  5. The strength of negative feedback loops, relative to the impacts they are trying to correct against.
  6. The gain around driving positive feedback loops.
  7. The structure of information flows (who does and does not have access to information).
  8. The rules of the system (such as incentives, punishments, constraints).
  9. The power to add, change, evolve, or self-organize system structure.
  10. The goals of the system.
  11. The mindset or paradigm out of which the system — its goals, structure, rules, delays, parameters — arises.
  12. The power to transcend paradigms.

Friend and designer, Adam Saint illustrated Meadows’ framework beautifully when describing how to apply her framework to the field of design:

The last item in Adam’s condensed framework — principles and values of a greater context — feels like it deserves the bulk of my time and attention.

Spending time making a decision about fonts and colours will have a nearly imperceivable impact on the success of the product; scouting and recruiting a local product designer who can make those and similar decisions while building a design language for our developers to use in the product: that’s high impact.

Trying to get a handful of network boosters shipped from China to be manually installed individually at each SACCO branch is going to have a linear impact based on the number of boosters we can order and install; building a tool that can influence where telecoms deploy network towers with location and population data: that’s high impact.


As someone who enjoys tinkering and making things look and work exactly how I envision them to, it’s easy to get lost in the weeds. I’ve long resonated with the parable once relayed by Steve Jobs about the carpenter who puts the same amount of care into the hidden parts of a drawer chest that will never been seen as the rest of her creation. That’s taking pride in your craft. The challenge I face now is not how to craft a drawer chest but rather a process for building and distributing drawer chests, all while involving a number of outside parties and systems outside of my control.

Where do you intervene? Where in this array of interrelated, interdependent, codependent variables do you choose to try and make a difference?

James Shelley Writer & Friend

This framework is helping me prioritize the problems our company needs to solve while recognizing my time and attention can have drastically varying levels of impact depending on which lever I’m pulling.

Probably the single best decision I’ve made lately has been to delete the Facebook app and block the mobile site on my phone. I still sometimes check for notifications on my MacBook because I cross-post my Instagram photos, but CJ Chilvers is making me rethink that, too.

I still have the Facebook Messenger app because so many friends use it. Thankfully, there’s nothing there — aside from the totally ignorable stories — to mindlessly flip through. Now if I could only overcome my addiction to my Twitter feed…

Just dropped my partner off at Entebbe airport. Today marks the beginning of our longest period apart since the first day we met. I miss you already, my love ❤️

If there’s one thing I’ve learned today, it’s that I much prefer @expedia’s hold music to @united’s.

Day One adds end-to-end encryption →

Great news for security-conscious users of Day One, the journaling app for iOS and MacOS. Generating and saving the encryption key on iOS was quick and easy. Getting the newly encrypted journal into the Mac app was a bit less obvious. Rather than selecting an existing journal or adding a new one, you have to sign back into your Day One account and allow the app to sync before you can see and unlock your end-to-end encrypted journal.

Housekeeping

This humble site has seen a number of changes over the last few weeks. As more of my work of late has been focused on research, process, workflows, and strategy, I’ve been itching for ways to stretch my design and development muscles. Below is a summary of the work I’ve been doing to improve your reading experience and my publishing experience.

NightMode

Ever since I lost my Kindle Paperwhite on the flight from Brussels to Entebbe, I’ve been doing the majority of my reading on my iPhone. This has served to emphasize one of my favourite design features of modern reading apps: night mode.

Leaning on the work of Chris Coyier, I first added a simple function which changes between light and dark themes depending on your computer’s local time. Thanks to SASS, I can produce as many colour themes as I’d like just by changing a few variables.

Of course, as someone who cares deeply about his own reading environment, I wouldn’t want to prevent you from viewing the site how you’d prefer. Using some more JavaScript and HTML5’s localStorage and sessionStorage, I’ve added the ability for you to override the time-based theme to suit your own preference. I’m storing your preference in sessionStorage so it will reset the next time you visit this site.

You can have a look at how I’m doing this thanks to…

Public Github Repo

I’ve learned everything I know about design and development through experience and the generosity of others. Just last night I was having a conversation about viewing the source code of my favourite sites to see how they’re made. I did this back when I first started in design and still do to this day.

On a few occasions I’ve published some tips and tricks here on the site, but recently I’ve been thinking about how I could share even more. Of course one option is to continue writing and publishing what I know and I certainly intend to do so. However, I realized recently that by opening up the entire codebase for my site to the public, anyone can have a look under the hood and learn from both my successes and my mistakes.

Since its inception, this site has been my playground for learning and experimentation. By opening up the code for you to see, my hope is you will be inspired to follow a similar path.

Microblog

The dozen or so of you who subscribe to my feed may have noticed an increase in posts from me this past week. This is due to the recent addition of micro posts, small title-less musings that fall between longer-form posts like this one.

Back when I used ExpressionEngine to publish this site, I used to have a section called “asides”. These were always links to other sites with a bit of personal commentary. At times these links were interspersed with the long-form posts, other times they lived on their own page. Currently, the new micro posts only live on the homepage of this site.

The way I’ve designed the new micro posts makes linking to other pages optional. While some may link out, others will feel more like a tweet. Unti Manton Reece’s new service, Micro.blog opens to the general public, I’m using IFTTT to post these to my Twitter feed.

Probably the best part of adding these short-form posts to the site has been the inspiration to finally find a solution to a problem I’ve faced for almost 5 years now, which was…

Publishing from my iPhone

When I had finally had enough of ExpressionEngine, I started publishing to Tumblr for one very simple reason: it was the only way (outside of using WordPress) I could see to publish from my iPhone.

While the Tumblr app is a great app, I’ve always struggled philosophically with the fact that Tumblr is a hosted service. This means someone else could shut it down or repurpose its content for nefarious purposes at any time without my consent. If the recent del.icio.us announcement is any indication, it’s not unreasonable to foresee Yahoo-owned Tumblr suffering a similar fate.

Eventually, this philosophical divide felt more important than the need to publish from my phone. At the same time, I had become far more comfortable working in terminal and decided to publish my site through Jekyll.

The transition from Tumblr to Jekyll happened over a year ago. While I’ve enjoyed publishing via the command line on my computer, the nagging desire to publish directly from my phone never waivered.

My first attempt at solving this problem was to use Siteleaf, a cloud-based platform for publishing static websites. Siteleaf provides users an online dashboard — similar to the WordPress dashboard — that allows you to publish posts and pages to a Jekyll site using a beautifully designed GUI.

As great as this experience is on a desktop, the only option for publishing through Siteleaf on mobile is though the mobile web app. Having to wait for the web app to load and not having the ability to draft posts offline made this solution untenable on the phone.

My optimal solution is to use a native app (or apps) to publish to my site. After a bit of research, I found Kirby Turner’s method of posting to Jekyll from his iPhone to be a good place to start. Kirby uses Editorial to write his posts and Editorial Workflows to publish to his site through Working Copy, a git client for iOS.

I downloaded Editorial to see what it was like and have really enjoyed writing this post in it. However, Editorial is a bit too cumbersome when I want to post a micro post. To me, those are more like tweets and should take far less time to compose than is required by Editorial.

Drafts is an app that gives you a blank sheet each time you open it. It’s the quickest way I’ve found to go from having an idea to jotting it down so as not to forget and I’ve used the app for this purpose for several years.

Posting micro posts felt exactly up Drafts’ alley, so I adapted Kirby’s approach by using Drafts to write, Workflow to run the post through a series of actions, and Working Copy to commit the post to my git repo. While publishing the post isn’t quite as quick as tweeting, it feels really good to know my content is going to a place I own and control.

Feeds

Much like the last time I added short-form posts to my site, this time has necessitated the need for new RSS feeds. This was also the perfect opportunity to familiarize myself with the new JSON feed format by Manton Reece and Brent Simmons.

Head to the new Subscribe page to see all of the feed options available as well as an option to receive a weekly digest via email.

Back to blogging

Around this time last year, I was beating myself up for not writing as often as I would have liked. I said I was going to start publishing once a week which was a foolish thing to say. I was and am still a ways away from being able to maintain that kind of pace.

But, I’m feeling more motivated than ever to write and publish thanks to the effort I’ve put into making this site a better place for you and for me.

About a month ago, I combed through the roughly 60 feeds in my feed reader in order to remove any that had gone dormant. Almost half had not posted in the last year.

I found myself nodding my head as I read Zhu’s blog post about returning from vacation to relatively few updates in her feed reader. Many of the friends I have made online have moved the vast majority of their publishing to social media. While the immediacy of social media is great, it’s an art form of brevity. Blog posts allowed for long form expression unmatched by any medium before or since.

I have personally rededicated myself to my blog. Hopefully I can inspire a few others to do the same.

Just created my first prototype in Sketch since coming to Uganda and holy crap the new prototyping tools in Craft by @invisionapp are 🔥

With the recent addition of the micro posts I’m now posting on this site, I wanted to see if it was possible to syndicate the microblog to Twitter.

As I was not a Kickstarter supporter of Manton Reece’s Micro.blog service, I won’t be granted access until its public launch. Micro.blog does exactly what I’m describing in this post, but since I’m impatient I figured this would be a fun thing to figure out on my own.

My first experiment involved using FeedPress to publish feed updates directly to Twitter. I connected my microblog RSS feed in FeedPress with my Twitter account and used the following format:

${text}  
${link}

Though my first post failed to get syndicated, FeedPress successfully tweeted the micro post I published earlier today. Instantly I realized the format I was using wasn’t going to be optimal. Because FeedPress added the link to the tweet, it appeared as though there was more to read when in fact everything I had to say fit in the tweet.

Of course, there may be times when the micro post is longer than 140 characters. In this case, it would make sense for the tweet to include a link to read the rest of the post. Unfortunately, FeedPress has no way to include conditional statements to only show the link when it’s necessary.

The solution I came up with was to create and connect another RSS feed to FeedPress that was tailored specifically for posting micro posts to Twitter. Thanks to Jekyll, adding new feeds is as simple as creating a new XML file.

In order to determine whether or not to include the link, first I need to determine how many characters are in each micro post. This can be done by running a size filter on a liquid variable, like so:

{% assign size = post.content | size %}

This will get you the number of characters in the post.content variable. While this is a good start, it fails to account for characters which are used in the post’s HTML tags and special character entities. As such, you will want to strip the HTML from the post.content variable and then escape any special characters for XML. I decided to store the cleaned up content in its own variable.

{% assign content = post.content | strip_html | xml_escape %}
{% assign size = content | size %}

Next, I need to set a condition that determines when a link should be included. Twitter allows 140 characters in a tweet, so if my micro post is ≤140 characters, no link is required.

{% if size > 140 %}
    link needed
{% else %}
    // no link needed
{% endif %}

Truncating longer posts

Now that I know which micro posts require a link, I need to know how many characters I can include before I truncate the post and tack on the link. Links posted to Twitter are shortened using their t.co service which means all links are shortened to exactly 23 characters. This leaves me with 117 characters for my post content. I’ll want to include an ellipses and a space between my content and the link, so I’m left with 115 characters.

Truncating Jekyll posts is as easy as adding truncate: 115 to the post.content variable. Unfortunately, someone at Jekyll thinks three periods is the same as an ellipsis so I had to manually add my own ellipsis.

In the end, the variable I’m passing when size > 140 looks like this:

{{ content | truncate: 115, '…' }}

The resulting code looks like this:

{% if size > 140 %}
  <description>
    {{ content | truncate: 115, '…' }}
    {{ post.url | absolute_url }}
  </description>
{% else %}
  <description>
    {{ content }}
  </description>
{% endif %}

Connecting the pipes

Easily the most frustrating part of this process has been figuring out the best way to actually syndicate the feed to my Twitter account. I had hoped to continue using FeedPress, but for some reason links were being converted into an ellipsis.

After testing a couple of services, I eventually landed on using IFTTT to pull the latest RSS items and publish them to Twitter. It seemed during my testing that it was taking its time to poll the feed and push the update. However, when I tried Zapier I found the fact that it promised to check the feed every 15 min and then failed to do so was even more frustrating.

So for now, I think my best option is to continue using IFTTT which has been reliable if not particularly punctual.

What about JSON?

When I first started thinking about this problem, I was immediately excited about getting to play more with my new JSON feeds. Unfortunately, none of the existing services I could find would accept JSON feed as a source. Admittedly, it’s still very early days for JSON feed so it’s to be expected. It does, however, cause me to wonder just how long it might take to build a simple service around the idea…

But we’ll save that for another time.

See it in action

If you’d like to see this in action, you should follow me on Twitter. If you’re interested in seeing the final code for conditionally including a link in the item description, check out the code on Github.


Edit: I made an error when I posted the original version of this article. I had failed to realize I was calculating the size of the post.content variable before stripping out the HTML tags and special character entities. The article has been updated to reflect this change.

Seems IFTTT was taking its sweet ass time. Giving Zapier a chance to prove itself worthy.

For some reason, the post link wasn’t appearing in the tweet despite the fact it appears as expected in the feed. I’ve just set up an IFTTT recipe to see if that solves the issue.

I’ve been drafting a blog post explaining how I’m doing this as I work on it, which I will post as soon as I’ve confirmed this is working.

Trialling another method to publish micro posts to Twitter. My goal is to only include a link to the post when the character count is >140 characters.

If this works, I’ll post an article explaining how I did it.

Designing UI flows in a notebook make me wish I owned an iPad Pro + Pencil.

As I await an invitation to join Micro.blog, let’s see if I can use FeedPress to push these posts to Twitter.

Spent some time this evening cleaning things up around the site. With the addition of the microblog, I thought I should create separate feeds to cater to your needs. Have a look and subscribe.

Looks like the quotes might not be necessary after all.