Is Apple Evil?

May 22nd, 2009

Jens Alfke goes deep on the question of whether Apple’s recent and recurring stupidities with regard to iPhone App Store rejections amount to evil or not.

It’s in Apple’s genetic code to be about as transparent as a lead brick […] but in the context of the App Store, Apple’s inscrutability and arbitrariness has become actively malign.

The latest flub concerns an iPhone book reader called Eucalyptus, which was allegedly rejected from the App Store because users could potentially use it to access books with questionable content. You know, similarly to the way you can use a web browser to access web pages with questionable content. Smooth move, Apple. Everybody is pissed about the incident. While rejections of fart apps or soft porn in the past found their share of supporters, most people seem to agree that these actions, nostalgic of book burning and censorship, are indefensible.

As an Apple cheerleader, it’s tempting to take the stance that Apple’s botched handling of App Store approvals is mere incompetence. There are tens of thousands of apps, and it stands to reason that a few erroneous decisions will be made in the course of evaluating those submissions. In spite of a variety of truly frustrating policies, the App Store is steaming ahead at a breakneck speed. This is just a squeaky wheel attached to an otherwise well-oiled machine.

But with each ridiculous, pathetic incident, it becomes harder to exculpate the company for actions that cause injury not only to the specific developers whose works are wrongly rejected, but to the developer community as a whole, whose support of the platform will ultimately make or break the iPhone platform and Apple’s reputation along with it.

Apple is cocky and Apple is arrogant. They always have been, for better and for worse. Alongside the stubbornly perfected refinement of its products, marketing, and public image, the company has always worn blemishes such as these. Obliviously, and with an oafish lack of concern. Apple is the beautiful Hollywood actress at the party, who laughs giddily into the night as a long piece of toilet paper trails her elegant gown. She ignores the polite whispers, and then the pointed throat clearing. Finally, as the whole room shakes its head and laughs, she condescends: “everybody here has a terrible sense of humor.”

I don’t believe Apple is evil, but they are powerful. And the careless handling of such power produces results that are hard to distinguish from evil. I expect things will get worse, and then things will get better. It’s happened over the years in other areas where Apple has stumbled. They will become less oblivious and more receptive to criticism about the App Store approval process. At some point it might even feel fair, transparent, and equitable.

But eventually they will move on to something else, applying their cockiness to a new and exciting arena. As much as I don’t look forward to suffering the specific damages of that future bloom of faux pas, I’m excited as hell to find out what it is.

Panic’s Lucky 13

May 5th, 2009

Panic’s co-founder Cabel Sasser just wrote a general round-up of changes at the venerable Mac software company.

Lots to be jealous of. Ahem, inspired by. Cabel counts the 13 people — including new hires Neven Mrgan and Ned Holbrook — who make up the ranks of their development, design, and support staff. Everybody I’ve met from Panic has been a genuinely kind person whose desire to build great things is evident. Now they’re all doing that from an incredible new office in their home town of Portland, OR. Cabel seizes on the good news that, with a growing staff, they’re able to tackle projects more concurrently, and to be more responsive to their customer base.

Red Sweater is one of those “one-or-two person companies” that Cabel shows no yearning nostalgia for having once been. There are certainly advantages to going it alone. I call all the shots. No meetings. 100% profit sharing. Vacation days on a whim and without concern for obligations to coworkers. Never a petty squabble or philosophical disagreement.

But never an agreement, either. I don’t want to be alone forever. I imagine Red Sweater evolving into something resembling a Panic, Rogue Amoeba, Bare Bones, or Omni Group. The advantages of scale and camaraderie that come with modest growth seem to outrank the limited, mainly ego-protecting advantages of solitude.

As I look forward to growth, I take inspiration from these great models. A long-term, sustainable Mac software business doesn’t have to be built from behind a faceless corporate wall. Each of these examples started as a small group of people with their minds set on delivering a great application. Then they did it, and eventually they profited. That’s a starting line most of us can relate to, and endeavor to imitate.

But other operational priorities are harder to agree on. When you start to look at the ways in which these companies and others like them grow, you discover that every one of them has vastly different priorities about what part of the company to invest in and when.

It struck me while reading Cabel’s post, for instance, that Panic apparently has no marketing staff. And yet they’re one of the best known brands in indie Mac software. Paradox? Is there something about Panic’s product and staff that does its own marketing? Or would they be an even bigger success had they hired a marketing person from the start? Smile On My Mac, by contrast, consists of just three people, one of whom is completely dedicated to marketing. Is this a waste of revenue or a brilliant component of their plan for world text expansion domination?

Office space is another area of dramatic diversity. Panic and Omni each embrace the value of a centralized, beautiful office space where their employees can work and play, side by side. At the absolute other end of the spectrum, Rogue Amoeba enjoys the benefits of a virtual, internet-based office. In particular, no office rent, and they can hire people from anywhere in the world without relocation concerns.

While the choices a growing business faces are numerous, I feel lucky to have so many stellar examples to compare and contrast. And while I may hesitate at choosing which direction to turn when I come to a fork in the road, I’ll take some comfort in knowing that many of those forks each lead to an equally exciting outcome.

Tweet Quality

April 4th, 2009

As Twitter becomes more and more popular, the quality of tweets (Twitter updates) seems to be taking a dive. I attribute this to a couple side effects of the relentless population rise:

  1. An increase in conversational, challenging, and defensive tweets.
  2. The use of tweets to mass-distribute unoriginal ideas and propaganda.

Conversational Tweets

I wasn’t among the earliest adopters of Twitter, but I’ve been a member long enough to remember the days when you were more or less likely to know everybody you followed, and vice-versa. In this environment, Twitter’s concept of a “reply tweet” was ideal, facilitating a mix of public statements and conversation among friends.

As the Twitter ranks grew, it became more common to stumble upon people we don’t know, but whose work we admire, or whose thoughts are original and worth reading. I follow a number of people whose reputation is well known to me, and they have no idea who I am. This is fine, because I am getting something of value from their tweets, while my quiet observation is generally of no bother to them.

But Twitter’s egalitarian implementation of reply tweets allows responses to tweets even from somebody you don’t follow. This has many positive effects, because a genuinely helpful or insightful person can respond intelligently to a tweet, and have a fair amount of confidence that the original author will receive their feedback. In short, Twitter replies enable the masses come to your aid, sing your praises, or perhaps less conveniently, to call you on your bullshit.

Calling bullshit can be a useful service, but on the internet it tends to become a pathological blood sport. Some members of internet society become so invigorated by the opportunity to prove somebody wrong, that they’ll stop at nothing to quench their thirst for victory. They stretch facts, bend logic, and insinuate false intentions for the chance at glory. The chance to prove you wrong on Twitter.

So here we have a system on which millions of users stake their personal reputation, and where some significant percentage of users makes a pathological game of trying to assassinate those reputations. The more followers you have, the greater the number of idea assassins you have at your quite unfortunate beck and call. When even the most innocuous of statements invites pointless scrutiny, the original author is bound to get defensive. This leads to an unfortunate and noisy interchange that looks something like this:

  • MacLover: Man, these new MacBooks looks awesome, but I don’t think I can buy one unless they put Firewire ports back on them.
  • Apple4Ever: @MacLover If you hate Macs, you should just buy a PC. There’s no point in complaining about it. Just buy a PC if that’s what you want.
  • MacLover: @Apple4Ever What are you talking about? My freaking name is MacLover. Of course I love Macs. I was just making an observation about the new
  • MacLover: @Apple4Ever MacBooks, they’re sooo close to being perfect. I wish they would make a MacBook that is as fine-tuned as the old PowerBook 12″.
  • Apple4Ever: So buy a PowerBook 12″.
  • * MacLover Head Asplode *

This conversation is agonizing enough for the people involved, but the poor followers of MacLover and Apple4Ever had to follow along, utterly disinterested (unless they turned on “Only show me @replies to people I follow,” which can be a good idea). In this scenario, Apple4Ever is assassinating MacLover’s ideas, scraping the bottom of the barrel for any controversy that could possibly lure MacLover into a personal dialogue.

People in MacLover’s position would do well to ignore such bait, but it’s not always clear cut. The 140 character limit in Twitter makes it difficult to completely express a thought without ambiguity. Conversational moods such as sarcasm and irony are hard to convey, and the audience is filled with people who are chronically deaf to such tones.

So Twitter is filled with people who care that their thoughts be expressed with accuracy and meaning. And it’s also filled with people who, because of boredom or lack of attention, are hell-bent on causing rifts that invite confrontational interchange. This is a recipe for lots of misunderstandings and escalating hostility. It sucks, man.

To improve the quality of conversational tweets, I propose a little more consideration on both sides of such conversations:

  1. To the would-be idea assassin: take a step back and examine the tweet you’re responding to. Does it actually say what you’re alleging it says? Are you making a leap of logic to start an argument, just because you’re in the mood for a debate?
  2. To the would-be defensive tweeter: breathe. The person egging you on is one drop in a puddle next to a lake abutting an ocean. Their provocative tweet is only visible to you and some subset of their followers. Chances are, most people will never see it.

I’d like to think I’m never the idea assassin myself, but I am sure we all have the tendency sometimes. As for the defensive tweeting, I’m positive that I do it to a fault. So I’ll be trying especially hard to take my own advice #2 above.

Tweet Propaganda

Twitter connects a hell of a lot of people. The idea that a simple viral tweet message could prompt others to act in a manner that itself perpetuated further tweets, is irresistible to commercial marketers and internet stuntmen. The simplest form of viral propaganda on Twitter is the simple word-of-mouth repetition of ideas in an author’s own voice. I wrote about Word Of Tweet Marketing just over a year ago, after being impressed by the growing impact Twitter was having on my own company’s sales and reputation.

As people recognize the power of word-of-mouth dissipation, it becomes tempting to spread every good idea that comes along. Every funny joke. Every classic YouTube video. Every friend worth following. Since people are lazy, and rephrasing an idea in one’s own voice takes time, the phenomenon of the “retweet” emerged. People annotate a tweet with “RT @whoever”, implying that the contents are being more or less repeated verbatim. Great for the spread of ideas, terrible for the individual personality of a Twitter account.

But even a retweet involves some personal involvement by the account owner. More and more, we’re seeing examples of tweet propaganda where the contents of the tweet are entirely machine made. A classic example occurred a few weeks ago, when a steady flow of “Don’t click this URL” messages began pouring into peoples’ tweets.

The gist of this prank was that clicking the URL took you to a page where, if you clicked another URL after being warned not to, it would submit a tweet to Twitter under your logged in account name. A classic example of the power of reverse psychology.

There was no financial gain for the perpetrators of this idea virus. Just the satisfaction of Twitter being virtually painted, for a few hours, with identical tweets from thousands of different accounts. People who fell for the trick were embarrassed and apologetic, recognizing that the tweet was not only of no value to their followers, but also posed the risk of snaring them into the same gag.

In other cases, the propaganda is voluntarily added to a person’s twitter stream. Some vanity services, for example, will do an analysis of your twitter account and tweet the results with your permission. Often, the permission is thinly veiled or questionable, and users end up apologizing that they “didn’t realize it was going to tweet that.”

Tweet propaganda is still young, and people are still grappling with where to draw the line. By engaging in a viral process of any kind on Twitter, you’re trading your originality to be part of a larger scheme. Depending on the terms of the scheme, it could be beneficial to you and your followers, or it could be annoying and embarrassing.

Just a few days ago, a controversial form of tweet propaganda came by way of the MacHeist promotion. Their so-called TweetBlast rewards buyers of their bargain software bundle with extra software if they agree to let their Twitter account be used to promote the bundle. If you follow more than a few Mac users, you’ve no doubt seen the tweets by now:

One of the nice things people like to do is share information about great deals. This makes viral marketing a natural avenue for sales and bargain discounts. But there’s a distinction between a person, writing in their own voice to endorse a sale, and a mechanized robot puking thousands of tweets into the system on behalf of users looking for a freebie.

Michael Lopp recently wrote about The Art Of The Tweet, and touched upon something that I think is important and appropriate for this discussion. In a section titled “Add a Bit of Yourself”, he discourages the excessive use of re-tweeting, and opens with a bold rationale for this discipline: Twitter is you.

More Of You, Less Of Them

Ultimately, the quality of tweets is closely related to how much of you there is in them. When you forfeit your individuality to a commercial promotion, or to the vain attempt to either defend your own honor or assassinate somebody else’s, you compromise your own tweet quality.

Whenever anybody complains about some aspect of Twitter, a fair number of people like to respond reflexively: “If you don’t like something, don’t follow them.” This advice is fine, but apply it to the other fine things in life, and you quickly find that it leads to stasis, a situation where the state of the art does not advance for lack of iteration and refinement. If nobody reviews and offers opinions on books, movies, fine arts, poetry, etc., then they are all liable to degrade in quality over time.

My intentions in being critical of Twitter and the state of declining tweet quality is not to bask in my own whining or seek consolation or apology. I honestly think that by rethinking the situation, we’ll decide what kinds of tweets are of best service to us all.

Certainly, different subsets of Twitter will have differing standards. There is room enough in Twitter for all attitudes and priorites, but I’ll be filling my follow list with the people who put the “you” into Twitter.

Fast Unit Testing Iterations

March 31st, 2009

It’s not as though unit testing is completely new to me, but even years after I wrote my first tests, I still consider myself a naive amateur in many regards. I’ve been ramping up my use of tests lately thanks in large part to a technique I read about in Michael Feathers’s book Working Effectively With Legacy Code.

Essentially, the idea is that before you do any major refactoring in your existing code base, you should attempt to locate a “bottleneck” to how that code is reached, and test the interface at that bottleneck. So, if all the code paths to Class A and Class B are through Class C, I can effectively just cover Class C with unit tests and be relatively certain that the functionality of Classes A and B are covered to the extent that I care about them.

Refactoring then becomes a lot less stressful, because you’re more likely to catch stupid mistakes and changes in functionality you might cause in the process. I realize that no set of tests is a guarantee against introducing new bugs, but in the process of covering classes with test coverage, you also end up learning quite a bit about what the classes actually do. This is no small victory when working with code that you either didn’t write, or that you haven’t reviewed in a number of years.

As I’ve become more and more dedicated to testing in my Mac and iPhone projects, the size of my test suites has grown. I’m subscribing to guidelines for good test writing: that they should be fast and as isolated as possible. But they still take a non-trivial amount of time to run. It’s gotten to the point where the tests for my “web publishing frameworks” take at least a minute to run on my MacBook. This is pretty fast in the big scheme of things, but a long time to wait when I’m engaged in a rapid edit, build, and test iteration.

I figured there must be some way to limit the test cases that get run to just the specific one I’m working on at the moment. And it turns out there is. Thanks to the “Other Test Flags” build setting in Xcode, I can temporarily change the behavior so that it runs only a subset of all the tests contained in my test bundle. For example, right now I’m working on tests that cover the functionality of my RSRESTCall class:

The -SenTest option is passed on to the test rig, in my case the default “otest” command that comes with Xcode. This lets the test rig know that instead of the default behavior of finding and running every test in the bundle, it should just run the tests in the “RSRestCallTests” SenTestCase subclass.

Something I didn’t mention yet but which is also aiding me greatly in the measuring my test coverage is the “gcov” library that also comes bundled with Apple’s developer tools. I’m using this to create a “Code Coverage” build of my code, that makes it possible to see exactly which lines of code did or did not get run during a particular set of tests. This, in conjunction with a cool application from Google’s Mac developers, makes it pretty easy for me to seek out uncovered areas of code, think about how to cover them with tests, and iterate.