Why mobile web apps are slow

Why mobile web apps are slow

Mobile Phone with cloud of application icons flying arround
Why mobile web apps are slow.

A great fact-driven discussion, on the challenges facing mobile application developers, with regard to speed and memory management.

A Great Product is Necessary – but not Sufficient – for Success

A Great Product is Necessary – but not Sufficient – for Success

Great Story

Yesterday, I posited that great marketing is simply great storytelling.

And great stories all begin with an interesting subject to frame a compelling narrative around.

In marketing, that subject is your product (for simplicity’s sake, I’m purposefully conflating products and services, to being simply the “thing” that you’re trying to influence an audience to buy – or buy into).

And while a solid and innovative product is the very beginning of crafting a compelling campaign, it is not sufficient for the success of that product in the marketplace. In fact, I would claim that great products fail almost entirely because their creators didn’t tell their “story” in a way that hit home with their audience… or they told it at a time when their audience wasn’t ready to hear that particular story.

Let’s look at some illustrative brand examples: mobile devices.

The current mobile marketplace is dominated by Samsung (Android) and Apple (iOS). But they were by no means the first companies to market “smart” mobile devices. Who were? Palm, Research in Motion (RIM, neé Blackberry), and Microsoft (in the case of Microsoft, nearly seventeen years ago)!

So – why did Palm, Blackberry, and Microsoft fail to win – or in case of Palm and Blackberry, fail to keep – hearts and minds, while Apple and Samsung (Android) now rule the world?

In the case of Microsoft, they never made the cogent case for why Microsoft CE (their first mobile smart OS) was something that consumers needed to buy. Arguably, the nascent mobile web wasn’t ready ten years ago – from a design and UX standpoint – to make CE an attractive portal for readable web sites. So in a sense, it was a combination of Microsoft not successfully pitching why the devices were needed, and the mobile web not being ready to support a new wave of mobile consumers.

In the cases of both Palm and Blackberry, you have two early market dominators who enjoyed a near monopoly – for a time – but squandered their positioning through poor leadership, lack of innovation, and the inability of each company to successfully innovate and change their product narratives, when new challengers entered their respective markets.

As a result, Palm is history (for all intents and purposes), and Blackberry is a mere shadow of its former self, all in the span of a handful of years.

So – why did Apple and Samsung (Android) succeed (ed: so far), while these other brands stumbled so badly? Because they had a larger story to tell, that was more than simply describing the specs of their product.

Apple was able to leverage a huge installed base of users in an existing ecosystem (with their captive credit card numbers in tow), tethered to their iTunes music store. They were able to tell a story of “everything just works” (true or no – it was a simple and compelling tagline).

Samsung was able to leverage the massive popularity of Android, while touting innovation over their main competitor Apple, playing heavily upon a narrative that iOS is very cool – for your parents. And, they arguably have a successful narrative around doing things “years ahead” of Apple (the phablet form factor, near field communications (NFC), contact sharing, etc.).

There are other recent examples in the mobile space, demonstrating how strong brands can fail, lacking a compelling product narrative – like Nokia; a brand that dominated the “feature phone” handset space globally, that has now virtually ceased to exist as a separate mobile brand, in no small part to idiotic “storytelling“, via their CEO, Stephen Elop, in his “Burning Platform” memo.

These examples all demonstrate that great products can fail, and fail hard – either to take root, as was the case with Windows CE, or to keep marketshare, as was the case with Palm, RIM, and Nokia – because of the lack of a compelling narrative promoting and maintaining their brands.

And, they demonstrate how a strong product stories can elevate what could have been “also ran” products, into the next generation market leaders, which is no mean feat; ask Microsoft, trying to claw their way back into mobile relevance with a very good product (Windows Phone), a superior camera (best in breed, in my opinion) – but a decidedly muddled marketing story.

We’re about to see a similar battle engaged anew, with the announcement of the new Apple Watch. Will Apple be able to create a strong enough narrative as to why their new product is more compelling than the Samsung Gear, the Moto 360, or the Pebble, to possibly create a new market leader?

If past is prologue, I wouldn’t count them out.

Tomorrow, I’ll discuss how a brand’s voice is essential to telling a great marketing story.

How Do I Create an Opening Animation Sequence for iOS Apps?

How Do I Create an Opening Animation Sequence for iOS Apps?

Ever wondered how some of your favorite iOS apps (like Twitter) create those cool opening animations when the application loads?

Well – wonder no more!

The place you work this magic is in your application’s AppDelegate file.

More specifically, the work is performed inside the didFinishLaunchingWithOptions method, just after you make your window key and visible:

- (BOOL)application:(UIApplication *)application 
  (NSDictionary *)launchOptions
self.window = [[UIWindow alloc] 
  initWithFrame:[[UIScreen mainScreen] bounds]];

// Your other launch related code here...

[self.window makeKeyAndVisible];

UIImageView *imageView = [[UIImageView alloc] 
  initWithFrame:[[UIScreen mainScreen] bounds]];
imageView.image = [UIImage imageNamed:@"myImage"];

imageView.contentMode = UIViewContentModeCenter;
imageView.backgroundColor = 
  [UIColor colorWithRed:89.0/255.0 
  green:152.0/255.0 blue:201.0/255.0 alpha:1.0];
[self.window addSubview:imageView];

[UIView animateWithDuration:3.0 animations:^{
  imageView.alpha = 0.0f;
} completion:^(BOOL finished){
  [imageView removeFromSuperview];

return YES;

The code is fairly self explanatory, though this example is admittedly very simple.

The steps?

  • Create an image view.
  • Load it up with one (or more) images.
  • Set whatever options (sizing, etc.) you want on the image.
  • Add the image view as a subview to your main application window
  • Perform your animations. In my case, I chose to use the UIView class method, animateWithDuration, since it allowed me to easily do cleanup, once my applications finished animating. In this example, I simply fade the initial image… but you can follow your imagination here.
  • When your animations complete, remove your image view from the application’s super view.

That’s it.

Happy Coding!

iOS 7 – First Thoughts

iOS 7 – First Thoughts

After using iOS 7 a few days, here are some likes and dislikes. Nothing too cerebral, just my surface observations:


  • New “Physics” – bubble animations on the Messages app, zoom on App opens, depth of field and animated pano on lock screens and on background.
  • New Utility Panel (drag up from the bottom) – includes buttons for Airplane Mode, Wifi, BlueTooth, Do Not Disturb, and Orientation Lock; Built-in Flashlight (goodbye, app category) App, and buttons for Alarm, Calculator, and Camera. Slick.
  • Ability to have App groupings of unlimited size.
  • Multitasking screen


  • Alert Panel (Pull down from the top gesture) Redesign. I can’t quite say why it’s not appealing to me. Maybe because I don’t think the descriptors at the top (Today, All, Missed) really describe what you find underneath. I mean, do I really need a separate tab for appointments I missed? Isn’t that what a smart device is supposed to prevent?
  • Bugginess of the Beta – Yes, it is developer-only beta code. It crashes a lot at this stage. Biggest dislike.
  • Stuff I Used to Know How to Do That I Had to Re-Learn – Spotlight search no longer has its own screen; instead, if you drag down on any Springboard screen (screen with apps), you get a Spotlight Search input. Took me a while to intuit that. Also, running apps are no longer killed by pressing the icon until they wiggle and you “x” them out – you now scroll through the multi-tasker and “flick” them up and off the screen, ala Palm Pre WebOS. Do I dislike these behaviors because they are different, or because I had to relearn them? Dunno. But they’re on my dislike list all the same.

Ambivalent Abouts:

  • New icons
  • Transparencies
  • Flat look

In short, iOS 7 is a work in progress. And works like it. Reserving further judgement until I walk around a bit more with the OS.

Thoughts from the Road

Thoughts from the Road

I’m in Tampa, at the University of South Florida, attending the Higher Education Enterprise Mobile Applications Conference (HEEMAC). I’ve seen and heard some really great things that colleges and universities are doing, from a mobile enterprise perspective.

One group, however, is strikingly absent – faculty. I’ve run into Associate Deans, technologists, native app developers, web developers, and even the odd CIO… but only one or two faculty members, out of 100+ conference attendees.

Admittedly, this is an enterprise mobile conference, and not one centered upon pedagogy.


I believe that faculty are under represented, overlooked, and generally ignored in conversations of campus technology, where they are every bit as much stakeholders as the students we strive to support. This week is only reinforcing – at least, for me – the great divide between academics, and the information technology infrastructure supporting the administrative side of things.

I was heartened to hear words like “enable” and “facilitate” in the context of opening up APIs, mobile development best practices, and providing software development guidance.

I was equally disheartened to hear that some mobile projects are being intentionally “slow walked” in order to have these projects wither and die from neglect.

To paraphrase from Robert M. Pirsig’s Zen and the Art of Motorcycle Maintenance:

“Other people can talk about how to expand the destiny of mankind. I just want to talk about how to fix a motorcycle mobile application.”

We have much yet to do to make our technology decisions inclusive of all stakeholders; not only because it is the right and proper thing to do, but because we are allowing strategic decisions be driven by what is simple to support and easy to do. If we are to innovate, stand out, and convincingly argue our institutions’ cases for value within the current environment of uncertainty, high debt, and questionable sustainability in higher education, then I believe we must do better than simply be “good enough.” We must be exemplary. And that can’t be done on the cheap, nor the easy.

We have real innovation occurring in higher ed mobile. We also have a lot of cookie cutter, least-common denominator solutions.

Is that good enough?

I’m grateful for the forum that our gracious hosts at USF have afforded us to conduct this inquiry into values, technology, and mobile strategy. We have our work cut out for us.

UIWebViews and Orientation Changes

UIWebViews and Orientation Changes

One of the pesky problems in iOS development is how to float text with hyperlinks. Really and truly, the only bullet-proof way to do this is to use UIWebView.

But it comes with its own set of unique problems, not the least of which are:

1) Setting font size and color, and
2) Keeping the web view from resizing everything when you change device orientation.

The following code snippet shows how to solve both issues. We simply inject some CSS into the web view… and voila! Issues solved.

        NSString *myDescriptionHTML = [NSString stringWithFormat:@"<html> \n"
                                   "<head> \n"
                                   "<style type=\"text/css\"> \n"
                                   "body {font-family: \"%@\"; font-size: %@; 
                                    color: #444444; -webkit-text-size-adjust: none;}\n"
                                   "</style> \n"
                                   "</head> \n"
                                   "<body>%@</body> \n"
                                   [NSNumber numberWithInt:14], _myText];    
    [_bodyText loadHTMLString:myDescriptionHTML baseURL:[NSURL URLWithString:@""]];

The key css styling that will keep the UIWebView from resizing text on orientation changes is

-webkit-text-size-adjust: none;

The rest is self explanatory.

Happy Coding!