
May 29
When I was a kid, my first exposure to a lot of software was from the floppies and CDs that were sent with magazines. I loved the idea that there were people out there whose job it was to make this stuff outside of major companies. And ever since I used the Mac LC II my family got when I was four years old, I aspired to be one. Some kids want to be football players or singers, but I was kind of screwed up, for better or worse.
The Mac indie development situation was weird, because for about 10 years, it was dying. After the Great Mac OS Pleistocene of the late 90's, only the strong and truly devoted stayed on. As a result, there's a strong culture and community and some very strong and oft-cited role models to follow if you want to make it as an indie developer. The Panics, Flying Meats, Red Sweaters, and Delicious Monsters of the world. Windows has "MicroISVs", but the Mac has indies, and it means something. And there's lots of support available to those trying to make the jump. It's a pretty happy family.
Many indie Mac software companies were built not on careful, deliberate business sense but on strong examples of people who built great software and forged healthy relationships with the community and their customers. I know that's how I approached it. It took me a few years to be able to support myself off of my software, but it worked. I knew I had no idea what I was doing on a fundamental level, but I couldn't argue with the results. But this started making me worry as the industry began a shift.
I used to hang out a lot with some guys in Boston who met up at MIT to talk about Cocoa stuff (the main API on the Mac and later the iPhone).
After the iPhone SDK announcement, new people started showing up to our meetings. And I started seeing some of the same people at startup events and Cocoa events. It was weird. I'd worked at PHP and ASP.NET shops before and marketed myself as a web developer, just because people had looked at me funny when I said I learned Objective-C to make Mac apps. And now everybody wanted to know it!
As the iPhone software market emerged, there were a few reactions from Mac developers. Some of them ignored it and kept working on their Mac software. Plenty of others jumped at the opportunity, with varying degrees of success.
Like many making the leap, I assumed it wouldn't be so different from selling shareware.
In some ways, that wasn't so myopic a perspective.
There are plenty of technical people I've met who have never run a software business who are, for the first time, contemplating starting one because of the iPhone. To them, the App Store is particularly attractive because it does away with a lot of the drudgerous tasks involved in starting an ISV: figuring out a license scheme, hosting downloads, processing payments, dealing with customer support issues related to ordering. And so, they reason, it's just a matter of writing the code, uploading to the store, and cashing in!
This is, of course, silly. The App Store does streamline many things, but not the fundamental tasks of building a successful business: finding a need, fulfilling it, and reaching customers who want to buy the product. It is not a silver bullet.
So, by that count, some established developers who had more holistic experience were at an advantage. They knew the real work required to grow a product business and were ready to apply it to a new market. They had realistic expectations and were willing to make a measured investment in the new platform. They budgeted their resources to secure a return on that investment without wagering it on the app being an overnight hit because of some unexplained magic App Store juju, as so many mistaken startups do.
For indie Mac developers like me, it can be a pretty big deal to get in Macworld magazine or have Daring Fireball mention the app or win an Apple Design Award.
But compared to most people, the customers who would actually be reached by any of these things are, well, a little geeky. I mean, even the people who would be reached by the second-order effects of such exposure are still up there on the geek scale.
By analogy, I like coffee and probably spend more than average on it, but I don't subscribe to any magazines solely about coffee.
Similarly, there are plenty of people with money to spend on Mac software who just aren't into it enough to seek out and read publications and sites about Mac software. And even the people who would be reached by the second-order effects of getting in a geeky publication are pretty darn geeky too.
So it's a niche within a niche within a niche. That doesn't mean it's not worth competing in, of course -- very few indie developers have even remotely saturated the market available to them -- and not for lack of trying.
But when you really think about it, many indie Mac developers are stuck in a 1980's mentality towards customers. A good chunk of the people they sell to, outside of people in the tech industry, are more-or-less hobbyists. We're practically one step removed from sending out floppies in the mail.
It's pretty crazy, and it's easy to overlook when you're making a reasonable living off it. Companies like MacHeist have been able to clean up because of how unoptimized distribution is for Mac software and how little effort many developers put into marketing.
There's nothing wrong with that, but it's far different from the ecosystem that's unfolded on the iPhone, and that which will exist on every platform soon.
Today, every platform, mobile or otherwise, seems to come with some sort of lame App Store. Apple's competitors have tried to dissect and emulate the idea, but usually without understanding the reason for its success.
The greatest hallmark of that success is not to be found on any balance sheet, but rather on a typical subway ride, where you'll see at least a few people whip out their phones and use third party apps that they downloaded.
I'll repeat that: Regular people. Using third-party apps. Not shrinkwrapped software packages from major publishers. Just apps from indie developers. That they downloaded. And paid for. And sometimes even keep up with.
If this doesn't shock you every time you see it, you haven't been paying attention. Average people are, with absolute confidence, doing something that only dorks like me did five years ago.
So how did this happen? When people analyze it, they tend to conflate a lot of things together and come through with no good answer.
It's not just because the App Store comes right on the device. Lots of phones had that before. It's not because of the cool apps themselves. It's not because of those slick "there's an app for that" TV spots.
It's because, somehow, the iPhone is the first computer in a long time that doesn't make people afraid.
It affords regular people the same sense of control and deep-seated psychological satisfaction that, on past platforms (even the Mac), required years of learning and acclimation to acquire.
It's not about using nice icons or having good user interface guidelines — it goes much deeper. At its core, every aspect of the iPhone user experience is carefully crafted around the way we develop emotional relationships with inanimate objects.
It sounds silly and pretentious, but it's a real factor! Donald Norman has talked a lot about this. Humans are emotional beings, and good human-computer interfaces take this into account.
The iPhone just works. Pages scroll as you touch them, not 1/10th a second later. Apps quit the instant you press the home button, not when you force quit them after realizing they've been sucking down battery all day in the background. It even feels good in your hand. And though on-screen keyboards stink and always will, Apple invested significant design and engineering resources towards making theirs the best possible. As a result of all this, when you touch the phone, you're not touching the computer, you're touching the software.
This means regular folks are comfortable exploring the device to see what it can do, which often means buying lots of apps. And this isn't because of how easy it is to install apps, but how easy it is to remove them.
Somehow, the iPhone is discoverable, knowable, and manageable, in a way that desktop computers (or even other smartphones) never were. The end result is that when people are no longer afraid of their tools, they can finally really use them. They can experiment and test the limits. You know, without being the sort of dorks who read Macworld.
But the phone is just the beginning. There's a new kind of computing on the rise, and it only happened by accident on smartphones. In ten years, we may not be talking about phones, we may not be talking about Apple, and we may not even be talking about app stores. But, more than ever, we'll be talking about apps.
This isn't about technology or business; it's about cultural progress. After decades, the term has actually entered the popular lexicon. Finally, I can mention what I do at a party, and the other person will actually have an inkling of what that is.
Developers may lament the "hit based" nature of App Store apps, comparing it to a Top 40 chart (I'm pretty sure I've gotten reports from Apple that referred to my apps as "albums"). But it's apt. Just look in your iTunes sidebar. It's almost like apps are right there with music and movies as one of the primary types of media!
But this much is clear: regular people actually get the concept of apps, and they're willing to pay for them. For this reason alone, it's a great time to be a developer.
I made this crazy argument to a friend over beer and he countered "but don't people know what websites are?" It made me think.
Well, no, as a matter of fact, not really. The web is messy. Webpages link around to each other and, if you're not tech savvy, you can't quite keep track of which one you're on or if it's safe to put your bank password into it. Most people don't know if they should search for them or type them into the URL bar.
When I speak of the triumph of the app, I don't mean it as a synonym for "program." That definition has become archaic.
I'm talking about "the app" as the unit of software in popular perception. It is the monad. It is the atom. It is the cell. It is the brick.
Software is abstract. An app is concrete.
Apps obey basic laws. You can install or uninstall their functionality completely. Apps are indivisible. Apps do not come with other apps, they stand alone. Apps do not touch other apps' data without being allowed.
In short, the term "app" could best be defined, more broadly, as the finest, most granular level of control over the computing experience that most users can consistently and comfortably exercise.
This is why sites like Facebook have "apps", even though their apps are just webpages — and crummy, restricted, spam-filled webpages at that. It's only because the concept has started to resonate so well that companies (and governments) are shoehorning things that couldn't really be thought of as apps into things that could.
Some may see this optimism as misplaced, given that at first blush, this "progress" seems to bring along with it the unstoppable creep of proprietary software and iron-fisted control over platforms.
But it seems to always be the case that once a piece of proprietary software really matters in the world, one of three things happens:
There is more more incentive to create other proprietary systems as alternatives, creating competition and thus improving the software.
There is more pressure for open systems to exist, particularly on those with a economic interest in the closed system's demise (read: Android), thus freeing users from it.
Something comes along that makes the whole category matter a whole lot less.
I prefer good software over open software any day, and I'm of the opinion that social good is maximized by the ebb and flow of free and proprietary systems. And that every piece of software has a tipping point at which it is best made open.
But even if you disagree, the struggle that the free software movement is fighting isn't made harder because people don't understand software freedoms. It's because people don't understand software. Period.
Now that people grok apps, they will grok software. And why it's important stuff. People will start thinking more about how that software is made and what they're restricted from doing with it. It's only a matter of time.
I used to chuckle at the folks I met at user groups who told me how cool the latest revision to C# was or how Vista is going to be awesome. They seemed like tools. But lately, I'm starting to feel like a tool myself.
I'm still trying to figure how to be successful in general, but it's starting to seem like the companies that really know what they're doing don't form their identity around being a "Mac company" or a "Android shop." They take advantage of the business situation on a platform or several, but they define themselves through the interactions people have with their software and the function it has in society. Such companies' apps outlast the platforms they're built on.
If this post has any crux, it would be this: build apps for people, not for platforms.
If you enjoyed this post, you should follow me on Twitter!
March 16
Etude, my latest project, is now out!
It's an iPhone app for reading and learning sheet music.
February 17
The blogosphere has been abuzz lately about a post on the blog Read Write Web. The post itself is an uneventful one about the growth of Facebook Connect as a means of authentication on third-party sites.
The reason we're all talking about it is that last weekend, it momentarily showed up on Google results pages for the phrase "facebook login." And lots of people clicked on it, thinking it was Facebook's login page (when it was clearly an entirely different site). They wrote comments on this post demanding that Facebook change its login page back. You know, to the pretty blue one that said "Facebook" at the top instead of "Read Write Web."
One blogger summed up the situation astutely:
"It's like, Like if you asked a friend if there was a Starbucks in his neighborhood and he said, yeah I think there's one half a mile down, maybe. And you drive half a mile and see a big carwash place, and you park and walk in and ask to speak to the manager. And you tell the carwash manager how unhappy you are with this terrible new Starbucks redesign."
It reminded me of a similarly-fated post on a site called OK/Cancel. Somehow, it got page-ranked as the top result for the phrase "cancel google", so hundreds of irate, confused people used the blog comments for that post to lash out at Google for being set as their browser's homepage.
Or take the Yahoo! Local page for the Chicago Better Business Bureau (or that of almost any city's BBB). People come to the page and leave scathing reviews of the Bureau itself, thinking the listing page is the official site and that the review form is, in fact, a generic contact form to report your grievances about whatever business has just wronged you.
I've always found this kind of thing fascinating. Since I run a software business full-time, I have to deal with it constantly.
Like a few months ago when my company recently gave away a bunch of licenses to ShoveBox as part of a MacHeist promotion. Don't get me wrong, it was worth it, but the customer support load was pretty overwhelming, despite lots of preparations. You shoulda seen some of 'em. We got everything from questions about other random Mac apps, to people who thought the whole thing's a scam because they didn't read the part about actually entering in their serial number, to people threatening to call the FBI (and for some reason the FCC) on us. Craziness.
As a computer savvy person, it's easy to forget how different the average joe is from you. This disparity is the source of much frustration and inefficiency in the world. And it's only going to get worse, unless we do something about it.
If these seem like isolated edge cases to just shrug off, consider the vast financial loss attributed to phishing scams. Any phishing scam can be easily avoided by anyone who can read a URL and tell if the website they're on is, in fact, their bank's official site, but naturally most computer users can't.
The initial reaction of folks like me, of course, is to dismiss these people. After all, they don't know what a browser is. They don't seem to understand what site they're on or who it's run by. They're unfamiliar with basic design idioms used universally across the web (e.g. headings, subheadings, navigation, comment forms). Some seem to lack even basic reading comprehension, and no amount of redesigning or copyediting will enhance the understanding these people take away from a page. They can only be described as n00bs.
But there are legitimate excuses for this kind of behavior that can be found by examining some key differences between those who build software and those who use it:
Confidence
Many incredibly bright people simply lack confidence when using a computer. To them, computers are confusing, inconsistent, and baroque in their complexity. Their IQ drops 50 points when a simple question or statement is presented to them on a screen instead of by some other means.
Try to watch anyone over the age of 50 add money to their subway card and you'll see what I mean. BART kiosks are pretty bad, but you should see old Bostonites try to use the reasonably well-designed MBTA ticket kiosks. "Come on, this is wicked confusing. Where'd ya pahk the cah?" Then the poor station agent comes by and explains that it's just asking them "Would you like a receipt?"
Disabilities
It seems stupid for someone to blindly click the first search result on Google without reading it. But what if they actually are blind? That might be a perfectly reasonable thing to do for someone who uses a screenreader. Outside of government websites that are required to obey Section 508, very few sites are designed with disabled users in mind. If they were, Stevie Wonder might not have such a hard time on Twitter.
Nested Hierarchy
Any kind of recursive data structure is baffling for most human minds. It's just a weird concept. A common example of this is a filesystem, but because many computers hide the filesystem from the user (the only notable exception is the Mac), users never get much exposure to the idea. But even sites that have too many levels of sections and subsections baffle people in the same ways, even if the design presents this topography well. It's just not a natural way for many people to think about information.
URLs
URLs are mystifying for regular people. They're background noise.
Not only are they hierarchical (which is a stumbling block in itself, as mentioned above), but their syntax doesn't even intuitively reflect that hierarchy.
Postal addresses are pretty simple — they go in order of small to big. Each part describes an actual region of space which is contained within the region described by the next part. Most people could take an address and carry it to its logical extreme, like in that one line in Thorton Wilder's Our Town:
REBECCA: I never told you about that letter Jane Crofut got from her minister when she was sick. He wrote Jane a letter and on the envelope the address was like this: It said, Jane Crofut, the Crofut Farm, Grover's Corners; Sutton County; New Hampshire; United States of America; continent of North America; Western Hemisphere; the Earth; the Solar System; The Universe; the mind of God - that's what it said on the envelope. And the postman brought it just the same.
URLs are totally different, though.
The domain name portion of the URL goes from the bottom-most subdomain to the top-level-domain, but then the path portion is expected to go from the root level of the site down to the specific page they're on.
Many websites have pretty crazy gobbledegook-laden URL schemes, too, so it's no wonder people just skim over the location field in their browser or even use the search field exclusively.
The movement toward clean URLs and some changes to the way browsers display them (like Google Chrome has made) may alter this perception, but I doubt it.
Abstraction Distraction It takes a while to really understand any abstraction in our modern society: how currency works, why we try to separate church and state, how a bicameral legislature acts on the will of the people, how interest compounds.
I know it always takes me a long time to grasp any new programming paradigm. I still don't quite get the idea of monads in Haskell. You see, unlike laymen, programmers are regularly challenged with new ways of abstracting information (be it entire programming paradigms, new frameworks, or just a new way of factoring their own code) and eventually become adept at this meta-skill.
But regular people don't have to learn new abstractions on a day-to-day basis. Anything presented to them in a new symbolic or abstracted way is bound to cause confusion for a long time. Especially second or third order abstractions.
Here's an example.
In the early 2000s, "blog" became a new buzzword. To understand what a blog was, you sort of had to understand what a website was (which many still did not), and how that's different than a book or a newspaper.
At some point, blogs added comment forms. But to understand comments, it helped to understand the concept of a blog to begin with, and how those comments are different than the actual posts (and certainly different than a contact form or a guestbook that covers the entire site).
Eventually sites like Facebook and Twitter came along with status updates. But to understand a status update, you kinda had to understand a blog and why the heck a normal person would write one. And to understand the comments feature that Facebook added to status updates, it's easier if you think about them like comments on blog posts (and how that's different than the person's wall). And the whole thing makes a lot more sense if you get general idea of a social network — which was something popularized well before Facebook came around — and how that impacts who can see what on the site.
When Facebook launched its "news feed" feature in 2006, it caused massive uproar. Not many really understood how it was supposed to work and threatened to quit the site out of concern for their privacy. But now most social websites have worked in news feeds. Some sites have played with the idea, aggregating multiple feeds from different sites or letting users filter them and change how things get posted on their own feeds. But to understand any given site's news feed, it'd help to be filled in on how news feeds function in general.
I could go on. This all sounds like really elementary stuff, but the point is that regular people don't follow the evolution of these ideas and see how they progress. They approach an abstraction without seeing what it's analogous to (or what that's analogous to). They form their understanding from scratch.
Sure, users don't have to have a complete history of any feature they're using (in the same way I don't need to understand why my TV doesn't have a Channel 1 to watch it). But any time a designer frames an idea as an analog to another ("It's like X, but for Y!"), they must be prepared to deal with people who need an introduction to the whole shebang.
To Facebook's credit, it has one of the best design teams in the industry and handles these challenges well (though apparently not well enough for some parents).
So there are a lot of ways regular people are different from programmers, and in ways much more nuanced than simple "computer literacy." How do we solve the problems caused by these differences?
Should computers be dumbed down? Yeah, probably a bit. Programmers can't build software expecting that their users will dork out and explore its every facet. That's got to stop. The iPad is a bold step in the right direction that might even be going too far.
Another solution lies in education. I think programmers and "digerati" may have caught onto some trends that will become important for everyone in the 21st century. The solution lies in effectively teaching to these.
Really, every subject's curriculum should be overhauled to account for the vast economic and social changes that have occurred in the information age (Paul Graham's The High Res Society is a wonderful summary).
But I'll focus my comments instead towards courses that purport to cover computers.
I think I can speak for most of my generation in saying that computer classes in high schools, colleges, and community centers are universally worthless. Courses for young people are usually taught by out-of-touch adults with a much less advanced understanding of the things they're teaching than their students. The only kind of teacher likely to be more incompetent than a computer teacher is a gym teacher. But that's not the problem.
The real problem is that these courses often teach a specific operating system or a specific office suite in an extremely facile manner. They're glorified typing courses. That means when Microsoft changes the locations of buttons in Word, students' knowledge is obsolete. Even programming courses in high school (and many colleges) are tied to specific programming languages, not general concepts. A good course teaches a mix of theory and application, but most computer courses can't even handle application right.
To create a computer course for laymen that does not do them a disservice, it should be rooted in things that we can reasonably anticipate will not change. I'm not quite sure what those are but the stumbling blocks outlined in the previous section are a good place to start. It should combine practical computer skills and general information literacy. It should be required and it should be rigorous, not a blowoff course.
Imagine how many fewer bank accounts or email accounts would be hacked if a section on the final exam gave students URLs and asked them to identify the domain name, the subdomains, the path, the port, and the protocol. This sounds like esoteric technobabble at first. But if high school students are expected to know how many valence electrons molybdenum has or how to define trigonometric functions in terms of each other, it's highly practical by comparison.
Teaching students how a hierarchical file system works would make sense. It could even briefly cover the directory structures on each popular OS at the time and where things go. I have my doubts on how long the idea will last, but I'm betting at least another 15 years.
I'm hoping email (as a means of communication) will die a horrible death in the near future. But if it doesn't, its technical intricacies should be taught in some detail.
Such a course might also include a primer in Boolean logic and proofs, plus basic set theory — nothing too comprehensive. This would certainly allow students to refine their Google queries if the first result isn't right (assuming they actually check).
Or there could be projects where students are asked to make simple relational database applications (not requiring any programming — just using a GUI) and to construct queries that join across tables to locate information. Or maybe they could use Yahoo Pipes to create mashups of multiple sites to solve a given problem.
Hell, a basic non-mathematical introduction to public key cryptography wouldn't be a bad addition. I don't think that's going away for a long time, at least not until we get quantum computers.
This course could give students research projects to hone critical thinking. They could be given news stories, Wikipedia articles, and whitepapers by interest groups and be asked to get to the heart of the matter and argue one way or another. Students should be able to recognize logical fallacies and propaganda techniques so often employed by politicians and forum trolls alike.
The crux of all of this is that it's becoming an essential skill for any capable person in our society to be able to sift through vast amounts of information of uncertain quality to find the best. Teach this and the rest effectively teaches itself.
Ultimately, if schools were completely successful in designing a curriculum for the 21st century, they might find themselves the architects of their own obsolescence as institutions.
But until then, teaching kids how to read a URL so they don't get scammed by the Nigerians would be a nice improvement.
Many Web 2.0 companies have a pretty effective way of dealing with n00bs needing customer support: they don't. Hey, buddy, it's free — what do you expect? And they have enough of a user base that they can gain an intimate understanding of how to design their products through processes like A/B testing.
But for those of us actually charging users money and hoping to keep them happy, however, we have a more complex set of obligations. Here are a couple realizations I've made on that:
Define Your Audience
When designing a piece of software, it's important to draw the line at the level of expertise required to use your app and communicate this consistently in your marketing, documentation, and correspondence with customers.
For instance, if you've written a desktop app that's document-based, it makes sense to expect users to be familiar with Open/Save dialogs. It's reasonable that they not blame you if they confused their document for one they gave a similar name to in a different folder.
Yet some apps like iTunes and iPhoto are not so arrogant as to presume such knowledge. And others, still, like Final Cut Pro or AutoCAD expect users to come in with quite a lot.
Should all software condescend to the lowest level? Not at all! At least, not necessarily. By presuming knowledge of conventions and abstractions used on your platform and in other apps (or even inventing your own), you enable a lot of power and functionality to users. Ideally, you can find opportunities when designing a piece of software to lower the learning curve without hurting anything. But, like any film or piece of writing, you must have a very clear idea of your audience that informs every choice you make.
Optimize Support Processes
Before the MacHeist promotion I mentioned earlier, I set to optimize users' interaction with my software and website in two ways:
These goals were accomplished by fixing lots of usability flaws in the app and edge case bugs (particularly syncing bugs). I redesigned the support section of our website (this still needs lots of work), and found ways to encourage more users to use resources like FAQs and manuals. I even put a special box at the top of the site if the user came from MacHeist.com.
In addition, to handle the demand, I also switched to a ticket system for support emails and hired part-time help.
Part of the reason why I hired someone to do support (even during periods when I could handle the burden) is that I tend to take email from users personally. I try to fix that person's problem and then find a way to make sure nobody else ever has it. I even made a house call to a guy who happened to live in San Francisco and had a problem with the app. But it took a sudden influx of 300,000 new users for me to realize that you can't please everyone.
The first line of defense is to make sure that people who do have a clue can get help with their problems easily without having to contact you. If all your emails are from wackos with hopelessly dumb questions, that means you're doing things right! Then you'll have to find cost-effective and time-effective ways of dealing with the wackos, so that you can respond to the remaining emails with the full consideration and respect they deserve.
Will n00bs forever be the nuisance they are today? Will there always be some sort of paradigm shift in the world that the Luddites born before will fail to understand in a fundamental way? Or was the computer revolution a once-in-a-century sort of thing, not the first step in the dizzying race towards the singularity? Time will tell.
But for right now, the fundamental problem is that the people who seek to popularize and commercialize a given technology (say, personal computers or digital cameras or social networks) only have it in their self interest to make the public understand the technology enough to buy the darn thing. Not to use it well. Kathy Sierra has talked about this. But ultimately, it's in society's collective interest for people to be computer-literate and information-literate. And since the big players aren't doing it, the problem is foisted on the rest of us. Hopefully the partial solutions outlined above begin to address the problem.
If you weren't offended by the Stevie Wonder joke and actually liked this post, you should follow me on Twitter!
© 2010 Dan Grover. All rights reserved.