Building your app cross-platform can be dangerous, especially for startups
The endless debate. Cross-platform or native?
I have sat in many a meeting discussing this question. Do we go cross-platform? Or do we got native?
I’ve had to reap the consequences of both concluding decisions. I’ve worked on 15+ native iOS applications. I’ve worked on 2 cross-platform applications. (specifically Ionic). My conclusion…
Be very careful before you rush into building your app cross-platform for 2 reasons.
- You may encounter an issue that is more difficult to handle cross-platform native.
- Cross-platform tools are an additional layer to native. So you may run into issues where the implementation of a feature is vastly inferior. Or sometimes non-existent.
Hardware features: Similar to UI rendering, access to hardware features is realized differently on each platform. On top of that, the same type of feature — the near-field communication (NFC) radio, say — may work differently on each platform, or may be accessible on one platform but not the other. It was only recently that Apple allowed third-party app access to the iPhone’s NFC radio, and then only in a limited way; Android has allowed unfettered access to device NFC radios for a long time.
Using a cross-platform tool is a gamble because you don’t know when you’re going to run into an issue like above. The issue that you encounter could be one that vastly affects your timeline.
A friend of mine decided to use Ionic for his latest application. Everything went smoothly until he had to handle remote notifications in iOS. Android was easy, but he ran into a ton of problems with iOS. It took him 2 months to solve the issue. Something that should only take half a day.
Now you may be thinking, ‘This happens all the time in development.’ And there is some truth in that statement. But the big issue is the added layers of technology that cross-platforms tools use to integrate with the native platforms’ frameworks. This means more opportunities for the above scenarios to rise.
When building native, you’re using native libraries directly. With cross-platform tools, you’re relying on a plugin or the tool itself to access these libraries for you.
Any added layers of technology mean added layers of complexity. This means more opportunities for bugs. And the bugs are more difficult to debug because you might not know where the issue lies. Is it in your code, is it in the plugin, is it in the way that the library is being interacted with?
A company had an Ionic web application built. They wanted to release an iOS and Android version. Seemed simple enough since the app was already built using Ionic.
First, we had cookie issues because the way cookies are handled changed in iOS 13. That problem took forever to solve. Cookies just stopped working with no error messages to explain what was happening. Had to stop using cookies but only after much research and failed attempts.
Then we had issues with moving from UIWebView to WKWebView.
These issues were aggravated by the fact that we were dealing with horrible error messages and silent errors. Why? Because there are additional layers of technology and tons of hidden magic happening behind the scenes.
We finally got everything working. But in the time we spent solving these issues, I wrote 2 native iOS applications and 1 React website as side-projects. Going cross-platform cost that company much more time and money.
Also, iOS and Android are always changing. They’re adding new features and making constant updates to their frameworks. Cross-platform tools are having to scramble to keep up.
What happens if iOS makes a change that breaks something in the cross-platform framework and you have to wait for them to update their tool?
If you go to StackOverflow, you’ll see that this is an issue. It’s a killer.
Most people choose cross-platform in the hope of saving time and money while still having the broadest reach possible. But as you can see from the above stories, companies don’t always save time and money taking this approach.
For a startup going cross-platform can be even more dangerous. Running into issues like those mentioned above can be a major financial setback. For startups, finances are limited.
Building for 2 platforms is always more difficult than building for 1
With your startup, the initial goal is always to validate an idea or product. That can and should be done on one platform.
Startups exist not to make stuff, make money, or serve customers. They exist to learn how to build a sustainable business. This learning can be validated scientifically, by running experiments that allow us to test each element of our vision. — startuplessonslearned.com
This learning, and iteration cycle, is far easier on one platform.
Having to make changes on one platform is always easier than on two. I don’t care what tool you’re using. Spreading your focus across multiple technologies is always more complex. In your early stages, you don’t want added complexity. Added complexity leads to wasted time and energy.
In the beginning, keep it simple. When your idea is validated, you can branch out to other platforms. But don’t do this prematurely.
At the early stages, what’s most important is feedback and iteration. You must be able to iterate quickly. Iterating on two platforms is always slower than iterating on one platform.
Instead of being worried about being on all the different platforms, focus on one. Get feedback from your users and iterate, iterate, iterate as quickly as possible. Conquer that platform.
Once you’ve built a stable product with traction, then branch out. But until you have a stable, tested, validated product on one platform, stay on one platform.
Going cross-platform does not guarantee less money and less time. It can actually sometimes be the opposite.
It will always be more difficult to support two applications than one. So stay on one platform until it makes sense to move to another.
You also never know when you’re going to encounter a crippling scenario on one or both platforms.
I know it sounds like I’m saying to stay completely away from cross-platform. But that’s not the case. Cross-platform has it’s place. But sometimes people are too quick to rush into it and they don’t realize their mistake until it’s too late.
There are large companies out there who use cross-platform tools like React Native. (React Native is amazing, check it out if you haven’t)
But before going down that route make sure you do a lot of research. Don’t jump in headfirst at the dream of spending less and getting more. You may realize you’re diving into a very shallow pool.
In the future, I’ll be writing about the advantages of React Native. I do not like Ionic at all, so I’ll be writing about why I dislike Ionic in the future as well.