Marco.org

I’m : a programmer, writer, podcaster, geek, and coffee enthusiast.

Against the wall

Google dominated search and online ads with a lot of great engineering and hard work, then they leveraged their search dominance and more great work to build a strong presence in webmail, maps, and many smaller categories.

Geeks like us commended them for how well they operated their business, seemingly (mostly) living up to their geeky, feel-good “Don’t be evil” motto1, “winning” by releasing (mostly) quality products that catered to our geeky preferences while gaining huge marketshare.

But social networking never worked well for them. The battles between social giants bought Google some time, but now, Facebook has established themselves into as strong of a position in social networking as Google holds in search and advertising. As Facebook extends its social dominance into more areas that may threaten Google’s profits and relevance, Google knows it has to fight back and is finally making a strong attempt. But, unlike when Microsoft realized it was late to the web over a decade ago, Google’s big attempt to invade social networking with their own Google+ product hasn’t worked.

It’s the first time that Google has largely failed against a threat of this magnitude.

It’s easy not to “be evil” when you’re ahead. But when you’re backed into a corner and your usual strategies aren’t working, it’s easy to get frustrated, scared, and angry, and throw previously held morals and standards out the window.

People with very strong values can maintain their standards and dignity even under immense pressure. But that’s no easy feat. And every time we get a peek into Google’s leadership, from intentional patent infringement and anticompetitive aggression to selling out net neutrality and now tarnishing search relevance, it’s increasingly clear that Google’s upper management is willing to do a lot of “evil”, even by Google’s own previous standards, to get their way when they’re not winning.


  1. In the first version of Bullshit, I had misquoted the “Don’t be evil” motto as “Do no evil”, and a reader complained by email that I was being too strict. The difference between the two is subtle but important.

    “Do no evil” is a much stronger statement: don’t do anything “evil”, whatever that means.

    “Don’t be evil” allows a lot of wiggle room and equivocation. What does it mean to be evil? Can you still do evil here and there without being evil overall? Doing evil seems more concrete and easily verifiable by others, but being evil sounds like the kind of label you’d be able to escape if you only do evil occasionally, or if you think what you’re doing is justifiable. ↩︎

Fixing “Previous Track”

I often accidentally hit the wrong button in the iPhone music-playback control bar, because they’re too close together since the introduction of AirPlay:

When playing music, the behavior of these makes sense (for the most part), since it mimics the behavior of CD players:

When you’re listening to a podcast or audiobook — anything “bookmarkable” that remembers its playback position, rather than starting from the beginning each time it’s played — the behavior of the “Previous Track” button has a significant side effect:

If your finger slightly misses the “Play/Pause” button, probably the most commonly pressed button in this group when listening to podcasts or audiobooks, it is very likely that you’ll hit one of the buttons next to it.

Accidentally hitting the “Next Track” button is a minor annoyance, but its behavior is reasonable.

But the “Previous Track” button loses and resets my playback position, which is extremely frustrating and disruptive to listening. And there’s no “Undo”.

It’s a form of data loss: not in the traditional sense of needing to recreate a document, but because it requires me to take additional time to manually restore the correct state after the disruptive, non-undoable result of a very simple accidental action.

I know this is a tricky design problem, but my proposed solution is simple:1

Stop making the “Previous Track” button behave like it does on CD players, where tapping it first brings you to the beginning of the current track, and tapping it again within a short time goes to the previous track. Even on CD players, that was often annoying.

Instead, make it behave just like the “Next Track” button in reverse: always just seek to the previous track. If the previous track is bookmarkable, resume from its last-played position, and if not, play it from the beginning.

People who actually want to reset the playback position of a bookmarkable file before it’s finished, which is probably a very uncommon action, can simply drag the progress scrubber all the way to the left.


  1. This is admittedly dodging the exacerbating factor that the buttons are too close together. But the position-losing behavior of “Previous Track” even annoys me when I’m using the iPhone remote-clicker or my car’s controls to change tracks. It’s primarily a problem with the universal behavior of “Previous Track”. ↩︎

iOS Address Book access should prompt the user for permission

The popular Path app was caught uploading and permanently storing people’s entire address books on Path’s servers. People were upset, but what’s scarier is the bigger issue: apparently, this is a very common practice among popular apps.

It’s easy to set Path on fire for this, but accessing the iOS Address Book is essential to most “Find my friends on this service” features. Indeed, I use the Address Book for a similar feature in Instapaper as well. But there’s a big implementation difference between my method and Path’s.


The two Instapaper features that access the Address Book

Instapaper accesses the Address Book for two features:

  1. The “Add ‘Read Later’ by Email” option in Settings, which creates a new Address Book contact with the customer’s special email-in address. This feature operates only on the device and does not send any information to the Instapaper servers. And the only reason it even reads the Address Book at all, rather than just writing to it, is to check for an existing copy of the “Read Later” contact so it doesn’t make a duplicate.
  2. When searching for new friends in the Friends section, I offer a “Search Contacts” option. This sends (over SSL) a list of email addresses to an Instapaper server, which issues a single SELECT statement on the user database to find any matches. That’s it. The list of email addresses isn’t stored (the query isn’t even logged), and only email addresses are sent, not anybody’s name, phone number, address, or other information.

When implementing these features, I felt like iOS had given me far too much access to Address Book without forcing a user prompt. It felt a bit dirty. Even though I was only accessing the data when a customer explicitly asked me to, I wanted to look at only what I needed to and get out of there as quickly as possible. I never even considered storing the data server-side or looking at more than I needed to.

This, apparently, is not a common implementation courtesy.

We can’t prevent services with poor judgment or low ethical standards from doing creepy things with the data once it’s sent to them. We can’t even realistically use App Review to only permit access to the Address Book fields (email, name, phone, etc.) that are justifiable for any given app to access, because there are too many gray areas.

But Apple can, and should, assure users that no app can read their contact data without their knowledge and explicit permission. I don’t know why this hasn’t always been required, but it probably isn’t a good enough reason to justify the erosion of user trust in iOS apps that this could cause.

Apple needs to change the Address Book API to require user permission first, like Core Location and Push Notifications do. I don’t care how many applications break as a result. Not requiring user permission to date should be treated as a security hole and patched promptly.

iOS permission dialogs

Apple announced that a future version of iOS will require user permission for Contacts access.1 I had previously suggested a dialog box similar to the permission dialog for location access, but a lot of people resisted that idea, saying that there are too many iOS permission dialogs already:

If an app wants access to all of these, it usually barrages users with a stack of dialogs on its first launch. The barrage-of-dialogs approach, like Windows Vista’s security warnings, isn’t great: users get overwhelmed or annoyed and just start carelessly dismissing all of them without reading them.

The Android approach is different: apps display a list of the permissions they need on their Market pages, and then don’t prompt upon access. The idea is to allow people to decide whether they’re OK with an app’s access before installing it. This also has downsides:

That last one would definitely hit me. If all permissions were listed in the App Store, Instapaper’s customers would be wondering why it “needs” location (optional automatic dark mode based on sunset times) or contacts access (optional email-in contact addition, optional find-friends feature). They might refuse to buy the app because they think it needs these features to work, when in reality they’re minor features that most customers will never use. Already, “Top In-App Purchases” has probably cost me some potential customers since they think the app is constantly going to be asking for more money (optional subscription, which I had to offer via IAP to get server-side search in the app).2

Neither iOS’ barrage of dialogs nor Android’s huge list of permissions in the Marketplace is a great solution.

Dialogs can be done well in many cases, avoiding the barrage. They’re only shown when the app requests access to the protected resources, and only the first time. Conscientious developers can usually avoid showing multiple dialogs in a row by only showing them when the data is needed — for instance, I don’t ask for location access unless (and until) a customer selects the automatic-dark-mode setting.3

Careful users can also make better decisions about whether to allow access when they’re prompted on demand. If I asked most careful people if Instapaper could have their location, they’d refuse, because there’s no obvious good reason. But if the app asks right when they enable a location-based setting from a screen that shows why it’s asking for their location, they can make a more educated decision. Similarly, if an app doesn’t seem to have a good reason when it asks for Contacts, a skeptical person can decline.

I like Rene Ritchie’s mockup of an app permissions sheet, which would consolidate these permissions into one panel in Settings for each app. (I believe Android already does this.) But since most people won’t know about it, I don’t think such a sheet can replace the dialogs — it can simply make the after-the-fact settings nicer.

Ultimately, I think Apple’s current implementation of dialogs on first access, then settings to revoke later, is the better, more understandable, less annoying solution with fewer negative side effects for users and developers. They just need to add another dialog and setting for Contacts access, and that’s probably exactly what they’ll do in iOS 6.


  1. Some other local data, such as Calendar entries and your synced media library, is also available to apps today without asking the user for permission. I’d be fine if those required a dialog, too. But I’d argue that Contacts are more important to be kept secure, and as we’ve seen, more likely to be abused by unscrupulous or careless developers. ↩︎

  2. At least Apple stopped requiring all apps that could access web pages to be rated 17+ for mature themes, profanity, nudity, sex, and drug use. I got a lot of emails from concerned customers about that. ↩︎

  3. I also stop requesting location data once the device has given me the fastest, largest, least granular location (with an accuracy of within approximately 3 kilometers) because, since this is only used to calculate sunset times, I don’t need it to be any more accurate. ↩︎

Right versus pragmatic

At a previous job, the shared men’s bathroom for the floor was laid out like this:

(Please excuse my drawing skills.)

When we were done doing our business, this is the path we’d take:

Many people don’t like touching bathroom doorknobs after washing their hands. (Understandable.) But some of them dislike it so much that they’ll take their paper towel over to the door, turn the knob with it, and throw it on the floor while exiting.

By the end of the day, there would be paper towels all over the floor by the door.

One of the floor’s tenants attempted to solve this problem by posting passive-aggressive notes on the paper-towel dispenser.

The signs never worked. Instead, they just annoyed and angered people. Some people even threw more paper towels on the floor because they didn’t like the condescending way they were being instructed.

There was no chance the signs would ever work. The people who threw paper towels on the floor knew that it was “wrong”. Maybe their desire to avoid touching the doorknob was stronger than their desire to do the “right” thing every time. Or maybe they just didn’t give a damn about making the bathroom slightly worse for someone else to make it slightly better for themselves. Either way, a sign’s not going to solve the problem, because the problem isn’t that they didn’t know the right thing to do. They knew what they were doing, and for whatever reason, they didn’t care.

This problem wasn’t solved by the time I left that office. It probably still isn’t.

The pragmatic way to solve the problem would have been to adapt to what these people were going to do anyway: just put another trash can by the door.

They never tried that. They just kept posting more signs, because they were convinced that they were right.

This pattern is common. We often try to fight problems by yelling at them instead of accepting the reality of what people do, from controversial national legislation to passive-aggressive office signs. Such efforts usually fail, often with a lot of collateral damage, much like Prohibition and the ongoing “war” on “drugs”.

And, more recently (and with much less human damage), media piracy.

Big media publishers think they’re right to keep fighting piracy at any cost because they think it’s costing them a lot of potential sales.

It is, but not as many as they think, and not for the reasons they think.

The Oatmeal’s awesome comic illustrates the problem well: demand is rapidly increasing for accessing movies and TV shows outside of their traditional distribution channels, and rather than addressing this demand, the publishers are making it even harder to get their content legally in these contexts.

This is like trying to solve the paper-towel problem by moving the trash can even further away from the door.

Not all piracy represents lost sales: many pirates would never have paid, and would rather go without whatever they can’t easily pirate. That’s not a market worth worrying too much about, because there’s not much anyone can do to stop it, and any attempts to slow it down usually just limit, inconvenience, frustrate, and anger the paying customers.

But there are a lot of people who will pay to get content legally, even if it’s easy to pirate, when getting it legally is easier. (This is now the case, to a large extent, with music.)

In response to The Oatmeal’s comic, Andy Ihnatko makes a good counterargument:

The single least-attractive attribute of many of the people who download content illegally is their smug sense of entitlement. …

The world does not OWE you Season 1 of “Game Of Thrones” in the form you want it at the moment you want it at the price you want to pay for it. If it’s not available under 100% your terms, you have the free-and-clear option of not having it.

Andy’s right. But it’s not going to solve the problem.

Relying solely on yelling about what’s right isn’t a pragmatic approach for the media industry to take. And it’s not working. It’s unrealistic and naïve to expect everyone to do the “right” thing when the alternative is so much easier, faster, cheaper, and better for so many of them.

The pragmatic approach is to address the demand.

“Make sure we’re winning”

Andy Rubin’s statements at Mobile World Congress 2012 about Android tablets are either masterful business doublespeak or slightly delusional:

2012 is going to be the year that we double down and make sure we’re winning in that space. …

…we’re going to do a better job at making people understand what ecosystem they’re buying into. …

There has to be an education process and developers have to do the work [of making their Android apps work well on tablets]. They’re already doing that work for other platforms. …

I’m hoping [Android developers] decide to put in the muscle and make their apps work great on tablets.

Most Android tablets have sold very poorly. The Kindle Fire and Nook Color are the only noticeable successes, but they bury (ancient) versions of Android under such custom, Google-less environments that people don’t even realize it’s running under the hood. And even these successes are being dramatically outsold by the iPad.

Excuse me, “other platforms.”

When Rubin says something like “2012 is going to be the year that we double down and make sure we’re winning in that space”, it sounds a bit off. What does it mean, exactly?

“Double down” sounds like Google hasn’t put as much effort as it could behind this. I don’t think this is the case: while they haven’t done very well so far, Google’s tablet efforts in 2011 didn’t seem half-assed.

The more curious phrase, to me, is “make sure we’re winning”. That sounds like they are winning, or they’re almost winning, their victory is almost a sure thing, and Rubin just needs to tweak a few small things to widen the gap between his winning platform and the also-rans. Obviously, such a perception isn’t supported by reality.

His other remarks about “education” and “hoping” sound like he believes that “other platforms” are winning because consumers just need to be “educated” about software ecosystems (good luck).1 He’s also “hoping” that “frugal” Android developers will ignore “market share” and start pouring effort into tablet-porting work that may not pay off.2

Generally, it sounds like Google is planning to will developers into creating robust tablet apps and tell consumers to buy their tablets, and they assume this is going to work well, despite similar efforts mostly failing in 2011. It’s magical thinking.

But I’ll give them the benefit of the doubt: maybe this was just PR-speak, or maybe this is just Rubin’s personality, and it doesn’t reflect the entire Android division’s actual efforts and beliefs.

Assuming that Google is firmly planted in reality,3 what are they actually going to do to meaningfully improve Android’s disappointing tablet sales and lack of much good tablet software?

More importantly, what can Google do?

With the realities of the tablet market (excuse me, “other platforms”), and with the existing Android hardware ecosystem and the software policies that let it get there, I don’t think I have a realistic, practical answer to suggest. I honestly have no idea what Google could meaningfully do about their tablet problems.

But I hope they internally believe that the problems are real, and they run more deeply than any amount of consumer or developer “education” can fix. They can’t just be willed away.


  1. Blaming your failures on a lack of “education” is also a red flag: it suggests that you believe your product is absolutely better, and people are only buying a competitor’s because they’re irrational or ignorant. This prevents you from objectively seeing and potentially fixing the flaws in your own product. ↩︎

  2. “Frugal” and “put in the muscle”: is Rubin implying that Android developers are cheap and lazy today because they aren’t developing apps for tablets that aren’t selling well? ↩︎

  3. Honestly, this is becoming a less-sound assumption every day. ↩︎