---
title: "Shreyas Patil's Blog"
description: "Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI."
image: "https://blog.shreyaspatil.dev/og.png"
---

# Hi, I'm Shreyas Patil

[RSS Feed](https://blog.shreyaspatil.dev/rss.xml)

Senior Android Engineer at **Deliveroo**. Google Developer Expert for Android. Passionate about Kotlin, Mobile Architecture, and Open Source.

Welcome to my personal blog where I share my thoughts, experiences, and technical tutorials. Check out my [Portfolio](https://shreyaspatil.dev/) for more info about my projects.

Social Links:[Shreyas Patil's Blog on GitHub](https://github.com/patilshreyas)[Shreyas Patil's Blog on X](https://x.com/imShreyasPatil)[Shreyas Patil's Blog on LinkedIn](https://www.linkedin.com/in/patil-shreyas)

## Recent Posts

- [![](https://blog.shreyaspatil.dev/_astro/cover-stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode.DqtpYBkn_2rJuVb.webp)](https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode)[### #63Stop Ignoring Compose Stability (Yes, Even with Strong Skipping Mode)](https://blog.shreyaspatil.dev/stop-ignoring-compose-stability-yes-even-with-strong-skipping-mode)3 Aug, 2026Strong Skipping Mode doesn't make Compose stability obsolete. Discover the hidden referential equality trap causing silent recompositions in your app.
- [![](https://blog.shreyaspatil.dev/_astro/cover-inside-subcomposelayout-jetpack-composes-most-misunderstood-api.cJKPADTC_1gDsFf.webp)](https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api)[### #62Inside SubcomposeLayout: Jetpack Compose’s Most Misunderstood API](https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api)10 Jul, 2026A deep dive into the internals of SubcomposeLayout in Jetpack Compose. Learn how subcomposition actually works, why it breaks the phase rules, and the real node-thrashing cost it carries.
- [![](https://blog.shreyaspatil.dev/_astro/cover-building-my-dream-developer-blog-with-astro-cloudflare-and-ai.YlRNyF1P_ZWtXV7.webp)](https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai)[### #61Building My Dream Developer Blog with Astro, Cloudflare, and AI](https://blog.shreyaspatil.dev/building-my-dream-developer-blog-with-astro-cloudflare-and-ai)20 Apr, 2026How I migrated my 60+ engineering blogs from Hashnode to a custom Astro setup on Cloudflare with the help of Google Antigravity AI.
- [![](https://blog.shreyaspatil.dev/_astro/cover-the-future-of-android-apps-with-appfunctions.BqdOiD9T_2jRkYO.webp)](https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions)[### #60The Future of Android Apps with AppFunctions](https://blog.shreyaspatil.dev/the-future-of-android-apps-with-appfunctions)30 Mar, 2026Explore the potential of Android AppFunctions for AI agents. Learn how apps can share functionality with intelligent assistants using self-describing functions.
- [![](https://blog.shreyaspatil.dev/_astro/cover-session-bridge-i-made-two-claude-code-sessions-talk-to-each-other.utSQKtK2_MJ7QR.webp)](https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other)[### #59session-bridge: I Made Two Claude Code Sessions Talk to Each Other](https://blog.shreyaspatil.dev/session-bridge-i-made-two-claude-code-sessions-talk-to-each-other)20 Mar, 2026Building 'session-bridge': A Claude Code plugin that allows separate AI sessions to communicate and share context across different repositories.
- [![](https://blog.shreyaspatil.dev/_astro/cover-exploring-compositionlocal-api-internals-in-jetpack-compose.fvBkcosn_16DPCk.webp)](https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose)[### #58Exploring CompositionLocal API internals in Jetpack Compose](https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose)9 Mar, 2026Deep dive into the internals of Jetpack Compose's CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.
- [![](https://blog.shreyaspatil.dev/_astro/cover-you-can-t-multitask-your-ai-agent-can.CDtIW9fr_Z1vsRDN.webp)](https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can)[### #57You Can't Multitask. Your AI Agent Can.](https://blog.shreyaspatil.dev/you-can-t-multitask-your-ai-agent-can)2 Mar, 2026Boost your productivity with AI agents. Learn how to delegate complex tasks to AI tools like Claude Code and Gemini to overcome human multitasking limitations.
- [![](https://blog.shreyaspatil.dev/_astro/cover-droidcon-debugging-app-performance-at-scale.Cpbtphar_1diuAG.webp)](https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale)[### #56DroidCon: Debugging App Performance at Scale](https://blog.shreyaspatil.dev/droidcon-debugging-app-performance-at-scale)19 Jan, 2026Recap of my DroidCon India 2025 talk on debugging Android app performance at scale. Watch the session and learn about performance profiling tools.
- [![](https://blog.shreyaspatil.dev/_astro/cover-a-simple-key-to-a-better-lazylist-in-jetpack-compose.CPKVZHSX_2vSNOn.webp)](https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose)[### #55A Simple key to a Better LazyList in Jetpack Compose](https://blog.shreyaspatil.dev/a-simple-key-to-a-better-lazylist-in-jetpack-compose)8 Oct, 2025Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.
- [![](https://blog.shreyaspatil.dev/_astro/cover-exploring-pausablecomposition-internals-in-jetpack-compose.DzUbTICL_1r8P8P.webp)](https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose)[### #54Exploring PausableComposition internals in Jetpack Compose](https://blog.shreyaspatil.dev/exploring-pausablecomposition-internals-in-jetpack-compose)14 Jul, 2025Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.
- [![](https://blog.shreyaspatil.dev/_astro/cover-deep-dive-into-annotations-in-jetpack-compose.DenxnPOw_ZodImK.webp)](https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose)[### #53Deep dive into annotations in Jetpack Compose](https://blog.shreyaspatil.dev/deep-dive-into-annotations-in-jetpack-compose)19 May, 2025An extensive deep dive into annotations in Jetpack Compose. Understand how @Composable, @Stable, @ReadOnlyComposable, and others work under the hood.
- [![](https://blog.shreyaspatil.dev/_astro/cover-understanding-dispatchers-main-and-mainimmediate.BDl5NICs_ZipbbY.webp)](https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate)[### #52Understanding Dispatchers: Main and Main.immediate](https://blog.shreyaspatil.dev/understanding-dispatchers-main-and-mainimmediate)2 Apr, 2025A deep dive into Kotlin Coroutine Dispatchers. Understand the subtle but important difference between Dispatchers.Main and Dispatchers.Main.immediate in Android.
- [![](https://blog.shreyaspatil.dev/_astro/cover-51-my-developer-blogging-journey-so-far.FSzKaezF_Z1DeY4.webp)](https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far)[### #51#51 - My developer blogging journey so far](https://blog.shreyaspatil.dev/51-my-developer-blogging-journey-so-far)18 Feb, 2025A personal account of my journey as a tech blogger, from my first post in 2019 to becoming a GDE. Insights on English barriers, criticism, and why sharing matters.
- [![](https://blog.shreyaspatil.dev/_astro/cover-benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose.rII8V07o_1Hqush.webp)](https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose)[### #50Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose](https://blog.shreyaspatil.dev/benchmark-insights-direct-state-propagation-vs-lambda-based-state-in-jetpack-compose)19 Nov, 2024Performance benchmarks of direct state propagation vs. lambda-based state in Jetpack Compose. Learn which approach minimizes recompositions for better UI performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-skipping-the-invocation-of-intermediate-composables.HfKt_krd_Z2lXtL1.webp)](https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables)[### #49Skipping the invocation of intermediate composables](https://blog.shreyaspatil.dev/skipping-the-invocation-of-intermediate-composables)11 Nov, 2024Learn how Jetpack Compose optimizes UI rendering by skipping intermediate composables. Understand how to design your UI for maximum performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea.97gvJmqw_Z21we6P.webp)](https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea)[### #48Kotlin Exception Handling: Why Singleton Exceptions are a bad idea](https://blog.shreyaspatil.dev/kotlin-exception-handling-why-singleton-exceptions-are-a-bad-idea)18 Sep, 2024Understand why using singleton exceptions in Kotlin can be a bad practice and how it affects stack traces and debugging in your applications.
- [![](https://blog.shreyaspatil.dev/_astro/cover-effortless-compose-compiler-report-analysis.BD7xTqJw_ZXaPsp.webp)](https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis)[### #47Effortless Compose Compiler report analysis](https://blog.shreyaspatil.dev/effortless-compose-compiler-report-analysis)20 May, 2024A guide to analyzing Jetpack Compose compiler reports easily. Learn how to diagnose stability and skippability of your composables for better performance.
- [![](https://blog.shreyaspatil.dev/_astro/cover-capturing-composable-to-a-bitmap-without-losing-a-state.BUugysfk_Z2tXncG.webp)](https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state)[### #46Capturing composable to a bitmap without losing a state](https://blog.shreyaspatil.dev/capturing-composable-to-a-bitmap-without-losing-a-state)20 Mar, 2024Learn how to capture a Jetpack Compose Composable as a Bitmap without losing its current state. A deep dive into capturing high-quality UI screenshots programmatically.
- [![](https://blog.shreyaspatil.dev/_astro/cover-rich-media-input-from-the-keyboard-in-compose.DGIXdtxf_Z2iiinQ.webp)](https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose)[### #45Rich media input from the keyboard in Compose](https://blog.shreyaspatil.dev/rich-media-input-from-the-keyboard-in-compose)1 Mar, 2024Learn how to handle rich media input (like GIFs and images) from the keyboard in Jetpack Compose, essential for modern chat applications.
- [![](https://blog.shreyaspatil.dev/_astro/cover-collecting-items-from-the-flow-in-chunks.C0GB2o1l_ZF6UBn.webp)](https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks)[### #44Collecting items from the Flow in chunks💦](https://blog.shreyaspatil.dev/collecting-items-from-the-flow-in-chunks)23 Oct, 2023Learn how to collect Kotlin Flow items in chunks or intervals without losing data. A practical guide to handling high-frequency data streams efficiently.

[Next Posts](https://blog.shreyaspatil.dev/posts/2)

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Shreyas Patil's Blog",
  "url": "https://blog.shreyaspatil.dev/",
  "description": "Senior Android Engineer @ Deliveroo. Google Developer Expert for Android. Writing about Android, Kotlin, and AI.",
  "author": {
    "@type": "Person",
    "name": "Shreyas Patil",
    "url": "https://shreyaspatil.dev/"
  }
}
```
