---
title: "Tom Horvat (@tom-horvat) | Hashnode"
description: "Android musings. Read the latest articles by Tom Horvat on Hashnode."
url: "https://hashnode.com/@tom-horvat"
---

@tom-horvat

# Tom Horvat

@tom-horvat · Seattle, USA · Joined March 2026

Android musings

### [Make illegal states unrepresentable, until you have to explain them](https://underdroid.hashnode.dev/make-illegal-states-unrepresentable-until-you-have-to-explain-them?utm_source=hashnode&utm_medium=feed)

How to decide which constraints belong in your types and which belong in your validator.

9 min read · [underdroid.hashnode.dev](https://underdroid.hashnode.dev/make-illegal-states-unrepresentable-until-you-have-to-explain-them?utm_source=hashnode&utm_medium=feed)

[2](https://hashnode.com/posts/make-illegal-states-unrepresentable-until-you-have-to-explain-them/6a94628a3807e45a5040f84d) [Aug 30](https://hashnode.com/posts/make-illegal-states-unrepresentable-until-you-have-to-explain-them/6a94628a3807e45a5040f84d)

### [Proto DataStore for Configuration, Room for Entities: Choosing the Right Cache Medium](https://underdroid.hashnode.dev/proto-datastore-configuration-room-entities?utm_source=hashnode&utm_medium=feed)

Why 'local cache' isn't one thing, and how matching your persistence layer to your data shape keeps your storage coherent

7 min read · [underdroid.hashnode.dev](https://underdroid.hashnode.dev/proto-datastore-configuration-room-entities?utm_source=hashnode&utm_medium=feed)

[Apr 7](https://hashnode.com/posts/proto-datastore-configuration-room-entities/69d5520c5da14bc70e8515e9)

### [Self-Referential Generics in Kotlin: When Type Safety Requires Talking to Yourself](https://underdroid.hashnode.dev/self-referential-generics-in-kotlin?utm_source=hashnode&utm_medium=feed)

How to bridge ViewModel type erasure using reified parameters and sealed classes.

13 min read · [underdroid.hashnode.dev](https://underdroid.hashnode.dev/self-referential-generics-in-kotlin?utm_source=hashnode&utm_medium=feed)

[Apr 1](https://hashnode.com/posts/self-referential-generics-in-kotlin/69cd90673085402b9c6ca6aa)

### [Lean Caching](https://underdroid.hashnode.dev/lean-caching?utm_source=hashnode&utm_medium=feed)

A Custom NetworkBoundResource in Kotlin

5 min read · [underdroid.hashnode.dev](https://underdroid.hashnode.dev/lean-caching?utm_source=hashnode&utm_medium=feed)

[Mar 26](https://hashnode.com/posts/lean-caching/69c4b45d10e664c5da395dbe)

### [Stop Copying Gradle Code](https://underdroid.hashnode.dev/stop-copying-gradle-code?utm_source=hashnode&utm_medium=feed)

A Practical Guide to Convention Plugins

10 min read · [underdroid.hashnode.dev](https://underdroid.hashnode.dev/stop-copying-gradle-code?utm_source=hashnode&utm_medium=feed)

[Mar 24](https://hashnode.com/posts/stop-copying-gradle-code/69c2df9c92029d915f6b3857)
