Cyril Mottier's Avatar

Cyril Mottier

@cyrilmottier.com

Leadership, Engineering & Product amo.co. ex Zenly (Snap), CapitaineTrain.

635
Followers
111
Following
348
Posts
03.11.2024
Joined
Posts Following

Latest posts by Cyril Mottier @cyrilmottier.com

The fundamental shift with modern AI: the time it takes to execute is starting to match the speed at which ideas appear.

09.03.2026 13:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

AI in software engineering is a megaphone: it makes both good and bad developers louder. The difference? One is music. The other is noise.

26.02.2026 14:00 πŸ‘ 5 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.

05.02.2026 20:25 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

Two rooms, two vibes

04.02.2026 14:02 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.)

03.02.2026 20:27 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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)

03.02.2026 17:11 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

03.02.2026 17:09 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 1

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 πŸ˜… "

03.02.2026 17:07 πŸ‘ 0 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

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.

03.02.2026 14:11 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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).

03.02.2026 07:26 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

03.02.2026 07:26 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

03.02.2026 07:25 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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

03.02.2026 07:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image

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?

22.01.2026 07:46 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.

21.01.2026 17:31 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

> We fixed a few minor bugs that were causing problems.

Thanks for that detailed changelog. Super helpful πŸ€¦β€β™‚οΈ

19.01.2026 08:27 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image

Look who joined the meetup πŸ˜‚

13.01.2026 21:59 πŸ‘ 3 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
Post image

πŸ™ˆ

13.01.2026 19:53 πŸ‘ 9 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

πŸ€·β€β™‚οΈ

13.01.2026 18:26 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image Post image Post image

The @parisandroid.bsky.social is about to start. Let's begin with Compose magic 🀩

13.01.2026 18:04 πŸ‘ 10 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Meetup de Janvier chez amo πŸ‘‘, Tue, Jan 13, 2026, 7:00 PM | Meetup Bonne annΓ©e 2026 Γ  tous πŸ₯³! On vous souhaite une bonne dose de Kotlin, d'Android, d'interfaces rΓ©actives & intuitives et surtout du code bien propre ✨! Pour commencer sur

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...

12.01.2026 07:07 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 1

We talk a bit about it here: amo.co/tech-stack-a...

06.01.2026 16:19 πŸ‘ 4 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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).

06.01.2026 15:54 πŸ‘ 4 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Meetup de Janvier chez amo πŸ‘‘, Tue, Jan 13, 2026, 7:00 PM | Meetup Bonne annΓ©e 2026 Γ  tous πŸ₯³! On vous souhaite une bonne dose de Kotlin, d'Android, d'interfaces rΓ©actives & intuitives et surtout du code bien propre ✨! Pour commencer sur

Don’t forget to register: the number of spots is limited! πŸ‘€

www.meetup.com/android-pari...

06.01.2026 10:00 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

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.

06.01.2026 10:00 πŸ‘ 5 πŸ” 4 πŸ’¬ 1 πŸ“Œ 1

That's one of the advantage of Android over iOS. On iOS, the choice is definitely not that easy...

02.01.2026 17:56 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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!🍹

23.12.2025 21:34 πŸ‘ 7 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.)

23.12.2025 21:20 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Post image

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.

17.12.2025 16:00 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

My job isn't to design the perfect solution. It's to build the least flawed one possible.

09.12.2025 07:55 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0