Nothing like starting off the day with a koan, right? How would one develop a mobile app without developing a mobile app? In my latest piece of research on the future of mobile application development, I make the point that if developers overrotate their focus to building mobile clients, we risk creating the same sorts of vertical stovepipes we’re trying to work our way out of right now with all the web apps we built to run on Wintel in IE6. Rather, I think it’s time we broadened our focus and shifted our efforts toward building modern applications. Mobile apps are an important component of a modern application architecture, but only part of the whole picture.
So what’s a modern application? A modern application is:
- Omnichannel. Modern applications are designed to work across tablets, smartphones, phablets, heads-up displays, automobiles — and, yes, desktops and laptops. They are designed to anticipate new client demands and new methods of interaction, including voice, touch, mouse, and eye tracking. Modern apps may start with a consistent cross-channel expereince, but they quickly move beyond that to a cross-channel and a channel-optimized interface.
- Elastic. Successful modern applications are designed to spin up or spin down as needed. They take advantage of cloud economics. They comprehensively use open source software because it adds licensing flexibility to scale-out architectural flexibility.
- API-oriented. Modern applications compose and expose APIs everywhere. They build on open web techniques and use REST, XML, and JSON to make it easy for all types of devices and clients to easily consume data. Any visible service or piece of data has a “headless” API counterpart so that alternative views can be provided. In many cases, the APIs that a modern application exposes form the basis for a public, third-party developer community that enables mash-ups, plug-ins, and innovation on a core set of data and services that drive a company’s business.
- Responsive. Modern applications are built to deal with the realites of a public network topology that is increasingly out of IT's control. Application state management is pushed to the edge of the application. Asynchronous service design enables scale-out infrastructure to deliver information to clients in a stateless manner. Alternative system design patterns like broker and pipes and filters become better alternatives than a model-view-controller approach. In-memory databases are used to aggregate information from multiple service endpoints and cache it as close to the carrier networks as possible, in public cloud infrastructure, often alongside CDNs.
- Organic. No, modern applications aren’t singularities (yet). But modern applications tend to evolve more like a biological organism than a big-bang product release. Individual pieces of the application change all the time. A new feature on the client is deployed here, and a new algorithm that makes a service more efficient is deployed there. Modern applications are complex machines; they span systems of operation, systems of record, and systems of engagement (see Figure 1). Changing out all of the components in a single release would be incredibly risky. Dev-ops practices and continuous deployment capability are critical adaptations for organizations that want to build modern applications.
- Contextual. One of the biggest opportunities developers have when they make the mobile shift is the increase in contextual data at their disposal. There’s the immediate device context and data from sensors, but there’s also the extended context of a modern application, which includes machine-to-machine (M2M) data, and complex events. There’s also historical context, and the possibility of using all three to predict what a customer wants, before they know they want it.
Building modern applications is not as simple as learning Objective C or buying a mobile middleware tool. And since modern applications are composed of systems of systems, you shouldn't separate your mobile strategy from your cloud strategy or your big data strategy.