Goodbye XML

No more context switching between Kotlin and XML. Logic and UI live together. The UI is a function of the state.

Thinking in Compose

UI elements are functions, not objects. You don't 'mutate' a TextView; you call the Text function again with a new string. This shift is profound.

State Hoisting

Pass state down, pass events up. Keeping components stateless makes them reusable and testable. Hoist state to the ViewModel.

Lazy Lists

RecyclerView replacement. LazyColumn is exponentially easier to implement. No adapters, no viewholders. Just a loop.

The Modifier System

Composition over inheritance. Chain modifiers (padding, click, background) to define behavior and look. Order matters!

Interoperability

ComposeView in XML, AndroidView in Compose. Migration is gradual. You can rewrite one button or one screen at a time.

Performance

Compose is fast, but easy to misuse. Use R8, enable baseline profiles, and skip unnecessary recompositions for smooth scrolling.