# Zac Sweers

Musings on Kotlin, mobile, open source, and building good things.

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

## How to Take an 11 Month Sabbatical

DevFeed: [How to Take an 11 Month Sabbatical](<https://devfeed.tech/articles/how-to-take-an-11-month-sabbatical-39035.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/how-to-take-an-11-month-sabbatical/>)

Author: Zac Sweers

Published: 2026-06-29T05:54:30Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Slack](<https://devfeed.tech/topics/slack.md>), [compilers](<https://devfeed.tech/topics/compilers.md>), [Algorithms, Complexity](<https://devfeed.tech/topics/algorithms-complexity.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [slack](<https://devfeed.tech/tags/slack.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

The author reflects on leaving Slack after nearly six years to take an 11-month sabbatical. During the break, they focused on running, open-source work on Metro, fostering dogs, travel, and revisiting subjects such as compilers and algorithms through practical projects.

### Source excerpt

A sequel to the last one, but a bit longer. On Leaving Slack After nearly 6 years, I left Slack in August of 2025. It was for a combination of reasons that added up to "it's time". The biggest reason was that Salesforce (who acquired Slack

## Introducing Kempt

DevFeed: [Introducing Kempt](<https://devfeed.tech/articles/introducing-kempt-39037.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/introducing-kempt/>)

Author: Zac Sweers

Published: 2026-06-23T00:00:23Z

Content type: release

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [formatting](<https://devfeed.tech/topics/formatting.md>), [pre-commit](<https://devfeed.tech/topics/pre-commit.md>), [hooks](<https://devfeed.tech/topics/hooks.md>), [ci](<https://devfeed.tech/topics/ci.md>), [repo](<https://devfeed.tech/topics/repo.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Rust](<https://devfeed.tech/topics/rust.md>)

Tags: [ci](<https://devfeed.tech/tags/ci.md>), [formatting](<https://devfeed.tech/tags/formatting.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [hooks](<https://devfeed.tech/tags/hooks.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [pre-commit](<https://devfeed.tech/tags/pre-commit.md>), [repo](<https://devfeed.tech/tags/repo.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

The article introduces Kempt, a small project designed to replace heavy Gradle-based formatting setups with a repo-local pipeline for formatting and commit hooks. It supports Kotlin, Java, and Rust, and can run locally, in pre-commit hooks, and in CI.

### Source excerpt

Formatting should be boring, in the best possible way.

## Metro 1.0.0 Is Stable as a Kotlin Multiplatform Compile-Time Dependency Injection Framework

DevFeed: [Metro 1.0.0 Is Stable as a Kotlin Multiplatform Compile-Time Dependency Injection Framework](<https://devfeed.tech/articles/metro-is-stable-39040.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/metro-is-stable/>)

Author: Zac Sweers

Published: 2026-04-27T21:07:22Z

Content type: release

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [gradle-plugin](<https://devfeed.tech/topics/gradle-plugin.md>)

Tags: [build-performance](<https://devfeed.tech/tags/build-performance.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [perfetto](<https://devfeed.tech/tags/perfetto.md>), [stable](<https://devfeed.tech/tags/stable.md>)

### AI overview

Metro 1.0.0 is now stable. The Kotlin multiplatform compile-time dependency injection framework uses a compiler plugin and provides API-stable runtime APIs, MetroX artifacts, and a Gradle plugin unless marked experimental. The article also describes build-performance improvements and compile-time validation features.

### Source excerpt

New here? Metro is a multiplatform, compile-time dependency injection framework for Kotlin implemented as a compiler plugin. Metro 1.0.0 is out now and stable. This means that its runtime APIs (runtime, MetroX artifacts, Gradle plugin, etc.) are now API-stable unless annotated with an experimental annotation. This

## Two Pillars of (Engineering) Management

DevFeed: [Two Pillars of (Engineering) Management](<https://devfeed.tech/articles/two-pillars-of-engineering-management-39045.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/two-pillars-of-engineering-management/>)

Author: Zac Sweers

Published: 2026-03-03T16:02:22Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Tech Lead](<https://devfeed.tech/topics/tech-lead.md>), [SDK](<https://devfeed.tech/topics/sdk.md>)

Tags: [engineering-management](<https://devfeed.tech/tags/engineering-management.md>), [management](<https://devfeed.tech/tags/management.md>), [mentorship](<https://devfeed.tech/tags/mentorship.md>), [teams](<https://devfeed.tech/tags/teams.md>), [tech-lead](<https://devfeed.tech/tags/tech-lead.md>)

### AI overview

The article presents engineering management as balancing two pillars: technical familiarity with the team's problem space and the ability to grow people. It uses this framework to compare different engineering manager profiles, including infrastructure, product-team, and tech-lead-oriented managers.

### Source excerpt

A former colleague once described their view of management as a role measured by two* pillars. As an IC, I really like this framing of it and it's helped me a ton of times in knowing how to best work with different types of EMs over the years.

## Metro 0.11.0 and MEEPs!

DevFeed: [Metro 0.11.0 and MEEPs!](<https://devfeed.tech/articles/metro-0-11-0-and-meeps-39039.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/metro-0-11-0-and-meeps/>)

Author: Zac Sweers

Published: 2026-02-25T05:08:43Z

Content type: release

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [bugfixes](<https://devfeed.tech/tags/bugfixes.md>), [changes](<https://devfeed.tech/tags/changes.md>), [community](<https://devfeed.tech/tags/community.md>), [development](<https://devfeed.tech/tags/development.md>), [interop](<https://devfeed.tech/tags/interop.md>), [new-features](<https://devfeed.tech/tags/new-features.md>)

### AI overview

Metro 0.11.0 has been released after a period focused on foundation, interop, and feature parity. The release introduces MEEPs, a proposal mechanism for planned features and community feedback, and includes three implemented MEEPs alongside bug fixes, improvements, promoted features, and behavior changes.

### Source excerpt

Metro 0.11.0 is out now and it's a fun milestone in Metro's development. Up to this point most of the work in Metro has been focused around the foundation, interop, and frankly feature parity. It's in a really good place on that

## Re: Dependency Injection vs. Service Locators

DevFeed: [Re: Dependency Injection vs. Service Locators](<https://devfeed.tech/articles/re-dependency-injection-vs-service-locators-39043.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/re-dependency-injection-vs-service-locators/>)

Author: Zac Sweers

Published: 2026-02-20T05:10:16Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [koin](<https://devfeed.tech/topics/koin.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [service](<https://devfeed.tech/topics/service.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>)

Tags: [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [service](<https://devfeed.tech/tags/service.md>)

### AI overview

The article compares dependency injection frameworks with service locators, focusing on compile-time validation, testing, isolation, generated performance, and the tradeoff of requiring more explicit code. It discusses Metro, Dagger, Hilt, Anvil, kotlin-inject, Koin, and manual dependency injection.

### Source excerpt

This is a port of a write-up I did in the Kotlin Lang slack here in response to the question "Dagger vs. Hilt vs. Koin vs. Metro vs. <what comes next>. Serious question: Are there any compelling reasons to switch from Koin to Metro in a

## Where are all the staff+ Android product engineers?

DevFeed: [Where are all the staff+ Android product engineers?](<https://devfeed.tech/articles/where-are-all-the-staff-android-product-engineers-39046.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/where-are-the-staf-android-product-engineers/>)

Author: Zac Sweers

Published: 2026-02-09T22:32:38Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Users](<https://devfeed.tech/topics/users.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [developer](<https://devfeed.tech/tags/developer.md>), [mobile](<https://devfeed.tech/tags/mobile.md>)

### AI overview

The article examines why staff-level Android product engineers are difficult for companies to find and why those engineers may struggle to find product-focused roles. It argues that many Android engineers move toward infrastructure because iOS receives greater product, design, executive, and resourcing attention at many US technology companies.

### Source excerpt

Over the years I've heard (and experienced) both sides of a rather odd coin in the Android developer world. Side 1: Companies, particularly startups and small teams, want staff+ Android product engineers and struggle to find them. Side 2: Staff+ Android engineers struggle to find jobs if they

## Why I'm Seeking Sponsors for Metro, a Kotlin Dependency Injection Compiler

DevFeed: [Why I'm Seeking Sponsors for Metro, a Kotlin Dependency Injection Compiler](<https://devfeed.tech/articles/sponsoring-metro-39044.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/sponsoring-metro/>)

Author: Zac Sweers

Published: 2026-01-29T15:56:29Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [monorepo](<https://devfeed.tech/topics/monorepo.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [build-performance](<https://devfeed.tech/tags/build-performance.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [developer-productivity](<https://devfeed.tech/tags/developer-productivity.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [monorepo](<https://devfeed.tech/tags/monorepo.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

The author discusses opening GitHub sponsorship for Metro, a Kotlin dependency injection project. They report build-performance gains, benchmark results against Dagger, compatibility across Kotlin and IDE versions, and adoption by several engineering teams.

### Source excerpt

Metro is the proudest work of my career. Ever since starting it on vacation in November 2024, building it has been an incredible journey and the community reception has been nothing short of wonderful. It sits at the intersection of several fields I've come to specialize in, ranging

## Metro's Design Doc

DevFeed: [Metro's Design Doc](<https://devfeed.tech/articles/metro-s-design-doc-39041.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/metros-design-doc/>)

Author: Zac Sweers

Published: 2025-11-06T23:23:25Z

Content type: article

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [community](<https://devfeed.tech/tags/community.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

The author shares the original design document for Metro, formerly called Lattice, including discussions and an exported HTML version with comments. The document was developed through a design review with community feedback in late 2024 and early 2025.

### Source excerpt

Back in December 2024, I was around a month into working on Metro (at the time still called Lattice) and realized it crossed the threshold from "is this anything" to "oh shit this has wheels". I'd been talking informally with a few folks in

## AI and the Growing Pressure on Junior Developers

DevFeed: [AI and the Growing Pressure on Junior Developers](<https://devfeed.tech/articles/forklifts-require-training-39033.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/forklifts-require-training/>)

Author: Zac Sweers

Published: 2025-08-18T18:16:55Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Development](<https://devfeed.tech/topics/development.md>), [AI Development](<https://devfeed.tech/topics/ai-development.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [ai](<https://devfeed.tech/tags/ai.md>), [junior-developers](<https://devfeed.tech/tags/junior-developers.md>), [layoff](<https://devfeed.tech/tags/layoff.md>), [mentorship](<https://devfeed.tech/tags/mentorship.md>), [meta](<https://devfeed.tech/tags/meta.md>), [tech](<https://devfeed.tech/tags/tech.md>), [tech-industry](<https://devfeed.tech/tags/tech-industry.md>), [twitter](<https://devfeed.tech/tags/twitter.md>), [us](<https://devfeed.tech/tags/us.md>)

### AI overview

This opinion article argues that AI is increasing pressure on junior developers amid layoffs, hiring freezes, and broader labor-market changes in the technology industry. The author frames the discussion as a personal perspective, particularly informed by mobile engineering and living in the US.

### Source excerpt

Sleepwalking into labor collapse

## Type-safe Project Accessors Can Trigger Broad Kotlin Gradle DSL Recompilation

DevFeed: [Type-safe Project Accessors Can Trigger Broad Kotlin Gradle DSL Recompilation](<https://devfeed.tech/articles/don-t-use-type-safe-project-accessors-with-kotlin-gradle-dsl-39032.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/dont-use-type-safe-project-accessors-with-kotlin-gradle-dsl/>)

Author: Zac Sweers

Published: 2025-07-02T02:00:33Z

Content type: opinion

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [cache](<https://devfeed.tech/tags/cache.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

The article argues that Gradle type-safe project accessors can cause broad recompilation in Kotlin Gradle DSL builds. Changes to included projects alter generated accessor ABIs, potentially invalidating build-script and compilation caches, especially in larger codebases and workflows that minimize included projects.

### Source excerpt

Another Gradle footgun

## Introducing Metro, a Kotlin compiler-plugin dependency injection framework

DevFeed: [Introducing Metro, a Kotlin compiler-plugin dependency injection framework](<https://devfeed.tech/articles/introducing-metro-39038.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/introducing-metro/>)

Author: Zac Sweers

Published: 2025-04-03T16:14:23Z

Content type: article

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [build performance](<https://devfeed.tech/topics/build-performance.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>)

Tags: [anvil](<https://devfeed.tech/tags/anvil.md>), [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [build-performance](<https://devfeed.tech/tags/build-performance.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [error-messages](<https://devfeed.tech/tags/error-messages.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [metro](<https://devfeed.tech/tags/metro.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>)

### AI overview

The article introduces Metro, a Kotlin compiler-plugin framework for compile-time dependency injection. It combines ideas from Dagger, Anvil, and Kotlin-Inject, and describes features including dependency graph validation, code generation, multiplatform support, IDE integration, and diagnostics. The author reports benchmarked build-time improvements in a CatchUp app and notes that Metro 0.1.1 is in active development.

### Source excerpt

I'm excited to share something new I've been working on the past few months!

## Gradle Footguns: Don't add potentially-empty providers to collection properties

DevFeed: [Gradle Footguns: Don't add potentially-empty providers to collection properties](<https://devfeed.tech/articles/gradle-footguns-don-t-add-potentially-empty-providers-to-collection-properties-39034.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/gradle-footgun-adding-empty-providers-to-collection-properties/>)

Author: Zac Sweers

Published: 2024-09-11T17:33:13Z

Content type: tutorial

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [bug](<https://devfeed.tech/topics/bug.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The article explains a Gradle bug involving potentially empty providers added to collection properties. An absent provider can clear the property value rather than only its elements, causing exceptions or leaving the property unusable.

### Source excerpt

After pairing with Tony Robalik on a recent weird behavior I was seeing in Gradle, we encountered a deliciously evil bug in Gradle. It's documented a little in Gradle 8.7's release notes (see Better API for updating collection properties), but the basic premise is