Pinterest Engineering
medium.com/@pinterest_engineering · Company blog · on HN since 2017
Pinterest's engineering team writes on Medium about scaling MySQL, Kafka streams, containers, PWAs, and build tooling.
What HN saysHN commenters praise it as one of the best engineering blogs, and link its MySQL sharding and 'love MySQL' posts.
70HN people shared it
17linked it in comments
73stories submitted
664story points
6 months agolast shared
2017people per year2026
Most-shared posts
- 1Sharding Pinterest: How we scaled our MySQL fleet (2015)4 people · 38 points · first shared 2017 · 9 comments on HN
- 2A one year PWA retrospective4 people · 6 points · first shared 2018 · discussion on HN
- 3Introducing Bonsai: an open source Webpack analyzer3 people · 17 points · first shared 2017 · discussion on HN
- 4Using Kafka's Streams API for Real-Time, Predictive Ad Computations at Pinterest3 people · 10 points · first shared 2017 · discussion on HN
- 5Containerization at Pinterest3 people · 6 points · first shared 2017 · discussion on HN
- 6Continuous integration for iOS with Nix and Buildkite3 people · 5 points · first shared 2017 · discussion on HN
- 7Introducing Pinterest Labs3 people · 4 points · first shared 2017 · discussion on HN
- 8@Pinterest Engineering3 people · first shared 2017
- 9Three-day no-meeting schedule for engineers2 people · 267 points · first shared 2018 · 186 comments on HN
- 10Introducing Plank: Immutable model generation for iOS2 people · 11 points · first shared 2017 · discussion on HN
- 11Introducing Texture, a new home for AsyncDisplayKit2 people · 4 points · first shared 2017 · discussion on HN
- 12Kotlin for grumpy Java developers2 people · 4 points · first shared 2017 · discussion on HN
- 13Pinterest Engineering: Open sourcing DoctorKafka2 people · 3 points · first shared 2017 · discussion on HN
- 14How switching our domain structure unlocked international growth2 people · 3 points · first shared 2018 · discussion on HN
- 15Seven best practices for inclusive product design2 people · 3 points · first shared 2018 · discussion on HN
What HN people wrote when they linked it
zuck_vs_musk · 2026-05-13
I have contributed several posts to https://medium.com/@Pinterest_Engineering
Of course, I am biased but I do believe we have one of the best engineering blogs out there.
sahin-boydas · 2019-06-21
MySQL then, MySQL now.
A great read from Pinterest engineering:
Learn to stop using shiny new things and love MySQL
https://medium.com/@Pinterest_Engineering/learn-to-stop-using-shiny-ne…
xg15 · 2018-01-24
Not the US. If I open any link to a pin or try to browse a list, I get this: https://i.imgur.com/MQUoa2N.png
Note the lack of an [X] button. This popup is both modal and non-dismissable, so you can't even click on links to other unauth areas. For non-technical users, the literal only options are signing up or closing the tab.
It's not really a secret either. They wrote detailed posts on their tech blog about both the invention of the non-dismissable modal popup [1] and the descision to make the image the user was looking for less obvious compared to recommended content [2].
[1] https://medium.com/@Pinterest_Engineering/lessons-in-growth-and-increa…
[2] https://medium.com/@Pinterest_Engineering/lessons-in-growth-engineerin…
firasd · 2017-09-15
Do you have FULLTEXT indexes on those rows? I find it hard to believe that searching something like e.g. a fragment of text in Youtube comments can be as fast in a SQL system (even in RAM) as in Elasticsearch.
As for the other stuff I mentioned (recommendations, etc.) I'm not just basing it on my personal experience--here's a write-up from Pinterest about having to dump all their MySQL data to Hadoop to drive various types of analysis. I doubt they would do it it if just putting the SQL DBs in RAM was adequate! https://medium.com/@Pinterest_Engineering/tracker-ingesting-mysql-data…
ecesena · 2018-08-13
I built the one at Theneeds.com and, if you're interested, this is the one at Pinterest [1].
At Theneeds we were recommending news = fresh content based on user's interest and other features. Because the content is fresh, you can't easily have enough data for a proper collaborative system.
Our algo was essentially the Reddit algo, where a piece of content gets a rank based on time and log of score. Score in Reddit is the upvotes - downvotes. At Theneeds we had a more complex score including social signals (likes on fb / RT on tw) so we could compute a meaningful score also without a big community of users. The other difference wrt Reddit was having different scores and different paces (multipliers) based on categories of content, so for example news in tech and politics from newspapers were updating faster than news on travel from magazines. And by normalizing the ranks, you can merge multiple categories in one -- a feature that I think Reddit also added.
As for the code/stack, custom written in python. We were using Redis to cache user timelines using sorted sets (including the guest users, i.e. the default top news for each category). In Redis, you can merge sorted sets, and we used it as an efficient way to create the new timeline when a new user was signing up.
[1] https://medium.com/@Pinterest_Engineering/introducing-pixie-an-advance…
Edit: added more details about tech.
anthony_doan · 2019-08-15
They do? They should actually talk about it on their tech blog (https://medium.com/@Pinterest_Engineering). I couldn't find it other then third party post talking about them using it (https://prograils.com/posts/why-discord-pinterest-moz-bleacher-report-…
Even their github https://github.com/pinterest, elixir isn't even in their top programming languages.
It could be the secret sauce language kind of deal. Or they've moved away from it.
It is a pleasure to see you outside of elixirforum.
AndrewKemendo · 2019-04-11
Pinterest has been doing this for years:
https://medium.com/@Pinterest_Engineering/taste-graph-part-1-assigning…
How is this different/better than what they are doing?
amanzi · 2019-03-17
Note that the URL in this post no longer works - it has changed to: https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-sc…
zackargyle · 2018-09-10
You probably haven't used the app in the last 6 months. The mobile website was completely redone and doesn't force you to use the app anymore.
See: https://medium.com/@Pinterest_Engineering/a-one-year-pwa-retrospective…
jparise · 2018-03-22
At Pinterest, we expanded the precision of our existing timestamp-based sequence column to accommodate reordering:
https://medium.com/@Pinterest_Engineering/how-we-built-rearranging-pin…
dio · 2018-01-26
Interesting, what do you think about rocksplicator https://medium.com/@Pinterest_Engineering/open-sourcing-rocksplicator-… And also pika (https://github.com/Qihoo360/pika)
austinl · 2017-10-16
I recently wrote a blog post about how we use Nix at Pinterest (just the package manager, not the OS). It helps us give all developers and CI an identical environment. On iOS, we run most build commands and other tools through the nix-shell. New engineers set up their environment by just running a script that installs nix and enters the shell.
https://medium.com/@Pinterest_Engineering/continuous-integration-for-i…
codefreakxff · 2017-07-03
aaronbrethorst · 2017-05-28
Texture, née AsyncDisplayKit, for one: https://medium.com/@Pinterest_Engineering/re-architecting-pinterest-03…
ivarojha · 2017-04-21
Some more good ones that have not been listed yet.
https://code.facebook.com/posts/
https://medium.com/@Pinterest_Engineering
https://redditblog.com/topic/technology/
tunaoftheland · 2018-05-21
My take on this is that React Native works fine for content-dominant (media, text) apps but maybe not for UI interaction-dominant (arcade games, heavy animations, gestures) ones. You share a very similar API (React) and possibly the business logic between web and mobile. Your project could get bogged down by many little details and idiosyncrasies of React Native so a clear scope and discipline is important.
One example is a Bluetooth-enabled iOS/Android app that I made (but did not publish to app stores). I was able to use a RN library for Bluetooth communication and interact with another device (a bathroom scale) in JavaScript. It was one of those "Wow, this is cool!" and "Man, this is pain!" moments. Note that I did not use create-react-native-app/Expo for this.
Another app, also iOS and Android, simply renders the content of my wife's Etsy store, including the pictures (published to both Apple and Google Play stores). It was done using create-react-native-app/Expo. I didn't like the dependence on the Expo site for building app packages. It's free and there for now but I'll have to "eject" the app in the future if the something were to happen to the site. I used an open-source RN components library which does a good job selecting default typefaces and sizes. There were still fiddly bits I had to poke at to make it look decent, but it was alright for something that I whipped up as quickly as I could. The documentation for the component library was not keeping up with the…
ryanator · 2017-07-29
Hi, I wrote this article.
Some context I think might not have made it to the Hacker News readers. We use Kotlin at Pinterest, we were one of the two teams talking about the value of Kotlin when google announced support at IO https://www.youtube.com/watch?v=fPzxfeDJDzY.
The article is meant to show the reasons we considered not to use it. The language is very similar to Java and we've written some about how even "the grumpy java developer" can learn it https://medium.com/@Pinterest_Engineering/kotlin-for-grumpy-java-devel…
We don't expect to be able to hire Android engineers that are familiar with Kotlin to the level of expertise we expect with Java. We do expect everyone to be able to work with any part of the Android code base and not be guessing at how of the concepts many android devs aren't familiar with work. If you don't consider the time for engineers to learn this, you are not considering some of the cost of adopting. If you think it's not that big of a deal, then go for it, we did.