by Justin Searls

Giving the iPad a full-time job

[A translation of this post is available in Chinese]

Programmers often describe their ideal tools with adjectives like “powerful”, “feature-rich”, and “highly-configurable”. Few users are seen as wanting more from their computers than programmers.

This popular notion agrees with our general intuition that more capability intrinsically yields greater productivity. My lived experience suggests, however, that while capability is a prerequisite for productivity, the two hardly share a linear correlation. A dozen ways to do the same thing just results in time-wasting analysis paralysis. Apps packed with features to cover every conceivable need will slowly crowd out the tool’s primary use. Every extra configuration option that I delight in tweaking is another if-else branch in the system, requiring its developers to test more and change less, slowing the pace of innovation.

Mistakenly conflating capability and productivity is the reason why Microsoft started calling itself a “productivity” company

As a result, I’ve come around to a more nuanced view of productivity: that of a tenuous balance between friction and focus. “Friction” is the necessary turning of knobs on my tools in order to do work. “Focus” is the intentional ommission of knobs from tools to foster clear thinking. Any knowledge worker must balance their own creative action with thoughtful attention, and every software interface crystallizes an attempt at striking such a balance.

I’ve owned all-but-one model iPhone, but I’m not doing much to celebrate our 10-year anniversary. The iPhone changed my life in countless ways, but its greatest long-term effect has been the dulling of my introspective and creative faculties. I’ve grown uncomfortable with boredom, consuming news at every idle moment. I’ve arranged for myself a menagerie of pull-to-refresh Skinner boxes, which have seriously affected how my brain regulates dopamine. On the rare occasion I manage to buckle down and focus, a notification will inevitably steal minutes of my attention with a mere ten-second context switch. It’s hard to discuss productivity in any serious way without acknowledging how much our tools and our brains have changed since 2007.

For a while, I assumed working on a desktop computer would continue to provide refuge from this era of distraction, but then Apple went and brought all the fun Back to the Mac. And while it’s possible to opt-out of a lot of the things that make the Mac less productive, I can’t deny that the root problem is that my experience carrying an iPhone everywhere I go has changed me in profound ways.

Here’s a depressing example. Desktop operating systems’ windowing features used to represent a net productivity boost — I could see two things at once, drag between them, and get more done in less time. But this stopped being the case at some point in the post-iPhone age. Here’s why: the mere absence of any windows in the corner of my screen will prompt my brain to think if I type ⌘-Space "tw", I could have Tweetbot fill that void on the left side of my desktop / soul. And every time, as if I’d entered some kind of fugue state, 30 minutes will have elapsed with me getting absolutely nothing done, leaving a mess of browser tabs open, and with an elevated heart-rate on account of feeling antagonized by an unkind rando on Twitter.

2007 Justin would see an editor and a browser, but 2017 Justin can only see unutilized space that could be occupied by Twitter, Mail, or Slack

Like many people, I’ve aspirationally purchased several iPads over the years thinking “maybe this time will be different.” And each time, it’s fallen short of enabling me to do real work. This most recent attempt, I’m happy to report, has finally been successful.

I’ve been using an iPad exclusively for work for 4 weeks (switching over to the 10.5" iPad Pro once it came out), and I’ve gotten much more meaningful work done — coding included — than I normally do. My greatest concern is that my more expensive Macs are starting to collect dust.

This is a long post, but that's because I’m not only using the iPad to solve a simple tooling problem, I’m using it to solve a mental one as well. I’ve found there is no way to usefully distinguish our software tools from our thought processes: each informs and influences the other. So, yes, it’s easy for me to list off the tools I’m using and why they’re so great (and we’ll dispense with those in but a moment). But I also hope that by reflecting on my broader motivations, you might question some of your own preconceptions, as well.

A quick overview

If you’re reading this, you’re probably looking for some top-line summary of which apps I’m using to do what and whether it’s working out. Here’s a quick summary of how I’ve been working on an iPad all day:

What I’m doing

  • I’m currently using Apple’s whole kit-and-caboodle: 10.5" iPad Pro, AirPods, Apple Pencil, and Smart Keyboard
  • The 10.5" iPad is an amazing piece of hardware. The display is incredible, even in direct sunlight. The UI’s performance is generally as good or better than a high-end MacBook Pro. It’s shockingly lightweight. Any other high-end tablet is a literal joke next to this thing
  • I code on my iPad for multiple hours every day, and I am now significantly faster than I am on my Mac
  • I’ve found that virtually any painful-to-accomplish task can be automated away to some extent with the excellent (and recently Apple-acquired) Workflow app, so I’ve been pretty aggressive in creating an automated workflow as soon as I recognize a certain action is more awkward than necessary
  • When I need to read an article or brainstorm my approach, I detach the keyboard and lean back with the Pencil. Each time, it gives me a terrific mental energy boost, especially when compared to hunching forward to stare at a screen all day
  • I stick with Apple’s so-called “stock” apps pretty religiously, and find that maintaining a united front of Calendar, Mail, Reminders, Notes, and so on tends to lubricate the interactions between my devices, Siri, iCloud, and the apps themselves. They are by no means perfect, but a third-party replacement app would need to be impossibly remarkable to compensate for the loss of synergy. For more on this, Seth Clifford outlined reasoning similar to my own thoughts
  • I also do a lot of manager-ey stuff, so in addition to spending a lot of my time in the aforementioned stock and iWork apps, I’m often using Zoom, Expensify, Pipedrive, MindNode, Nebo, Paper, and (sigh) Slack

Why I’m doing it

  • As I mentioned above, I can no longer trust myself to not get bogged down in distraction when I have a full-blown windowing system at my disposal. I’ve already found that the combination of full-screen-by-default apps and Do Not Disturb mode have helped me retrain my impulse to constantly check Slack, Mail, and Twitter
  • I travel very light (I’ll go weeks with a 19L bag and less than 10 pounds of stuff), so a 1lb iPad is twice as appealing as a 2lb MacBook (much less my 4lb 15" MacBook Pro)
  • A lot of my least-favorite single-page web apps have reasonably good iPad apps, so instead of tweeting about how glitchy their crappy JavaScript is, I’m experiencing less friction by using their iOS apps’ more accessible native UI controls
  • I’ve been “using” Unix for fifteen years, but never in earnest. When the going gets tough — maybe I don’t know a particular way to search for something, or maybe I need to move around large hunks of code — I immediately fall back on familiar graphical apps. The ability to command-tab to Atom or Gitx has enabled me to put off figuring out how to work effectively with the Unix toolchain. On iPad, I’m forced to do 100% of my work from the command line, and as a result I’ve finally taken the time to figure out or customize what I need to be productive

How it’s going

  • I’m really glad that the vast majority of iOS can be navigated with just the keyboard (this has been true since iOS 9, but 10 refined it and 11 will go further). It’s actually a bit exceptional when I need to touch the screen, which is a little silly
  • I wasn’t expecting this, but whatever friction remains between macOS and iOS is absent when I’m switching between my iPad and iPhone. It’s a qualitative observation, but the fact the apps are mostly identical means that I waste very little time context-switching between the two devices
  • The latest iPad Pro is the first to support quick-charging over USB-C. My original (2015) iPad Pro would barely tread water when connected to an 80W USB-C power brick, but the latest model’s battery charged from 7% to 57% in 90 minutes over USB-C, even under heavy use

What I wish someone told me about

  • I bought the LTE model and found that T-Mobile is currently offering a shockingly low $10 per month unlimited data plan when adding a tablet line to a postpaid subscription (it also includes 2GB of tethering and unlimited 256kbps international data). It was too good a deal to pass up, and the liberation of not caring about finding wi-fi when I’m traveling is a huge stress relief
  • I recommend using 1Blocker to block ads, tracker scripts, and entire web sites where you’re prone to distract yourself. A dozen times a day I will try to access twitter-dot-com on my iPad only to have 1Blocker prevent me
  • I disallow notifications for almost every app (exceptions being Messages and FaceTime, at the moment). I don’t even let apps like Mail & Slack display badges icons, because the presence of a red badge while I’m switching apps with ⌘-Tab will stop me in my tracks and derail me from whatever I’m doing while I go and check it
  • A few single-purpose utilities and extensions are indispensable to me, including Mail to Self, PiPifier, AnyFont, and Deliveries
  • There are many competent prose editors, but Bear, Byword, and Editorial are my favorites
  • In addition to automating iOS applications, Workflow can also invoke arbitrary scripts via SSH and then parse the results and do things with them. I’ve got a near-fully automated CRM follow-up system in place now for the first time after years of complaining about it
  • iOS 11 is going to be great, but I recommend holding off until it’s more stable if you’re planning to get anything done. While it adds a lot of gee-whiz “real work” features, a lot of the buzz is around touch gestures that don’t matter as much if you’re working primarily with a hardware keyboard
iPad Pro so clearly needs a Keyboard accessory, Apple should consider rotating its logo 90º

Code! On an iPad!?

No, the iPad still doesn’t provide users any way to interface with the UNIX-ey bits under the hood, and any app that attempted to create such a shell would be rejected by Apple. The iPad Pro is more than capable of running ARM-based virtual machines, but there still isn’t any virtualization software available. Perhaps its 4GB of RAM would represent too low a ceiling.

So, from that perspective, no, you can’t code on an iPad.

What you can do is what people have been trying for several years, which is connect to a remote device using a terminal app. While I could go full-cloud and spin up a Linode or Droplet, I’m fortunate to have an always-on iMac sitting at home that I can remote into, both on my LAN and (after setting up port forwarding on my home router) over the Internet. And with unlimited mobile data everywhere in the world, even on planes, this constraint is less and less constraining than ever.

In the past I’d tried to accomplish this workflow with Panic’s Prompt, but I found it unsuitable for “real” work. First, it only supports SSH, which doesn’t provide very durable connections — as soon as iOS suspends the Prompt instance to the background, its socket is closed and SSH needs to be reconnected. Additionally, Prompt doesn’t offer a way to re-bind an Escape key from any of the various escape-key-less MFi hardware keyboard cases or clamshells; this made terminal editors like Vim impossible to use.

And then came mosh. Mosh has emerged as a competent alternative to SSH for this sort of thing, and its connections are much more durable. It communicates over UDP and in practice demonstrates incredibly low latency, too. I’m connecting to my iMac with the Blink terminal, and it’s working better than Prompt ever did. Blink allows users to re-bind the caps-lock to escape and it’s no longer an issue when iOS kills the app in the background.

Running a testdouble.js’s unit test suite in a long-lived tmux session via Blink over mosh

Blink is hardly perfect, but since mosh is distributed under the GPL, it’s open source itself. At the end of the day, all I care about is that it can maintain a connection, send the right keystrokes, and then get out of my way, and the combination of Blink & mosh do just that.

And that’s really all there is to know about how I’m using the iPad for work all day. It’s a surprisingly complementary marriage of the focused simplicity of iOS combined with the powerful complexity of command-line Unix.

Less convenient, but more productive

Okay, and now for the more introspective bits, as promised above.

Reflecting on this experience, I realized that I don’t bother automating much on my Mac, because I know I can brute-force most activities without encountering too much pain. If I can accomplish a task in 5 seconds by mashing ⌘-C ⌘-Tab ⌘-L ⌘-V to copy a URL and open it in my browser, I’ll (apparently) gladly repeat it dozens of times per day for 14 years without thinking to stop and find a way to reduce that friction further.

My experience trying to do work on iPad has been much different. If I’m trying to do something ordinary (like opening a URL), iOS tends to be even lower-friction than macOS out-of-the-box, which I appreciate. But where working on the iPad really shines, ironically, is in how terrifically painful it is to perform out-of-the-ordinary actions.

For example, let’s say I need something a bit unusual, like saving web sites as PDFs into a specific folder and annotating them in a Markdown file. The dozens of taps demanded by such a task introduce so much friction that I was compelled to automate it. It rarely occurs to me to automate anything in macOS, both because AppleScript/Automator pale in comparison to Workflow, but also because the macOS interface is just good enough that no one instance of that action warrants investing the time into automating the whole process.

The aforementioned web-to-PDF action, implemented in Workflow

I’ve spent a lot of time reflecting on why this is. Regardless of whether this phenomenon is by design, it certainly comports with Apple’s marketing ethos that the answer to every problem is “more apps”. If you’re trying to do something, and the only options available to you are high-friction, it’s as if iOS is screaming at you, “go find or create an app that does what you want!”

Trouble is, the locked-down, sandboxed nature of the first seven years of iOS releases put a bad taste in the mouths of most developers. For all the hype around apps from 2008 to 2013, a lot of what power users needed to be productive wasn’t possible within the constraints imposed by the operating system. In iOS, when some activity can’t be done elegantly, Apple has demonstrated a preference to ignore it completely than to risk half-assing it. This has served the majority of users far better than traditional desktop computers ever did, but they excluded people whose needs couldn’t yet be met under said constraints.

Apple’s willingness to say “no”, even when it pushes power users away, couldn’t be more different than Microsoft’s post-iPhone-era strategy for Windows, which — at least since they killed off the similarly-useless-at-first-but-nonetheless-courageous Windows RT — has been to tell users they can have their cake and eat it too. But my experience of spending a month trying to love the Surface Pro 4 showed me that Windows has ended up with countless points of friction, occupying a sort of uncanny valley between traditional desktops and modern user interfaces.

To this day, most developers still believe the iPad to be a toy computer. The prevailing notion remains that the only sort of people who “work” on an iPad are business folks who while away their days in e-mail and spreadsheets. Apple spent eight years iterating on iOS before shipping the extension points necessary to accomplish the sort of actions demanded by its power users. Heck, it took nine major versions for real hardware keyboard support to materialize. The iPad may be old news, but its usefulness as a computer is still a recent development.

Starting with iOS 8, the number of well-considered and secure inter-application extension points in iOS has created a largely-yet-untapped opportunity for custom-tailored, friction-reducing integration and automation. In case you haven’t been keeping score, there is scant little that can’t be accomplished with a combination of Actions, custom URL schemes, document providers, and (coming in iOS 11) drag-and-drop.

We think of these features as mundane examples of how Apple is playing catch-up in iOS, since “real computers have always had them”, but the comparisons are only skin deep. For instance, consider desktop browser extensions: the browser gives developers some privileged utility methods, but otherwise the deal is, “write whatever JavaScript you want and screw around with the DOM however you like and please don’t scrape people’s passwords.” Compare that to the thought that Apple must have put into rigorously specifying the data & behavior contracts between apps found in Action extensions.

This effort was foundational, because when extensions and apps are forced to produce metadata like what inputs and outputs they support, the operating system can later influence how users interact with them more intelligently. The reason that I find this exciting is because the constraints imposed by things like data type contracts — which some reasonably view as onerous — can facilitate creative automation elsewhere. It’s analogous to a dichotomy familiar to macOS apps, wherein a developer can use native UI controls (which benefit from greater OS-integration like VoiceOver and keyboard shortcuts) or can opt to build with web-based tools like Electron, which are relatively unconstrained but — at least from the operating system’s perspective — impenetrable black boxes.

iOS 11 represents the culmination of years of essential groundwork and a gradual approach to reaching functional parity with the desktop in a formal, thoroughly reasoned-out way. And while I personally don’t care much about the new iPad “dock”, I definitely hope the excitement it’s generated will goose sales and make developers give the platform a second look. It’d be a shame for all those well-considered extension points to go unused, after all.

One more thing

Aside from decreased productivity and increased distraction, another thing has changed about me since the iPhone released in 2007. I’m less kind and patient to others than I used to be. I’m generally more negative and cynical, too. I tend to be so drained at the end of each workday that it takes me a couple of hours just to unclench. I did not anticipate that switching from a Mac to an iPad would lead to marked improvement on those fronts.

But it sure seems to have helped.

I’ve been kinder, happier, and lower stress this month than I can recall in recent memory. Of course, I’ll need more data before I can reward a silly computer with that kind of testament. Test Double also happens to be doing great recently, and I’m still feeling relief over having just given the best presentation of my professional life, so perhaps I’m just riding that wave.

Nevertheless, I can’t help but think there’s something deeper going on here. It’s clear that Apple has spent years laying the groundwork for iPad to finally be a competent replacement to a desktop OS, even for a developer like me. What wasn’t clear until now was that the iPad might suddenly leapfrog beyond “just good enough” and start radically improve the lives experience of work itself.

Not bad for an oversized iPod Touch.