The rise of the full-stack native mobile app developer
At the end of the 90s I was still (sort of) studying at the university. I did some small gigs as a web developer (before the terms front- and back-end existed) and was also teaching this topic at the university. These were happy days for anyone with basic knowledge of HTML and CSS. Everybody needed a web site (or homepage, as we called it back then), so there was plenty of work. Lots of people dropped out of university to join one of the many web bureaus that popped up.
Things quickly changed with the dot-com crash at the end of the millennium. Most of the companies that were doing basic web design disappeared as just a basic web site was no longer enough. Just knowing the web technologies for the browser was not enough anymore. The need for back-end developers skyrocketed instead and we still see an increasing need of this skill today.
Today we speak of back-end, front-end and full-stack developers, but in this we usually don’t include the native mobile app developers (iOS and Android). We’re not seeing a decrease in the need for native apps and there is no sign that web technologies will replace native apps any day soon. Even if we would only have Android smart phones with Chrome as the standard browser, we would probably never see web technologies replace native apps completely. In any case, while we have three (not counting desktop native apps) front-end stacks today (web, Android and iOS), we still only think about web when talking about full-stack or front-end. I believe this will change soon. Probably sooner than you expect.
A common outsourcing service today are the mobile agencies. These are companies that more or less focus entirely on mobile app development, leaving the back-end development to their client. Lots of apps are developed like this. Here in Sweden, many of the most common apps are basically outsourced to a mobile agency. While it still works, I believe it is not sustainable for long. Like the demise of the web design (i.e., front-end only) agencies of the late 90s, the mobile agencies we see today will have to adapt and become full-stack, or become obsolete. If you’re only doing native mobile app development today, it is time to learn some back-end technologies.
There is a really great presentation by Duana Stanley from SoundCloud on how they started doing micro-services for their clients. One of the key take-aways is that each client should own their own endpoints. Simply speaking, the team doing the Android development is responsible for the micro-services exposing the endpoints they consume. This proved hugely successful for SoundCloud, as well as for many other companies that provide clients using different technologies (e.g., web, embedded, iOS, Android etc.). While some people might argue for a common, shared API for all clients, it tends to impede the development pace of the different clients as it creates a bottleneck in that team. Also, each client is different with different requirements, and eventually you will end up with two or more conflicting requirements in your API, requiring you to create a client-specific end-point.
A micro-services architecture is very suitable for handling these kinds of challenges. The end-points owned by the respective client-team don’t need to be very complicated. In fact, in the beginning they will probably be identical in many cases across different clients. However, by ensuring that each client has its own endpoint (e.g.,
/api/android/v1/articles/search), the teams can freely adapt the input and output according to what works best for their platform.
Another reason why mobile developers would need skills in back-end development is to gain an understanding on the challenges in that layer of the system. I’m surprised how many of the app developers I meet today lack an understanding of the performance implication involved when exposing a REST API. For example; traditional SQL databases on the backend won’t disappear any time soon, but clients are expecting an ever more complicated response from the API they call (e.g, complex JSON hierarchies and GraphQL). Mobile app developers who understand the challenges here are more likely to “survive” a shift in the industry.
It also makes sense from a business perspective. Why do you outsource the app development, completely disconnecting the consumer-facing part of your system from your core business development? Outsourcing is something you should do with stuff that are stable and in maintenance. Not with the constantly evolving things like client-side applications. It is interesting to see that companies outsource mobile app development, but still keep the web-development in-house. This will likely change very soon, as the product owners in these companies realise that they lack the control they need to make the best return of investment.
Will this mean that every iOS and Android developer will have to learn how to write back-end code? Probably not. There is still a need for pure front-end developers for the web, but a full-stack developer is getting paid better and have a wider selection of jobs. The same will go for a full-stack developer with Android/iOS AND backend. Even better, combine two (or three) front-end technologies with a backend stack. You can always specialise in one, but the important thing is to be proficient enough vertically to be able to pitch in where needed.
So as an iOS or Android developer, what do you need to learn? What back-end technologies are most in demand and future-proof?
As always, it depends. However, the obvious and perhaps boring answer is to learn Java and/or .NET. These are still the most common back-end technologies in use and it won’t change in the near future. Other technologies, like NodeJS, Python, Ruby, Go and Scala, are also popular, but not remotely as common as Java or .NET. Sounds boring? Don’t worry, you can still use Rx and Dependency Injection on the back-end as well. :)
What is going to happen with all these mobile agencies? Well, I might be completely wrong: maybe they will survive and companies will keep outsourcing the native mobile app development. However, the trend to move the app development back in-house is already happening. The obvious change will be that these agencies will transform into traditional consultancy firms. That’s what happened to the web developer companies that survived the dot-com crash in the 90s, and it will happen again with every specialised skill set that eventually becomes main-stream.
My tip to the (native) mobile app developer at one of these agencies is to start learning a useful backend stack (not the one that seems more fun). Think about what you want to do when your current employer can no longer sustain their business once their clients starts bringing the app development in-house. Do you want to work as a regular consultant, do freelancing or join a product team as an employee?