~/devreads

Medium

https://medium.com/medium-eng · 10 posts · history since 2024 · active

26 May

Jacob Bennett 5 min read

This was originally written and published by Christophe Spy (Director of Engineering, Medium) as an internal Medium Eng post. Desired outcomes (what “good” looks like) 🙏🏻 These are the kinds of changes we want to see if AI is going well at Medium. Less drudgery, more leverage Engineers use AI to remove repetitive, low‑leverage work (e.g. tedious refactors, boilerplate, large…

aisoftware-engineeringai-agentsoftware-development

18 May

17 Mar

Pierrick CAEN 9 min read

Generated by DALL-E Turning knowledge into reusable AI agent instructions for a small, fast-moving team. We're a small Android team at Medium, just a handful of engineers maintaining and evolving the Medium Android app. Our codebase follows Clean Architecture with Kotlin, Jetpack Compose, Hilt, Apollo GraphQL, and a growing number of feature modules. Like most Android teams, we have strong…

software-engineeringandroidai

22 Oct 2025

Michael Margolis 3 min read

When I joined Medium , it was because I still believe in the internet as a place for ideas. Not noise, not outrage, but content that connects people through shared curiosity. Medium’s mission is to deepen understanding and spread ideas that matter. We’re building the best place for reading and writing online: A space that rewards clarity, authenticity, and craft…

software-engineeringmediumbackend-developmentbackendhiring

6 Oct 2025

Pierrick CAEN 6 min read

Photo by Mario Verduzco on Unsplash Medium Android App — Migrating from Apollo Kotlin 3 to 4: Lessons Learned In this post, I’ll share my experience migrating the Medium Android app from Apollo Kotlin version 3 to version 4, including the challenges I encountered and how I solved them to improve our GraphQL implementation. Understanding Our Apollo Cache Implementation Before…

graphqlapollo-clientandroidkotlin

28 Aug 2025

Raphael Montaud 14 min read

How we made our filtering 10x cheaper by removing our Bloom Filters Bloom Filters are great tools to make fast and cheap filtering. They also come with plenty of problems and can easily get expensive and cumbersome. We switched to user-based direct database queries, which made our filtering cheaper and easy to maintain. Here’s the full breakdown of that migration.…

databasesoftware-engineeringrecommendation-systembloom-filterdynamodb

26 Aug 2025

Raphael Montaud 7 min read

How we made our email story recommendations better In this Part 1, you’ll understand how we improved one of the main ways our users are exposed to our product and how that led to a massive 7% increase on the average reading time for the digest users. Intro : This is a 4-part series breaking down improvements to the algorithm…

machine-learningrecommendation-systemsoftware-engineering

25 Aug 2025

Raphael Montaud 6 min read

Cross-Digest diversification In this part 4, we’ll see how we went from investigating a few complaints from digest power users to improving our digest recommendations across the board. Intro : This is a 4-part series breaking down improvements to the algorithm behind the Medium’s Daily Digest over the past year. When we started this work, the Digest was suboptimal —…

programmingrecommendation-systemsoftware-engineeringdatabasemachine-learning

Raphael Montaud 10 min read

Hard vs Soft Filtering and how this applies to Medium’s Recommendation System In this part 3 we’ll see how we modified one of our hard filtering rules and attempted to turn it into a machine learning based “soft filter”. Intro : This is a 4-part series breaking down improvements to the algorithm behind the Medium’s Daily Digest over the past…

software-developmentrecommendation-systemsoftware-engineeringmachine-learning

1 Oct 2024

Ryan Lattanzi 6 min read

The Two Billion Claps Bug TL;DR A user was able to exploit a race condition in our backend system to manipulate clap counts on posts. Users are supposed to only be able to clap between 0 and 50 times for a given post, but this hack allowed them to go outside those bounds (both above and below). Our fix leverages…

dynamodbsoftware-developmentprogrammingbug-bounty