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.
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.
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.
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.”
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.
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.
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:
- Would actually take serious and broad action on housing affordability.
- 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.
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.
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! 🎉
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.
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.
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.
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.
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.
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.
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:
- Contexts are now Tags. You can have multiple tags on an item, and you can manually sort items within a tag.
- Custom perspectives are now extremely flexible. OmniFocus Pro’s perspective editor now lets you configure some incredibly useful views.
- 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?
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. 🌟
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.
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™.
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.
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
Reported for racism.
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:
- “Reverse racism”, the idea that white people suffer from racial discrimination in the same way that actual oppressed and underprivileged groups do.
- “White pride”, a framing device white nationalists and neo-Nazis use to spin racism and racial division as if it was a positive attitude.
- “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.
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.
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.
I skimmed the article for old times’ sake, then hit Archive. Progress 1, mind expansion 0.
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.
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.
In 2013, I decided it was time to start an iOS development meet up. I’d run VanJS for many years, which was great. There was one thing about running VanJS that was not great though, and that was using Meetup.com.
You see, Meetup is optimized for getting small groups assembled and running. A huge proportion of Meetup’s focus is around making it easier for groups to organize, socialize, and maintain their momentum. Meetup continually adds new ways for members of a group to post various things to the group. If your goal is to have as many Meetup™s as possible surviving and paying dues, optimizing your KPIs for optimal synergy, then this is great.
This is not as great if your goal is to curate a high-quality speaker series for a group with 3000 members, watched hungrily by dozens of hungry recruiters and other loud individuals.
For example, a few years back Meetup added comments to events. They also opted everybody into notifications, as is the style. This probably worked fine for groups with 10 attendees, but at that time we were organizing a large event with 200 attendees. Naturally, Rando Calrissian hops onto the event’s page to say “ill be 5 min late”, which caused Meetup to email 200 people the very important alert that Mr. Calrissian will be 5 minutes late.
In another fun encounter, I started getting urgent messages asking things like “I can’t get in, where is everybody?” I briefly panicked. Had I organized an event but forgotten to attend? I checked my Meetup page, and although I hadn’t, somebody else had! Meetup had quietly added the ability for all attendees to “propose” events, and assign them dates and times, and send announcement emails, without necessarily ensuring that there was a venue or staff or anything associated with that event. So a bunch of people showed up at our usual auditorium, for a talk that somebody had offhandedly suggested. Unfortunately, the auditorium costs $500 and needs to be booked weeks in advance, so this resulted in some poor customer sat.
An interesting problem
Given all that, I wasn’t keen to start another group on Meetup. And doing some research, chatting with other event organizers, I learned that many organizers weren’t keen on Meetup either. Complaints about the lack of control were plentiful. Multiple Meetup customers told me point blank, “I hate Meetup.”
A lot of the complaints centered around the UI. Meetup’s interface is full of feature clutter and bloat. They even have a feature where you can print out a checklist of attendees to check them off as they arrive. Who does that? In part due to this chaos, Meetup’s look and was about a decade behind the times – not the best for events focused on cutting edge design and development.
In contrast, I saw that CocoaHeads Montréal had a simple custom site that presented Just the Facts: the events, where they were, and how to RSVP. It was a breath of fresh air, and far closer to what I wanted for our new group than could be configured on Meetup.
So, we spent a couple weeks prototyping a custom web app, which we called Caravan, for our new iOS meet up, which we called VanCocoa. We left out all of Meetup’s social features, spam, and list-printing doodads. Instead, we focused on what we saw as our key differentiator: Caravan pages would be simple, attractive, and easy to use. In particular, went to great lengths to not require attendees to create accounts – years before it was cool.
That August we hosted the first VanCocoa using Caravan. Although people liked the event and the site, I immediately started to receive a lot of support email about it. 90% of the issues stemmed from my brilliant idea of not requiring accounts:
- “Did I RSVP?”
- “How do I un-RSVP?”
- “I accidentally RSVPed twice with two different emails, what do?”
- “Do I have to re-type my email each time I RSVP?”
- “I accidentally RSVP’ed to another event using a different email address than I’d used before, and now I’m getting announcements to both emails, can I just merge them somehow, should you maybe just have some kind of account login?”
We were able to fix some of these in a workable way without requiring people to create accounts, but the product design challenges around avoiding logins made it painfully clear why every product in the space requires account creation for attendees. Blech.
Meanwhile, I started demoing our Caravan prototype to the Meetup organizers who told me they hated Meetup so much. Each organizer was excited to see our progress, but had a feature request. Which is great! Every person’s feature request was different than every other person’s. Which is not great.
One organizer wanted to charge fees. One organizer wanted a message board. Another wanted a poll for pizza preferences?
My favourite was the Meetup organizer in New York whose venue had some security rules that required them to do paperwork for every event. Before attendees could enter the venue, a security guard needed to check them off a list – a list they generated with the very Meetup feature I’d been using as an example of needless bloat. Well, f.
As if that wasn’t bad enough, we were soon offered a cool new venue for VanCocoa. It was very nice and well located, but had a catch: they needed us to sign attendees in. From a list. Well, ﬀ.
Perhaps even worse, we saw first-hand the power of Meetup’s network effects. Where our VanJS group on Meetup naturally grows substantially every month just by being an active tech event in Vancouver, our Caravan-based group grew ever so slowly, despite having talks of the same caliber. The iOS development community here isn’t quite as big as the web development community, but it’s strong and healthy – something that just wasn’t reflected in the attendance for VanCocoa, despite glowing reviews from attendees.
Given what we’d learned from our prototyping and interviews, we went back to the drawing board and did some design explorations for what a “Next Generation” Caravan could look like. The more we explored and the more we talked to organizers of large Meetup groups though, the less it looked like there was a clear niche for a simple, beautiful Meetup competitor focused on large tech groups. Around that time I saw that CocoaHeads Montréal, the group that inspired Caravan in the first place, started using Meetup themselves. 😕
So, we decided to shelve further development on Caravan and focus on other products we wanted to explore. We kept the site running for VanCocoa for some time, but this winter I sent out a survey of the group asking about future directions. Besides positive reviews, a big message that came back was that we should switch to Meetup – even though people liked Caravan better – because more people would find the group that way. Well, who am I to argue?
So today, we finally ported VanCocoa to Meetup. We also took the opportunity to rebrand: next week will be the first ever Vancouver Xcoders. We’ve always had a great relationship with Seattle’s Xcoders group, and it felt right to join forces. If you’re in Vancouver or visiting sometime, and you’re interested in giving a talk about development in the Apple ecosystem, let me know.
Of course, Meetup is still bad. Very bad. But there’s nothing like trying to build your own thing to help you appreciate the bad thing you don’t need to maintain. And I’m pretty sure the network effect and new name will bring together more of the Vancouver iOS community, and – perhaps more importantly – a more diverse audience beyond the bubble of folks that knew about VanCocoa.
Of course, if you do end up beating Meetup at their own game, please drop me a line.
Canada has a cheese problem.
Back in 1970, dairy farmers convinced the Canadian government to enact something called the “National Milk Marketing Plan”. This regime greatly restricted the production and sale of dairy, creating a cartel. The goal was to increase dairy prices in Canada – because who doesn’t like high prices? However, in the 48 years since the cartel was established, something strange has occurred: we’ve had high prices.
How expensive is cheese in Canada, you ask? Well let’s consider pizza, everybody’s favourite cheese delivery mechanism. There’s a big nationwide chain here called Boston Pizza that sells, among other things, pizza. A large pepperoni pizza at Boston Pizza is $30.28.
At Pizza Hut in the US, they currently have a deal on where you get a large pepperoni pizza for $7.99. That is less than $30.28 – even after health insurance premiums.
Now, would I recommend paying $8 for a Pizza Hut pizza? No. Would I recommend paying $30 for a Boston Pizza Pizza? Also no. Should we be eating pizza in the first place? Well, yes, pizza is delicious. As is cheese – but it’s slightly less delicious in Canada, because it’s god damned expensive.
It’s so expensive, in fact, that pizza places estimate their daily food cost with a single number: Cheese Cost. My brother used to work at a pizza place here, and the manager only wanted to know two numbers at the end of the day: revenue, and Cheese Cost. Meat? A rounding error. Vegetables? Irrelevant. Show Me The Cheese.
With these cheese prices, you would expect a healthy import market. Except not, because dairy tariffs in Canada are 245.5%. That is to say, if you want to import a $4.99 block of sharp Tillamook Cheddar, it will cost you $17.27 after import taxes. Surprisingly, there ain’t a lot of sharp Tillamook Cheddar here.
Still, the cheese must flow. A few years back, some clever pizzeria owners noticed a loophole in Canadian customs laws. While there is an obscene tax on importing cheese, there was no such tariff on importing “food preparation items”. In 2011, the border lines swelled with restaurateurs filling their cars with Costco pizza kits. These kits contained highly sought-after mozzarella cheese, conveniently packaged with pepperoni and pizza crust. Once these bootleg kits got into Canada, the cheese went right onto freshly made pizzas, and the pepperoni and crust went right into the trash. Restaurant margins 1, a functional system of trade 0.
While that loophole has since been closed, our whackadoodle dairy controls continue to cause grief of an international scale. Canada’s largest trading partner, for example, was recently taken over by a feral animal of some sort, resulting in a dispute over free trade. While most of the “reasons” for the trade dispute amount to flaily nonsense, our dairy cartel is rightly a point of contention.
America, Europe, and the world all want to offer Canadians great cheese at reasonable prices. Yet 12,965 dairy farmers are holding our nation hostage. They have created a world where a milk production quota costs $35,000 per cow, and a restaurant can charge $30 for mediocre pizza and stay in business. They have used lobbying and cheesy cheese ads to lull us into submission, and as a result, have reduced the availability of cheese in this otherwise fine country.
This cartel causes there to be less cheese, and that is a crime.
Or at least, it should be.
Update, April 3
Folks have been writing in to inform me that comparing Boston Pizza’s regular prices with Pizza Hut’s sale prices is not an equivalent comparison – which is true, since Pizza Hut is garbage and Boston Pizza thinks it’s people. So as my apology to Canadian dairy farmers, here are some additional facts people have sent in:
- Milk in Canada costs 2x what milk across the border does, but due to labour costs the difference in bulk cheese is usually less dramatic.
- USD and CAD are different currencies which fluctuate over time, increasing or decreasing the on-paper price of goods and services.
- The Canadian dairy cartel generates substantially less profit than the Mexican drug cartel does.
- Pizza Hut also has sale pricing in Canada.
- Boston Pizza is attempting to expand to the United States under the brand Boston’s, where they also charge too much for pizza.
- Whiz is not one of the styles of cheese recognized by the Canadian Dairy Commission.
Update 2, April 13
I have received many additional messages informing me that sarcastically comparing the price of highly divergent pizza vendors does not constitute a scientific evaluation of the international cheese trade. Thank you for your heartfelt messages. Unfortunately I left my Cheese Economics diploma in the car, but if you’d like a more reputable source for the claim I actually make (that the Canadian cheese market is silly), I invite you to read this Globe editorial on the cartel, or this CBC article on a police officer who was arrested for smuggling cheese – for use in pizza.