The fundamental shift with modern AI: the time it takes to execute is starting to match the speed at which ideas appear.
The fundamental shift with modern AI: the time it takes to execute is starting to match the speed at which ideas appear.
AI in software engineering is a megaphone: it makes both good and bad developers louder. The difference? One is music. The other is noise.
The more I read about it, the more I think it should be a build system responsibility instead. Can be done instance leveraging Bazel module visibility for instance.
Two rooms, two vibes
We already have a branch (thanks Codex) where we switch to it and TBH it is much better than it used to be. But you still have some stuff to deal with manually (manifest generation, manifest merging, etc.)
We are seriously considering migrating to Bazel. Of course because everything but Android is Bazel built at amo forcing us to have interop between Gradle and Bazel. But also because of the poorly design configuration phase (vs analysis phase on Bazel)
We also have "sample apps" (I guess your "dev apps") but they I consider them as "patches". They come with drawbacks: lots of "non production" code and, friction on LSC, increase combinatory in your product/states, hard to distribute internally (product want a single app with all featuresβ¦), etc.
Interesting. On CI, our experience is CC is useless because not "sharable". Also, 80% of the time, a gradle.kts file changed.
Configuration on demand: we build absolutely everything on CI so π
"
We have another problem with this approach: Gradle configuration time π
. Because Gradle (for now - Isolated Projects π) sequentially configures projects, adding new modules slows down build time a lot (basically 2/3 of our build time is configuration vs execution).
But agree with the approach.
3. The identifiers module undermines extreme modularization. For example, if you create a new app using only a subset of your main appβs features, youβll end up with irrelevant types at compile time (though tree shaking can remove them).
2. The identifiers module has no strong ownership that itβs unclear who truly owns it, especially since it contains identifiers from multiple features. If everyone can edit it, it effectively belongs to everyone. And thus to no one.
1. The identifiers module becomes a sink module that every other module depends on. Any change to its ABI will force recompilation of all dependents.
Itβs interesting because we discussed this exact topic with colleagues for an hour yesterday. Half of the team supported your approach, while the other half, myself included, opposed it. While our contexts differ, my main arguments are
It will remove the message (default behavior) or remove/keep the check entirely.
We've been doing it since day 1 already. Any reason it's not done for "throw" checks @rahulrav.com?
Compile-time flagging is a game-changer for large codebases. Just be sure to expose these variants only at the highest level of your build. If you donβt, youβll end up with combinatorial complexity leaking everywhere in your code.
> We fixed a few minor bugs that were causing problems.
Thanks for that detailed changelog. Super helpful π€¦ββοΈ
Look who joined the meetup π
π
π€·ββοΈ
The @parisandroid.bsky.social is about to start. Let's begin with Compose magic π€©
Thrilled to meet the Android community tomorrow and dive into video generation, dependency injection, and compiler plugins!
Donβt miss out, register now: www.meetup.com/android-pari...
We talk a bit about it here: amo.co/tech-stack-a...
We indeed migrated to Metro back in August 2025 all of our Android project (~500 modules). We have nothing using KMP. Everything is fully Android specific as we have our own approach to multi-platform (shared Rust code).
Donβt forget to register: the number of spots is limited! π
www.meetup.com/android-pari...
Join us with @ParisAndroidUG at @amoamoamo HQ on Jan 13, 2026! π
On the agenda: generating videos off-screen and off-main thread from Composables, why & how we switched from Hilt to Metro DI, and how to build your own Kotlin compiler plugin.
That's one of the advantage of Android over iOS. On iOS, the choice is definitely not that easy...
Big news. On January 13, 2026, amo is serving up something special for the @parisandroid.bsky.social π. Think Metro DI insights and video magic from Composables. Stay tuned after the holidays for all the details!πΉ
Agree it's indeed more efficient in the backend (and can be cached). It comes with one major issue though: you get the backend point of view (i18n, l10n, blocked IPs, etc.)
Hidden perk of Metro DI over Dagger: no more wrestling with naming binding functions.
Weβve migrated nearly our entire codebase to @Contributed* annotations cutting thousands of lines of code in the process.
My job isn't to design the perfect solution. It's to build the least flawed one possible.