A few months of working with and using DEV's mobile apps (a.k.a. the first Forem) have taught me a lot. The most striking lesson learned was probably how strategic decisions can have a major impact in the productivity of a team.
I was already interested in WebView based technologies before joining the team, but once I got to see how a well-oiled machine is able to iterate and improve a project like Forem I find it baffling this isn't a more broadly used approach for mobile development. If it wasn't obvious, the well-oiled machine I'm referring to is the Forem core team and the amazing community contributors.
No two projects have the same needs and that's why lots of different technologies coexist, which is great for everyone. In our case though, it would've been pretty hard to keep up the pace of new features released & refactors with such a small mobile team. By relying on a native shell app that wraps a WebView we suddenly benefit from every enhancement released without having to wait for store review most of the time!
To name just a few of these recent features released/refactored/enhanced:
- New Moderation tool
- Site Announcements & Campaign Banners
- Connect Chat iterations
- Custom Codeland conference page
- New Liquid Tags
- Lots of gradual visual improvements throughout the site
- Many more...
These features would've required API development, design + assets, and the actual mobile development. Instead they were available the moment our CI deployed to Heroku with 0 lines of Kotlin/Swift code 🤯
Not everything is perfect of course! By living inside a WebView we're giving up on Native performance in a way, but there are also ways to bridge that gap.
Whenever you listen to a podcast in the Android or iOS apps the audio playback is using native APIs, which allows for background (locked screen) streaming. Haven't tried it yet? Go check out the DEV News podcast 😉
More recently on Android (coming soon to iOS), a fully native player is summoned to stream HLS video when interacting with an Article living inside the WebView. If you're using the most recent Google Play release I can suggest Salary Negotiation for People That Hate To Negotiate with Josh Puetz, or any other video content available in DEV!
All of these integrations will work out of the box for Forem! If we decide to continue down this path, an approach very similar to the Forem browser extension means every Forem instance will have an app to rely on, which in turn, benefits from the hard work put into the Forem core codebase.
I'm very excited to hopefully help share this concept soon.
There are areas we know have a lot of potential (which require a bit of work + time to get right) and they fall on either the core forem web repo or the mobile apps.
This is the time and place to hear about the features everyone wants for their mobile experience! Here are a few of mine also inspired by feedback:
- Service Worker tuning for better performance (web app)
- Smooth experience to switch between available Forem instances (mobile apps)
- Good integration to jump between mobile browsers and the Forem native app (web & mobile apps)
- Touch/Face ID support for authentication (web & mobile apps)
- Android & the iOS new Widgets (web & mobile apps)
A great thing about using WebViews IMO is that we can choose which features we want to develop fully natively and which ones to delegate to our web stack.
As mentioned in the design ethos of DEV's apps: Life's a journey, not a destination. So whether we eventually phase out WebViews entirely or not I only hope it will be a fun journey while empowering communities 🌱