It would be hard to find a self-respecting geek and technologist who disagrees with the phrase "the future is mobile." All the coolest new gadgets are tablets and smartphones and all the biggest plays in content are on those devices. The market dominance of the biggest tech companies depends on how you use that device in your pocket or backpack.

So we get it. Mobile is hot. Mobile is irreplaceable. And most importantly, mobile is the future. But this mobile future takes software for granted.

At both Skritter and CodeCombat, we learned that because we built mobile versions of our apps for iOS. We found that there are so many apps, they have been devalued to the point of monetary irrelevance. That's sad because a good app is a piece of art. The user flows, the interface, the streamlined backend, all the pieces of a finely-tuned app take so much time and energy to perfect that I wanted to write a post to call attention to the level of software perfection that most people have acclimated to without even knowing it. Here are three reasons why it's insanely hard to make a kick-ass Mobile app:

System Constraints

You could say that Objective C is the problem, or put another way, the lack of >insert language< or >insert framework<. But the reason why developers are shackled to Objective C is to make sure processes finish in human time, and this is fundamentally a performance bottleneck in mobile hardware. Swift is a great step forward, but it's immature and for complex backend work, Objective C is still necessary.

Skritter's iPhone app is great, but at core it is just an app to learn Chinese characters. Skritter doesn't pilot your car or allow you to edit movies or do any other mind blowingly complex task. But when it first launched, it wouldn't run on all but the n-1 generation of devices. When we tried to launch CodeCombat's tablet app, on the iPad 2 Air could run it at decent speeds. Why? Because older devices have limited memory, CPU cycles, and bandwidth, newer versions of iOS brick older devices, and news features are only available to developers on newer versions of iOS.

For a generation of coders accustomed to limitless managed memory, high-level programming abstractions, and thousands of deeply functional opensource libraries, mobile is a step back to the Byzantine world of Commodore 64s.

If you have built an app that doesn't choke on graphics and feels responsive, you have accomplished an incredible challenge and I tip my hat to you.

No Features

User-software interaction paradigms are changing and simplifying. Photoshop's submenus, window management, and setting screens afford it a level of feature depth I don't believe can be achieved in a mobile environment no matter how sophisticated and intuitive UI conventions become.

Put another way, there is a terminal threshold of feature depth to an app and this limits the scope and usefulness of any one app. That's not an intractable problem and the solution that has been embraced to date is app fragmentation. There are separate Skritter Chinese and Japanese apps for this exact reason. But consider the logical extreme of this design trend: if you were to make a fully-featured Photoshop app work on a mobile device, you would end up with several hundred micro-apps to do one thing very simply. Just download Instagram to see what I mean.

So, if you are attempting to make a kick-ass mobile app, you must make a lot of decisions that ultimately come down to "how little will my customers allow me to integrate into this thing?" Err on the side of simplicity and you might end up with a fart app. Go the other direction and you have a pile of unusable menus and sliders.

Extreme Polish

The app market is cruel; even moreso for the need to do a Hollywood launch. Because nobody has solved the discoverability problem in the app store, you need to launch big and magically figure out exactly what users want ahead of time. That last point is especially troublesome for people used to iteratively designing for the web. The road to app store success is littered with the corpses of apps that launched big but hadn't fine-tuned their interfaces, didn't have time to include that key feature users wanted, or just failed to make the app novel in some primal way.

Even the basic business sense of not overbuilding is turned on its head for mobile development. If you somehow manage to land that sweet TechCrunch article or New York Times acknowledgment, the app has to be perfect not just from an implementation point of view, but from a feature and context perspective as well. A perfectly implemented, compelling, novel app isn't enough; you have to know that your customers will agree about your choices.

There's always another app for whatever you are doing, and that makes customers more picky. The pressure to get it right the first time can be crushing.

So Get Insane and Start Building

I write all this not to discourage, but to uplift all those developers struggling with their mobile projects. It's tough to make something good, let alone make something good that also happens to make enough money to warrant the effort. For those out there building apps of consequence, I want this to read as a note of enouragement: stick to it and overcome the difficulties I've written about above. The mobile future is depending on you.