What problem does it solve? Jetpack Compose composables can be recomposed, skipped, or abandoned at any time, so running side work directly in a composable body causes duplicate network calls, leaked listeners, stale callbacks, and hidden lifecycle bugs. This Skill provides decision rules and code patterns for placing every kind of side work in the correct effect API. ## Core Features & Use Cases - Effect selection guidance: Maps each need (publishing state, registering listeners, keyed one-shot work, user-event launches, snapshot-to-Flow conversion) to the right API: SideEffect, DisposableEffect, LaunchedEffect, rememberCoroutineScope, or snapshotFlow. - Key and stale-capture rules: Explains how effect keys define restart identity and when to use rememberUpdatedState versus proper keying to avoid stale lambda captures. - Review checklist: Lists common mistakes and red flags such as LaunchedEffect(Unit) hiding changing inputs, missing onDispose cleanup, and event-flag state used to trigger effects. - Use Case: While reviewing a Compose screen that collects a Flow of snackbar events, use this Skill to confirm the collection belongs in a LaunchedEffect keyed by the event stream rather than in the composable body. ## Quick Start Ask the assistant to review your composable that uses LaunchedEffect, DisposableEffect, or snapshotFlow and check whether the effect keys and cleanup logic are correct.