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.