Performance and Usage at Instagram
engineering.instagram.com
engineering.instagram.com
I'm curious about this: was it A/B tested? Those figures are so small that they could just be seasonal or organic growth, the side effect of other things (events, weather, etc) that lead to increased engagement in general, and so on.
The technical improvements look great, but attributing them directly to increased user engagement seems a little too fuzzy.
>Comment bundles are particularly heavy: They contain the comment text itself as well as its id, timestamp, and author metadata (including profile picture). ... Generating profile picture URLs is a CPU-inefficient operation because we must dynamically compute the correct CDN URL. The more comments we load, the more profile picture URLs we need to generate.
Is it loading the entire profile picture with each comment? Not just a small thumbnail?
To prevent anyone from fiddling with the URL to generate thousands of differently sized images, they'll often have a way to 'sign' the URL to ensure people can't do this sort of attack. This can be expensive, depending on how its done I guess.
Sorry, by "it" I should have written "the client." I meant to suggest my question of whether that is where their client OOM errors are coming from.
Is it only the first-mover myth that gets these companies such high regard in the industry? These are the kind of product issues you wouldn't expect with the kinds of technical interviews these companies use. Didn't they whiteboard inverting a red-black tree with anybody?
What Android device do you run?
What version of Android?
Is it stock Android from Google?
Stock firmware?
Not excusing the developers, but I want to point out that from my experience as a mobile developer, the sheer number of Android device configurations is a real problem to deal with, and often leads to lousy experiences on Android (along with Apps being a port of an IOS app, and teams outsourcing those ports to dev shops).
Reducing dating app friction to "sign in with Facebook and choose a few pictures you already uploaded" is a double-edged sword.
The combination of an HTTP/2 stack w/ protocol buffers and libraries in everything you'd write a mobile app in is a powerful combo, and its a pretty high development velocity environment.
Also, instagram heavily relies on JS. There are not any protobuf parsers in js that perform anywhere near that of native json. The most feature complete implementation is two orders of magnitude slower.
Using the C++ bindings is faster, but is more difficult to fit into a typical build, can't work in a browser, and still an order of magnitude slower.
It's definitely something to keep an eye on, but, IMHO, not quite ready for something large scale.
[1] https://google.github.io/flatbuffers/ [2] https://code.facebook.com/posts/872547912839369/improving-fa...
Given the limited resources of a lot of Android devices, an extra unmarshalling step would offset any wire-size reductions.
I definitely agree with you that JSON is easier to work with, but at the scale of Instagram I don't think that would be an issue.