Jetpack Compose: Optimism and Opportunity

When Google announced Jetpack Compose at Google I|O, I held out modest hope that it might come to fruition. A re-envisioning of the Android UI rendering system, with an eye towards React/Redux-style composable functions, sounded promising. On the other hand, not everything that gets announced at Google I|O winds up actually being released and having an impact. Last year’s excitement surrounding slices would be a recent example.

(for those of you who spent time reading my stuff on slices… um, sorry!)

However, yesterday, Apple announced their own take on this same sort of UI construction system, called SwiftUI.

Now, I feel much more optimistic that Jetpack Compose will be “for realz”. There is nothing like a bit of competitive pressure to help spur things along.

My hope now is that Jetpack Compose, and the overall environment around it, will not only update the UI rendering at the widget level, but will also help us get broader adoption of “encouraged” UI modes.

At Google I|O, developers were “encouraged” to support dark mode and “strongly encouraged” to implement immersive or edge-to-edge designs, in support of new Android Q stuff.

Meanwhile, in the real world, we have difficulty getting designers and developers to support landscape mode, which has been around since Android 1.0.

At our current pace, widespread support for dark mode will come when the Sun goes out. At that point dark mode will become rather important.

The lineup of UI things that we are “encouraged” to support overall is rather extensive:

  • Landscape mode
  • The full range of screen sizes, from tiny phones to large tablets/Chrome OS devices
  • Split-screen mode and freeform multi-window mode
  • Hardware keyboard/mouse input, including support for things like keyboard-based focus changes
  • Dark mode
  • Edge-to-edge designs (while still somehow not conflicting with the back gesture, which is something I may rant on some other time…)
  • And so on

That’s not even including substantially different form factors, like Android TV, Android Auto, or WearOS.

Some of this is on developers. While a lot of these UI things come “for free” in part, some require some amount of opt-in from developers and most require some amount of manual adjustment. Not everybody does that.

Some of this is on designers and the creators of design tools (e.g., Zeplin). One way or another, designs need to take these things into account, so that the developers know what is expected. If, instead, designs are based around a single screen size in a single orientation in a single theme, either developers have to make educated guesses about how to handle other scenarios, or developers have to take steps to explicitly ignore those other scenarios. That’s why we wind up with lots of apps whose activities are locked to portrait, which do not scale on tablets especially well, which shine brightly in a dark room, etc.

Jetpack Compose and SwiftUI will change mobile UI development significantly. This is a golden opportunity for us to try to get better adoption of these other UI modes. Some of that might come from even more of it being handled “for free”. Some of that might come from just simpler APIs — for example, tying hot-key sequences to particular UI elements. And some of that will (hopefully) come from developers of design tools taking this opportunity to steer designers towards designing around these various options.

I may be pinning too many hopes on Jetpack Compose. However, we only get this sort of “sea change” every so often. Big shifts in technology are our best opportunity to get big shifts in design and development processes.

In the meantime, perhaps the wizards of Cupertino could get Google doing more in other areas. After all, you would think that Apple slices would be a thing.