Preparing for a new age of cross-platform development
How can we build the best thing we can, in the most efficient way possible?
Our team has been doing iOS development since 2009, and in that time we’ve built lots of apps, both big and small, on iOS, Android and the web.
iOS and Android are without a doubt the primary mobile platforms. 98% of all devices sold in the last quarter were iOS and Android devices. That’s a huge number, and the two combined clearly have the bulk share of the market.
(iOS is losing market share though. 38% today down from 47% in 2012. But this doesn’t stop most of our clients wanting to build an iOS app first before tackling Android.)
In 2015, a report from Flurry showed that of all time spent interacting with your mobile device, 90% of that is actually spent inside apps themselves (vs 10% in a browser). If you think about the amount of time you spend watching videos, playing games or surfing Facebook, it’s not a huge surprise.
However, mobile browser traffic is 2x bigger than global app traffic… and it’s growing faster. According to a Morgan Stanley report, the top 50 mobile web properties have grown 1.2X faster over the past 3 years.
So while people may be spending more time in your mobile app, you’re getting way more visitors through your mobile web platform. So, iOS and Android are both important, but mobile web is still really important too.
“While people may be spending more time in your mobile app, you’re getting way more visitors through your mobile web platform.” — @grantjk @TWG
How Do You Decide What To Build?
So, as developers how do we make sure we hit all of these people? Multi-platform development is expensive and slow.
- The terminology is different: Routers and components, view controllers and data sources, activities and adapters. We’re actually talking a totally different language.
- The tooling is different: Text editors. Xcode, Android Studio. All of these have different intricacies, and being proficient in one is important. How can you be good at all of those altogether?
- There’s different iteration speeds on each platform. Web is way faster to build on because of things like automatic refresh and live reloading.
- Mobile platforms are essentially immature, and the open source ecosystem is still young on mobile compared to web. Lots of code is still required to do relatively simple things on mobile, whilst on the web there’s lots of people out there contributing. You can grab a library from somewhere and know it’s been used and tested in multiple places. Mobile doesn’t really have that yet, although it’s starting to move in that direction.
What does this mean?
Right now, when a client comes to us with a problem we’re still solving it three different ways: The iOS way, the Android way, and the web way. Because that’s how we’ve been taught to build apps. But why do we think this way? Why do we restrict ourselves to a single way of doing things?
It’s all the same problem. It’s one problem, and we’re trying to solve it three different ways.
But the problem is that it won’t actually be native. Your UX, and your app’s performance, will suffer, and users can usually tell. The DOM is really slow on mobile, and gesture support is poor. Power features, like delightful animations, are missing. It’s frustrating.
An Example: Untappd
Untappd is essentially Foursquare for beers. It’s a great way to tell people how much and how often you drink, if you’re into that. It’s built with PhoneGap so it’s on both Android and iOS.
It’s a good app — but here’s how you can tell it’s built with PhoneGap:
- The scrolling speed is very inconsistent. The friction you feel when you drag just feels “off.” It’s noticeable.
- The speed with which you can navigate from one page to the next page isn’t what you’d expect. There’s big delays, and it can actually take a few seconds for the next screen to show.
It’s all down to that HTML hybrid application architecture.
The problem with using these tools is that they’re trying to solve too many things at once. With new software coming out every year, and new hardware coming in all the time it’s really impossible for them to solve all of these problems for you.
So what do we do when we want to build across platforms? How do we make sure that we’re building the best thing we can in the most efficient way possible? We want to be everywhere!
Luckily, there is something we can do. But it’s not a tool. It’s a mindset.
The action of working with someone to produce or create something.
We always tend to think in terms of iOS vs Android or native vs hybrid. But why?! We should stop thinking about these other platforms as enemies, and start embracing the way problems are solved outside of our own space.
By putting iOS, Android and web developers together, collaborating around architecture we know and problem-solving together we can speed up development on each platform.
Collaboration means finding resources and solutions we’ve never experienced before. It means seeing good things that other people are doing — things we can mimic that will make us go faster. It means doubling the number of people we can talk to when we need help.
How To Get There
To get there we have to think about terminology.
We have to be able to speak the same language. We have to learn how to communicate, and be able to speak to each other about what we’re doing and our platforms.
We have to capture and share learnings as a team, and as individuals look beyond our current platforms in search of new and exciting ways of doing things. We have to solve problems together. Our mobile team has 9 people, and our web team is roughly triple that, so we’re always looking for ways to leverage all of that knowledge.
A couple of the things we’re doing at TWG to help us collaborate:
- Lunch & Learns
Each team holds a weekly lunch & learn to talk about cool solutions or to discuss things we’ve read or watched. The iOS people join the Android lunch sessions, and vice-versa, repeated across all our teams. This knowledge sharing means people are learning new ways to solve problems, and jumping in to help each other out on more projects.
- Friday Demos
After work every Friday we shut it down at 4pm. Everybody grabs a beer, we talk, and people to get up to demo projects, things they’re interested in or learnings from conferences they attended.
Skip to 12:40 in the video at the top to see John talk about React Native and a real-life example of what you can learn when you collaborate across teams.
Working together is what makes us better developers. There’s no “single tool” for building software, but collaboration is how you widen your toolbox. There’s plenty of awesome things that be learned from looking at other platforms, and from talking to different people about how to solve problems. Look outside your plan, step outside your comfort zone and, most importantly, keep an open mind.
“Your assumptions are your windows on the world. Scrub them off every once in a while, or the light won’t come in.” — Isaac Asimov