Crossing the chasm
Wait … this mobile stuff is not exciting anymore. You realize that you’re spending all your time fighting the platform and very little time actually building anything. Building is the fun part. Creating is the joy. When you remove the joy out of the equation, it’s no longer enjoyable and that’s when you start to wonder …
Is there something better out there? Something more fun that allows me to build things faster with quick feedback loops and more sane testing?
Donn Felker - The decline of mobile development
Oh boy, this hits close to home.
I love developing mobile applications. Building software to run on a piece of glass and aluminum and watching people use it every day is a magical feeling, unparalleled to anything else.
But the author is definitely onto something here.
Mobile phones are widely adopted now. The market is saturated. Innovation has slowed, and instead of getting big leaps, we end up with paper cuts. Remember when Apple first made the 3-axis gyroscope available to developers? People went crazy with it. You don’t get that feeling anymore.
Codebases have also grown a lot. A typical 15-year-old iOS codebase has seen a crazy pace of change, even multiple rewrites. If you started with Objective-C, you possibly
- migrated to another language (Swift),
- migrated to another UI framework (SwiftUI),
- used multiple concurrency paradigms, e.g., Grand Central Dispatch (GCD) and Combine,
- used multiple dependency managers, e.g., CocoaPods, SwiftPM, and Bazel,
- adopted multiple architectures, e.g., MVC, MVVM, VIPER, Composable Architecture,
- and used and deprecated so many third-party libraries.
This change of pace takes a toll on any codebase. And maintaining such a codebase is obviously less fun than building something from scratch.
Many development teams are suffering from this phenomenon already. They’re struggling to deliver and instead are fighting the platform they used to enjoy. On top of that, Swift is getting more complex, and it’s already slow. It’s not surprising to see people throwing in the towel and moving to greener pastures.
But people still have mobile phones. In fact, there are 6.8 billion of them. And your company, at some point, will ask you to deliver something that would run on their devices.
So, as a native developer, how do we get out of here?
My take is, start playing with Expo and React Native right away. If you’re building something new, Expo (and React Native) is mature enough to start with, and they come with tremendous gains in terms of productivity.
If you’re maintaining a native codebase, it’s a bit more complicated than that. There are success and failure stories out there, so you have to make up your own mind about it.
But even if your experiment fails, it might open your mind to a new world out there.