Amanda Hinchman-Dominguez

@amanda-hinchman.bsky.social

Android | co-org of Chicago Kotlin User Group, coauthor of O'Reilly's "Programming Android w/ Kotlin" | Probably other stuff Patreon: https://www.patreon.com/AmandaHinchman

This week on Patreon: do you know how to read performance graphs? Being able to read and interpret performance graphs can help detect leaks & deadlocks in concurrency, prevent false performance conclusions, and validate E2E optimizations www.patreon.com/AmandaHinchm...

[Notecard] How to Read Performance Graphs | Amanda Hinchman-Dominguez

[Notecard] How to Read Performance Graphs by Amanda Hinchman-Dominguez on Patreon. Join Amanda Hinchman-Dominguez's community for exclusive content and updates.

patreon.com

Ever had production crashes that didn't show up in your analytics? They're silent coroutine scope leaks, unhandled structured concurrency failures, and swallowed exceptions that bypass your logging entirely. Join me at KTConf for a pre-conference workshop to learn how to do coroutine forensics.

Are your users seeing crashes and dropped work that never show up in your telemetry? Silent coroutine leaks and swallowed cancellations are a nightmare to debug in production.

🎟️ Join the Kotlin Coroutines Forensics Masterclass at KTConf to learn how to diagnose, trace, and resolve asynchronous failures for good.

Check out @pamelaahill.bsky.social's video on #Kotlin 2.4! She covers so many topics. My favourites: - Context parameters & explicit context arguments - Collection literals - Compile-time constants - Uuid - New Map functions - Swift import & Concurrency Blog: kotlinlang.org/docs/whatsne...

Pamela Hill-Galloway@pamelaahill.bsky.social · 4w ago

My latest video for the Kotlin channel is out! There are some nice juicy features in this release - check it out! www.youtube.com/watch?v=RI4J...

NEW — Dozens of recipients of the Illinois Youth Investment Program are asking Gov. JB Pritzker and the Illinois General Assembly to support funding for the program. They say nearly 5,000 Illinois youths will lose work this month because of budget cuts. thetriibe.com/2026/08/comm...

Community organizations urge Gov. Pritzker to restore funding for 5,000 Illinois youth jobs at risk • The TRiiBE

59 community organizations want the Illinois General Assembly to work with the governor to keep employing the youth.

thetriibe.com

So I'm reading "A Philosophy of Software Design". When a team bans documentation for "self-documenting code", you often end up with shallow wrappers like this. This passes cognitive load to the reader, and conflates code with intent. Good documentation isn't a code-smell when it's a deep module 😉

Here is an extreme example of a shallow method, taken from a project in a
software design class:
private void addNullValueForAttribute(String attribute) {
data.put(attribute, null);
}
From the standpoint of managing complexity, this method makes things worse,
not better. The method offers no abstraction, since all of its functionality is
visible through its interface. For example, callers probably need to know that the
attribute will be stored in the data variable. It is no simpler to think about the
interface than to think about the full implementation. If the method is
documented properly, the documentation will be longer than the method’s code.
It even takes more keystrokes to invoke the method than it would take for a caller
to manipulate the data variable directly. The method adds complexity (in the
form of a new interface for developers to learn) but provides no compensating
benefit.

This week on Patreon: Finally dug a little bit into K2 stabilization updates - up until last year, they were changes most significant to compiler engineers and build tool authors. Now, there are now language features everyone can tangibly see and use. Pretty slick. www.patreon.com/AmandaHinchm...

[Deep Dive] A Stabilized K2 Compiler (Updated 2026) | Amanda Hinchman-Dominguez

[Deep Dive] A Stabilized K2 Compiler (Updated 2026) by Amanda Hinchman-Dominguez on Patreon. Join Amanda Hinchman-Dominguez's community for exclusive content and updates.

patreon.com

So why isn't Fox news televising interviews of all the happy people who live near data centers so we can hear what a treat it is to live with the constant noise, lights, increased utility costs and non-existent new jobs?

Sighted users often use bold or large fonts to create the appearance of headings in documents. People using screen readers have no way of understanding these visual cues. Use heading styles from the styles menu to correctly format headings.

Engineers, this coroutines puzzle is for you! Take a look at the code. The request failed, and requestScope.cancel() was explicitly called in onFailure. Why is the OCR engine still running in the background? You have 24 hours 😉 Check again in a day for the answer and part 2 of this challenge.

The request failed, and requestScope.cancel() was explicitly called in the onFailure block. Why is the OCR engine still running in the background?

fun processUpload(requestScope: CoroutineScope): CoroutineScope {
    val processScope = CoroutineScope(requestScope.coroutineContext + SupervisorJob())

    processScope.launch {
        while (isActive) {
            println("   Processing PDF OCR chunk...")
            delay(30.milliseconds)
        }
    }

    throw IOException("Client disconnected!")
}

fun main() = runBlocking {
    val requestScope = 
            CoroutineScope(Dispatchers.Default + Job())

    runCatching {
        processUpload(requestScope)
    }.onFailure {
        println("Client disconnected")
        requestScope.cancel()
    }

    delay(1000.milliseconds)
}

A) requestScope.cancel() wasn't called in 
     time.
B) SupervisorJob severed the parent-child 
    cancellation link.
C) runCatching swallowed the 
    CancellationException.
D) while (isActive) does