← Home About Archive ⚡️ Tech 🌏 Remote 📚 Books 📷 Photos 🌏 Work with me at Remote!
  • Borderless Wages: How To Pay Remote Teams:

    In the world of remote work, you can hire anyone, anywhere. But how do you pay salaries and provide benefits to a team that is distributed across geographies? Learn strategies for compensating a worldwide workforce in this session from global employment experts Remote.

    Join me at Seamless Asia 2024 to learn more.

    → 30 Jan 2024
  • AFR: Technology enables bosses to get granular on worker entitlements:

    Remote’s Ramsay agrees, saying: “The future of remote work will be an even more tightly integrated platform for all HR-related tasks that improves the employee experience and increases efficiency.”

    → 20 Dec 2023
  • Finished reading: Good Services: How to Design Services that Work by Louise Downe 📚

    → 8:49 PM, 7 Jun 2022
  • Finished reading: The Whole Christ: Legalism, Antinomianism, and Gospel Assurance―Why the Marrow Controversy Still Matters by Sinclair B. Ferguson 📚

    → 4:23 PM, 7 Jun 2022
  • Finished reading: Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal 📚

    → 10:08 AM, 7 Jun 2022
  • Finished reading: Bullshit Jobs by David Graeber 📚

    → 8:37 PM, 26 May 2022
  • ClearURLs

    ClearURLs:

    Many websites use tracking elements in the URL (e.g. https://example.com?utm_source=newsletter1&utm_medium=email&utm_campaign=sale) to mark your online activity. All that tracking code is not necessary for a website to be displayed or work correctly and can therefore be removed—that is exactly what ClearURLs does.

    Stops URL based tracking and improves the readability of URLs. Perfect. 👌

    → 8 May 2022
  • If you think you need a slideshow: you don’t. When you really do, Russell has good practical advice for presenting well.

    Meetings and slideshow are often used when a document would be much better. Documents can be read (and re-read) at any time, and don’t depend on people being available at the same time. At best slideshow is a presentation aide with supporting documents, at worst slideshow is a substitute for written documentation.

    Finished reading: Everything I Know About Life I Learned from Powerpoint by Russell Davies 📚

    → 12:56 PM, 5 May 2022
  • Finished reading: Good Economics for Hard Times by Abhijit V. Banerjee, and Esther Duflo 📚

    → 1:02 PM, 2 May 2022
  • Finished reading: What Money Can't Buy: The Moral Limits of Markets by Michael Sandel 📚

    → 9:01 PM, 28 Mar 2022
  • Finished reading: The Big Switch: Australia's Electric Future by Saul Griffith 📚

    → 7:54 PM, 26 Mar 2022
  • Finished reading: Stolen Focus: Why You Can't Pay Attention by Johann Hari 📚

    → 11:27 AM, 5 Mar 2022
  • Finished reading: Less is More: How Degrowth Will Save The World by Jason Hickel 📚

    → 6:40 PM, 24 Jan 2022
  • Finished reading: How to Take Smart Notes by Sönke Ahrens 📚

    → 8:30 PM, 11 Jan 2022
  • Finished reading: On Immunity: An Inoculation by Eula Biss 📚

    → 10:02 AM, 7 Jan 2022
  • Finished reading: Surprised by Hope by N. T. Wright 📚

    → 8:47 PM, 5 Jan 2022
  • Finished reading: Drawing for Architecture by Léon Krier 📚

    → 2:56 PM, 4 Jan 2022
  • Finished reading: Exponential by Azeem Azhar 📚

    → 3:42 PM, 3 Jan 2022
  • Finished reading: The Great Mental Models Volume 1: General Thinking Concepts by Farnam Street 📚

    → 1:04 PM, 31 Dec 2021
  • Finished reading: The Tyranny of Merit: What’s Become of the Common Good by Michael J. Sandel 📚

    → 9:34 PM, 21 Dec 2021
  • Authy and Symantec VIP Access TOTP

    There seems to be an increasing number of services that require a specific app for two-factor authentication. In the last week I needed to install both Authy and Symantec VIP Access.

    I’d prefer, however, to keep all my Time-based One-Time Passwords (TOTP) in one place. Having secret keys scattered over multiple apps makes them hard to backup. Thankfully I found solutions for both:

    • Authy secret keys can be extracted from the desktop app using following these instructions.
    • Symantec VIP Access can be avoided by generating a secret key with the python-vipaccess tool. I found I needed to set the token model to SYMC in most cases (vipaccess provision -p --token-model SYMC).
    → 11:26 AM, 8 Dec 2021
  • PostgreSQL Dynamic unpivot

    A clever dynamic solution to the unpivot problem from Thomas Kellerer:

    WITH data_percentiles AS (
      SELECT
        month,
        percentile_disc(0.50) within group (order by count) "50p",
        percentile_disc(0.80) within group (order by count) "80p",
        percentile_disc(0.99) within group (order by count) "99p"
      FROM data
      GROUP BY 1
    )
    
    SELECT
      p.month,
      d.series,
      d.amount::numeric
    FROM data_percentiles p
    CROSS JOIN LATERAL jsonb_each_text(to_jsonb(p) - 'month') as d(series, amount)
    ORDER BY 1, 2
    
    → 11:42 AM, 6 Dec 2021
  • Finished reading: Another Now by Yanis Varoufakis📚

    → 8:51 PM, 3 Dec 2021
  • Finished reading: Having and Being Had by Eula Bliss 📚

    → 21 Nov 2021
  • Finished reading: The Ruthless Elimination of Hurry by John Mark Comer 📚

    → 16 Nov 2021
  • Finished reading: Wanting: The Power of Mimetic Desire in Everyday Life by Luke Burgis 📚

    → 13 Nov 2021
  • Finicky

    Finicky:

    Always open the right browser

    Unlike the alternatives, Finicky can edit URLs and open them with anything. This is great for stripping trackers from URLs, and opening Figma link directly in the Figma app.

    (Initial configuration: jamesramsay/dotfiles:finicky.js)

    → 6 Nov 2021
  • Finished reading: A Grief Observed by C. S. Lewis 📚

    → 17 Oct 2021
  • Finished reading: No Hard Feelings: The Secret Power of Embracing Emotions at Work by Liz Fosslien and Mollie West Duffy 📚

    → 9 Oct 2021
  • 40 One-Sentence Email Tips:

    1. You don’t need to sign your name at the end of your email — the recipient knows who it’s from.
    1. You don’t always have to reply.
    1. An email isn’t a letter.
    1. Unsubscribe.

    Solid list. Email is a great medium when used thoughtfully.

    → 18 Sep 2021
  • Finished reading: Foundation and Earth by Isaac Asimov 📚

    → 18 Jul 2021
  • Finished reading: Foundation’s Edge by Isaac Asimov 📚

    → 4 Jul 2021
  • Finished reading: The Case for Degrowth by Giorgos Kallis, Susan Paulson, Giacomo D’Alisa, and Federico Demaria 📚

    → 28 Jun 2021
  • Finished reading: Forward the Foundation by Isaac Asimov 📚

    → 21 Jun 2021
  • Finished reading: Prelude to Foundation by Isaac Asimov 📚

    → 14 Jun 2021
  • Grocery shopping is better with a bike and a baby.

    → 2:37 AM, 7 Jun 2021
  • Joining Remote, leaving GitLab

    I am joining Remote to help create more remote employment opportunities. Working at GitLab remotely was great for me and my family, and demonstrated to me the advantages of remote organisations. I would like more people to have this freedom, and I am excited to join a team of people with the same ambition.

    Personally, remote work allowed me to:

    • live where my wife had the best job opportunities,
    • visit her when working abroad for short-term contracts,
    • return to Australia to raise children close to our parents, and to
    • work (and become friends) with wonderful people from all over the world.

    Job (CEO, Remote), in his blog post I’m leaving GitLab to help everyone work remotely, writes why remote work is good for business:

    • Focus on merit, not the number of hours spent in the office,
    • Everything is written down, improving communication and efficiency, and
    • Hire the best people, wherever they are in the world.

    If you’d like to learn more about remote work check out Remote and GitLab’s guide to remote work.

    → 16 Feb 2021
  • SoundSource

    SoundSource is “sound control so good, it ought to be built in.” It is a menu bar app that makes it easy to switch input and output devices, adjust levels, and add effects like an equalizer.

    Regular video calls and recordings mean I want to hear and be heard - SoundSource makes that easier for me. Two features I particularly appreciate:

    • Super Volume Keys makes the volume keys work when you connect your headphones through an external display or dock.
    • Custom Profiles for Headphone EQ can be used to make loud outputs quieter so that the volume keys are useful.

    This is the custom profile I created for my CalDigit dock because the audio output was too loud at even the lowest setting.

    Preamp: -15.0 dB
    Filter 1: On PK Fc 0 Hz Gain 0 dB Q 1
    

    It would make my day if SoundSource would remember the last used Headphone EQ for each output device so that I don’t switch profile manually.

    → 12 Feb 2021
  • MonitorControl

    Control your external monitor brightness, contrast or volume directly from a menulet or with keyboard native keys.

    Why isn’t MonitorControl a built-in feature of MacOS?

    → 16 Jan 2021
  • Backup to Synology NAS using Arq and MinIO, without Docker

    Update: No need to compile MinIO yourself anymore — MinIO is available on SynoCommunity.

    I use Arq to backup my computer to Dropbox (off-site backup) and a Synology NAS (on-site backup). The most obvious approach is to use a folder stored on your NAS. I previously explained how using Autofs can make this easier, but I’ve still found it unreliable and slow.

    Arq calculates checksums when performing a backup to verify uploads, and when validating backup data every 60 days. When using the folder approach, Arq needs to download the data to calculate a checksum. S3-compatible storage, however, can calculate the checksum, allowing this work to be offloaded to the NAS making backups and validation faster.

    Arq supports S3-compatible storage including MinIO, which can be run on a Synology NAS using Docker. Unfortunately, only Synology devices with an x64 CPU can run Docker. My DS216play has an ARMv7 CPU, so I can’t use the Docker package.

    Here’s how you can compile MinIO to run natively on an ARMv7 Synology NAS without Docker. 🎉

    Compile MinIO

    Before you begin, you need Git and Docker to be installed.

    Clone the MinioSPK repository, which contains build scripts for creating a Synology MinIO package.

    # Clone the project
    git clone https://github.com/darkmuggle/MinioSPK.git
    
    # Change directory
    cd MinioSPK
    

    Two commands are needed to compile MinIO.

    # Download the MinIO source and logos
    make init
    
    # Build the MinIO package for Synology
    make arm7
    

    Install MinIO on our Synology NAS

    With our newly built package, we are ready to install MinIO.

    From Synology DiskStation, the web interface for managing your Synology NAS, open Package Center.

    Next, from the Installed section (top left), select Manual Install (top right) to launch the installation and upgrade wizard.

    Click Browse to locate the package you compiled, likely similar to minio-2020.04.04-arm-7.spk. Then click Next.

    After a short while you’ll be shown a warning because package hasn’t been signed. You will need to click Yes to proceed.

    The wizard will prompt you to set the MINIO_ACCESS_KEY and MINIO_SECRET_KEY, and then install MinIO. Once installed you will be able to open MinIO from Package Center. Use the access key and secret key you set during the installation to login.

    Configure Arq

    Now that you’ve installed MinIO, you can use the guide on the Arq blog Backup to Synology NAS using Minio and Arq.

    → 10:19 AM, 8 Apr 2020
  • Automatic screenshot compression

    (Summarized from my post for GitLab, One simple trick to make your screenshots 80% smaller)

    When you capture a screenshot on your Mac, it will be saved in the PNG-32 format, with support for 16 million distinct colors and transparency. This means that the screenshot will perfectly capture every pixel on your screen, but having four 8-bit channels for red, green, blue and alpha (transparency) for every pixel makes the file very large. If you’re interested, you can verify this yourself using pngcheck.

    In practice, the subjects of my screenshots are buttons and forms, not photographs. Since we don’t need 16 million colors, we can take advantage of the PNG-8 format with it’s more compact 256 color palette.

    Lossy Compression: Color Quantization

    The first step is to reduce the color palette of the screenshot. This is a type of lossy compression called color quantization, which will reduce the number of distinct colors in the image. The pngquant command line utility is the perfect tool for this job, and if you’ve used the popular ImageAlpha tool, you’ve already used the pngquant library.

    # Install pngquant using Homebrew
    brew install pngquant
    
    # Quantize 32-bit RGBA PNG to 8-bit (or smaller) RGBA-palette
    # pngquant [number of colors] [options] input.png
    #   --skip-if-larger  only save converted file if they're smaller than original
    #   --strip           remove optional metadata
    #   --ext=.png        set output filename to be same as input filename
    #   --force           overwrite existing output files
    pngquant 256 --skip-if-larger --strip --ext=.png --force example.png
    

    I’ve observed for most screenshots you can comfortably reduce the color palette to as few as 64 colors before it becomes noticeable. If you frequently take screenshots of gradients or more complex images, you may want to stick with 256 colors to avoid noticeable artifacts.

    Lossless Compression: DEFLATE

    The PNG file format uses DEFLATE compression internally for an added layer of lossless compression, but most PNG libraries do not implement aggressive lossless compression. This provides another opportunity to reduce the file size further.

    In 2013, Google released zopfli, which claimed to improve compression by 3-8% compared to zlib. The trade off for this improvement: waiting an extra 1-2 seconds. (There is no decompression penalty when viewing the compressed image).

    # Install zopfli using Homebrew, which includes zopflipng
    brew install zopfli
    
    # Optimize PNG compression
    # zopflipng [options] input.png output.png
    #   -y  do not ask about overwriting files
    zopflipng -y example.png example.png
    

    Relative to the massive savings from color quantization, improving lossless compression provides a much smaller reduction, but in the context of pages with many images these marginal gains do add up to worthwhile savings.

    Automation

    The trick is to make this happen automatically every time I capture a screenshot using Automator. This allows you to run commands based on file events, like every time a new screenshot is added to a directory.

    I create a dedicated Screenshots directory, so that they don’t clutter your desktop.

    # Create a Screenshots directory in the current users Home directory
    mkdir -p "$HOME/Screenshots"
    
    # Configure macOS to capture screenshots to this location
    # If you want to revert this change, and save screenshots to your desktop,
    # instead use "$HOME/Desktop"
    defaults write com.apple.screencapture location "$HOME/Screenshots"
    

    Using Automator, create a new Folder Action that receives notifications from the Screenshots folder. Add a Run Shell Script block, and make sure to Pass input as arguments. Combining the commands above, and this time using $@ syntax to handle multiple arguments, and absolute paths for pngquant and zopflipng, the final script is:

    for f in "$@"
    do
      # Quantize to PNG-8 with 64 colors (lossy, fast)
      # Majority of file size savings come from this
      /usr/local/bin/pngquant 64 --skip-if-larger --strip --ext=.png --force "$f"
    
      # Rename to communicate the majority of file size savings complete
      # Allows me to grab the file faster
      new_f="$(dirname "$f")/$(date -r "$f" +"%Y-%m-%dT%H.%M.%S").png"
      mv -n "$f" "$new_f"
    
      # Improve deflate compression for an extra 10%
        /usr/local/bin/zopflipng -y "$new_f" "$new_f"
    
      # Copy to clipboard (optional)
      # osascript -e "set the clipboard to (read (POSIX file \"$(perl -e "print glob('$new_f')")\") as {«class PNGf»})"
    done
    

    Finally, I add the Screenshots folder to my Dock for easy access. This is achieved by dragging the Screenshots folder from Finder to your Dock.

    → 9:40 AM, 29 Mar 2020
  • Fresh flowers in preparation for the week ahead.

    → 7:56 AM, 29 Mar 2020
  • Working from home certainly makes baking bread convenient. I’m currently using bakers yeast and a poolish preferment in my country loaf for simplicity.

    → 5:53 AM, 23 Mar 2020
  • Yesterday I setup Minio on my Synology DS216play using MinioSPK for use with Arq. So far, faster and more reliable than using Autofs.

    → 10:05 PM, 9 Mar 2020
  • Seeing the sights before Git Merge.

    → 7:21 PM, 3 Mar 2020
  • Pleased to have added an experimental Micropub endpoint so I can post here more easily. This was posted directly to my blog from the Micro.blog app. 🎉

    → 10:25 AM, 23 Feb 2020
  • XOXO 2019:

    We strongly encourage attendees use any of the options above instead of Uber or Lyft. Both companies are actively undermining public transportation and worker protections, refusing to pay their drivers a living wage or benefits, while artificially and unsustainably lowering the cost of rides.

    I prefer to walk or cycle. Failing that, I use public transportation for longer distances. Too many cities make this difficult, or dangerous, if not impossible.

    → 2 Sep 2019
  • Tales From The Road: Grinduro Canada

    Four RCCNYC members, along with members from Washington DC, Boulder and Portland, headed north to Saint-Urbain-de-Charlevoix in search of gravel at the first edition of Grinduro in Canada. Part race, part party, Grinduro delivered on all fronts.

    The 100km race treated us to perfect weather, scenic views, steep gravel climbs and painful miles of sand. All RCCNYC members survived the jumps, tree roots and berms of the timed single track descent on race day (even if not as lucky the day prior when previewing the section). The final major climb – a steep gravel logging road, appearing as if freshly hewn by the bulldozers that littered the roadside – proved challenging for tired legs, but the sight and smell of decks of logs welcomed us to the final summit before the descending to the finish, beer and live music.

    The recovery ride was a spirited farewell to the roads of Charlevoix and a welcome opportunity to stretch our legs before driving through the night back to NYC. I’m still not sure if cycling or driving was more exhausting!

    → 1 Sep 2019
  • Main Square, Irbil.

    → 5:05 AM, 24 Aug 2019
  • Back on the road with my prototype ultralight duffel bag. Still going strong 12 months, 11 countries and 4 continents later.

    → 1:26 PM, 21 Aug 2019
  • GitLab: What we're doing to fix Gitaly NFS performance regressions

    A deep-dive into how GitLab reduced median latency by 80% for FindCommit and TreeEntry RPCs by sharing a single Git cat-file process per Rails session.

    → 8 Jul 2019
  • Arabian Nights 1.

    → 6:29 PM, 2 Jul 2019
  • Shadow portrait.

    → 6:15 PM, 23 Jun 2019
  • Walking up and down the winding stairs of Amman.

    → 4:24 PM, 22 Jun 2019
  • → 5:15 AM, 18 Jun 2019
  • → 6:17 PM, 12 Jun 2019
  • Dream home tiles and textile inspiration in Istanbul with Mim two weeks ago 😍

    → 11:40 AM, 21 May 2019
  • Relaxing by the Mediterranean with the inimitable Mim.

    → 1:46 AM, 20 May 2019
  • Git in the Enterprise panel discussion at Git Merge.

    → 5:07 PM, 18 Feb 2019
  • C.S. Lewis writes in the introduction to Athanasius: On the Incarnation.

    It is a good rule, after reading a new book, never to allow yourself another new one till you have read an old one in between. If that is too much for you, you should at least read one old one to every three new ones.

    Every age has its own outlook. It is specially good at seeing certain truths and specially liable to make certain mistakes. We all, therefore, need the books that will correct the characteristic mistakes of our own period. And that means the old books.

    As the new year begins I have a long list of books to finish which I intend to intersperse with old books. I’ll likely land closer to the one to three ratio, than one to one.

    → 2 Jan 2019
  • Precious stillness and quiet abounds in this place.

    → 11:42 PM, 11 Nov 2018
  • Aleksandr Solzhenitsyn:

    If only it were all so simple! If only there were evil people somewhere insidiously committing evil deeds, and it were necessary only to separate them from the rest of us and destroy them. But the line dividing good and evil cuts through the heart of every human being. And who is willing to destroy a piece of his own heart?

    → 24 Feb 2018
  • Fred Turner on technological utopianism:

    Any utopianism tends to be a totalizing system. It promises a total solution to problems that are always piecemeal. So the problem from my perspective isn’t the technological part of technological utopianism but the utopianism part. … Utopianism, as a whole, is not a helpful approach. Optimism is helpful. But optimism can be partial: it allows room for distress and dismay, it allows room for difference. It’s not, as they used to say in the 1960s, all one all the time.

    Technology will not solve all the worlds problems – not social media, not bitcoin – but it will be a component of thoughtful positive change.

    → 16 Jan 2018
  • Martin Luther King, Jr. at Ebenezer Baptist Church, Atlanta, Georgia, on 4 July 1965:

    The whole concept of the imago dei, as it is expressed in Latin, the “image of God,” is the idea that all men have something within them that God injected. Not that they have substantial unity with God, but that every man has a capacity to have fellowship with God. And this gives him a uniqueness, it gives him worth, it gives him dignity. And we must never forget this as a nation: there are no gradations in the image of God. Every man from a treble white to a bass black is significant on God’s keyboard, precisely because every man is made in the image of God. One day we will learn that. We will know one day that God made us to live together as brothers and to respect the dignity and worth of every man.

    A timely reminder.

    → 10 Jan 2018
  • Umair Haque via The Exponential View

    In return for a life of insecurity, they have given him more material things. But trading material things for basic rights, dignity, possibility, freedom, justice, truth inevitably results in feelings like anxiety, despair, rage, and shame, which are the discontents of a broken age.

    An interesting read, but I doubt many serious intellectuals really think material possessions alone bring happiness. I hope I’m not kidding myself.

    → 16 Dec 2017
  • Matthew Taylor writing in 2015:

    Social mobility (starting gate equality) is often cited an acceptable alternative to the more left wing idea of egalitarianism (end point equality), yet it is clear that the best way to create a meritocracy is to pursue greater egalitarianism. Mobility is greater in societies that are less unequal partly because the rungs in the ladder of stratification are closer together and partly because middle class people are less frightened of the consequences of downward mobility (generally the barrier to mobility is less about the poor’s ability to go up and more about the resistance of the well off to going down).

    Watch at The Guardian

    → 3 Dec 2017
  • Automatically Mount Network Drives using Autofs on MacOS

    Update, 2020-04-08: I now use Arq with MinIO, which I find faster and more reliable.

    I use Arq to backup my Mac both to Dropbox and to my Synology NAS, but I’ve had difficulty keeping the SMB network share mounted and available for Arq. The solution to this problem is Autofs (Apple White Paper).

    Autofs is an automounter, a program for ‘automatically mounting directories on an as-needed basis’, that was first released in Solaris 2.0, and comes preinstalled on MacOS since 10.5. This means, once configured, Autofs will automatically mount network shares and reconnect them if my NAS is disconnected for whatever reason. Here’s how I setup Autofs (jamesramsay/dotfiles cf11730).

    Create a mount point

    The mount point is the directory where Autofs will mount the network share. We will mount the share in /mnt/Synology.

    From the Terminal, create the /mnt directory:

    sudo mkdir /mnt
    

    Add a map to the master map

    Each map in the master map consists of a mount point (/mnt/Synology) and a mount map file. We will create the mount map file (auto_synology) in the next step.

    Add the map to the master map:

    echo "/mnt/Synology		auto_synology" | \
      sudo tee -a /etc/auto_master
    

    Refer to auto_master documentation for more details.

    Create the mount map file

    The mount map file must be located in the /etc directory. To open the new mount map file for editing, execute:

    sudo $EDITOR /etc/auto_synology
    

    The mount map file is a list of trigger folders and network shares that will be mounted automatically. Add a line for each share to be mounted automatically:

    Arq    -fstype=smbfs,rw,noowners ://user:[email protected]/Arq
    

    The mount map file above has only one mount. Autofs will mount our network share ://user:[email protected]/Arq at /mnt/Synology/Arq. The arguments between the trigger location and network share specify the SMB protocol (smbfs), to mount the share for read and write access (rw) and to mount the share with permissions inherited from the mount point (noowners).

    Refer to the mount documentation for all the supported options.

    Update automount

    To finish setting up Autofs we need to flush the cache, which will cause Autofs to reload the /etc/auto_master file. Using automount, execute:

    sudo automount -vc
    

    The cache will be flushed and the share we configured should be mounted. Autofs will now automatically mount the network share at boot and whenever it is needed by Arq.

    → 29 Nov 2017
  • Bitcoin Energy Consumption Index

    Bitcoin’s rising price is driving even higher electricity consumption, as people seek to find their nugget of digital gold. Alex de Vries estimates Bitcoin accounts for 0.12% of global electricity consumption and would be ranked 68 in global energy consumption if it were a country. The wastefulness is grotesque. Regardless of the merits of crypto currencies, Bitcoin doesn’t scale—no one wants to wait minutes or hours at the register for a transaction to clear—and worse its energy requirements cause tonnes of carbon dioxide to be emitted. Research and innovation in crypto currencies should absolutely continue, but it’s time Bitcoin was shut down.

    → 8 Nov 2017
  • Surveying the plains towards Syria.

    → 12:29 PM, 4 Nov 2017
  • Week 41, 2017

    The Coming Software Apocalypse in The Atlantic calls attention to a serious problem in the software industry: software has become too complex for total individual comprehension and we have failed to adapt the engineering process accordingly.

    This flexibility is software’s miracle, and its curse. Because it can be changed cheaply, software is constantly changed; and because it’s unmoored from anything physical—a program that is a thousand times more complex than another takes up the same actual space—it tends to grow without bound. “The problem,” Leveson wrote in a book, “is that we are attempting to build systems that are beyond our ability to intellectually manage.”

    An outage of Instagram, Snapchat or some other social networking service caused by engineering failures will hurt little more than reputation and ego, but software systems that control aircraft, finance or utilities are less fault tolerant—the cost of failure could be death. Brett Victor observes languages and approaches have evolved little in the last half century.

    Our current conception of what a computer program is, is derived straight from Fortran and ALGOL in the late ’50s. Those languages were designed for punch cards.

    To illustrate, I learnt from The C Programming Language second edition (published 1988) at university, my father learnt from the first edition (published 1978). Paradigms and techniques need not to be rejected simply for their age, yet limitations have become apparent in their application to complex critical systems. In fact these limitations have been visible for a number of decades and new approaches are gaining popularity like TLA. Less esoteric approaches are already very popular like stateless programming.

    I think the most important observation in The Atlantic’s article is that software systems must be plannedi—planned when first built and planned when extended. Leslie Lamport writes:

    Architects draw detailed plans before a brick is laid or a nail is hammered nut few programmers write even a rough sketch of what their programs will do before they start coding.

    → 15 Oct 2017
  • Week 40, 2017

    Increasingly over the last year I have worked to unplug from services that steal my time and attention, particularly Twitter and Instagram. I’ve barely used Facebook in recent years but I am hesitant to deactivate my account since it would remove thousands of photos I took as college photographer. Without deactivating my account it is impossible to prevent people from sending messages or event invites I’ll never see. Unfortunately I haven’t yet found a way around this.

    ‘Our minds can be hijacked’: the tech insiders who fear a smartphone dystopia on The Guardian observes:

    It is revealing that many of these younger technologists are weaning themselves off their own products, sending their children to elite Silicon Valley schools where iPhones, iPads and even laptops are banned. They appear to be abiding by a Biggie Smalls lyric from their own youth about the perils of dealing crack cocaine: never get high on your own supply.

    I am glad to be able to work on a product—GitLab—that isn’t competing for our users attention, but simply help them get their job done.


    On a related note, GitLab has exciting new to share. Join us at 9am Pacific at gitlab.platzi.com.

    → 8 Oct 2017
  • Week 38, 2017

    It was a warm week, my second week at GitLab and I am beginning to find a rhythm to working from home. I’ve been reading fewer books than prior to our trip home and need to rebuild my momentum. I am currently working my way through Capital, Life and Fate, and Issue 17 of Offscreen.

    Today I got distracted tweaking styling and deployment for this blog - I’ll be publishing a post soon. Earlier in the week I got distracted rotating my PGP keys. I am also hoping to share more links during during the week rather than dumping it all in a single weekly post. Time will tell.


    Alan Kay isn’t happy. The Father of Mobile Computing is Not Impressed was more interesting that the click bait title suggested. Ironic given the article’s content.

    The big slogan at Apple, when I went there, I think it was “Wheels for the Mind.” […]

    First thing I did [with the iPad] was to test how good the actual touch sensor was. I had to go out and get a capacitive pen, because one didn’t come with the iPad. You’re supposed to use your finger on it. There were five things that you could draw with on it and only one of them was good. And with that [Autodesk] pen, I was able to draw, take a ruler and draw lines with this thing, and see how linear it came out on the display, and the thing was a lot better than it needed to be. You’re kind of drawing with a crayon, but they actually did a hell of a good job on it.

    I haven’t owned an iPad since the original because as a tool it isn’t purposefully solving any problem I have. Rather than a criticism of the iPad, I would criticize myself for too often failing to be critical of my iPhone. It is all too easy to accept new technology, software or hardware, into our homes without understanding it’s cost or value.

    James Williams, ex-Google, speaking to Nautilus:

    That kind of rhetoric implicitly grants the idea that it’s okay for technology to be adversarial against us. The whole point of technology is to help us do what we want to do better. Why else would we have it? I think part of the open door that these industries have walked through is the fact that, when we adopt a new technology, we don’t typically ask “What is it for?” If we were to ask what a smartphone is for, it would almost be a ridiculous question. It’s for whatever it can do now!

    If we reconceive of technology as tools that should serve us, we might begin to be able to make better decisions about the technology that we permit into our lives. If I decide my phone and computer should serve me for X and Y, perhaps I can more easily disable what I do not need.


    David Foster Wallace on worship:

    Here’s something else that’s weird but true: in the day-to-day trenches of adult life, there is actually no such thing as atheism. There is no such thing as not worshipping. Everybody worships. The only choice we get is what to worship.

    → 24 Sep 2017
  • Week 37, 2017

    We’ve been back in New York City for a week and are enjoying the warm breath of the end of summer. We visited Red Rooster in Harlem for a lovely dose of soul food and jazz. The live jazz has really become one of my favourite parts of living in the city. It is likely that I previously failed to capitalize on the jazz scene in Melbourne, but I don’t on my return that I will reoffend.

    Excitingly I’ve now started my new job Product Manager at GitLab! It was an interesting experience to begin by simply opening my laptop at the dining room table. Regardless it has been a great experience—GitLab have had a few years to work out how to make remote work well including the on-boarding process. On the home front, it’s been fun reconfiguring the living room to create a work space that doesn’t intrude on the rest of our daily lives. I am hoping to collect more of my thoughts on transitioning to a remote team as I adjust to it.


    New job, new laptop. I am thankful for my new computer but accommodating the Touch Bar has been more frustrating than expected. I should have expected it would be difficult. I find I unexpectedly adjust the volume or screen brightness at times when I reach for the top row of physical keys. Most frustrating has been the escape key. Using Karabiner Elements I have now disabled the virtual escape key in favor of caps lock. I’ve also taken the opportunity to also relocate the ctrl key to the caps lock key for chorded shortcuts in vim and tmux. Besides the Touch Bar however, the MacBook Pro is a very impressive computer with an excellent keyboard.


    New job, new projects. GitLab uses ruby and I’ve setup using chruby to seamlessly switch between versions. The challenge has been one of my vim plugins, Command-T, relies on the version of Ruby it was compiled against. I am hoping to find a way to always use the correct version of ruby with vim regardless of the working directory. Any suggestions would be welcome!


    I am excited about the introduction of Intelligent Tracking Prevention in Safari 11 for macOS and iOs 11. The advertising technology industry is generally not. This is because the ad tech tax is primarily extracted through tracking users and selling information about their behaviour to advertisers. True to form, the CEO of the IAB, will make any argument in favour of the least regulation or consumer control of how consumer data is collected and used.

    Writing of Apple’s changes to Safari, Rothenberg is concerned consumers won’t be able to exercise proper control:

    We are deeply concerned about the Safari 11 browser update that Apple plans to release, as it overrides and replaces existing user-controlled cookie preferences with Apple’s own set of opaque and arbitrary standards for cookie handling.

    Yet, Rothenberg writes regarding protections for consumers who block tracking in the upcoming ePrivacy regulations in the EU:

    Buried in pages of amendments to the European Union’s latest privacy proposal, the ePrivacy Regulation, members of the European Parliament recently recommended language that would strip European publishers of the right to monetize their content through advertising, eviscerating the basic business model that has supported journalism for more than 200 years. The new directive would require publishers to grant everyone access to their digital sites, even to users who block their ads, effectively creating a shoplifting entitlement for consumers of news, social media, email services, or entertainment.

    Rothenberg is an apt representative of a self interested and entitled industry. Thanks to Ad Tech Weekly for curating these prime quotes.


    Rocky Mountain Institute (PDF) offers some positive projections that staying below the 2ºC limit may be more achievable than typically suggested. The report is quite interesting and includes many interesting data points regarding the adoption and cost effectiveness of PE.


    Another article adding to the growing number questioning th net benefit of social media, Umair Haque asks Is social media a failure?. With every passing week I am using social media less and am feeling no less in touch with my friends or the world. It’ll be interesting to see where Facebook is ten years from now.

    → 17 Sep 2017
  • Week 34, 2017

    After many wet and windy Saturdays in Melbourne yesterday was good cycling weather, and I was able to enjoy cycling with friends. I’ve also been trying out Zwift, a virtual cycling application that connects to smart trainers. I have found the structured training surprisingly fun and a good supplement to otherwise weekly social rides.


    This weeks pseudo-science diet is ’lectin free.’ The Atlantic investigates and debunks the claims made and exposes the conflicts of interest that exist when authors sell their readers their own products. Most importantly James Hamblin does this without being dismissive and argues in The Next Gluten that there is damage caused by health authors that seek to ’totally upend [our] understanding of nutrition’ with ’truth that no one else in the world has.'

    Book publishers are rarely held accountable for publishing invalid health information. Rather, there seems to be an incentive to publish the most outlandish claims that purport to upend everything the reader has ever heard. This is a problem much bigger than any plant protein. Cycles of fad dieting and insidious misinformation undermine both public health and understanding of how science works, giving way to a sense of chaos. It seems that every doctor has their own opinion about how to protect your body from calamity, and all are equally valid, because nothing is ever truly known.

    Yet another sad example of truth and reason being undermined for individual gain.


    Last week I began investigating moving my blog away from Jekyll to a more flexible framework. I have been experimenting locally with Metalsmith, ‘an extremely simple, pluggable static site generator.’ I’ve mostly replicated everything except deployment. I’ll write a more thorough post when I’ve completed the transition.

    → 27 Aug 2017
  • Week 33, 2017

    The violent white supremacist march in Charlottesville, Virginia last weekend set the tone for an awful week in American politics.

    Vice News Tonight went behind the scenes in Elle Reeve’s piece Charlottesville: Race and Terror. It shows how tense and scary it was and makes it abundantly clear the violent rally was merely using the Confederate statue as an excuse to push their racist agenda.

    Trump’s response was awful, and ultimately got even worse on Tuesday. It was best summarized by The New York Times:

    President Trump buoyed the white nationalist movement on Tuesday as no president has done in generations — equating activists protesting racism with the neo-Nazis and white supremacists who rampaged in Charlottesville, Va., over the weekend.

    Never has he gone as far in defending their actions as he did during a wild, street-corner shouting match of a news conference in the gilded lobby of Trump Tower, angrily asserting that so-called alt-left activists were just as responsible for the bloody confrontation as marchers brandishing swastikas, Confederate battle flags, anti-Semitic banners and “Trump/Pence” signs.

    Unfortunately and unsurprisingly few Republican’s have condemned Trump’s response. Democratic Reps. According to Think Progress only 28 of 292 congressional republicans have criticized Trump by name.

    Jerry Nadler of New York, Bonnie Watson Coleman of New Jersey and Pramila Jayapal of Washington have introduced a censure resolution. All members of congress who abhor racism, white supremacy and neo-nazi’s should put themselves on record by signing on.

    Daniel Pfeiffer sums up on this week’s Pod Save America:

    If you are so morally outraged by the President’s support of Nazis […] do something about it. Put yourself on record that you disapprove of what Donald Trump said–not the general concept of racism, but of the racist in chief.


    Meanwhile in Silicon Valley, Cloudflare terminated the account of the Daily Stormer. This continues the discussion if tech companies can truly be neutral and the role they play in protecting free speech and protecting the vulnerable from violence and hate speech. Further reading at The Atlantic (ht Azeem Azhar


    I hope to spend more time relaxing, reading and cycling this week, rather than anxiously keeping up with the news cycle.

    → 20 Aug 2017
  • Week 32, 2017

    Reading The Atlantic this week reminded me it is time I subscribed. If you love great journalism you should pay for it! Online advertising doesn’t work. The New York Times digital ad revenue in 2016 was $209M, while their monthly unique users grew to 92M in January 2017, which nets out to approximately $2.27 per unique user in 2016. In a year, you almost undoubtedly paid more to download the ads than they received from the advertiser for you viewing the ad. If you can spare half an hour, Scott Galloway’s Death of the Industrial Advertising Complex is entertaining and worthwhile.


    I used my phone less while in Tasmania last week and it was a great feeling. Every time I reduce my usage I feel better for it. This week The Atlantic asks Have Smartphones Destroyed a Generation?. A tough headline to live up to, yet it came closer than I expected to making the case. Even if a generation hasn’t been destroyed, I do think society has a problem on it’s hands learning to manage the addiction of our digital devices and software which reduce the frequency and quality of our face to face interactions.

    → 12 Aug 2017
  • Week 31, 2017

    Last week was a lovely mix of family and cycling, the perfect way to decompress. I hope to spend more time reading this week, although I did read Tolstoy’s Happy Ever After last week. I’m planning a few long rides for next week to Ballarat and perhaps also from Ballan to Geelong.


    This Is How Big Oil Will Die was an interesting read this week. The fact that electric vehicles have a much longer lifespan and lower cost of running is going to make the demise of combustion engine vehicles rapid. At this point, I’m not sure if I will ever own a car. Although, it isn’t clear to me how car sharing works when you have small children (car seats) or want to put a bicycle on the roof.


    I switched back to vim, specifically neovim, last year. At worst I am equally productive and have enjoyed improved performance and battery life, particularly on my tired mid-2011 MBA. This article shows how poorly Electron based editors Atom and Code perform compared to vim on startup and memory usage.

    Relatedly, Firefox 58 is due out later this year boasting better performance. I’ll certainly give it a good try but it’ll face stiff competition from Safari. I switched from Chrome to Safari for battery life, but have grown to really appreciate the iCloud integration between my phone and laptop. Although, with a newer laptop that supports Handoff, this might be mitigated.


    From The List of Articles to be Read, Mary Cook’s article Git from the inside out is top of my list for this week. My understanding of git is primarily based on its API, and I am very keen to better understand its internals.

    → 6 Aug 2017
  • Week 30, 2017

    I am back in Australia concluding five and half years at Adslot. It was a great pleasure to work with and learn from many great people solving a challenging important problem. Online advertising and advertising technology is undeniably broken and few are working towards solving the underlying problems like Adslot has. I hope Adslot continues to grow and make online advertising better for advertisers, publishers and consumers.


    I am looking forward to a few weeks vacation catching up with friends and family while we wait for new visas. Preparing for my departure I realised a proper vacation was long overdue.


    I watched the film Land of Mine on the flight to Australia and found the narrative more interesting than I expected. We also watched the series War on Waste this week. It was thoroughly disturbing to see how much waste is produced before products even reach us, and how much we send to landfill.

    Although recycling soft plastics—in which much of our food is packaged—is clearly better than sending them to landfill, the goods that can be made from soft plastics seem to of limited appeal. Instead significantly reducing the use of soft plastics is preferred. Eliminating the plastic bag is relatively straightforward in comparison to eliminating soft plastic films from packaged meat and small goods, or from breakfast cereals. I would be interested to know what a plastic free alternative might look like.

    → 30 Jul 2017
  • Week 28, 2017

    A quiet week of work, cycling and watching professional cycling. We’ve been preparing for a trip back to Australia next week. I am particularly pleased that we will be escaping the heat and humidity of August in NYC, I much prefer the cold of Melbourne.


    Like many, I read the New York Magazine article When Will The Planet Be Too Hot For Humans? It paints a terrifying picture, but for those who’ve taken even a passing interest in climate change, it’s nothing new. And I think that’s the real problem here. Virginia writes:

    … the message just is not reaching the people who have the power to vote out the craven motherfuckers who refuse to consider the state of the world beyond the end of this week.

    It is mind bogglingly frustrating that the survival of our planet has become politicised, such that the existence of this problem spuriously remains open to debate. Maybe in part you and I am to blame. I can hardly think of anyone I know well who doesn’t think climate change is a serious and pressing issue. Isn’t it comfortable to surround ourselves with similarly educated, similarly successful and similarly minded. But is that good for our communities? Selfishly, deep down, is it good for me? I doubt it.

    → 16 Jul 2017
  • Week 27, 2017

    A very short week because of July 4th national holiday. We watched the fireworks over the East River with friends and enjoyed a trip to Rockaway Beach. Rather than taking the train to Rockaway, we took the ferry from Wall Street which is apparently a rather new option but undoubtedly the nicest.


    From the Department of Tooling, Magic Wormhole is clever and useful. Before you try it out, watch Brian’s PyCon talk here to appreciate what is going on under the hood. Briefly, from the read me:

    The wormhole tool uses PAKE “Password-Authenticated Key Exchange”, a family of cryptographic algorithms that uses a short low-entropy password to establish a strong high-entropy shared key.


    Continuing my reading on inequality, I’ve started Capital in the Twenty-First Century by Thomas Piketty. It’s probably going to take a month or two of reading to see it through.


    A few weeks ago we came across a delicious cocktail, Vieux Carré. It’s boozy and absolutely delicious, but you’ll likely need to buy a few ingredients unless your cupboard is exceptionally well stocked.

    → 9 Jul 2017
  • Week 26, 2017

    Enjoyed fresh air cycling twice this week, getting out to Prospect Park for a few laps and up to Henry Hudson Drive for some vertical meters. Combined with more time reading, my mind is feeling much clearer at the moment.


    We watched the first season of Broadchurch. I enjoyed it quite a lot and am looking forward to Season 2. Also Le Tour began July 1! Hopefully it will be as exciting as the Giro which was nail-biting!


    I am reading Dream Hoarders. Reeves is pointed. He knows his audience are households likely earning in the top quintile, the ‘upper middle class’, as is he, and takes aim.

    … that downward mobility is not popular is an understatement. We would likely be more relaxed if society were more equal, since the fall would not be so great. Likewise, if everyone was getting better off, slipping a quintile or two might not seem like the end of the world. But whatever we do, an inconvenient truth will remain. If more kids from lower-income quintiles are to move, more of those from higher up must fall.

    The case made is that although the top 0.01% and top 1% have pulled away significantly, the divide between the top 20% and the bottom 80% is growing significantly. Most problematic is that relative mobility, the ability to move from one quintile to another, of the lower quintiles to reach the top quintile is decreasing. Reeves writing on opportunity hoarding and the construction of a glass floor to protect the next generation of the upper middle class is unsettling.

    Undoubtedly this book focusses on the American context, but the broader questions it raises about how one thinks of merit and equality are broadly applicable. I’m interested to read any related writing from an Australian perspective.

    → 4 Jul 2017
  • Week 25, 2017

    Following the long journey back to NYC, my primary focus has been catching up on sleep and adjusting to the heat of the first days of summer.


    I am currently reading Everything Is Obvious (Once You Know the Answer): How Common Sense Fails Us by Duncan Watts, and have enjoyed his observations about the prevalence of circular reasoning. He writes:

    We claim to be saying that the Mona Lisa is the most famous painting in the world because it has attributes X, Y, and Z. But really what we’re saying is that the Mona Lisa is famous because it’s more like the Mona Lisa than anything else.

    It’s a good to be reminded regularly that understanding the world doesn’t come naturally to the human mind. Answering ‘Why?’ is no easy task.


    From the Department of Tooling, I customised my vim status line without resorting to custom fonts or vim extensions, and am trying to rely more on the command line for git and less on GitUp (the fastest, best git GUI for Mac OS).

    → 25 Jun 2017
  • Week 24, 2017

    I returned Sunday from two weeks abroad in Australia. The purpose of the trip was work but it was a wonderful chance to see friends and family. Although I’ve been back to Australia a few times since moving to NYC, this was the first time that arriving in NYC felt as if I were returning home.


    While away, The Field Study Handbook by Jan Chipchase arrived. Jan’s writing is clear and engaging. I’m sure I’ll have more to share as I work my way through.


    I’m experimenting with vimwiki for writing my daily to do lists and keeping my notes organized. It’s working well so far, but I doubt it will stick. For the last year I have used the Bullet Journal notation and have found it very practical.

    → 18 Jun 2017
  • Week 18, 2017

    A day late and brief because I spent the weekend cycling!


    In the past few weeks I’ve been working on creating an environment for reproducible data analysis with Docker, Jupyter and R. What I thought would be a simple project turned quickly became complicated when I had to work out how to upgrade Java and R’s Java bindings to connect to AWS Athena. I hope to write a longer post about this project soon.


    Last week Jan Chipchase released The Field Study Handbook which you should definitely read more about and probably back. I’m looking forward to spending some quality time reading it once it ships, currently estimated for June 2017.

    → 7 May 2017
  • Week 16, 2017

    When I was studying I spent a lot of money on textbooks that I barely used. Here is a textbook trying to change that. A stats textbook is also coming later this year.


    This week I learned that the ‘Fearless Girl’ statue installed in front of ‘Charging Bull’ on Wall Street was part of a marketing campaign for NASDAQ listed SHE. I wasn’t aware of the history of ‘Charging Bull’ either. I’m less excited by ‘Fearless Girl’ knowing that the original guerilla art is being subverted by faux-guerilla art. On balance though, I do like it and hope it sticks around. Read more here.


    This week The Guardian ceased publisher articles on Facebook’s Instant Articles and Apple News. Particularly when Instant Articles launched there was a lot of bluster about saving journalism, but this was wishful thinking from the start. Publisher’s absolutely need to provide great reading experiences that load quickly, but farming the content out to platforms you don’t control won’t magically create a loyal and profitable audience. The Verge has a good piece breaking it down.

    Incidentally, I was linked to an interesting article on Variety from Twitter, which I tried to read on my phone earlier this week. The page was so clogged with interruptive scrolling units that I gave up. I had intended to try again on my laptop but can’t remember what the article was. You can be sure I won’t be clicking through to that property again any time soon. I can’t tell if publishers don’t care or just don’t realize how awful the reading experience on their mobile sites is.

    → 22 Apr 2017
  • Week 15, 2017

    In an attempt to start writing again, I am trying a new format collecting interesting things from the past week.


    I read Investing Is More Luck Than Talent on the statistics of wealth distribution. Levy argues “the distribution of wealth at the highest end of the scale is quite consistent with pure luck.” It’s an interesting read.

    Also related, Corporations In The Age Of Inequality describes how firm inequality is a significant contributing factor to individual inequality. Bloom writes:

    In an increasingly winner-take-all or at least winner-take-most economy, the best-educated and most-skilled employees cluster inside the most successful companies, their incomes rising dramatically compared with those of outsiders.

    We need to work out how to move beyond simply talking about income inequality, and start practically fixing the problem. The tax system seems a good place to start, along with investing more in education and health.


    Compile clac if you need a postfix (Reverse Polish Notation) Terminal calculator. I’ve used a HP RPN calculator for many years and much prefer it to infix notation.

    → 15 Apr 2017
  • Stop reading the news

    One week ago I stopped reading the news. As a child I devoured books. On holidays I would read an entire Tolkien book in a single day. And at university, I spent hours each day reading books and papers. I like to think I still spend as much time reading, but mostly it is industry specific or world news rather than longer reflective analysis or books: noise.

    Six months ago my reading habits were better but still not ideal. My Sunday morning practice was to read The Economist supplemented with occasional articles through the week and a quick scan of a few technology blogs most mornings. I can’t recall what brought about the idea but I decided to try Apple News. It was also about this time that my Twitter usage began increasing.

    Since my habits changed I have may have had a greater awareness of reported events, yet I haven’t felt better informed. Instead, a growing sense of unease has bothered me. At times I became anxious when I realised I hadn’t checked the news or noticed growing number of unread tweets. Worse still I knew that much of what I was reading was the intellectual equivalent of junk food. None of it mattered.

    I am not the only one experiencing these feelings. Last month Andrew Sullivan writing New York Magazine:

    And yet I wonder. The ubiquitous temptations of virtual living create a mental climate that is still maddeningly hard to manage. In the days, then weeks, then months after my retreat, my daily meditation sessions began to falter a little. There was an election campaign of such brooding menace it demanded attention, headlined by a walking human Snapchat app of incoherence. For a while, I had limited my news exposure to the New York Times’ daily briefings; then, slowly, I found myself scanning the click-bait headlines from countless sources that crowded the screen; after a while, I was back in my old rut, absorbing every nugget of campaign news, even as I understood each to be as ephemeral as the last, and even though I no longer needed to absorb them all for work.

    This resonated with my fears of slowly losing control and endlessly being drawn back into the glow of my stupid phone. But, as is common with many of these articles, it’s conclusion amounted to little more than ‘although it’s hard we need to unplug else it’ll cost us dearly.’ I agree but this was challenging to apply.

    Last Friday I came across Rolf Dobelli’s article Avoid News. Rolf puts forward a number of concerns about the format and consumption of modern news. I was particularly struck by Rolf’s arguments that news is both costly and mostly irrelevant. Time spent reading the news quickly accumulates even if one’s consumption is limited to only a single session per day. The irrelevance of news was less obvious to me. Rolf’s argument is this: apart from its possible entertainment value, the news does not substantially increase the quality of your life.

    Assume that, against all odds, you found one piece of news that substantially increased the quality of your life – compared to how your life would have unfolded if you hadn’t read or seen it. How much trivia did your brain have to digest to get to that one relevant nugget? Even that question is a hindsight analysis. Looking forward, we can’t possibly identify the value of a piece of news before we see it, so we are forced to digest everything on the news buffet line. Is that worthwhile? Probably not.

    Thus I am choosing to spend more time reading long form articles and analysis rather than reading the news. When important news does occur I’ll simply read it a few days later and get the complete picture. To help me in this, I’m looking forward to subscribing to more periodicals and perhaps a Saturday newspaper.

    For the time being, I’ve deleted Apple News and buried Twitter on my phone. I’ll likely remove Twitter from my phone in preference for accessing it occasionally from my computer. Goodbye, news.

    → 19 Oct 2016
  • Improving performance of Jekyll with Cloudflare and Google App Engine

    The thoughts and links I share here are brief. Similarly, I like to keep page load time brief. No one likes to wait for pages to load.

    In an experiment to learn more about HTTP/2 Server Push and Google App Engine I moved my blog generated using Jekyll from Github Pages to Google App Engine with Cloudflare in front. A feature of Github Pages is that it ‘just works’ at the cost of customisation. Google App Engine is a cloud computing platform for web applications and offers complete customisation at the cost of greater complexity, and Cloudflare supports HTTP/2 Server Push via the Link header which is easily specified for static assets served by Google App Engine.

    If you’re using Chrome 53 or later, the resource inspector shows resources which have been pushed.

    Inspector: blog.jramsay.com.au

    While setting up Google App Engine I encountered some challenges using regex url handlers and preferred generating the url handlers as part of the Jekyll build step. After all, Jekyll knows the URL of every page it generates. To do this I wrote a simple Jekyll plugin: jekyll-app-engine.

    Interestingly while writing the plugin, I discovered Ruby’s YAML implementation automatically uses anchors and aliases when writing objects to a YAML string. I quickly discovered this was problematic for my purposes because support for anchors and aliases is not implemented in the Google App Engine SDK. This quickly turned my simple adventures in Ruby into a more complex exploration of both the SDK and Ruby’s YAML library Psych. In the end I settled for sub-classing Psych’s YAMLTree and setting the alias lookup object to a new empty object. If any Rubyists have ideas for a better solution, please let me know.

    → 13 Jun 2016
  • Marketing Malpractice: The Cause and the Cure

    From the HBR archives, this is one of the classic papers behind Jobs To Be Done (JTBD):

    In other words, the job, not the customer, is the fundamental unit of analysis for a marketer who hopes to develop products that customers will buy.

    I’ve recently been reading the The Clayton M. Christensen Reader and am enjoying the time spent thinking through the ideas behind the processes and tools of JTBD.

    If you’ve never read any of Clayton Christensen’s papers but find JTBD interesting, reading this paper would be time well spent.

    → 27 Apr 2016
  • Advertising is becoming a tax that only poor people pay

    Scott Galloway, Professor of Marketing and Brand Strategy at NYU Stern and Founder of L2 said at DLD:

    The advertising industrial complex is about to come to an end and the downstream service providers–the conglomerates–are about to take their turn at the woodshed.

    The house that advertising built was consumer packaged goods. They taught us that detergents and soaps could be wrapped in emotion. You were a better mum, you were more American, you were a more elegant European if you used a certain type of hand soap. This is the house that advertising built.

    Last year the house that advertising built, almost 90% of all CPG brands lost share, and two-thirds lost revenue. Why? Because advertising sucks! And if you’re wealthy you can opt-out of advertising. We are now downloading Modern Family and paying two-bucks [$2] for it on iTunes solely so we can avoid the advertising. Advertising is becoming a tax only poor people pay.

    Scott follows the money and describes my individual experience precisely. I pay for content on iTunes and Netflix, and subscribe to the few publications I read regularly to avoid advertising.

    Most advertising is irrelevant and low quality and I’d rather not give up yet more of my privacy in the hope of seeing more relevant advertising. Those with the means are going to opt-out by paying for content or install an ad blocker to bypass advertising all together.

    → 5 Mar 2016
  • Widespread XSS Vulnerabilities in Ad Network Code Affecting Top Tier Publishers, Retailers

    Randy Westergren writes:

    Any time we allow 3rd party scripts to run on our sites, we effectively relinquish control of the code that executes on the client. This is particularly important when integrating ad network scripts since they are inherently more dynamic than most other types of integrations, the cause of which is the ad industry’s general fragmented nature.

    Randy details the vulnerability and lists high profile vulnerable sites including The Telegraph, NYPost, CBS News, NBC News, NYTimes, MSN, Washington Post and the BBC.

    It’s always surprised me that publishers are so willing for third-party scripts to be served to their customers over the RTB exchanges without any real quality control tools. Even guaranteed advertising presents quality control challenges for publishers who are limited to sampling the responses of agency ad tags, rather than being able to examine the underlying creative or tracking scripts directly or be notified of changes being made by the buyer.

    Given vast coverage of advertising across the web and their vulnerability to XSS attacks, it is surprising so few have attacks have been documented. Yet another reason to run an ad blocker, despite the financial hurt they cause to publishers.

    → 5 Mar 2016
  • RTB Is Anti-Publisher At Its Core

    Todd Garland of Buy Sell Ads writes for MediaPost:

    When did it become acceptable for advertisers to allocate a perceived value to a publisher’s inventory? If we’re looking for examples to help us define the concept of onerous terms, look no further than the ecosystem built, and continually propped up by, RTB advocates.

    I’d like to say that it’s insane.

    Imagine walking into a car dealership and then simply telling the salesperson what you will be purchasing a car for. Do you think a dealership would let you walk out with the keys? That’s exactly how RTB exchanges work today.

    Only a few days prior, Todd wrote on LinkedIn:

    The IAB and the house it built is a mess, and it’s dangerously close to catching fire and burning to the ground. The IAB still continues to ignore the simple fact that people have voted with their Chrome, Firefox, and Safari plugins. The market reality we’re all facing is something the ad tech industry has created and end-users don’t give two “merdes” about what that means for publishers.

    Todd doesn’t pull any punches and says publicly what many have been thinking. More frequent critical appraisals like these would benefit the advertising industry.

    → 24 Feb 2016
  • Privacy and security

    It has been interesting reading the stream of articles since the FBI requested Apple to assist recover data from the iPhone seized from attack in San Bernardino. No doubt a serious legal precedent will be set, but as many have pointed out the physical existence of a modified operating system allowing faster brute force access to an iPhone is far from ideal.

    One of the aspects I appreciate most of my iPhone is it’s security, simply because I rely on my mobile in day to day life including banking and paying bills. But it’s not just financial information that is valuable. Having confidence other types of personal information is secure is important, particularly as social engineering based attacks become increasingly common.

    As technology connects us, allowing to share increasingly personal and confidential information on our mobile devices, security needs to keep up. Government mandated backdoors or weakened encryption prevent any such lock-step.

    → 22 Feb 2016
  • The Most Powerful Lesson I’ve Ever Learned In Business

    Mike McCue writes on Medium:

    If you seek out and uphold the first principles you will not only make a good decision, you’ll do it in way which strengthens your team rather than splintering it.

    Mike writes about using first principles when making tough decisions and provides a practical example from his own experiences.

    After all, integrity is all about upholding principles… And principles only matter when they’re hard to keep.

    Good advice, but hard to follow when it counts.

    → 22 Feb 2016
  • The value formalising process and ideas

    I am very lucky to work in a great product and engineering team at Adslot, which embraces continuous improvement and encourages experimentation to create a better working environment and build better products for our customers. Over the last four years at Adslot we’ve tweaked, polished and overhauled many aspects of development, QA, product and UX processes and tooling. Besides what we’ve learned from the individual experiments, more recently I’ve been increasingly appreciating the value of formalising the processes and ideas that stick. This seems painfully obvious in hindsight.

    I think formalisms are helpful because they assist processes and ideas be communicated more effectively by providing a common language for the underlying ideas and motivations. This also makes it easier to critique, improve and apply to new contexts.

    This realisation particularly struck me over the last few months when we became aware that we’d independently arrived at an engineering culture and product processes similar to some great companies we respect. It was satisfying to realise we were on ground already tread by other great companies, but my real excitement has come from how we’ve been able to improve how we communicate our processes and culture across the business. This is particularly useful at Adslot where we are trying to build a common culture and shared processes across many teams distributed around the world.

    → 13 Feb 2016
  • Header Bidding for consumers

    A few days ago I summarised my thoughts on header bidding. In my brevity, I neglected to reflect on its consumer impact. Alas, this neglect reflects that of the commentary on header bidding, and arguably the systemic neglect of consumers by the advertising industry in general.

    Header bidding has two obvious costs to consumers:

    • further loss of privacy and anonymity, and
    • further reduction of page performance.

    Performance problems will surely be solved in time, by relocating complex client-side header bidding scripts to the server-side, but the loss of privacy and anonymity seems only likely to increase.

    Considering the hypothetical mass adoption of header bidding and the eradication of the ad server prioritisation, every single impression will be broadcast to the RTB exchanges. Each impression is shown at auction laden with cookies and likely enriched with publisher first-party data. This allows buyers to make educated decisions by only purchasing impressions that have a suitable likelihood of being relevant to the consumer.

    One of the advantages to consumers of guaranteed buying, is that a publisher only reveals the customer information to the advertiser once they’ve paid. This makes it harder for any one agency or buyer to build a complete profile of a given consumer. In contrast, RTB is an auction which means sellers will provide information in the hopes of attracting higher bids. Observers may quietly take notes and build a profile, without even having to place a bid.

    For my own sake, I hope that header bidding is not adopted quickly or broadly, so that I can continue to enjoy what little privacy I have left. Long term, however, regulation is likely required to control the way in which advertisers and agencies may profile and store consumer data. One such regulation might be to prohibit companies storing behavioral data longer than 90 days.

    → 7 Feb 2016
  • Thoughts on Header Bidding

    Header Bidding has been receiving the sustained attention of the online advertising press for a number of months now. It is a clever hack which allows price prioritisation of RTB exchange bids and traditional line items within a publisher ad server, which would otherwise prioritise RTB last. Header bidding is then a helpful tool allowing publishers to increase yield of sub-guaranteed priority and incrementally increases impression volumes entering the exchanges.

    The interest in header bidding, however, has primarily centred on upending prioritisation—the waterfall—entirely in favour of exclusive price prioritisation. This reflects the desire of the RTB establishment to improve access to premium inventory and obtain first look of all impressions, feeding their insatiable hunger for data.

    If header bidding were to be adopted in this manner and scale, publishers would lose control of their data, of how inventory is sold and the ability to make real guarantees. Agencies would have all the data necessary to forecast impression volumes and perform their own segmentation of a publishers audience. Publishers should carefully consider the implications of ceding their remaining control to buyers.

    But agencies also need to consider the implications of an entirely price priority controlled future. Although agencies will be able to build their data assets to buy impressions more precisely, agencies will lose important tools used to exert their buying power. Instead, agencies will compete fiercely over tiny pockets of highly valued impressions, but will be unable to provide meaningful guarantees of price or volume to their clients. How will agencies differentiate themselves in such an increasingly commoditised landscape?

    Jed Nahum, writes for AdExchanger:

    … RTB has created a war over whether the buy side or the sell side defines what is being sold. The nutshell of my argument is that RTB has made it possible for buyers to select specific impressions for their buying. This is “decisioning.” In RTB, the buyer does it, and in traditional ad sales the seller does it. I think the real battle is about who gets to decide. Will buyers define the audience they want to reach and bid on it or will sellers define the context they wants to sell and package it up?

    It makes lots of sense for increased buyer control over segmentation below guaranteed transactions. Publishers benefit from increased yield, and buyers from an increased pool of impressions. However, reducing all impressions to price priority requires buyers and sellers to surrender control, devalues publisher-agency relationships, and neutralises agency buying power.

    Adoption of header bidding is inevitable. What remains to be seen is the speed of adoption and how much control publishers are prepared to give up. I suspect small publishers with limited direct sales have the most to gain from wholesale adoption of header bidding, while larger publishers might see incremental gains below a sub-guaranteed priority implementation, large publishers risk it all by pushing header bidding to higher a priority.

    → 4 Feb 2016
  • Delete labeled emails after 30 days (Gmail tip)

    Today I discovered I’d been accumulating huge amounts of unimportant emails. Emails that I needed to keep for 30 days, but after which are completely meaningless. Unfortunately, deleting millions (over 1,000 per day over 4 years) of email messages isn’t easily achieved.

    Thankfully, Google Script allows you to interact with Google Apps (including Google Mail) using Javascript executed on Google servers to perform tasks, even timer based tasks like CRON. This makes running a task daily to trash old emails simple!

    ↪ Check out the script here on Github Gist.

    → 21 Jan 2016
  • The Problem With User Stories and What's Better

    Alan Klement:

    When I used to write user stories with my team, my teammates would read them, think they understand them and then go on with their own interpretation of the story, which ended up being different than mine. I started noticing the problem was with the user stories, and not me, when different engineers would interpret the same story very differently.

    So I did something different: I stopped writing them.

    At first the engineers were confused, so they would come to me and mention the story was missing. Then something amazing would happen…we would talk about it! Sometimes, several of us would talk about it together. After a while everyone got into it, team collaboration took off and the product became better. We would talk about everything frequently.

    Reading this article was like déjà vu! Over the last 12 months I’ve also dialed back on writing user stories, shifted to a discussion driven approach, and experienced a similar increase in collaboration and understanding of the underlying problems we are solving.

    Answering the question why? is so much more valuable than any list of user stories. It empowers and enables the entire team to participate in the process of solving the problem, rather than keeping this important information siloed with individual members of the product and UX team.

    → 20 Jan 2016
  • The resolution of the Bitcoin experiment

    Mike Hearn (previously Bitcoin Core developer):

    It [Bitcoin] has failed because the community has failed. What was meant to be a new, decentralised form of money that lacked “systemically important institutions” and “too big to fail” has become something even worse: a system completely controlled by just a handful of people. Worse still, the network is on the brink of technical collapse. The mechanisms that should have prevented this outcome have broken down, and as a result there’s no longer much reason to think Bitcoin can actually be better than the existing financial system.

    After mining a small quantity of Bitcoin early last year, I became more aware of an elite group who were responsibly for an increasing majority of mining and had accumulated a vast wealth in Bitcoin. My interest in Bitcoin and cryptocurrency is the possibility of improving the ability of disadvantaged people to access cheap, if not free, financial services such as banking and international transfers. The growing control of the currency by a small group of people runs counter to such an interest, so I cashed out my $100.

    In other cases, entire datacenters were disconnected from the internet until the single XT node inside them was stopped. About a third of the nodes were attacked and removed from the internet in this way.

    Worse, the mining pool that had been offering BIP101 was also attacked and forced to stop. The message was clear: anyone who supported bigger blocks, or even allowed other people to vote for them, would be assaulted.

    The criminal activity and tightening grip by a small handful of people described by Hearn reveals how far Bitcoin has fallen from the goals and ideas the experiment promised. The promise of sharing power and money has been seized by this small few.

    Hopefully other cryptocurrency experiments will be able to learn from the failures of Bitcoin.

    → 17 Jan 2016
  • Designing Features Using Job Stories

    Alan Klement, guest post for Intercom:

    The casualties of this waterfall process are the subtleties which it is necessary to understand when creating great products: causality, anxieties, and motivations. As development teams recognize that they need to be close to customers, it’s also appropriate to consider better ways of leveraging customer empathy to create products.

    This philosophy of focusing on causality, anxieties, and motivations is called Jobs To Be Done, and a granular way to bring this concept into a product is to use Job Stories to design features, UI, and UX.

    Causality, anxieties, and motivations are critical for effective product design and development. We have also found that traditional personas, user stories and use cases typically fail to capture this important information.

    At Adslot, I’ve worked to counter this by frequently including a “rationale” alongside the user story. Ultimately, however, the most effective way we’ve developed to communicate this is in early stage feature discovery meetings with developers, design and QA.

    → 13 Jan 2016
  • Forbes forces readers to turn off ad blockers, promptly serves malware

    Joel Hruska, writing for ExtremeTech (emphasis added):

    For the past few weeks, Forbes.com has been forcing visitors to disable ad blockers if they want to read its content. Visitors to the site with Adblock or uBlock enabled are told they must disable it if they wish to see any Forbes content.

    What sets Forbes apart, in this case, is that it didn’t just force visitors to disable ad blocking — it actively served them malware as soon as they did.

    At what point does enforcing the use an ad blocker become part of company IT policy to help defend against malware?

    → 12 Jan 2016
  • Babel ES2015 transpiled module compatibility with CommonJS

    If you’re using Babel, Axel Rauschmayer’s recent post Babel and CommonJS modules is worthwhile reading to understand how interoperability between transpiled and CommonJS modules is achieved.

    → 22 Dec 2015
  • Shipping stable npm releases

    Another post where the understanding the detail of the tools we use everyday can make a very measurable difference. Greenkeeper use npm and Babel 6 as examples of how using distribution tags can help ensure stable module releases in their article One simple trick for JavaScript package maintainers to avoid breaking their user’s software and to ship stable releases. Although I’ve used a moderate portion of npm’s capabilities, I’d missed this really useful feature.

    → 22 Dec 2015
  • People's Deepest, Darkest Google Searches Are Being Used Against Them

    Business that knowingly take advantage of the financially vulnerable make me sick. Increasing the access that pay-day lenders have to people in these situations through lead generators is sad and terrifying, but as the article People’s Deepest, Darkest Google Searches Are Being Used Against Them points out, Google is in a tough situation trying prevent this and uphold it’s own policies, let alone any hypothetical increased regulation. A terrible problem without an obvious solution.

    → 4 Nov 2015
  • Spotify engineering culture

    Interesting that Adslot’s engineering team has independently arrived at a very similar process and culture to Spotify. Albeit we’re a much smaller team but many of the ideas Henrik mentions in the video are similar to those we’ve considered in our own context. Maintaining loosely coupled, tightly aligned teams will no doubt become more challenging as team size increases.

    → 2 Nov 2015
  • What Happens Next Will Amaze You

    Maciej Cegłowski’s presented at a conference in Copenhagen, Denmark:

    Today we live in a Blade Runner world, with ad robots posing as people, and Deckard-like figures trying to expose them by digging ever deeper into our browsers, implementing Voight-Kampff machines in Javascript to decide who is human. We’re the ones caught in the middle.

    The ad networks’ name for this robotic deception is ‘ad fraud’ or ‘click fraud’. (Advertisers like to use moralizing language when their money starts to flow in the wrong direction. Tricking people into watching ads is good; being tricked into showing ads to automated traffic is evil.)

    The talk includes numerous interesting observations around the evolution of ad tech and the genesis of robots/ad fraud. It’s worth reading through his argument as it unpacks many of the unpleasant incentives for ad fraud and the impact of the technologies that exist to track and mitigate ad fraud.

    Further on he proposes 6 fixes, the most interesting being a ban on third-party ad tracking.

    This sort of ban would trigger an incredible reset on the way ad technology works and immediately start moving ad tech is a much more consumer friendly direction. Indeed, third-party tracking is the raison d’être for iOS9 content blockers.

    → 29 Sep 2015
  • A bridge over troubled water

    Originally published on Adslot company blog.

    Talk in the industry of late has been focused around programmatic pricing, transparency, and responsiveness. A recent report by The Economist1 suggests “60-80% of ad spending is siphoned off by ad-tech firms which take advantage of the market’s opacity” supporting their claim that programmatic buying is failing to deliver its promised transparency and efficiency. This is not a new claim.2 Opaque fees and trading desk margins, often charged by agency owned DSPs, continue to be a source of concern to publishers.3 Transparent reporting of fees and markups will go some way to earn the trust of publishers and advertisers. Unaddressed however is the broader efficiency goals of automated sales channels, particularly automated guaranteed.

    Meaningful automation of advertising transactions requires making good on the promise of campaign life cycle efficiency improvements. More specifically, the tools of the future must help produce better outcomes for advertisers, and improve agency and publisher efficiency throughout planning, trading, optimising, and billing.4]

    Best laid plans

    Jared Belsky (President, 360i) recently called for a ‘Programmatic Reform’ which identified an urgent need to overcome opaque operating models, integration gaps, and provide ’nimbleness and fluidity.’5 Responding to measured performance, external events and client feedback are cornerstones of effective campaign management, and necessitate a suite of integrated communication and planning tools.

    Can automated guaranteed make good on the promise of efficiency if, during a campaign, planners and buyers are left scrambling for the phone, recording adjustments in disparate spreadsheets and leaving finance to pick up the pieces? Surely not. Efficiency should unite measurement and optimisation. Efficiency should bring order and confidence to billing processes. Efficiency should integrate communication and negotiation.

    Making good

    Significant in roads have been made on creating automated guaranteed marketplaces which assist buyers discover relevant products, availability and pricing with ease. Yet, it would be a sad thing to reduce automated guaranteed to only this. Let’s talk about how timely reporting, real-time impression forecasting, and ad server integrations (both 1st party and 3rd party) could become the foundation of a toolset which helps agencies and publishers work together over the life of a campaign. Clients aren’t paying for a perfect media schedule, they are paying for results.

    Until tools begin to help agencies and publishers collaborate post-purchase, and throughout the optimisation process, automated guaranteed won’t be living up to its greatest promise.


    1. Buy, buy, baby: The rise of an electronic marketplace for online ads is reshaping the media business, The Economist (13 September 2014) ↩︎

    2. Publishers, Let’s Talk Programmatic CPMs, Ad Exchanger (28 May 2014) ↩︎

    3. The Rise Of Private Exchanges And The Future Of Agency Trading Desks, Adotas (9 April 2014) ↩︎

    4. Who’s to blame for lagging Automated Guaranteed adoption? Everyone, Ad Exchanger (19 September 2014) ↩︎

    5. The Time Has Come for Programmatic Reform, Ad Age (10 September 2014) ↩︎

    → 3 Nov 2014
  • The Banality of Evil: Proposed Amendments to the Racial Discrimination Act

    Meleesha Bardolia, writes for Right Now, on proposed changes to Australia’s Racial Discrimination Act:

    Brandis’s packaging of these revisions as innocuous, at least, and progressive, at best, obfuscates the transference of power from victim to perpetrator in an act originally designed to ‘protect’ individuals and groups against discrimination. This is suggested by the limitations imposed on the scope of racial discrimination to “vilification” and “intimidation”. The new Act defines the term “vilify” as meaning to incite hatred against a person or a group of persons. This definition shifts the onus of the burden of proof from the victim to the perpetrator. Furthermore, the word “intimidate” is defined as causing fear of physical harm.

    Meleesha outlines four key changes which ’legalise the dehumanisation of groups and individuals based on their racial extraction.'

    It is definitely worth reading in it’s entirety: The Banality of Evil: Proposed Amendments to the Racial Discrimination Act (Right Now, 16 May 2014)

    → 21 May 2014
  • The Truth Delusion of Richard Dawkins

    Melanie Phillips on the intellectual sloppiness of the arch-apostle of reason, Richard Dawkins:

    The way he chose to defend himself, through insults and sneers which tried to cover his tracks as he attempted to retreat from what he had said, furthermore merely emphasised his notable reluctance to address the many arguments of substance against his pseudo-scientific attack on religion which were made by John Lennox on the grounds of scientific reason and accuracy – arguments which Dawkins most tellingly chose to ignore altogether. Instead, he went for what he thought were the soft targets – a credulous Irish Christian and a ‘dreadful woman’ journalist – and substituted smears and jeers for proper debate.

    It is worth reading the article in whole, which unfortunately can’t be accessed directly at The Spectator anymore. [HTML] [PDF]

    It is good and important to passionately discuss the merits of religion and its compatibility with science and reason, but to sink so low as to lean on gratuitous insult is neither productive nor healthy.

    → 23 Apr 2014
  • Our dangerous disrespect of antibiotics

    Maryn McKenna writes Imagining the Post-Antibiotics Future:

    I imagine what he might have thought  […]  if he had known that a few years later, his life could have been saved in hours. I think he would have marveled at antibiotics, and longed for them, and found our disrespect of them an enormous waste. As I do.

    It worries me that more people aren’t aware of the harm caused to society by not correctly adhering to prescriptions. Maryn McKenna’s article clearly explains the importance of taking the issue seriously.

    → 29 Nov 2013
  • Design to improve lives

    Enrique Allen writes in the interview Learn by Doing for Kern and Burn:

    I’ve seen too many talented people in Silicon Valley work on products that are incremental or not that life changing for anyone. By using the term ‘designer,’ we have a responsibility, even a moral obligation, to intentionally impact people’s lives, hopefully for the better. Unfortunately, the products we design often waste people’s valuable resources and their attention, which is more scarce than money and time. Why is it that there are so many talented people working on shallow problems?

    → 23 Aug 2013
  • Rule of three

    A perl from Jeff Atwood:

    To build something truly reusable, you must convince three different audiences to use it thoroughly first.

    A clever and concise rule of thumb for software products.

    → 22 Jul 2013
  • Delight that lasts

    Don’t misconstrue delight and novelty

    Consider the moment you first turned a page in Apple iBooks and the novelty of the curling page. If you are anything like me, less than 20 pages later you’d just like to read the next page.

    As Craig Mod explains in his talk Nourishing Habits for Nourishing Designs designing for “long term wow“ is hard and delight should not be confused with novelty. Delight—the long term wow—rewards and nourishes users time after time and helps construct a positive relationship with users.

    Novelty, in careful and limited use, provides a wonderful treat for the user. The first time they launch your application or visit your webpage you can engage and excite them with a flourish. However, after only a short time novelty fades to frustration.

    Designing an interface that delights is hard. It likely won’t be noticed the first time the application is used. If well executed, however, the user is rewarded as they return more frequently to the application. The application’s predictability and simplicity make it an experience that is good. It delights.

    Frank Chimero’s Design Nobility Pyramid suggests the highest calling is to first delight users, followed by informing, and lastly persuading.

    Superficially this runs counter to most commercial aims. The priority would likely be to first and foremost persuade customers to participate in a revenue generating activity.

    However, this assumes that all visitors are equal—new and returning—and that users are inflexible and/or have few alternative service providers. Now more than ever, we should know this to be false where new technology companies gain prominence in timespans measured in weeks and fade to obscurity in days. In light of this developing a relationship, delighting and informing those who use that which we design and create must be our greatest of goals. How else do we create something lasting? How else do we create something of real value?

    Attempting to design a product of lasting value and enjoyment is something I wrestle with daily. Both the technical challenge of designing features that delight users, but more frequently the challenge of scheduling and the cost of development. It is easy to discuss the merit of design nobility and delight in isolation from the cold reality of product management. Far harder is balancing a delightful and feature-rich delivery schedule in a complex and revenue hungry technology start up.

    I suppose awareness and the best of intentions are the first step to finding a balance between the two.

    → 8 Sep 2012
  • JSON Feed