Looking back at the XML days of Android development feels like looking at black-and-white television. It worked, but boy, was it clunky.

Today, in 2026, Jetpack Compose isn’t just “the new way”—it’s the only way that makes sense for modern Android apps.

Declarative is King

The shift from imperative (“find this view and set its text”) to declarative (“here is the state, describe how it looks”) has probably saved me thousands of hours of debugging weird UI states. No more null view references. No more findViewById.

Performance?

Early on, people complained about Compose’s performance on low-end devices. In 2026, those issues are largely gone. With the latest compiler optimizations and the maturity of the library, the overhead is negligible. Plus, the developer productivity gains far outweigh any minor performance cost.

The “Preview” Feedback Loop

My favorite part? The interactive previews. I can see how my component looks in dark mode, on a small screen, and in Hebrew (RTL support!) all at the same time, without even launching the emulator.

@Preview(showBackground = true, name = "RTL Check", locale = "iw")
@Composable
fun WelcomeScreenPreview() {
    MyTheme {
        WelcomeScreen("שלום עולם")
    }
}

Is it perfect?

Not yet. Navigation in Compose is still… a journey. Every team seems to have their own “perfect” wrapper around the official Navigation library. But compared to the Fragment-Hell of 2018, I’ll take it any day.

If you’re still holding onto XML layouts, it’s time to let go. The water is fine.