Hi, I'm Allen Pike. I run Steamclock, where we design and develop polished apps in beautiful Vancouver. At least monthly, I write an article and publish it here.


Information Needed

March 31, 2019

If you publish apps for iOS, understanding the App Store review process is part of your job. While the core guidelines are public, their enforcement relies on a large set of private rules and policies, policed by human beings. When you’re trying to release an update to your customers, the keeper of the Bridge of Death is not the nicely summarized guidelines, but the machinery that enforces them.

The high-level guidelines don’t change often, and when they do change developers are often warned in advance. The enforcement policies though – the de facto rules – are continually mutating in response to the latest App Store scams, PR issues, or problem areas.

So, while some guidelines – such as the one about not sending push notifications for marketing – don’t seem to be enforced at all, others are strictly enforced to the letter of the law, and flouting them will prompt a swift rejection. Or, more nerve-wracking, an eventual rejection of a bugfix update that doesn’t change the relevant functionality. So it helps to know the system.

You say you wanna add subscriptions

For example, suppose you’ve seen where the wind is blowing, and have decided to add subscriptions to your app. In preparation, you may come across public Guideline 3.1.2:

Ensure you clearly communicate the requirements described in Schedule 2 of the Apple Developer Program License Agreement, found in Agreements, Tax, and Banking.

While you probably should read the full agreement, it’s a little over 24,000 words long. Maybe more of a weekend read. In the meantime, you can save a bit of time by scoping out a little thing I like to call the “Apple Developer Program License Agreement Schedule 2 section 3.8 part b”.

This clause actually has some pretty clear language asking developers to:

…clearly and conspicuously disclose to users the following information regarding Your auto-renewing subscription:

  • Title of publication or service
  • Length of subscription (time period and/or content/services provided during each subscription period)
  • Price of subscription, and price per unit if appropriate
  • Payment will be charged to iTunes Account at confirmation of purchase
  • Subscription automatically renews unless auto-renew is turned off at least 24-hours before the end of the current period
  • Account will be charged for renewal within 24-hours prior to the end of the current period, and identify the cost of the renewal
  • Subscriptions may be managed by the user and auto-renewal may be turned off by going to the user’s Account Settings after purchase
  • Links to Your Privacy Policy and Terms of Use

Presented with the above, any app designer worth their salt will have a follow-up question: is it even possible to design a nice subscription flow that actually makes all eight of these things clear and conspicuous? Even with all the detail Apple provides – more than we generally get with most guidelines – the requirements leave key questions about how they’ll actually be enforced:

  1. Do the App Store reviewers require text meet a certain standard to consider it “clear and conspicuous”? (They do.)
  2. Do the links to your privacy policy and terms of use in your app’s settings count towards this requirement? (They don’t.)
  3. Do reviewers require that some of these things are more clear and conspicuous than others? (They do.)
  4. Would they approve an app that followed Apple’s own examples of how to implement subscriptions? (Not even close.)

I know about these pitfalls thanks to various developers sharing their lessons learned about the unwritten parts of Apple’s subscription guidelines. As thanks, I wanted to pitch in by sharing some info about a different guideline I’ve learned a fair bit about over the years: 2.1.

Guideline 2.1: Information Needed

According to Apple’s data, the most common reason for an app to be rejected is ostensibly a simple one: “Guideline 2.1 – App Completeness”. The public guidelines for 2.1 describe a few kinds of incomplete or trivial apps, for example:

We will reject incomplete app bundles and binaries that crash or exhibit obvious technical problems.

Eminently reasonable. In addition to this though, App Review categorizes a common type of provisional rejection as being under Guideline 2.1: “Information Needed”. Since an Information Needed rejection is usually unexpected, it can easily ruin a developer’s day. Thus, it helps to be prepared.

Here are some common reasons you may hit a 2.1:

  1. You didn’t include a working demo account. D’oh.
  2. You didn’t include enough info to test your In App Purchases. This is apparently quite common – reviewers have to try out your IAPs, and if it’s not immediately clear how to do so you can get a 2.1 rejection.
  3. Your app is sketchy. Certain categories of apps are, by volume, often scam or spam. Slots apps, for example, can get a 2.1 as basically a “one strike warning” to give the developer a chance to double-check whether they violate certain rules before they go through full app review. There are various copies of this warning text online, so if you’re participating in the dodgy end of the App Store then it’s worth being aware of this.
  4. Your app isn’t testable on a simulator. If your app isn’t testable except in the “real world”, or requires special hardware, reviewers may 2.1 reject the app pending a video that shows how it works. If your app doesn’t run in the simulator, pre-prepping a demo video can help expedite this process. Steamclock builds a lot of apps for Bluetooth devices, so we prep these fairly often.
  5. You need to prove that your company is authorized to offer this app. For example, let’s say you titled your app “Royal Bank of Canada”, but tried to publish it under “Surprised Pikachu LLC”. You may be surprised when App Review asks for some evidence that you are in fact the largest financial institution in Canada and not in fact a lazy scammer.

While these cases are all fairly straightforward, there is one particular 2.1 request that I have seen from time to time that did surprise me when I first saw it, and as far as I can tell not much has been written about it. You may in fact be rejected if:

  1. Your app requires users to log in, but doesn’t offer account creation.

Without a way to create an account, App Review can’t evaluate your payment mechanism. In this case, App Review will typically hit the brakes to determine if the app violates “3.1 Payments”.

If your app’s business model was crafted specifically to circumvent Apple’s In App Purchase rules and you thought just not offering in-app account creation would be enough to fool them, then you’re gonna have a bad time. Otherwise, things aren’t so bad. You just need to – carefully, but quickly since your app update is now in the dreaded Review Limbo – make the case that your business model is kosher.

One of the few accounts online of this process comes from this Japanese blog post by Takuya Matsuyama, who outlines what App Review may ask in this “business model review” scenario:

  • Is your app a mobile extension of an existing service?
  • Does this existing service have a cost?
  • What are the paid content or services, and what are the costs?
  • Do individual customers pay for the content or services?
  • If no, does a company or organization pay for the content or services?
  • Where do they pay, and what’s the payment method?
  • If users create an account to use your app, are there fees involved?
  • How do users obtain an account?

Through the magic of Google Translate, I can see that Takuya and I felt similarly after getting this kind of rejection for the first time:

Even though Apple’s examination was nothing last time, it is scary because it is pointed out from the point of view not to predict suddenly.

Put another away, it’s not fun to have the Supreme Gatekeeper suddenly audit your business model.

Being prepared

Since I know better than to try to end-run around Apple’s payment rules, every time I’ve received this kind of rejection I’ve been able to walk App Review through the business model and why it’s above board.

That’s not to say caution isn’t merited. I’ve definitely seen clients get a business model review, respond ambiguously without understanding the underlying guidelines, and as a result get caught in a slow secondary review. Don’t be like them – be prepared.

If you’re considering building an iOS app that requires login but doesn’t let users create accounts in-app, be sure to review and understand Apple’s rules around in-app payment, and schedule an extra 1-2 weeks when you launch or make a major change to the app to accommodate a potentially long review. If your initial submission is approved without a 2.1, be cautious since any future update, even a critical bugfix, could trigger the review.

If the bridgekeeper perceives your iOS app to be main value of a service customers are paying for elsewhere, they could toss you into the Gorge of Eternal Peril for not offering IAP.

If everything is on the level though, and you just haven’t gotten around to providing account creation in-app in your initial release, then you should be fine.

Just don’t forget your favourite colour.


325: Podcast Episode Numbers

February 28, 2019

In iOS 11, Apple made a variety of changes and improvements to the Apple Podcasts app and spec. Among other things, they added support for a new show format: serial podcasts. Finally, narrative-driven shows could request to be shown in strict chronological order.

As part of this change, Apple added support for an “episode number” tag, and recommended that podcasters stop including episode numbers directly in the title of each episode. Sure whatever, metadata best practices blah blah.

Smash cut to yesterday, when we all received a mass email from Apple Podcasts about ensuring our show isn’t “rejected or removed from Apple Podcasts” by “optimizing your show’s metadata”. While much of it was just about not being spammy, they asked more firmly this time for podcasters to stop including episode numbers in titles:

Adding episode numbers in titles. For example, show titles like “The Very Hungry Tourists Episode 01” or episode titles like “01 Broken Heirloom.”

I was a bit surprised by this. Everybody includes episode numbers in their titles… don’t they? Though come to think of it, why do we? Why do I do it for Fun Fact? We don’t number our blog posts; why podcasts? Am I being sucked into a deeply pedantic rabbit hole, never to return?

No, why, why do you care about this Allen

According to historians, podcasters have included episode numbers in titles since the late Cretaceous Period. There are a few benefits, but the primary two are:

  1. Give people an easy handle to find or refer back to to a specific episode
  2. Make it easier to play through episodes from the beginning in a podcast client

While the introduction of “serial” shows has made playing from the beginning easy for certain kinds of podcasts, apps still make the assumption that all shows are either strictly linear and need to be listened to in order (a crime investigation in 10 parts), or that each episode is completely unrelated and you would never want to start from the beginning (a daily news briefing).

This is a pain in the ass for shows where the episodes are loosely ordered, kind of like a sitcom. The episodes make sense on their own, so new viewers probably want to check out the latest one first – but there are back-references and follow-up items that can make it appealing to listen from the beginning. Without episode numbers, this can be annoying to actually do.

In an ideal world, Apple would support a third type of show, something like episodic-series, for shows where playing from either end is desirable. It could then prioritize the newest episodes, but still surface episode numbers and accommodate users who want to start at the beginning.

Back in the actual world, Apple wants you to decide if your show is linear or ephemeral, and stop trying to hedge that classification.

Still though, why do they care? Is it truly awful to have semi-episodic podcasts putting numbers in their episode titles?

As is often the case, you can indeed find something truly awful by exploring iTunes:

Yes that’s right, on the desktop iTunes will number your numbered episodes as if the latest episode was episode 1, followed mind-bendingly by the episode number you’ve included in the title. While this is horrific, it actually makes podcasters want to keep including their episode numbers right in the title, since otherwise the presentation makes it look like the newest episode was actually your first, which is even more horrific and I just can’t even with this thing.

Thankfully, most people do not listen to podcasts in desktop iTunes. The big show, the app that we – and Apple – are concerned about is Podcasts on iOS. So let’s take a look at how episode numbers show up there.

045: The Why Do You Care About This Allen Show – Ne…

With iOS 11 and the new metadata, Apple built accommodations for episode numbers into the UI, allowing them to cleanly and consistently show numbers in contexts where it matters – such as serial shows – and not show episode numbers in contexts where it doesn’t matter. For an example, let’s take a look at the Top Episodes list.

Now, £1 says that Jony Ive would be rather cross if he saw this list with 5 different formats for showing episode numbers. With title data this noxious, there’s not much Apple can do to present a nice, clear list of episodes.

Consistency aside, in this context the episode numbers aren’t even useful. While the Top Episodes list should in theory be a gentle entry point for somebody new to podcasting, it is currently weird and intimidating.

If they can get podcasters to provide title and episode number metadata separately, Apple Podcasts can show the numbers where relevant, and style the them thoughtfully in different contexts, rather than being forced to serve up the the dog’s breakfast that is episode title metadata today.

And while numbers in titles is a time-honoured tradition, I have to admit that episodes of newer shows that follow Apple’s guidelines look pretty nice amongst their metadata-laden peers.

The more I look at these screenshots, the more sympathetic I am to the ideal of relegating the episode numbers to metadata, and having player apps take the responsibility of showing those numbers where they’re useful. In fact, when it comes to finding specific episodes or playing “episodic” shows chronologically, modern podcast apps already have some helpful features that make episode numbers less important than they once were.

For example, in Overcast you can tell a smart playlist to sort by “Oldest to Newest by Podcast”. Then, if you go into a show’s back catalog and add a horde of early episodes, they’ll automatically stay together in chronological order. It’s pretty hidden, but in Castro you can also queue up a show chronologically by subscribing to a show, then going to Library → That Show, then dragging “All” to your queue.

While neither of these approaches are as nice as a simple UI for playing a show from the beginning, I think they can bridge the gap if shows start to move episode numbers into metadata and players get smarter about it.

Similarly with episode discovery, instead of scrolling to find a numbered show, you can type an episode title into Apple Podcasts and it will come right up. In Overcast you need to search for the show first and then the episode title, but the functionality is still there.

Unfortunately, there is still a gap between the web and podcast players when it comes to linking an episode. As far as I know, there’s no way yet for your podcast’s website to predict the URL for “Open Episode X in Player Y”, which would make it easier to go from a Google search or a shownotes link right to listening to an episode. With luck this will come.

I get it, you care, what are you going to do about it

Regardless of what any 3rd party podcast apps are doing, the reality is that Apple runs the biggest podcast directory and app in the world. They’ve told us to give them a clean title and episode tag in <itunes:title> and <itunes:episode>. In return, they’ll be more likely to feature our show, Jony will be placated, and they’ll stop maybe-implying that our podcast may be “rejected or removed”. So, a pretty easy call there, I think.

A more interesting question remains though: for semi-episodic shows like Fun Fact where people may want to start at the beginning, should we keep the episode number in the <title> tag for 3rd party clients like Overcast and Castro? Certainly some people with opinions on the internet think so.

But I have to admit: I can’t unsee what I’ve seen. I’ve beheld the clean and clear presentation of numberless episode titles. I’ve heard from the listeners who are scared off from trying out podcasts where every title advertises how many episodes they’ve missed. I’ve come to terms with the fact that for our show – even a few months in – starting with the most recent episode is the way to go. And most dangerously of all, I’ve come to the conclusion that It Would Be Nice™ if podcast players directly used the episode meta tag to only show numbers where it matters.

So, as of today, our episode titles are clean and number-free. It was difficult and emotionally taxing, but I have made peace with my decision.

May the the era of clean podcast titles one day come to pass.


Update: Apple just sent a followup email clarifying that “Your Show Won’t Be Removed for Having Episode Numbers in Episode Titles”. It then goes on to say:

We encourage you to use the tag to send us your episode numbers. If you decide to include episode numbers in your episode

The email then ends mid-sentence. We can only speculate on the fate of the Apple Podcasts employee who attempted to send this missive. Our thoughts are with their family tonight.


Navigation Should Be Boring

January 31, 2019

When launching a product, especially a consumer-oriented one, you want it to be interesting. A novel, bold, or distinctive UI can make an app stand out from the crowd, be memorable, and inspire curiosity. Plus, it’s cool.

Luckily, there are a lot of ways you can make an interface interesting. You can use striking colours, intriguing illustrations, or thoughtful copywriting. You can add whimsical touches of animation or sound. You can make the feature set brilliantly simple, or awesomely powerful. Almost any part of an app can be a good place to add novelty, except for one: navigation. Navigation is different.

Navigation should be boring.

With a delightfully boring navigation scheme, users don’t need to learn how to explore your app. Their “attention span budget” can thus be spent considering how your new thing can fit into their lives, rather than trying to recall how many fingers they’re supposed to drag from the left side of the screen in order to pull out the Alternate Quick Access Wheel.

While experienced design and development teams will usually tamp down on the worst navigation fever dreams in short order, there is often still an allure, or even explicit pressure, to build out novel navigation patterns. It’s just so damn satisfying to transcend the standard fare. “Would it be so bad if we just tried just a little horizontal scroll here, and just one two-finger gesture there..?” One thing leads to another, and your app’s first-run experience is a screen filled with goofy arrows and hand-written tips like “insert tab A into slot B to view next photo”.

If you’re weird-navigation skeptic, then take heart: the data is on your side. The A/B tests and other success metrics I’ve seen almost always support clear, familiar navigation approaches. Tab bars get better engagement than hamburger menus, many users don’t even find gestures, and simple menus works better than a whiz-bang feature dashboards. Boring navigation affordances lead to more navigation, and faster navigation, than clever ones do. As the nobly helmeted interaction designer Luke Wroblewski likes to say, “Obvious always wins.

Of course, metrics aren’t everything, and there are examples of products that have implemented novel navigation schemes that were very well received. Even ignoring the obvious exception of games, a lot of the most interesting apps released over the years – from Jared Sinclair’s Unread and Q Branch’s Vesper on the indie side, to Snapchat and Facebook’s Paper at other end of the spectrum – invested in novel navigation patterns and styles that made them truly distinctive.

Which is super cool. But also kind of sad, since this type of investment doesn’t typically pay off.

The high price of failure

Notwithstanding the usability pitfalls, there is a bigger reason why a new app shouldn’t have an experimental navigation scheme: the cost is too damn high.

We know that building good products is all about iteration. And typically, the parts of your product that need the most iteration are the novel ones. The neat stuff, the distinctive bits. That’s no problem if you’re iterating a sound effect, a button asset, or even better a core user-facing feature. It gets expensive and wasteful fast though if you’re thrashing around how your screens are organized, divided, and connected. God help you if you’re halfway through a wild navigation experiment and an iOS update breaks your custom UINavigationController wallhacks before you’ve even been able to market-test them. It’s no fun.

Once you ship, things go from bad to worse. Overhauling the navigation of a living app is even more time-consuming, and is also usually poorly received by existing users – even if the new scheme is objectively better. Just ask Snapchat: after they concluded their wacky navigation scheme was inhibiting long-term growth, they launched a reworked UI that was easier to use – and monetize – but suffered a huge backlash from users who were used to the old UI. Perhaps if they’d tracked towards clear navigation a little earlier, Instagram wouldn’t be eating their lunch as badly today.

Of course, it doesn’t matter what’s good for Snapchat or anybody else. What matters is what’s good for your product and its customers. The app you’re building today. And if your goal is to make a distinctive app, then dollar for dollar, sprint for sprint, novel navigation schemes are one of the worst ways to achieve that.

So do your app a favour: keep the navigation boring. At least at first. Use colour, typography, and the many other tools in your tickle trunk to make your product interesting and appealing while you prove out your business model. Invest in navigation, sure – but invest in making it clear, fast, and good.

That is to say: make it boring.


Fun Fact →

January 12, 2019

A new podcast where every other Friday, Arik Devens and I discuss a variety of fun facts. They range from historical, to practical, to garburetor-related. It’s fun.

This year, in addition to my typical longer articles, I’ll also post some simple links from time to time. This is one of those.


No More Oppatoo

December 31, 2018

When you have a young child, other parents often offer advice. This advice comes in many forms and covers many topics, but one phrase is more common than any other. “Enjoy it while it lasts. It goes by faster than you think.” New parents hear this many times.

It can sound rather strange. You’re holding a teething infant, you’ve barely slept, and you’re counting the seconds until you can next attempt a nap. Time seems to go by very slowly indeed.

As an infant turns into a toddler though, and as that toddler becomes a kid, you can’t help but be struck by the passage of time. Your new family member gains abilities at a rapid clip, marking time not day by day, but change by change.

They are constantly picking up new endearing habits – little phrases and behaviors that melt your heart and give you joy. Just as quickly though, they are losing them. Before your eyes, she goes from not being able to say “octopus”, to delightfully squealing at the sight of an “oppatoo!”, to just saying “look dada, it’s an octopus.”

And it’s beautiful, and it’s great. But it also hurts your heart a little bit. No more oppatoo.

It is a strange feeling, that hurt. Why would it be sad when she starts to say “octopus”? Or “I want to do it myself”, or “No dada pick me up”? I mean, it’s certainly for the best. I can hardly be her lifelong transportation, caregiver, and translator as it pertains to 8-limbed mollusks.

But kids inspire love, such deep unconditional love. You love and treasure how they are, down to the smallest quirk. Then, suddenly, right in front of you, they change. While one might grow used to the slow, sad change of growing apart from an adult you love, this feels very different. Overnight, no more “dada up?” No more oppatoo.

In a flash, the behaviors, quirks, and tiny things you’ve grown to love disappear. Just like that, they’re replaced by new phrases, new quirks. New things you’ll also grow to love – before they disappear too.

It’s beautiful, and it’s great. But it also hurts your heart a little bit.

So we take photos, and now videos. And we indulge our hearts, and cry a bit. Sometimes from pride, sometimes from joy, and on occasion from the loss of something tiny.

And when we see a new parent, one with a child much younger than ours, we know it’s silly, but we can’t help ourselves. We feel it’s very important to let them know:

“Enjoy it while it lasts. It goes by faster than you think.”


Leadership Mode Activate

November 30, 2018

Congratulations, you’re getting promoted! You have excelled at the Thing You Do to such a degree that you’ll now be leading a whole team of people who Do That Thing. Very responsibility, much excite.

Okay wait, you may say. That’s cool, but I like Doing the Thing. I’m pretty good at it, and if I’m leading a team, will I still get to do it? Will I still get to perform the work that got me to where I am today?

The short answer is: Yes, you can! If it’s important to you to keep doing some “individual contributor” work as a manager, you can make that happen.

The long answer is: Well, you can. Like, if Mark Zuckerberg wants to go in and make some code changes to Facebook, he has the authority necessary to do that. And reportedly, in frustration with a pet bug or issue, Zuck has been known to bang out a fix and submit a merge request – which then hits a series of roadblocks around coding guidelines, localization, automated testing, and oh god why is this stuff so complicated these days ughhhhh.

And that’s good. It’s helpful for leaders to get their hands dirty from time to time, to get caught up on what their teams are doing, how they’re doing it, and get more context for the detail work involved.

But let’s be honest. Is Mark Zuckerberg’s time best spent mastering Facebook’s latest pull request rules around internationalization flow, or would that same time be better spent, I don’t know, figuring out how Facebook can ruin the world less?

As a manager, you too need to consider these tradeoffs. Yes, you have the ability to dig in and do the work yourself, but you now have a specialer ability: you can multiply your efforts across a whole group. As a leader, you’re in a position to solve bigger problems than you ever could by yourself, since you can deploy the full force of a team.

In other words, you are now a mech pilot.

Megazord Assemble

If you’re not familiar with the concept of a mech, it is basically a giant robot you can use to go around and do badass stuff that you wouldn’t be strong enough or capable enough to do by yourself.

A mech pilot doesn’t have the fine-grained control or precision they might have on foot, but they can achieve much more due to the mech’s broader abilities, sensors, strength, and skills. You might not be able to see behind you, but your mech can – and it can take evasive manoeuvres, deal with issues before they become problems, and do more at once than a mere human.

At its best, being a leader feels like piloting a mech. Your team can achieve far more than you can. As a group they’re stronger, smarter, and can see more than you can. When your team smashes a problem into bits, it’s not literally you that did it, but you can get the deep satisfaction of smashing problems that are bigger and scarier than you could ever smash yourself.

At its worst, being a leader can also feel like piloting a mech. Sometimes you try to go somewhere, but nothing happens. Maybe there isn’t enough fuel, there are serious technical issues, or you haven’t given a critical part the care and attention it needs. Maybe a request is refused – “ERROR: COMMAND UNCLEAR OR ILL-ADVISED”. Maybe you hop out and set your mech on autopilot, only to later realize it’s rampaged off doing exactly as you’d asked for weeks straight, and now you have this big fancy video editing feature built out that had no budget or detailed requirements.

You know, typical giant-robot stuff.

As a leader, there will be times where you’ll be tempted to get out and just do the work yourself. And sure, sometimes that’s pragmatic or necessary, but that’s not leadership. A leader investigates, identifies their team’s problems, and gives them what they need to be fully operational.

And then, they get back to smashing giant space bugs.


Vancouver Election Guide, 2018

October 7, 2018

Updated through October 19.

Saturday is the final day to vote. If you’re short on time, I’ve posted three example Council ballots. Polls are open until 8pm.

Canadian politics is, typically, boring. And we like it that way. We’ve seen what can happen when politics get too interesting. And well, America, you can keep it. Sorry.

From time to time though, politics in Canada does get interesting. On occasion, the issues get serious enough or an election gets weird enough that we find ourselves in a high-stakes voting scenario. If you don’t believe me, ask Ontario.

As it happens, this Wednesday, October 10, advance voting begins for the Vancouver city election – and our city is in the middle of the most interesting election campaign in years.

“Wait, what? A city election is interesting? Surely you joke!”

Well this is no joking matter. Okay, well some of the candidates are jokes, but let’s not get ahead of ourselves. This year, new electoral rules and a nearly clean-slate Council have hit the reset button. We have a host of new parties, and new approaches for old parties. There are Mayoral candidates with no parties, parties with no Mayoral candidates, and more credible Council candidates than you can fit in an empty condo.

Before we get to the candidates though, let’s briefly review the current housing shitstorm we find ourselves in. (Or, alternatively, skip ahead if you’re raring to get your vote on.)

The Housing Crisis, Briefly

Land, land everywhere, and not a drop to drink.

The severity of Vancouver’s housing affordability crisis depends on who you ask. SFU’s Andy Yan says it’s the worst in North America, Demographia says it’s the 3rd worst in the world, and The Economist claims prices are overvalued by 65% – compared to New York City’s 4%.

Okay, maybe it doesn’t depend who you ask. Things are fucked, yo.

Buying a typical detached house in Vancouver currently costs about $2.4 million, almost all of which is land cost. This is in a city with a median income of only $65k.

Of course, people don’t need houses, they need homes. Unfortunately, with the city’s condo prices exceeding $1000 per square foot, a typical two-bedroom unit now costs roughly $1 million. For a condo.

Of course people don’t need to own homes, they just need to live in them. Unfortunately, with incredibly low vacancy rates of under 1%, average rents have risen to as high as $3200 a month for two bedrooms. Existing renters in many cases are stuck in housing that is insufficient but rent-controlled. Too often, needing to move apartments now means needing to leave the city.

As such, 67% of Vancouver residents agree housing is the most important issue facing the city. Housing advocacy groups have formed, with Abundant Housing Vancouver arguing we need more homes, and Housing Action for Local Taxpayers arguing the actual problem is foreign buyers and speculators. After years of resignation to the idea that housing prices always go up (they don’t), things have finally gotten so extreme that there is a rare consensus in the city: something must be done.

The Four Kinds of Parties

As for what should be done, there is a little less consensus. Most parties are on board with speeding up permitting, renewing existing co-op leases, supporting temporary modular housing, taxing empty homes, and using at least some city-owned land to build more rentals.

Beyond that though, parties and voters are divided on what steps to take. To help orient us, I’ve created a not entirely scientific but rather helpful chart based on data from the Cambie Report.

Urbanists generally advocate for a denser, less car-oriented city. With 77% of the city’s residential land currently restricted to unattainable detached houses, Urbanists advocate allowing triplexes, townhomes, and low-rise apartments in more of the city. The idea is that less exclusive zoning will increase the supply of homes, decreasing the unjustified prices that condos and apartments currently demand today. Voters enthusiastic about the idea of a more walkable Vancouver with an increased supply of housing are likely looking at urbanist parties like OneCity, Yes, Vision, and some of the great Independent candidates.

Conservationists on the other hand are less concerned about building homes, and more worried about too much change in their backyards. Conservationists prefer a cautious approach to development, preserving the existing character of their neighbourhoods, and leveraging community consultation to protect the housing they already have – even if their critics call them NIMBYs. An anti-development stance is most popular among those that are already well housed, especially older residents and west side landowners. Conservationist voters are likely to be looking at the NPA, the Greens, COPE, and perhaps some of the fringe parties like ProVancouver.

Beyond planning and transportation issues, parties and voters also differ on the traditional left-right scale of social and economic issues, which has its own effect on parties’ approach to housing.

Left wing parties, for the most part, are arguing for more renter protections, including lobbying the province for tougher restrictions around tenancy and rent increases. At the city level, the left favours preventing existing rental stock from being redeveloped, and taxing the most expensive houses to fund more social housing. Funding housing for the less fortunate has gained more appeal in recent years, as high rents rates make renters feel less and less fortunate. Housing aside, the average Vancouverite is a center-left voter, looking favourably on ideas like stopping pipelines and providing addiction services. Parties on the left include COPE, OneCity, some Independents, and to some degree Vision and the Greens.

Right wing voters are in the minority in Vancouver, but this year there are a herd of candidates on the right and center-right. Fiscally and socially conservative platforms here are about not changing too much – other than perhaps keeping our property taxes famously low, or maybe “cleaning up our streets”. While a conservative mindset often correlates with a skepticism of new housing, this year we also have Yes, a centre-right party that is primarily focused on aggressively permitting new housing – if not funding it via taxpayer dollars. Other right-leaning options include the NPA and the various new fringe parties such as Coalition.

Let’s Meet the Contestants!

Like, actually who should I vote for?

Vancouver’s Council setup means that each Councillor matters, almost as much as the Mayor. Given that, this summer I set out to try and answer one question: “Given that I care a lot about housing affordability, who should I vote for?” I thought a couple hours of research would give me a good idea. And holy shit was I double plus wrong. This research turned into a rabbit hole the size of a Winnebago. There are more options and far fewer resources than we get for federal or provincial elections.

Overall, I sought out candidates who:

  1. Would actually take serious and broad action on housing affordability.
  2. Have chance of winning – both in terms of polls, and in terms of endorsements and buzz.

So I did what anyone would do: read the parties’ platforms, subscribed to multiple podcasts on the matter, listened to various candidate interviews, attended a candidates’ housing debate, and even personally met some of the candidates. The bad news is that my brain is now full. The good news is that you don’t need to do all that.

Get a drink, lean back, and optionally open the city’s Plan Your Vote tool open in another tab. Your mission is to pick one Mayoral candidate and up to 10 Council candidates. Let’s do this.

OneCity

In the urbanist left corner of the ring, we have OneCity. Young scrappy and hungry, OneCity won their first seat on School Board last year, and is back for more. They have an audacious plan to both permit and fund new housing across Vancouver, paired with lefty stances on the various other issues facing the city. If you think we need new housing and tend to vote on the left side of the fence, you’ll probably like OneCity.

OneCity has two Council candidates this year. The first is Christine Boyle, a community organizer, climate activist, and minister for the United Church (you know, the cool church that welcomes everybody regardless of orientation or religious background). The second is Brandon Yan, a non-profit director and LBGTQ2+ advocate that served on the City Planning Commission. Credible candidates: check.

Despite OneCity’s unabashedly progressive message, the party seems to be well liked and endorsed. They’ve also had a late surge in the polls, giving them a shot at shaking things up.

Like the other parties on the left, they’re not running a mayoral candidate of their own – OneCity and progressive independent Mayoral front-runner Kennedy Stewart have endorsed one another.

Independents

This election has been called the year of the independent in Vancouver. Not because there are a bajillion of them running – which there are – but because there are some really strong candidates, especially on the Mayoral side.

The favourite for Mayor this year is Independent candidate Kennedy Stewart. Stewart was until recently a Member of Parliament for the NDP, so he has the standard-issue union support and progressive politics. While many candidates are making promises that can only be fulfilled by higher levels of government, Kennedy has actually worked in a higher level of government – albeit not run one.

Although his early campaign was mostly about opposing pipelines, more recently he’s adopted many ambitious housing goals from the urbanist left, with bold targets for new rental and market housing. While his campaign hasn’t exactly been exciting, his positions and poll numbers have earned him official or unofficial support from the main parties and organizations on the left.

The other credible mayoral candidate on the left is also Independent: SFU director and former Vancity and MEC board member Shauna Sylvester. Although her policies are arguably more thoughtful than Stewart’s and she seems like she’d be excellent, polling led to endorsements going Stewart’s way in an effort to avoid splitting the vote – and giving the crown to the NPA’s Ken Sim.

Based on the Oct 9 poll numbers though, you should feel safe voting for Shauna if you prefer her take on things. Her platform includes includes a focus on co-ops and other non-profit housing models, as well as positioning herself as good unifier of what could be a very random city Council.

For Council we also have some very strong independents. Sarah Blyth, for example, is very qualified and has a serious shot. She’s co-founder of the Overdose Prevention Society, and served two terms on Park Board. She’s an advocate for affordable housing, on a platform that sounds somewhere between COPE’s and Vision’s, focusing on existing renters.

Adrian Crook is another Council candidate with a serious shot, and has real housing bona fides as co-founder of housing advocacy group Abundant Housing Vancouver. If you’re sold on the idea that Vancouver needs more housing of all kinds, then you want Adrian on Council. He’s the author of 5 Kids 1 Condo, a relatively popular blog about trying to raise a family in Vancouver and his advocacy for more housing of all kinds. If you want more than one independent pro-housing candidate, you might want to look at Graham Cook – also an Abundant Housing supporter – or from the more right-wing side of things, Rob McDowell is popular in pro-housing circles and has endorsements from 3 sitting Councillors.

Okay, back to the parties! 🎉

Yes

Where OneCity is the “all the housing” party on the left, Yes is the “all the housing” party on the right. How right-wing are Yes’ non-housing policies, you ask? Nobody knows – all they talk about is housing. Admittedly, all Vancouverites ever do is talk about is housing, so it’s on brand.

Yes’ founder and Mayoral candidate, Hector Bremner, is a sitting Councillor and really knows the housing file. His polished videos and talking points have attracted some fans, who like his a market-oriented plan for mass rezoning new housing supply. Yes has the most in-depth housing plan of any party – it’s 50 pages long and literally has flow charts in it. Flow charts!

Yes has also attracted its share of haters. In addition to concerns about excluding social issues from their platform, even some urbanists are uncomfortable with the idea of a pro-development Mayor who worked in PR for real estate developers and has received $85k in grey-market advertising from a billionaire real estate developer.

Given the latest polling, Bremner doesn’t seem to be within reach of Mayor’s seat – which could mean his Council candidates have a better chance of getting elected than their leader. Local business owner Stephanie Ostler seems to be their strongest Council candidate, and is apparently well liked. They have 4 lower profile candidates running as well, so if market-oriented urbanism is your thing, party-vote it up. Also, if you like the Yes platform, independent Council candidate Adrian Crook has a similar take.

Vision

Having held a majority on Council for 8 years, Gregor Robertson’s centre-left Vision party originally focused more on bike lanes and green initiatives than on building more housing. Last year they finally got the message, and started aggressively pushing for new affordable homes.

Even with a solid plan and substanial endorsements, Vision may suffer at the ballot box. Many renters are angry they acted too slowly, and many owners are worried Vision will now act too boldly.

Undeterred, Vision has been pursuing new rental projects, social housing, and gentle density in Neighbourhoods Formerly Known as Single-Family. Despite opposition from some of Vancouver’s wealthiest communities, they’ve been rolling out a program called Making Room that would allow more types of low-rise housing across the city. Many renters see it as an overdue step in the right direction, while landowners flooded City Council to rail against what they deemed a “chainsaw massacre” and a “give-away” to real estate developers. Heavy is the head that wears the crown.

Given all this, Vision is playing it smart by keeping to 4 (originally 5) Council candidates this year. An outstanding candidate on their slate is longtime cycling advocate Tanya Paz – everybody who meets her seems to hold her in high regard. Paz is joined on Vision’s slate by young housing advocate Diego Cardona, sitting Councillor Heather Deal, and Parks Board member Catherine Evans. Vision has revoked their endorsement of TV host Wei Quiao Zhang.

Vision is no longer running a Mayoral candidate, but has informally given the thumbs up to independents Kennedy Stewart and Shauna Sylvester.

COPE

While COPE was once the unified left in Vancouver politics, they’ve struggled in modern times. That may all change this year due to the work of poverty advocate and altogether fascinating person Jean Swanson. Whether she’s going to jail for protesting pipelines or offering tissues to millionaires crying about higher land taxes, Jean is fun to watch – whether or not you agree with her. She’ll likely be COPE’s first elected Councillor in years.

COPE’s housing platform is pretty traditionally leftist – it prioritizes protecting existing renters, taxing mansions, and ending homelessness. COPE in general and Jean in particular are skeptical of allowing new condos or other for-profit housing, preferring homes to be built for the poorest folks first. While this is a noble sentiment, voters hoping to upgrade from okay housing to pretty good housing may not be excited to wait their turn.

In addition to Swanson, COPE has two other Council candidates: activist Derrick O’Keefe, who seems to be a bit more of an urbanist than Jean is, and former Councillor Anne Roberts, who during her tenure was known for campaigning against the Canada Line – in favour of more buses.

Green

Ah, the Greens. At the national, provincial, and city level the Green Party has become a kind of protest vote. The “left but not those guys” vote. As such, they’ve surged in the polls this year.

Interestingly though, when you dig into the Greens’ policies and record, they’re more conservative than people think. While folks seem to vote Green for change, at the city level they’re a party of the middle ground.

The Vancouver Greens have one sitting Councillor, Adriane Carr, who is extremely likely to be re-elected by virtue of name recognition. This is despite the fact she has voted against far more housing than any sitting Councillor – including social and rental housing. Her reasons for voting against housing may vary – sometimes it’s concerns about landowners’ views, or often it’s longtime favourites “insufficient consultation” or “this won’t fix the crisis”. As a whole, her record is pretty plain: she votes to conserve what we’ve got.

Despite Carr’s record, the Greens’ Pete Fry and Michael Wiebe are interesting candidates. They both seem more urbanist than Carr, and if elected with her could push her towards supporting more housing. Green also has an additional Council candidate, David Wong, who given interest in the party could also do well. If you think Council needs more centrist voices, or you’re a “don’t rock the boat” type voter, the Greens could be a good fit.

NPA

The NPA is the longstanding right-wing party in Vancouver. Their big idea on housing is to allow detached houses to have two basement suites. So if you’re itching to live in a basement suite, they’ve got you covered.

With a platform surprisingly close to the Greens’, the NPA has just enough progressive policies to be electable in Vancouver. For the most part though, they’re the party of the status quo – especially now that their more pro-housing members have splintered off into the new Yes party.

Their Mayoral Candidate, Ken Sim, is a business guy, owner of Rosemary Rocksalt bagelry and Nurse Next Door. In most polls Sim has ranked 2nd place for mayor, giving him a real shot at winning – if the renters and young people stay home on voting days.

The long tail, wild and weird

Without getting deep into the new conservative fringe parties, it’s worth knowing they exist. None are on track for the Mayoralty, but they could nab a Council, School, or Park Board seat.

The most infamous is a strikingly conservative party called Coalition. They’re the one party not focused on housing, due to their burning desire to tear out bike lanes and “clean up” “vagrancy”. I suppose every wedding needs a drunk uncle.

There is also Vancouver 1st, who according to the polls is in the race for last place. They’ve garnered media attention for a promise to somehow bring back the Vancouver Grizzlies, and more recently for joining some Coalition candidiates in criticizing SOGI, BC schools’ sexual orientation and gender identity policies. ಠ_ಠ

Then there’s ProVancouver. In the initial version of this guide, I had a hard time making sense of the party, so I dismissed them as anti-housing and not having a chance. This led to one of their Council candidates warning followers to be extremely wary of this misleading guide, followed by an angry pile-on by pro-Pro social media accounts. On Oct 11, new Council polling showed surprising gains for Pro and Coalition, which obliged me to say a bit more about them. They sought attention, and I guess they got some.

While their housing take is a cromulent anti-developer, pro-rental platform, their organization and the behaviour of their candidates make some voters feel very uncomfortable, in a way that goes beyond platform disagreements. I really wish I had a simple argument for why this is the case.

It may be their skepticism of newcomers, defense of parking and detached houses, lack of socially progressive messaging, supporters’ alt-right style social media behaviour, a sense that they’re populists, or maybe I’m just secretly salty that their proponents think I’m illegally on the payroll of the real estate industrial complex. In any case, if you find their pro-rental rhetoric appealing, you may want to instead consider Green, COPE, OneCity, or Independent candidates.

If you want to hate-read, or get a sense of why young people and renters need to actually vote, I’d say reading about Coalition would be your go-to. But before getting sucked into that vortex, make a specific plan for your own vote.

Actually voting

Stereotypically, only retired homeowners vote in local elections. This year, you will too. (If you’re a retired homeowner, hey hi! I get where you’re coming from but I really hope you’ll also support more affordable housing this election.)

The city has a helpful Plan Your Vote tool for that lets you check off who you’re planning to vote for, and see them in a concise list in the order they’ll appear on the ballot. It’s quite useful, given the ballot is long and randomly ordered.

Early voting runs Wednesday, Oct 10 to Wednesday, Oct 17, and any voter can vote at any polling place. If you really need to, you can wait until mass polling happens on Saturday, Oct 20 – but all the cool kids vote early.


This guide was a large undertaking and covered a lot of ground. If you have feedback or (especially) corrections, get in touch!

If you have the time and brain capacity to learn more from other sources, here are some great starting places:

For new readers curious where I’m coming from: I’m a thirty-something with a family, currently renting a condo in Mount Pleasant. I run a small business, and like many in my generation have become an advocate for affordable housing – for my family, my employees, and my friends who can barely afford to stay in a city with acres and acres of single family houses.

Special thanks to the Cambie Report hosts and supporters, both for the excellent and informative show, and tolerating my many questions about Vancouver politics. Also thanks to the many folks who are helping get more voters engaged in democracy.


Blowing Up Your OmniFocus

September 28, 2018

This article was originally written for Inside OmniFocus. It assumes you’re familiar with OmniFocus, the whiz-bang task manager for iOS and the Mac.


If you’re like me, you depend on OmniFocus for Mac. Sure, the iOS version is great for capturing and occasionally checking off tasks, but the Mac is the altar at which I plan, organize, and execute my work. That’s why I am redonkulously excited that OmniFocus 3 is now on the Mac.

While this update offers a number of UI updates and features, the soul of the release is that it now supports a cornucopia of new workflows that weren’t previously possible to set up in OmniFocus 2. It does this by adding three key features that work together to help you organize your work in novel new ways:

  1. Contexts are now Tags. You can have multiple tags on an item, and you can manually sort items within a tag.
  2. Custom perspectives are now extremely flexible. OmniFocus Pro’s perspective editor now lets you configure some incredibly useful views.
  3. The Forecast view is now richer. This makes it more likely to be a place you can spend most of your day.

Together, these three changes make OmniFocus 3 so much more flexible that it’s time to take a long, critical look at your workflow. Your projects and contexts may have made sense a few months or even years ago, but it’s time for a shakeup.

“Hey buddy,” you may protest, “My OmniFocus workflow is a magical garden utopia of productivity and harmony!” And if that’s you, then well, excellent. If you don’t want to take some time to rethink how you choose the work you do, then who am I to judge?

That said, I’m going to be honest here. My workflow is not a magical garden utopia of productivity and peace. At least, not yet.

In fact, most OmniFocus users I know have at least one or two aspects of their task workflow that leave something to be desired. Call your doctor if you experience any of the following symptoms:

  • Tending a garden of “overdue” tasks that aren’t technically overdue
  • Browsing a 57-item list called “Work Stuff”
  • Trying to feed a workflow so fragile that missing a single weekly review sends it into primal chaos
  • Looking at particular tasks over and over, slowly wanting them to do them less and less, but not doing anything with them, seriously Allen why is it so hard for you to just call the mechanic before they close at 3pm what is wrong with you Allen?

It’s all right, we can get through this together. In fact, we don’t need a doctor at all. What we need instead is OmniFocus 3, a tasty beverage, and the willingness to blow up our old workflows.

Yes, summer is over, fall has fallen, and it is an excellent time to ask some hard questions and shake up your task management. Pull things apart, try some new approaches on for size. Look critically about how you’re organizing your work, how you could do better work, and how you too can find your garden utopia of productivity.

Or, at least, how you can have less than 13 overdue items at once.

Let’s get to it.

The Top Ten Workflow Questions To Ask Now that OmniFocus 3 is On Your Mac

1. What tags are worth adding to my contexts?

This is most people’s first workflow question about OmniFocus 3. Your tags, née contexts, can now double up or triple up, so you can have an item that is both “Office” and “Today”, or “Home” and “Quick”. Where I previously had a project called “Seasonal Goals 🏅” in OmniFocus 2, I’ve now made that a tag. A nice thing about tags is they’re easy to trial – add some, see if they’re useful. If not, try something else.

2. What custom perspectives should I create?

While many OmniFocus 2 Pro users created some variant of “Due or Flagged” to work out of, now custom perspectives can be far more thoughtful and useful than that.

Since you can negate rules, feed custom perspectives with tags, specify “all” or “any” conditions, and even nest rules, it’s now a lot easier to create perspectives you want to spend a lot of time in. Instead of living in the boring old Tags, Projects, and and Review perspectives, it’s worth experimenting with how far you can go with custom perspectives. As a bonus, a complex custom perspective makes for a great horcrux.

There are already some great recent articles on Inside OmniFocus for inspiration, such as Productivity in Three Dimensions. I’ve seen some creative perspectives like “Next Up”, “Stale Items”, “Monday Review”, “Backburner”, “Lazy Day”, and so on.

The limit is your imagination – as long as you have a Pro license, that is.

3. Is now the time to upgrade to OmniFocus Pro?

Yes.

I’m sure the Omni folks would be too nice to say this so plainly, but I say that if you’re into OmniFocus enough to read whole articles about improving your workflow, you’ll get your money’s worth out of OmniFocus Pro. 🌟

4. Can I use a combination of custom perspectives and tags to stop using fake due dates?

A common OmniFocus bad habit is choosing arbitrary due dates for a herd of tasks based on when you’d like to have done them. Later, those dates happen to line up, creating roiling mass of not-actually-due-now tasks mixed in with some actually-these-are-due-now grenades. I call this a Due Bomb.

You may also have encountered the Defer Bomb, the result of getting busy and deferring a lot of medium-urgency tasks from your “next” list, which then conspire to all pop back up at once with unpleasant consequences.

The calendar in Forecast can help avoid these problems, but in an ideal world we don’t plan when future tasks should happen using fake due dates. What we really want is metadata – say, a tag or project – to help indicate which items we should be doing now, soon, or someday. We also want a view – say, a custom perspective – to let us see what we should be focusing on now, and what are good candidates to consider doing next.

Once due dates are only used for serious due dates, and you have a working system surfacing medium-urgency items, then you can recruit now-you to choose your day’s work, instead of your longtime nemesis, 3-weeks-ago-you.

5. Should my “Today” list be a tag, or a custom perspective?

Given the flexibility of custom perspectives and tags, it’s possible to build a really slick “Today’s Work” perspective that slices and dices flags, tags, due dates, projects, and other things to propose a hot list of targets for focusing on today. It’s neat.

Neatness aside though, there are two really nice things about having Today be simply a tag. For one, you can manually sort items within a tag, which is handy for a shortlist of your day’s tasks. Secondly, OmniFocus 3 Pro lets you specify a “Today” tag in Forecast, which will display nicely along with your actually-due items, and also enable a handy keyboard shortcut for toggling that tag on any item.

6. How about that Forecast – is it flexible enough that I can use it as my primary view now?

Not everybody used the Forecast view in OmniFocus 2, but it is substantially improved now. If you have OmniFocus 3 Pro and can set a Forecast tag, it’s definitely worth trying out as your working view.

7. Should some of my projects have default tags?

A lot of people manually assign tags to new tasks as they clean out their inbox. That works, but in OmniFocus 3 you’ll likely have more tags than before, and you don’t want clearing your inbox to become a chore worthy of procrastination. Given that, it’s worth remembering that if you assign a tag to a project, and then assign a new item to that project, it’ll inherit that tag. Kinda cool.

8. Can you now re-frame more of your projects to be “completable”?

OmniFocus neophytes typically make broad projects like “Networking”. Rather than being a project per se, this is moreso an “area of responsibility” – something that never really ends, and could accumulate items endlessly. In an ideal world you’d have projects named after goals like “Meet 20 people for coffee in 2018”, or at the very least “Meet more people for coffee”.

Back in the halcyon days of OmniFocus 2, having a lot of projects like this could be unwieldy. Now though, since you can now use tags and flexible perspectives to view different slices across all your projects, you should have a somewhat easier time maintaining more specific, measurable, time-boxed projects now. Which is a Good Thing™.

9. Wait, these custom perspectives really are cool – doesn’t this open up a limitless array of options for tags to organize and plan?

Yes, rhetorical question-asker, now you’ve got it! This question is what flipped me from protective of my old setup into total abandon. As I prepared and researched for this article, I eventually absorbed the scope of how tags and custom perspectives can interact, and what other people were doing with them, and it blew my mind. The next thing I remember, I was writing a 2000-word article about task management workflows.

This week I’ve burned down my projects, scrambled my tags, and tried a half-dozen different ways of looking at the work I do. Yet still, despite the chaos that is my OmniFocus setup, the most pressing thing – this article – got done. The due date on this article’s task pierced the fog, a yellow beacon in the forecast.

Okay okay, I’ll admit it – it was a red beacon.

10. Wait, so you’re saying you, the author of this Inside OmniFocus article and ostensibly a Knowledgeable Person™ about OmniFocus has their workflow in a state of chaos?

Pay no attention to that man behind the curtain!

Okay yes, but here’s the thing: it’s been great. The enforced focus of only having my most important work clearly visible has led me to be more focused than I have been in months. I’d set up my tags and projects back in an era where I added maybe 2-4 tasks a day, whereas now I’m capturing 10-20 a day, leading me to be swamped by medium-importance items. The old system wasn’t working, and was ripe for revolution, and between using new capabilities and asking new questions, I’m really optimistic about the new system.

So, it turns out, sometimes you really do need to blow it all up. And with OmniFocus 3 now bringing some really new workflow options to the Mac, there’s never been a better time than now. Let the creative destruction begin.


White Guys Are the Worst

September 1, 2018

A couple years ago, I started more intentionally broadening who I follow on social media. In particular, I’ve followed more people who aren’t just other white guys. It’s nice – I recommend it.

However, this approach highlighted a problem. As I started to follow more diverse people, I noticed that Twitter’s “who to follow” suggestions were fighting back. This is the default behaviour of recommendation engines: the mathematically “best” suggestions are the stereotypical ones. Thus, if you try and leave your bubble, it will recommend you get back in.

This is kind of annoying, so a couple years ago, I did what you do: I complained about it on Twitter:

I hate how recommenders blindly fight attempts to diversify. “People like you follow more white guys. Have you tried following white guys?”

My comment got some replies, including a sarcastic quip from friend and fellow white guy Boris Smus:

white guys are the worst!

It was a joke, from one white guy to another.

It was also true. As I would find out two years later, white guys are the worst.


Last Friday, I started getting some unusual Twitter notifications.

From “Zombie of some kind”:

woof woof woof woof woof woof woof woof woof

Odd.

From “Twinkledick”:

Reported for racism.

Uh…

From “Haul Paller”

Always. I feel my testosterone dropping by just looking at this pussy.

Oh no. The clown cavalry has arrived, and they’re in my mentions.


The alt-right internet trolling apparatus consists of many different warrens and tentacles. One recent tentacle to burst out of the goo is a Twitter account called “Blue Check Watch”. Its MO is to look for old tweets by verified accounts that are “racist against whites”, and brigade them.

Let’s say, for the sake of argument, that a white male president who was objectively bad by almost every measure was elected with only 46% of the vote, driven primarily by white male voters. In such a circumstance, a frustrated white male might say something like “White males suck”, on account of white males having just collectively done something that sucked.

Fast forward a few years, and trolls dig up said tweet. They publicize it as if it’s some kind of dark secret, attach it to the author’s photo and place of employment, and summon a brigade of locusts. They descend, harassing people, reporting them, attempting to get them fired, sending anti-Semitic comments, and generally behaving like a classic mob of alt-right bot-children.

And so our weekend went. We were called cunts, which hasn’t happened to me in a while. One response informed me that if I was a white guy who hated white guys so much, I could go kill myself. Which is good to know, that’s a helpful tip.

The problem is though, I don’t want white people to die. I just want them to stop being the worst.


As the brigade got bored and moved on to the next target, I had many questions. Boris summarized his thoughts on being targeted, along with a reflection on whether Twitter is worth trying to participate in anymore. My friend Christina Warren, who was targeted by the brigade earlier in the month, responded with cheery gifs and remarkable patience.

Myself, I was motivated to learn more about some of the bizarre rhetoric within the chaos. In particular, I read up on:

  1. Reverse racism”, the idea that white people suffer from racial discrimination in the same way that actual oppressed and underprivileged groups do.
  2. White pride”, a framing device white nationalists and neo-Nazis use to spin racism and racial division as if it was a positive attitude.
  3. White genocide”, a conspiracy theory that claims minorities and the government are intentionally shifting demographics over time with the goal of systematically eliminating white people.

Learning about these rhetorical devices is kind of like learning about common confidence scams. It’s both morbidly fascinating and good mental preparation. Out of context, the term “white pride” might not immediately trigger alarm bells for everyone. With some thought though, it’s pretty easy to connect it to some of the worst tendencies in humanity.

So, it’s worth reading up a bit and becoming aware of the tricks white nationalists try to use to divide people. That way, if these ideas do leak beyond the troll cages and infect anyone we know personally, we’ll be prepared to discuss it, and help make things less bad.

The power is in us. We can stop being the worst.


The Big Deal

August 1, 2018

In the years I’ve run a consulting studio, I’ve noticed something odd about consulting studios: they often implode. Big ones, little ones, and ostensibly successful ones all seem have a weird habit of suddenly letting go half their staff.

I would very much like to not lose half my staff. To that end, I’ve been collecting anecdata about consulting firms’ rapid unscheduled disassemblies, and the problems that cause them. Was it a technical boondoggle? A nasty lawsuit? Simply failure to innovate?

Usually, no. Talking to more than a dozen people from various troubled consulting firms, I’ve identified the handful of key risks that most often lead to consulting shops’ ruin. Previously, I’ve written about not getting paid. Today I’d like to take a look at another common existential threat: the Big Deal.

Keep Working and Nobody Explodes

Often it happens gradually. You land a client, a company bigger than you with plenty of funding. The work goes well, and over time the relationship grows. The project expands, the work broadens. One thing leads to another, and before you know it most of your revenue is coming from this one Big Deal.

On occasion, this happens all at once: a potential contract is so huge and so juicy that you can’t help but put in a proposal, even if delivering would be a stretch.

Either way, the Deal is probably Big enough that the client gets a discounted rate. At this lower rate, they’re inclined to sign for even more work. You hire more people. Maybe you get a bigger office too. Everything is big, and getting bigger.

In some ways, a single big project is great. It lets you focus on delivering instead of switching contexts, making sales, and juggling different clients’ needs. It can make things feel predictable.

Except they are totally not predictable. Sooner or later, the client’s interests will diverge from yours. When that happens things can get dicey very fast if that client has become “too big to lose”.

If that happens, the least bad outcome is probably that they decide to acquire you. Negotiating from there is hard though, since if they don’t already know how reliant you are on them, they’ll sure as hell find out during due diligence. Still, when you’ve become chemically dependent on a single client, selling out even at a steep discount can be better than the alternatives.

That’s because all good contracts must end. Your client may change up management, scale back your project, bring development in house, or even go out of business. No matter how excellent your work, the cookie’s going to crumble eventually.

If you’re lucky, you’ll get some notice – some warning that things are amiss. If you’re not lucky, the first sign you’re cooked could be a bounced email or late invoice. Either way, unless you’ve been hoarding cash, you’re now in Big Trouble™.

Back in the day, I knew an 80-person contracting firm that had one client grow and grow until it was 90% of their revenue. The contract eventually came up for renewal, and at the last second the client decided to move everything to India. It turned out poorly for the client, but that was no consolation: losing that contract was the consulting equivalent of a nuclear bomb going off.

Eggs in Multiple Baskets

Getting dependent on A Big Deal is theoretically easy to avoid, but it can be emotionally difficult to do so. It’s easy to laugh at folks for letting a giant wooden horse on wheels into their gate, but who doesn’t want a sweet giant horse? It’s so huge!

That’s why it’s worth having a rule of thumb. At Steamclock, whenever a client wants more than 30% of our team’s bandwidth, we always tread carefully.

On the sales and marketing side, signing diverse clients should be an explicit goal. Instead of using discounted rates to help a Big Deal become even bigger, use them to land work that will broaden your portfolio, or to land projects where you can do exceptional work.

It can also be helpful to diligently avoid rushing projects. While piling 60% of your team on something might get it out the door a bit faster, there’s usually a path where 40% of your team could ship a higher quality product for less money, given a more thoughtful scope.

Strategically billing clients less can be an important skill. Some contractors work hard to bill as many hours as they can get away with in the short term. This gooses revenue today, but causes chaos later.

To build long-term relationships, figure out a billable pace that is actually sustainable for each client, and iterate within that.

Sustainability: it’s kind of a Big Deal.


372 Easy Steps to Expanding Your Mind

July 1, 2018

It’s a trap, one I fall into often. I’ll be reading Twitter or Hacker News, and come across an article. It’s promising and potentially enlightening, but long, so I send it to Instapaper for reading later.

Each time I do this, I get a sense of accomplishment. “Yeah! Good for me! I decided to read a substantial essay, something that will expand my mind!”

Yet I have accomplished nothing. Nothing has expanded – other than my Instapaper backlog.

Sure, on occasion I’ll have the good sense to read some saved articles instead of the latest bleeps and bloops, and when I do it’s always rewarding. But I like the latest bleeps and bloops. And reading feels like work! I can start tomorrow.

As a result, I do a lot of saving articles, but not a lot of mind-expanding.

So, this spring, I decided the time had come: I would read through my Instapaper backlog by the end of June. I would finally benefit from those thoughtful and insightful articles no matter how much reading it took.

Spoiler: it took a lot.


After turning on the unread badge in Instapaper – and using an advanced setting to let it download my full backlog – I came face to face with my goal: 372 articles. 372 pieces of writing that past-me had delegated to future-me. Well future-me, time to make some coffee.

With my coffee steaming and my toddler napping, I got comfortable and scrolled down, way way down, to the oldest article.

It was from 2009.

Apparently, I once used an early version of Instapaper to save an article from A List Apart on a topic as old as time: JavaScript frameworks. This wouldn’t have been the first article I’d ever saved, but I guess it was the first one I procrastinated reading.

I skimmed the article for old times’ sake, then hit Archive. Progress 1, mind expansion 0.

Over the coming weeks, I diligently worked my way forward in time. The JavaScript article wasn’t the only piece to age poorly. “The bold new world of 3D TV”, ha right. “Why Twitter must reverse its 2012 policy changes,” sigh. “Why Trump could never be elected,” projectile barf.

Before long, I’d learned to cock my Archive finger when I came across a piece about politics or technology news. These links, the bulk of my Twitter and RSS feeds, seemed important when they were new, but a few years later they’re kinda just not. The more urgent a take felt, the less likely it turned out to be an important one. Which is kind of a known thing.


Luckily for me, some of those older articles did stand the test of time. There was a 2010 posting based on a 1988 paper on defensive communication, and how spontaneity, provisionalism, and problem orientation can lead to better outcomes when giving feedback and communicating generally. So that was cool.

Incidentally, this was one of the pieces that aged poorly for another reason: archaic pronoun usage. Prose that I wouldn’t have blinked at 5 years ago sticks out now for strangely gendered pronoun usage, either due to authors flipping between “he” and “she,” or using the awkward “he or she” construct every time they need a pronoun. The singular “they” happened slowly, then all at once.

For every article that aged poorly though, there was a timeless classic. Stories of ages gone by, for example. I loved Nintendo of America’s weird origin story, the story of how NHL ’94 became a masterpiece, and how Starcraft barely worked and originally looked like some kind of acid trip.

I was also pleased to find great stories of great failures – whether it was massive oil rigs losing their way, massively acclaimed studios losing their best staff, or massively funded startups losing their grip. I tell myself I like to read about failures so I can learn from their mistakes, but there’s something more to it. I’m fascinated by the key element of failing at scale: hubris.

Nicholas Carlson spun a brutal tale of hubris in an excerpt from his book about Marissa Mayer and the Fight to Save Yahoo, which was fascinating albeit clearly one-sided. The piece wants you to think of Mayer as hopelessly arrogant, but she sounded to me more like a smart person trying really hard to move a beached whale on an impossible schedule. Fascinating nonetheless.

Hubris is maybe even more interesting when it doesn’t (quite) lead to doom and gloom. I enjoyed learning about Angus Reid and the power struggle at Vision Critical, and the wild way Elon Musk built SpaceX with sheer force of will. Either story might feel like a stretch as a work of fiction.

Remarkably, out of 372 articles I found but a single piece of fiction: the brilliantly written and provocative short story Cat Person. The fact this was one of the best articles in the bunch seems to indicate I should be reading more short fiction.

Beyond the hubris and the stories, I did find a few essays that should help me actually do my job. For example, two articles helped me refine my thinking on our labs projects at Steamclock: Aaron Harris’ Why Toys?, and an article about Teehan + Lax’s Labs program. I also got a good reminder from Rands that leaders need to Say the Hard Thing, and a peek at the culture that being too hard purportedly created at Amazon.

I also learned more about the confidence gap that is an obstacle for many women and marginalized people when building their careers, and the pernicious nature of “Assuming Good Intent” in codes of conduct.

As helpful as those few essays were though, I expected to have saved more solid articles on these topics. Building stronger products and teams is my job – I should be reading about it. Sounds like I need to improve my list of inputs.


Today, I read the the final article. I’d already finished the original 372, but I’d also kept adding new articles, so after roughly 400 articles, I finally finished The Trouble With Johnny Depp. I’m now at Instapaper 0.

So, did all that expand my mind? Maybe. A bit, yeah.

But in a bigger way I feel dumber. It feels as though the world of knowledge and ideas and stories that I don’t know has grown a lot, and the world I do know has only grown a little. Which makes sense – there are a lot more than 400 long form stories and essays worth reading, and it’s going to take a lot more than three months to read them. But I’m willing to try.

Armed with my Save for Later bookmarklet and my Kindle, I’m going to keep on reading. I’m going to expand my mind. I’m going to read those great articles, those great essays, and the great novels too. Yeah! Good for me!

I can start tomorrow.


The Great Bug Hunt

May 30, 2018

A fun thing about programming is that most days, you make progress. Maybe you fix some issues, maybe you add a feature, maybe you build towards something bigger. Your code moves ever forward.

Until it doesn’t.

On occasion, you will hit a Bug. Not a mundane bug, some trifle you can fix in an hour, or even a day. This is a true Bug. One that defies reason. One that evokes a “that’s not possible,” a “how could this even happen?”, or most dreadfully, a “could there be a bug in the compiler?” Hold on kids, we’re going hunting.

Recently, I reported a regression in an app we’re working on: it had become dreadfully slow on launch. QA had noticed the issue too, which is good, but nobody on the development team had seen it happen – which is bad. Scrolling performance was awful on our CI release builds, but fine when the project was built via Xcode. The build settings seemed to be the same. Standard performance profiling turned up nothing obvious. We had ourselves a Bug.

Diagnosing and fixing a Bug requires patience, thoughtfulness, and above all a systematic, scientific mindset. We must eliminate variables one by one. Persistently forming hypotheses and testing each one is the name of the game. While the poor engineer assigned to hunt the Bug already knows this, it is our tradition to ease the pain by sharing the story of a legendary Bug Hunt.

Gather ’round, friends, for the Story of the Crashing Xbox.

You see, before Steamclock, my co-founder Nigel worked in the games industry. The games industry is very fun, when it’s fun. It’s also very not-fun when it’s not-fun. Games are particularly not-fun when you’re finishing them, so by law that’s when you will discover a Bug.

At that time, the team was working on what was to be one of the first games ever for a brand new game console, called the “Xbox”. As final testing ramped up, QA set up three pre-release Xboxen to run automated tests overnight. If the previous day’s build of the game was still running the next morning, it was a sign of a stable build.

Unfortunately, by morning one of the consoles had crashed. Crashes are never good, but this was a particularly bad crash: something running on the graphics card had brought the whole system down. Diagnosing a GPU crash meant hard mode: no debuggers, no stack traces, no “printf” debugging. All you could do is read the code and try things, like an animal.

And so began the Bug Hunt. Each day the lead engineer would comb through the evidence they had, develop a hypothesis, and work to eliminate possibilities. Each night, QA would get a “random” crash, without a clear cause. “That’s not possible.” “How could this even happen?” “Could there be a bug in the compiler?” All the greatest hits.

Naturally, the game ran perfectly well on the engineer’s machine – for multiple days, even. This was little consolation, as the deadline to print and ship the game loomed large.

Luckily, a pattern was soon detected – albeit a strange one. The game was only crashing overnight on one of the three Xboxes. A search for differences ensued. It wasn’t the power cables. It wasn’t the controllers. It wasn’t the order they were burning the DVDs. Bring the Xbox back to your desk – no crash. Put it back – crash. It was something about the very specific setup QA was using.

Now, the process of elimination requires eliminating all variables. So eventually, in desperation, the engineer tried one more thing: he shuffled which console sat on what table. Boom.

It wasn’t that Xbox that crashed, it was any Xbox sitting on that table that crashed. In the middle of the night.

Now, sometimes you need to do strange things for science, and this was one of those times. Stoically, the engineer set up a chair, gathered the requisite quantity of Red Bull, and the Bug Hunt became a Bug Watch. He vowed to watch the Xbox run automated testing on that cursed table until he saw the problem with his own two eyes.

The night passed by slowly, then quickly, and eventually dawn approached. The game still ran. Infuriatingly, it ran. The sun began to rise.

As he started to consider calling it for the night, something interesting finally happened: The Table was struck by a ray of light from the rising sun. Minute by minute, a sunbeam crept across the table towards the Xbox, its warm glow quietly enveloping that black blob of a console.

Which promptly crashed.

It turns out, early Xbox units had an issue where the graphics card could fault when the console reached a certain temperature. There was nothing you could do about it in software. The hardware issue was escalated, the game was cleared for release, and the Red Bull was swapped out for beer – or let’s be honest, probably whisky. Science one, Bug zero.


Back at Steamclock, our scrolling performance Bug was more straightforward. After some process of elimination and some teamwork, yesterday we tracked it down to our crash reporting SDK. A recent change in how the Buddybuild SDK interacts with iOS means that Buddybuild’s Instant Replay feature now causes severe performance degradation, which is very visible when scrolling. Feature disabled, problem solved.

Next time you hit a Bug that defies all explanation, it’s worth trying to channel the persistent and systematic nature of the Bug Hunters that came before you. Whether the Bug is in your code, a 3rd party library, or the thermal expansion of prototype hardware in the morning sun, the only solution is science. And maybe a little whisky.

Archive of all articles →

© Allen Pike. See also Twitter and Steamclock.