In the mobile space, the iOS and Android versions of the same app typically have substantially different code-bases (for obvious reasons), unless they are not actually native but merely a wrapped web app. Assuming going native is the correct development strategy for teams large enough to direct resources at each platform, what is the best strategy for maintaining these two code bases? I can think of several off-hand.
1) Picking a true cross-platform stack or technologies. (In the desktop, an example would be creating a Python app with a cross-platform widgets library. A more common example is doing everything through the browser).
2) Port. Complete development of the version with better expected returns first (e.g. iOS) and then port the version (or have a porting team do it, while the original team is continuing development on the next version, and after that's done that gets ported). This reminds me of desktop apps that targeted Windows first and then had a team prepare a Mac version. These days it becomes less and less clear what "one" platform to target first.
3) ifdef type "cross-platform" hell. Maybe the code base should be in a single "cross-platform" branch, and every feature should be added incrementally such that it is only committed when it works on every platform. Is this even possible between iOS and Android?
4) parallel development. There is no porting, just two teams, an iOS team and an Android team, and they don't communicate much, except for working from the same requirements.
5) a core functionality team that makes something multiplatform, and then has the code-base finished by an iOS and Android team respectively? The why-Microsoft-didn't-port-SQL-Server-to-Unix article linked here a few days ago mentions this:
"For example, do you follow a philosophy that says the core team just worries about Windows and throws the Windows product over the wall to a team that adapts it to *nix? Or do you reorganize everything so you have a core team that builds multi-platform software and then teams that adapt it to the various platforms (which is what true multi-platform companies do)?"
http://hal2020.com/2011/07/27/porting-microsoft-sql-server-to-linux/
It seems that although desktop software is becoming less relevant, native mobile apps are as relevant as ever. What are your best experiences of substantial multi-platform iOS and Android development? Or native Mac and Windows software for that matter!
I am especially looking for high-level strategies that will scale to larger teams while continuing to target both iOS and Android, so if you have advice on how to start out small while targeting both these platforms, with an expectation to grow the team(s) substantially, I'd love to hear it!