One of the most undervalued elements in high performing agile teams is cross functionality of skills. As Jeff Sutherland explains in his book Scrum: The Art of Doing Twice the Work in Half the Time, he references a U.S. Special Forces team who are cross trained in medical assistance, and weapons. This ensures the team has all the necessary skills to complete the mission, from start to finish. This concept really breaks down with mobile developers, especially with the gap in skill sets with native mobile developers.
Small engineering teams that have native developers in their composition usually allow native developers to have to a limited contributions to web front-end development, and even more limited back-end contributions. The same cannot be said for other “full-stack” developers contributing the other way.
Alternatively, they break off the native teams independently and only have them contribute by platform. Want to reach a new audience by developing an app on another platform? Create a new team. This is difficult and expensive to scale, not to mention you’re adding risk by allowing the separated teams to be bottlenecked by any particular task. This also limits knowledge exchange and collaboration between developers and does not create a culture or environment for teaching each other. This can also create a culture of individual code ownership which can lead to individuals defensive about their code and other individuals thinking areas of code is not their responsibility.
Learn Once, Write Anywhere
JavaScript is one of the most commonly used languages today and React Native can de-silo teams to be more cross-functional because it optimizes for a common syntax that can be used for multiple platforms.
Artsy has a really good write-up of their experience using React Native in a new project without having to create a new team. This is proof that React Native can have an impact on existing teams, rather than only choosing React Native upon a creation of a team.
The need for “native knowledge” is still needed to make exceptional apps but does not require an entire team of native developers. This is an advantage when building a team, where you don’t have the distraction of trying to hire “rockstar developers” for one platform when you should be looking to build a 10x team.
Last Mover Advantage
Appcelerator has had cross a platform development solution with JavaScript for native apps called Titanium. React Native has a few advantages:
- ReactJS – Gaining popularity fast. Having a widely used web tool reduces friction in trying React Native. By being a web tool first, it can gain early adopters that are “Team Web” who are advocates of JS being the language of choice for developing native apps.
- Developer Experience – Unlike Titanium, React Native doesn’t have the barrier of license fees and IDE’s.
- The Facebook brand for developers – They’ve come a long way from “move fast and break things”. With each open source project or platform they’ve released, they’ve been showing more of their craft at work. (I’ve always marveled at the Facebook iOS team and some of the engineering challenges they’ve taken on and solved.)
Not For Everyone
It’s still a bit early. Breaking changes, out-dated stack overflow posts, hard to find best practices and solutions in Google searches and very few team case studies.
This shouldn’t stop teams from experimenting with React Native. If teams aren’t looking for ways to self improve, then they don’t fully understand Agile.