Fail Faster

The fine folks over at Extra Credits have an excellent video on a topic that is near and dear to my heart: failing faster. The gist of the video is that it is important to learn how to use tools such as low-fidelity prototypes to validate an idea. The key takeaway is that you want to learn from your mistakes as quickly and as cheaply as possible. Waiting until you have the perfect idea all figured out takes too much time (and really, you won't have it all figured out). Likewise, immediately jumping into writing code means that fixing your mistakes is much more expensive to do (and you will be more hesitant to do so).

I have personally been involved in this type of situation many times throughout my career. In one particular instance, I was part of a team working on a new major feature for an app. Unfortunately, the development process devolved into 'prototyping in code' as major changes were made on a daily basis to the visual design, user flow, and business logic of that feature. This was a terribly expensive way of figuring out how things should work. When we tested the feature with a few handpicked users, the flaws in our design were immediately obvious. We thought that the design was generally good and understandable (albeit with a few rough edges), but the participants in the user testing pointed out sizable problems with the design that made it clear that this feature was not ready to ship. It's as if we were blind to our own design.

After this particular experience, I championed the idea of using interactive prototypes for further design iterations. Each design iteration consisted of 'tappable screenshots' that our test users could try out and use to provide us with feedback. Making changes to a particular screen or to the user flow was as simple as dropping in a new image file from Photoshop or designating a new tappable area on an existing screen. The turnaround time for these changes could be measured in minutes or hours instead of days and weeks. In the end, the ability to 'fail faster' with the interactive prototype helped to make the feature better in a shorter period of time than what could be done with code.

Folks, I know it can be tempting to immediately jump into code; that's pretty much what developers are inclined to do. However, understand that it may not always be in your best interests to do that. Find cheaper and faster ways to validate your ideas.

Bonus:

There are many different tools that can be used to help you 'fail faster'. These are the ones that I use on a regular basis:

  • Pen and paper or a whiteboard - you really can't get much faster and cheaper than this.
  • POP (Prototyping on Paper) - this app makes it easy to take a photo of things that I have made in my sketchbook or whiteboard and add tappable hot zones with transitions.
  • InVision - this web app provides a lot more horsepower in terms of the transitions, collaboration, and version control that it supports. I use this with Photoshop mockups to provide a more "real" feel than what POP provides.

The Windows Store is Filled with Scam Apps

Chris Hoffman, writing for How-To Geek about app scams in the Windows Store:

 

Why doesn’t Microsoft care about the cesspool of garbage they’re hosting and offering to hundreds of thousands of Windows 8.1 users? The only answer we have so far is that Microsoft doesn’t care how good apps are — they’re just approving everything to get as many apps as possible. It’s been nearly two years now, and we haven’t seen any indication Microsoft actually cares about the pile of garbage they’re hosting.

The various app stores have their fair share of problematic apps. Google Play, with its focus on automated store rule enforcement, allowed a scam anti-virus app to become the #1 paid app. Apple's App Store, with its focus on manual store rule enforcement, allowed a bootleg Pokemon game to become the #3 paid app.

However, in both the App Store and Google Play examples, these scams were the exception rather than the rule. The numerous examples illustrated by Hoffman in the linked article are damning for Microsoft. While Hoffman's stated reasons for why Microsoft allows these blatant scams to exist is pure speculation, it is speculation that makes a lot of sense. Microsoft's Windows Store and Windows Phone Store are woefully behind the App Store and Google Play in terms of quality and quantity of apps. There is no subjective way to measure the former, but the latter is easy to measure (and is arguably even easier to inflate). There is a strong incentive to increase the number of apps in the Windows Store.

Folks, we all know what happens to an app store's credibility when it allows such garbage to become commonplace.

 

Don't Be Too Hasty To Do-It-Yourself or Pick-Something-Off-The-Shelf

A common question I get from folks that want to create an app or website with a backend system is what I would recommend they choose for a toolset. Should they use something baked into the platform like iCloud? Should they use a multi-platform service like Parse or Heroku? Should they write their own backend system from scratch?

The answer? It depends.

Honest. That's the truth. That's not an attempt to evade the question.

Rather than immediately jumping to answer the question, I always ask my own question to gain more context:

What are you trying to accomplish?

There are two different ends of the spectrum for that question. On the one hand, you have the Marco Arment (formerly of Tumblr and Instapaper) camp:

 

The common wisdom, which Justin suggests, is to go directly to a highly abstracted, proprietary cloud service or a higher-level hosted back-end — the kind that are so high in the clouds that they call themselves “solutions”. But the “BaaS” landscape is still very unstable with frequent acquisitions and shutdowns likely, and hosting on VPS-plus-proprietary-services clouds like Amazon Web Services or higher-level services like Heroku or App Engine can get prohibitively expensive very quickly. Developers who build everything on these services by default would probably be shocked at how cheaply and easily they could run on dedicated servers or unmanaged VPSes.

On the other hand, you have the Brent Simmons (Q Branch / Vesper) camp:

 

Well, my first thought was I don't want to run an actual server. I don't want to do that. Life's too short; I have to write code.

I often see debates on Twitter, blogs, or podcasts about the merits of both approaches. Depending on the particular biases of the author or host, the result is typically choosing one of the two extremes. Before jumping into one side or the other, however, it's important to understand the fundamental assumptions being made and what each side is attempting to accomplish.

The fundamental assumptions behind the Do-It-Yourself side, as exemplified by Marco, are that you are trying to create something that will need the greatest amount of flexibility and independence. By picking this extreme, you are deciding that the control over your own destiny outweighs the burden of creating and continuing to maintain your own backend solution.

The fundamental assumptions behind the Pick-Something-Off-The-Shelf side, as exemplified by Brent, are that you are trying to create something that will need the least resistance in reaching fruition. By picking this extreme, you are deciding that the effort saved by outsourcing outweighs the risk of not completely owning your backend solution.

Of course, these are two opposite ends of a spectrum. The solution that meets your particular needs will probably fall somewhere in the middle.

By all means, if you are intent on creating The Next Big Thing, then it makes sense to do things yourself and not be at the mercy of platform owners. However, if you are building something as a hobby then it makes sense to offload the things that aren't core to your interests.

It also makes sense to consider whether this is intended to be the start of a business or is intended to be a learning experience. In the former case, you have to weigh the tradeoffs between controlling your livelihood and getting to market quickly. In the latter case, you have to weigh the tradeoffs between focusing on breadth versus depth.

Folks, don't be too hasty to do it yourself or pick something off the shelf. It's not a simple decision.

Announcing The More Than Just Code Podcast

I'm proud to take part in announcing a new podcast that is now available. That podcast is called More Than Just Code.

It's a weekly show that covers topics that impact iOS and Mac developers. As the show's title suggests, we also consider the business perspective on each week's topics (i.e. 'more than just code').

The show is co-hosted by a transcontinental panel of developers: Tim Mitra, Aaron Vegh, Mark Rubin, and yours truly, Jaime Lopez.

Folks, check it out (and subscribe!): http://www.it-guy.com/mjtc-podcast/

Teach Users How to Use Your App by Having Them Actually Use Your App

It's late at night. The empty cans of Red Bull tower over your desk precariously. You've done it. You've finally created your beautiful, polished, delightful app. The blood, sweat, and tears will all be worth it once you hit that delicious button to submit to the App Store.

You hesitate. You have a sense of worry gnawing at the back of your mind. 

What if users don't immediately comprehend my glorious design?

What shall I do?

I know! A tutorial! That's the ticket!

Netflix app for iOS (image via http://www.mobile-patterns.com/coach-marks)

Netflix app for iOS (image via http://www.mobile-patterns.com/coach-marks)

Suddenly, your beautiful app isn't so beautiful anymore. You've decided to smack the user in the face with a brain dump tutorial.

...

Why is it that so many apps fall for this trap? The most common reasons seem to be that app developers run out of time to properly implement a tutorial system or the developers fail to realize that the onboarding experience is an integral part of the app that requires just as much design effort (perhaps even more effort) as the rest of the app. Yet, it is still common to see apps that don't give much thought to how users will learn to use the app.

Whatever feelings you may have about Facebook's Paper app, they at least took a relatively uncommon approach to the problem of teaching users how to use an app with an uncommon design. While it may be somewhat heavy-handed at times, the tutorial system in Paper clearly took a bit of time to design and implement. In fact, the Facebook Paper team gave a presentation on how they approached the problem with contextually aware tutorials.

Developers can look outside of the traditional app development industry for inspiration as well. The game industry has spent decades working on this very problem. Take, for example, this analysis of the first level of Super Mario Bros. by the folks at Extra Credits:

The game designers at Nintendo carefully crafted the first level experience to teach players the skills that they will need throughout the game. They did so without dumping a bunch of explanatory text right at the start of the game or requiring that a player read the manual.

You might very well ask, 'how can these same design principles be used when creating an app?'

For starters, you should consider what your first-run experience is like for a user. Does your app have a bunch of empty states? Design a way for those empty states to have a call to action or design the app's first-run experience so that the user doesn't have those empty states to begin with (for example, pre-populating an app with content that the user is reasonably expected to enjoy). Does your app involve a complicated ecommerce transactional experience? Design a way for users to get progressive disclosure on where they are in the process.

Folks, Super Mario Bros. doesn't bombard players with every possible bit of information they could ever need at the beginning of the game, and there is little reason why apps should be any different. Teach your users how to use your app by having them actually use your app.

Bonus:

If you enjoyed the design analysis done by Extra Credits, you might also enjoy these videos (warning, they are longer videos and may include profanity so be careful at work).


Amazon is Adding More Cute Robotic Workers

From the Wired Business Conference comes a video showing 'A Day in the Life of a Kiva Robot'.

This isn't the first time that Amazon has shown us a video about the Kiva robots. This video, however, goes more in depth as to how the robots operate in Amazon's warehouses.

Folks, this is the wave of the future.

My Podcast Playlist

I'm often asked about the podcasts that I listen to on a regular basis. The combination of a long commute and self-training to be able to listen to podcasts at 3x speed means that I have quite a lengthy list. Without further ado:

#PaxEx Podcast - An excellent podcast from the Runway Girl Network that covers topics related to the airline passenger experience.

Accidental Tech Podcast - A fun tech podcast starring John Siracusa, Marco Arment, and Casey Liss. I enjoy listening to their wildly different views on the latest topics in tech.

The Adam and Dr. Drew Show - This is a comedy/self-help show starring the folks from Loveline.

All About Android - Even though I'm an iOS developer and not an Android developer, I like to keep in the loop on what is going on in that world. Starring the wonderful Gina Trapani and some other people not named Gina Trapani.

Amplified - One of the funnier podcasts out there related to Apple news. Hosted by Dan Benjamin of 5by5 fame and Jim Dalrymple the Editor in Chief of The Loop. Jim's sometimes a bit rough on certain companies (e.g. Samsung, Google) but his belly laugh makes things memorable. I honestly don't listen to the part of the show related to music topics.

The Broad Experience - A show about women and the workplace. If you liked Sheryl Sandberg's book Lean In, then you will likely appreciate this podcast.

CMD+Space - This interview-based show can be wildly inconsistent, depending on the particular guest that is being interviewed. I generally only listen to the episodes that cover topics I care about or involve people that I find interesting.

CocoaRadio - This show by the current developer of Glassboard, Justin (Not Bieber) Williams, is also interview-based. The consistently excellent selection of guests and Apple-related topics keeps me interested.

Core Intuition - This show is usually about the Apple ecosystem, but often veers into topics of general interest to indie software developers. The friendship between Daniel Jalkut and Manton Reece, coupled with the short episode lengths, keeps this show well-paced.

The Critical Path - If you want to dig deep into business topics or are a budding financial analyst, then this show is for you. Horace Dediu's excellent analysis of the different strategies employed by companies is usually spot-on. This is perfect material to debunk the general crackpottery infesting the tech and financial media.

Debug - Another interview show about tech topics. Can be somewhat inconsistent (though interview-based shows often are at the mercy of the guests).

Developing Perspective - A quick (15-minutes) show hosted by David Smith, an indie iOS and Mac developer. The topics, while based on the perspective of a developer immersed in the Apple ecosystem, are applicable to many situations that a developer may encounter.

DLC - A show about videogames and tabletop games. The call-in segment is interesting. I never listen to the tabletop segment, though.

The Frequency - This podcast is great because of the fun banter between Dan Benjamin and Haddie Cooke as they cover news topics ranging from the technology to oddities.

The Games Cast - A show about videogames from a British perspective. Very British.

How Did This Get Made? - This comedy show starring actors from the sitcom The League is great because it skewers many of the terrible movies that you love and hate.

iDeveloper - Another indie iOS and Mac development podcast. Worth a listen for the critical perspective on the Apple ecosystem.

iMore Show - Apple topics (generally news) covered by Rene Ritchie and Pete Cohen (formerly of the Angry Mac Bastards podcast).

In Beta - I'm of two minds about this one. I loved this show when it was hosted by Gina Trapani and Kevin Purdy and covered tech culture topics. Ever since Gina left the show, I've found the topics to not be to my particular tastes. Still has a gem now and then.

The Incomparable - A loveably geeky show about movies, comic books, television shows, and novels. Usually good for more than a few witty observations about geek topics.

IRL Talk - This podcast hosted by Faith Korpi and Jason Seifer (the former hosts of Geek Friday on 5by5) also covers geek topics. The interplay between Jason and Faith is great, especially when Jason is trolling Faith or when Faith has never heard of a particular geek topic.

Isometric - Brand new at the time of this writing, but I already love this show. Hosted by Brianna Wu (head of development at Giant Spacekat), Steve Lubitz, Maddy Myers, and Georgia Dow. This show provides a refreshing perspective on videogame news, development, and culture. I appreciate the fact that each episode has a sense of focus that is often lacking from videogame podcasts. I also appreciate hearing the feminine perspective on topics generally covered by men.

Iterate - A show about crafting the user experience for apps. As someone who only dabbles in the UX world, this show can be somewhat hit-or-miss for me.

MacBreak Weekly - This show about news in the Apple ecosystem is something that I usually have on in the background while I'm performing some sort of task. Somewhat difficult to recommend to others based on the personalities and viewpoints of the hosts, but I've gotten used to it and sometimes get an interesting perspective on topics.

Ray Wenderlich Podcast - This podcast from the tutorial website, raywenderlich.com, covers topics related to app and game development. I usually pick up a nifty tip or two per episode.

Release Notes - A show about indie development in the iOS and Mac world. Each episode is relatively short as far as podcasts go, and the pace is brisk.

Super Best Friendcast - I love this podcast from the Best Friends Play zaibatsu. That shouldn't be much of a surprise since I'm a fan of their YouTube channel (Two Best Friends Play, Best Friends Play). Listening to this show reminds me of all the conversations I've had with gamers as a wee lad.

Support Driven - This interview-based show dives into the world of customer support. Usually has some nuggets for how to make customer support a key part of the user experience (and a competitive advantage) rather than just a 'necessary cost'.

The Talk Show - If you're in the Apple world, it's difficult to avoid running into people that listen to this show and follow John Gruber's analysis. Leans in the 'Apple Apologist' direction, but generally has well-thought out topics and discussion. Oh yes, and baseball.

This Week in Google - Another podcast starring Gina Trapani and people not named Gina Trapani. This show is a good way to keep up to date on what is going on in the world of Google and cloud computing.

Unprofessional - This podcast hosted by Dave Wiskus and Jaimee Newberry is one of my favorites because it usually involves some sort of crazy situation. Also, Circus Circus and Taco Bell.

What the Tech - a show covering tech topics hosted by Andrew Zarian and Paul Thurott (the Bizarro World version of Marco Arment) from Super Site for Windows. I find it somewhat difficult to agree with Andrew's take on things, but he's usually kept in check by Paul.

Windows Weekly - This is probably the best show to keep up to date with the latest news in the Microsoft world. Paul Thurott's sometimes curmudgeonly nature is balanced by the fabulous Mary Jo Foley of All About Microsoft. Favorite bits include Mary Jo's codename pick of the week and beer pick of the week.

...

Folks, podcasts are the tech generation's replacement for radio. If you have any additional shows that you love, drop me a line on Twitter or ADN.

Vinyl Records and Microsoft Azure

As a follow-up to a previous post about Microsoft needing to be everywhere, I thought it would be appropriate to describe a recent interaction I had at a developer event.

As it so happens, I met a Microsoft employee and we started talking about what we do. The topic naturally turned to my job as an iOS developer for my current employer. Upon hearing that I developed iOS apps, the Microsoft employee asked me why I don't develop apps for Windows Phone. I responded that while Windows Phone is a technically solid platform, it just wasn't enough of a factor in the industry (e.g. installed user base) for me to jump onboard. I told this person that, if anything, I would probably look to Android as my second platform of choice. They seemed satisfied by my answer.

As is common in these types of meetups, we later exchanged contact information. Since neither of us carried business cards, we exchanged phone numbers. Later that evening, I received a 'Nice to meet you!' message on my phone. I went to the Messages app to respond, and was taken aback by something I noticed. It didn't say 'Text Message' at the top. It said 'iMessage'. This Microsoft employee who had asked me about my hesitance in developing for Windows Phone was in fact an iPhone user.

...

Back to the question of me getting involved with developing for Microsoft's platforms: would I actually do it as either my 9-to-5 job or as a side project? Honestly, probably not. I suppose that I might be convinced, in a fit of hipsterism, to develop a Windows Phone app while listening to vinyl records, waxing my mustache, and munching on artisanal cheeses, but it just seems unlikely. However, based on the renewed vigor of Azure (and some trepidation with Facebook owning Parse), I could easily see myself using something like Azure Mobile Services to power an app.

...

The purpose of this anecdote is to illustrate the difficulty that Microsoft has had and will likely continue to have in convincing people to use and develop for its platform. Despite an initiative to provide its employees with free Windows Phone devices, clearly Microsoft has not been able to capture the hearts and minds of its own employees with its platform. Likewise, Microsoft has a difficult road ahead of it trying to convince developers to support its platforms.

Folks, this is why Microsoft needs to focus on providing Azure-based services to the entire world. It's their best chance to stay relevant.

For Microsoft to Win, It Must Be Everywhere

We have to let go of this notion that for Apple to win, Microsoft has to lose.

-- Steve Jobs

Those words were uttered by Steve Jobs at Macworld Boston in 1997 as he described the groundbreaking deal between Apple and Microsoft.

That announcement set the stage for one of the greatest corporate turnarounds of all time. While it may seem foreign to those who came of age in the era of web apps and smartphones, at the time of this announcement, Microsoft was an unstoppable behemoth and Apple was a staggering challenger. Since that historic moment, Apple has become one of the most powerful companies in the world and Microsoft has seen its influence on the industry diminish.

How did we get here? As it has been said, Microsoft lost the API war. But it's more than just that; Microsoft twice failed to quickly adapt to major shifts in the industry. First, it was late to the shift to the World Wide Web. More recently, it was late to the shift to the latest wave of multitouch-enabled mobile devices. With each successive failure to adapt quickly, Microsoft lost more and more of its grip on the industry.

You can't show up late to the party and expect everything to be the same as it was at the beginning of the party.

Microsoft reacted to the rise of the WWW by attempting to put a stranglehold on it (Internet Explorer and ActiveX, anyone?). Microsoft saw the web--and applications that ran on the web--as a danger to its monopoly. It stubbornly refused to participate openly in this fundamental change in the industry and was left behind.

Similarly, Microsoft failed to quickly adapt to the rise of multitouch-enabled mobile devices. Instead, it stuck its head in the sand and didn't realize that the game had changed and its products in the mobile space were no longer good enough. (As an aside, this same fate befell the other juggernaut in the space, BlackBerry. Google, however, was wise enough to scrap the BlackBerry-ish design that Android had at the time and started from scratch.)

What, then, can Microsoft do to regain prominence in the industry? Simply put: For Microsoft to win, it must be everywhere.

What exactly does this mean? Wasn't Microsoft everywhere to begin with? Actually, no. Microsoft was where everybody had been but wasn't where everybody was going. The Microsoft of old was 'everywhere' by having Windows on everybody's desktop. For Microsoft to move forward, it must look further back into its past, at a time when it made software for darn near every platform out there. If you had a platform, chances were good that Microsoft wrote software for it.

It's not about apps, though. Certainly, apps help but Microsoft isn't going to be able to win the hearts and minds of developers and consumers with apps alone. Instead, Microsoft is going to have to be 'everywhere' with services.

Services are the new frontier. It's an area where its competitors are weak and Microsoft is strong (even if it isn't the strongest). Microsoft might not be able to convince developers to hop onto its Windows 8, Windows RT, and Windows Phone platforms, but if it can convince longtime Apple champions like John Gruber and Brent Simmons to jump onto Azure, then it can convince anybody to join. Likewise, consumers may not be all that jazzed about Microsoft's platforms, but they sure do love Xbox Live. The Office 365-based apps aren't doing too shabby, either.

Folks, Microsoft may not be able make a dent in the mobile space (or the upcoming wearables space), but it stands a good chance of making a huge splash in the services that power those experiences.