Real decisions, told by whoever made them.
No best-practice listicles. We write about problems we've run into building software that's in production, with the code in front of us.
Subscribe by RSSFrom `main` to Google Play Without Touching Anything by Hand
At Jornia, every push to main that touches the app ends up on a tester's phone without anyone opening the Play console. What got automated, what was left manual on purpose, and why that second list matters just as much as the first.
- Android
- CI/CD
- Decisiones de producto
No-code or custom software? Where the real line is
The honest answer is almost never "custom-built." Where a no-code tool holds up fine, what breaks it, and how to tell you've crossed the line before you spend the money.
- Decisiones de producto
- Herramientas internas
"I don't know" and "it's empty" are not the same piece of data
In LoverCast, hiding categories syncs across devices. Un-hiding all of them at once doesn't. On why collapsing absence and emptiness into a single value is a one-way door.
- Bases de datos
- Arquitectura
- Sincronización
Reduce motion isn't an accessibility checkbox: it's design
At Jornia, the brand animation is the only custom animation allowed in the whole app. Why that makes respecting reduce motion easy, and what got built first to make it that way.
- Diseño
- Producto
- Accesibilidad
The capitalization bug that made "Continue watching" disappear
Mobile and TV wrote "MOVIE", the web wrote "movie", and it was the same column. On why a bug that fails halfway is worse than one that blows up completely.
- Sincronización
- Arquitectura
- Android
Offline-first isn't a checkbox: it's the entire data model
At Jornia we cleared the entire offline backlog before touching sync. What made that possible wasn't a feature list — it was a filter we applied to every single one.
- Arquitectura
- Producto
- Offline
What to Ask the People Who Are Going to Build Your Software
Eight questions you can ask on the first call, along with the answer that should worry you in each case. They work with us, and they work with anyone else.
- Decisiones de producto
- Método
"Zero breakage" is almost never zero
LoverCast's profile migration didn't break anything visible, and it still wasn't free. On the difference between not breaking and not measuring what you break.
- Arquitectura
- Decisiones de producto
Migrating the schema without breaking the apps already out there
Going from one row per user to one per profile when there are APKs out in the wild you can't update, and why the compatibility view buys you less than you think.
- Android
- Arquitectura
- Bases de datos
- Postgres