# Colin The Shots

Posts on Kotlin, mobile architecture, and on-device AI.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## AI Coding Best Practices for Today

DevFeed: [AI Coding Best Practices for Today](<https://devfeed.tech/articles/ai-coding-best-practices-for-today-37551.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/ai-coding-best-practices-for-today/>)

Published: 2026-02-25T21:59:05Z

Content type: tutorial

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [ai-coding](<https://devfeed.tech/topics/ai-coding.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [coding](<https://devfeed.tech/topics/coding.md>), [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [cursor](<https://devfeed.tech/topics/cursor.md>), [Development](<https://devfeed.tech/topics/development.md>), [Vulnerabilities](<https://devfeed.tech/topics/vulnerabilities.md>), [Code](<https://devfeed.tech/topics/code.md>), [Security](<https://devfeed.tech/topics/security.md>), [pair\_programming](<https://devfeed.tech/topics/pair-programming.md>), [Maintainability](<https://devfeed.tech/topics/maintainability.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [ai-coding-assistants](<https://devfeed.tech/tags/ai-coding-assistants.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [copilot](<https://devfeed.tech/tags/copilot.md>), [cursor](<https://devfeed.tech/tags/cursor.md>), [developers](<https://devfeed.tech/tags/developers.md>), [github-copilot](<https://devfeed.tech/tags/github-copilot.md>), [llms](<https://devfeed.tech/tags/llms.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [pair-programming](<https://devfeed.tech/tags/pair-programming.md>), [research](<https://devfeed.tech/tags/research.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

A practical guide to using AI coding assistants such as GitHub Copilot, Claude, and Cursor while managing risks in code quality, deprecated APIs, security, performance, and maintainability. It emphasizes human responsibility, reviewing all generated code, and verifying it with tests, linters, and personal judgment.

### Source excerpt

Why This Document Exists AI coding assistants like GitHub Copilot, Claude, Cursor, and others can significantly accelerate development. However, research shows they also introduce systematic risks:

## A satirical commentary on strategic ignorance in software work and leadership

DevFeed: [A satirical commentary on strategic ignorance in software work and leadership](<https://devfeed.tech/articles/what-is-code-37560.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/what-is-code/>)

Published: 2025-05-06T10:01:33Z

Content type: opinion

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [function](<https://devfeed.tech/topics/function.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>), [jira](<https://devfeed.tech/topics/jira.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [function](<https://devfeed.tech/tags/function.md>), [government](<https://devfeed.tech/tags/government.md>), [ide](<https://devfeed.tech/tags/ide.md>), [jira](<https://devfeed.tech/tags/jira.md>), [leadership](<https://devfeed.tech/tags/leadership.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

A satirical commentary argues that strategic ignorance can become a leadership style, applying the idea to software work through empty pull requests, riddling estimates, emotionally framed Jira tickets, and disengagement from technical understanding.

### Source excerpt

The President said this week that he isn't sure if he's supposed to uphold the Constitution or if it's all just historical fanfic. The State Department spokesperson said she doesn't know what Marco

## Lessons Learned Releasing the Markdown Twain Jetpack Compose Library

DevFeed: [Lessons Learned Releasing the Markdown Twain Jetpack Compose Library](<https://devfeed.tech/articles/the-road-less-starred-lessons-learned-from-my-markdown-twain-library-37556.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/perfectly-imperfect-lessons-learned-from-my-markdown-twain-library/>)

Published: 2024-04-22T15:47:29Z

Content type: opinion

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Library](<https://devfeed.tech/topics/library.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Maven Central](<https://devfeed.tech/topics/maven-central.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [maven-central](<https://devfeed.tech/tags/maven-central.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

A software developer recounts releasing Markdown Twain, a WYSIWYG Markdown editor for Jetpack Compose, as open source. The article explains how rushed packaging and configuration, including Maven publishing and testing against source code instead of Maven Central, obscured errors and provides lessons from the release.

### Source excerpt

Introduction As a seasoned software developer deeply immersed in the world of Android, Kotlin, and Jetpack Compose, I've always been driven by a passion for creating tools that empower developers. My

## Simplifying Navigation in Multi-Module Android Apps with Compose Destinations

DevFeed: [Simplifying Navigation in Multi-Module Android Apps with Compose Destinations](<https://devfeed.tech/articles/simplifying-navigation-in-multi-module-android-apps-with-compose-destinations-37558.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/simplifying-navigation-in-multi-module-android-apps-with-compose-destinations/>)

Published: 2023-12-21T16:27:04Z

Content type: tutorial

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [navigation](<https://devfeed.tech/topics/navigation.md>), [Android](<https://devfeed.tech/topics/android.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose-destinations](<https://devfeed.tech/tags/compose-destinations.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [modules](<https://devfeed.tech/tags/modules.md>), [navigation](<https://devfeed.tech/tags/navigation.md>)

### AI overview

A Meetup engineering blog explains how its Android apps use Compose Destinations to implement navigation across Compose modules while avoiding legacy modules. It describes type-safe navigation, data-return handling, Gradle and KSP setup, and a simpler alternative to complex nested navigation graphs.

### Source excerpt

In the world of Android development, we are often judged by the company and the app libraries we choose to keep. Our journey at Meetup, developing both the "Meetup" and "Meetup for Organizers" apps,

## I Know Nothing in Kotlin

DevFeed: [I Know Nothing in Kotlin](<https://devfeed.tech/articles/i-know-nothing-in-kotlin-37554.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/i-know-nothing-in-kotlin/>)

Published: 2022-08-30T17:52:35Z

Content type: tutorial

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [kotlin multiplatform mobile](<https://devfeed.tech/topics/kotlin-multiplatform-mobile.md>)

Tags: [coroutines](<https://devfeed.tech/tags/coroutines.md>), [exception-handling](<https://devfeed.tech/tags/exception-handling.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform-mobile](<https://devfeed.tech/tags/kotlin-multiplatform-mobile.md>), [refactor](<https://devfeed.tech/tags/refactor.md>)

### AI overview

This developer article explains Kotlin's Nothing type through a refactoring example involving exception handling in a shared Kotlin Multiplatform Mobile repository. It distinguishes Nothing from Unit and describes using it when a function always throws, including when interoperating with Swift code and preserving coroutine cancellation.

### Source excerpt

When the Greek philosopher Socrates professed that "I know only one thing-- that I know nothing," he wasn't exactly professing ignorance. It was an ancient formulation of the Dunning-Kruger effect.

## Managing State and Persistence with remember() in Jetpack Compose

DevFeed: [Managing State and Persistence with remember() in Jetpack Compose](<https://devfeed.tech/articles/remember-remember-jetpack-compose-37557.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/remember-remember-jetpack-compose/>)

Published: 2022-01-12T19:41:23Z

Content type: article

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [ui](<https://devfeed.tech/topics/ui.md>), [saving](<https://devfeed.tech/topics/saving.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [remembersaveable](<https://devfeed.tech/tags/remembersaveable.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [saving](<https://devfeed.tech/tags/saving.md>), [stateless](<https://devfeed.tech/tags/stateless.md>)

### AI overview

This article explains how to use remember() in Jetpack Compose and when to choose rememberSaveable() or persistent storage. It recommends remembering only essential data, using rememberSaveable() for state that must survive rotation, and persisting larger or longer-lived data through a ViewModel.

### Source excerpt

During the first Kotlinconf in 2017, I asked Google for some kind of declarative user interface (UI) framework for Android. Specifically, I approached Stephanie Cuthbertson and Yigit Boyar at that

## Undetected NDK crashes during a Firefox Focus Android release

DevFeed: [Undetected NDK crashes during a Firefox Focus Android release](<https://devfeed.tech/articles/the-bug-that-stole-xmas-37559.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/the-bug-that-stole-xmas/>)

Published: 2020-10-05T18:08:05Z

Content type: opinion

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Firefox](<https://devfeed.tech/topics/firefox.md>), [Android](<https://devfeed.tech/topics/android.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>), [Google](<https://devfeed.tech/topics/google.md>), [browser](<https://devfeed.tech/topics/browser.md>), [releases](<https://devfeed.tech/topics/releases.md>), [bug](<https://devfeed.tech/topics/bug.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [code](<https://devfeed.tech/tags/code.md>), [crash-reporting](<https://devfeed.tech/tags/crash-reporting.md>), [crashes](<https://devfeed.tech/tags/crashes.md>), [dashboards](<https://devfeed.tech/tags/dashboards.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [releases](<https://devfeed.tech/tags/releases.md>), [reporting](<https://devfeed.tech/tags/reporting.md>), [sentry](<https://devfeed.tech/tags/sentry.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

A Mozilla engineer recounts how Firefox Focus 8.0.4 for Android developed previously undetected NDK crashes during its Christmas 2018 production rollout. Sentry and Socorro missed crashes occurring inside Chrome WebViews, while Google Play Console exposed them as the rollout expanded.

### Source excerpt

I loved working at Mozilla for the almost two years that I spent there. But even a great job has hard days. The weeks around Christmas of 2018 were a stressful nightmare. I'd been working as the

## Fixing the Initial Dispatchers.Main Delay in Kotlin Coroutines

DevFeed: [Fixing the Initial Dispatchers.Main Delay in Kotlin Coroutines](<https://devfeed.tech/articles/a-dispatcher-of-many-threads-37550.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/a-dispatcher-of-many-threads-part-1-2/>)

Published: 2019-12-19T03:02:18Z

Content type: tutorial

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [kotlin-coroutines](<https://devfeed.tech/topics/kotlin-coroutines.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [builds](<https://devfeed.tech/tags/builds.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-coroutines](<https://devfeed.tech/tags/kotlin-coroutines.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

This article explains an initial delay of up to a quarter second when Android apps first use Kotlin Coroutines' Dispatchers.Main. It attributes the delay to ServiceLoader triggering a checksum of the entire JAR inside the APK and describes a stable fix using Kotlin coroutines 1.3.3 or higher, required Proguard rules, and R8 optimization.

### Source excerpt

Kotlin Coroutines have been almost unanimously received with applause by the Android software development community. However, there are some significant issues I have noticed in practice that are

## Live coding a browser in Kotlin

DevFeed: [Live coding a browser in Kotlin](<https://devfeed.tech/articles/live-coding-a-browser-in-kotlin-37555.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/live-coding-a-browser-in-kotlin/>)

Published: 2019-12-17T17:25:49Z

Content type: tutorial

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [browser](<https://devfeed.tech/topics/browser.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Mozilla](<https://devfeed.tech/topics/mozilla.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [coding](<https://devfeed.tech/topics/coding.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [browser](<https://devfeed.tech/tags/browser.md>), [coding](<https://devfeed.tech/tags/coding.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlinconf](<https://devfeed.tech/tags/kotlinconf.md>), [learn](<https://devfeed.tech/tags/learn.md>), [live](<https://devfeed.tech/tags/live.md>), [mozilla](<https://devfeed.tech/tags/mozilla.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

A video demonstrates live coding an Android web browser in Kotlin using Mozilla's open source Android Components and GeckoView engine.

### Source excerpt

I recently live coded an Android web browser on stage at KotlinConf 2019 in Copenhagen. You can check it out and learn all about how to use Mozilla's open source Android Components and our GeckoView

## Colin Lee joins Mozilla as a Senior Android Engineer working on Firefox Android products

DevFeed: [Colin Lee joins Mozilla as a Senior Android Engineer working on Firefox Android products](<https://devfeed.tech/articles/colin-now-sly-as-a-firefox-37552.md>)

Original publisher: [Read original article](<https://colintheshots.com/writing/colin-now-sly-as-a-firefox/>)

Published: 2018-07-30T19:22:10Z

Content type: opinion

Language: en

Sources: [Colin The Shots](<https://devfeed.tech/sources/colin-the-shots.md>)

Topics: [Mozilla](<https://devfeed.tech/topics/mozilla.md>), [Firefox](<https://devfeed.tech/topics/firefox.md>), [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mozilla](<https://devfeed.tech/tags/mozilla.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [software](<https://devfeed.tech/tags/software.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

Colin Lee announces that he has joined Mozilla as a Senior Android Engineer working on Firefox Android products. He plans to write about his open-source Android development work, initially using Kotlin in projects that include existing Java source.

### Source excerpt

Colin Lee from ColinTheShots LLC just joined Mozilla as the newest Senior Android Engineer working on Firefox Android products. I'll be changing my professional consulting site to function as a blog.