Cyril Mottier
banner
cyrilmottier.com
Cyril Mottier
@cyrilmottier.com
630 followers 110 following 310 posts
Leadership, Engineering & Product amo.co. ex Zenly (Snap), CapitaineTrain.
Posts Media Videos Starter Packs
In most cases, Ints are not possible for us because we have sealed classes (aka enums with associated values).

Our alternative is interface + multiple implementations + multibinds. We trade compile-time exhaustivity and safety for scalability. You forget a @IntoSet a nobody will notice…
I actually wasn't talking about runtime performance. I was mostly referring to codebase scalability, modularization and build times.

Enums with 50+ variants all having different variants fields (which end up as sealed classes in Kotlin) pointing to symbols located in multiple modules in the code.
I actually wasn't talking about runtime performance. I was mostly referring to codebase scalability, modularization and build times.

Enums with 50+ variants all having different variants fields (which end up as sealed classes in Kotlin) pointing to symbols located in multiple modules in the code.
No I'm not talking about runtime performance. I'm talking about codebase scalability, modularization and build times.
Runtime performance wise, in our case, it's not a problem at all compared to everything else we do 😅
Thanks to our savior: R8
I love enums/sealed classes/union types. I really do. They give exhaustivity at compile time ❤️.
But they just don’t scale. I always end up making the painful choice of trading compile-time safety for scalability. It hurts, but it’s necessary.
Personal today's example: searching for the longest dependency chains - hence potential critical paths - in a build system-based directed acyclic graph and being 😲 by the result.
They don’t teach you this enough in CS school: graph data structures and algorithms are everywhere. Maps, social networks, build systems, object graphs, page ranking, you name it.
Master them, and you’ll unlock superpowers in problem-solving. 🚀
> During an investigation, your job is not to fix issues, it is to understand root causes.

@p-y.wtf says (and does) it all…
p-y.wtf P-Y @p-y.wtf · 3d
I turned a leak investigation into a post on the Block eng blog to share a method that works well!

It's a bit long... I had to show how to encode code knowledge to automate leak investigations, and dig even deeper with YourKit Java Profiler.

engineering.block.xyz/blog/the-lea...

#AndroidDev
The LeakCanary Method
This blog post shares a method for root causing Android memory leaks
engineering.block.xyz
It was the theme of the year. Carnival
It is! Not the classical bread of course but it's bread! Italy was there too. Their craft is 🤌
Coupe d'Europe de la boulangerie. Pièce artistique de l'équipe française.
For example, here’s today’s snapshot from our project: only 4 modules are massive in LOC—and surprise, they all build in >15s on CI.
Now that we’ve measured, we can target fixes and optimize! Data drives action.
A vital rule for scalability: every compilation unit must build in <15s (our threshold). Though build time ≠ LOC, tracking it reveals bloat, enforces discipline, and keeps your project fast as it scales. Speed is non-negotiable.
Too late. I judge you. 😜
I can't agree more. It is so true. A lot of work has been done because it was definitely the opposite back in the days.
In a highly modularized codebase, typing full Gradle task names can be tedious. Gradle supports task name abbreviation: just type the shortest unique prefix. If ambiguous, Gradle suggests candidates.

⚠️ Use locally for speed, but keep codebase references explicit for readability!
4️⃣Educate & guide
Teach through subtle, intuitive cues.

5️⃣Create immersive experiences
Pull users into the moment.
5 ways motion elevates your product:

1️⃣ Emphasize information hierarchy
Guide attention effortlessly.

2️⃣ Add delight
Make interactions feel magical.

3️⃣ Provide feedback & status
Keep users informed in real time.
Jeudi 16 octobre à 12h, je serai en direct avec Mathias de The Product Crew (TPC pour les intimes) pour parler engineering et produit ! Hâte d’échanger avec vous et de répondre à vos questions. À très vite !
Thanks for the clarification. Our experience shows it's actually not a problem anymore thanks to large context windows and new rising features like context editing as the context grows.
We built a custom animatable, collision-aware, collapsible annotation system on Google Maps. Huge UX improvement but we lost tilt support along the way.
We finally cracked the math and extended our projection calculations adding a whole new dimension to the map. Just gorgeous.
Not sure I get your question. Can you elaborate please?
In the age of AI agents, a monorepo isn’t just a dev setup. It’s a competitive edge. Everything in one place means agents can explore, analyze, and act across your entire codebase, seamlessly.