Official WhatsApp company blog with product announcements, engineering notes on server scaling, and statements on ads and encryption.
HN commenters link the 2012 "Why we don't sell ads" post and contrast it with later changes, worrying that Status could carry ads.
The way you framed the question, it seems so obvious that they "had to find a way to monetize". But there were probably some inflection points. This is where the issue of the customer trusting the website/app comes in. Initially, WhatsApp was charging a very small fee ($1 a year?) and making it appear as if they were doing it to avoid selling customer data.
The following post has already been linked many times during the related comment threads, but I am posting it again because I bet most people never actually read the whole thing.
----------
Link:
https://blog.whatsapp.com/245/Why-we-dont-sell-ads
Text:
When we sat down to start our own thing together three years ago we wanted to make something that wasn't just another ad clearinghouse. We wanted to spend our time building a service people wanted to use because it worked and saved them money and made their lives better in a small way. We knew that we could charge people directly if we could do all those things. We knew we could do what most people aim to do every day: avoid ads.
No one wakes up excited to see more advertising, no one goes to sleep thinking about the ads they'll see tomorrow. We know people go to sleep excited about who they chatted with that day (and disappointed about who they didn't). We want WhatsApp to be the product that keeps you awake... and that you reach for in the morning. No one jumps up from a nap and runs to see an advertisement.
Advertising isn't just the disruption of aesthetics, the…
<3 I always love seeing your comments and questions, too!
Well on the subject of PHP, I think I've got a nice story.
The more recent one is about Wordpress. One day, I had this conversation:
Boss: "will the blog stay up?"
toast0: "yeah, nobody goes to the blog, it's no big deal"
Boss: "they will"
toast0: "oh, ummmm we can serve a static index.html and that should work"
Later that day, he posted https://blog.whatsapp.com/facebook I took a snapshot to serve as index.html and the blog stayed up. A few months later, I had a good reason to tear out WordPress (which I had been wanting to do for a long time), so I spent a week and made FakePress which only did exactly what we needed and could serve our very exciting blog posts in something like 10-20 ms per page view instead of whatever WordPress took (which was especially not very fast if you hit a www server that wasn't in the same colo as our database servers). That worked pretty well, until the blog was rewritten to run on the FB stack --- page weight doubled, but since it was served by the FB CDN, load time stayed about the same. The process to create and translate blog entries was completely different, and the RSS was non-compliant: I didn't want to include a time with the date, and there is/was no available timeless date field in any of the RSS specs, so I just left the time out ... but it was sooo much nicer to run.
Sadly, I haven't been doing any large scale optimization stuff lately. My work stuff doesn't scale…
Granted this is speculation, but I've done my homework:
1) Extreme concurrency due to Erlang underneath, which means not only being able to handle lots of connections at once, but very good DDoS resistance. See WhatsApp's blog post about it: http://blog.whatsapp.com/196/1-million-is-so-2011 An Elixir (or Erlang) process can fire up a million new nodes in a second on commodity hardware. No joke. The out-of-the-box concurrency in Elixir replaces many tools in Ruby that are normally separate gems: http://www.smashcompany.com/technology/ruby-concurrency-needs-microservices-but-not-elixir
2) Near-100% uptime possible. (Google "Whatsapp uptime"). Erlang was designed to run cell networks. It made them very reliable. The entire philosophy of the language is to "embrace failure, log it and try again ASAP." This ends up being a very good strategy when dealing with the uncertainty of the real world, and things like security concerns.
3) Live code upgrades without downtime. See this demo: https://youtu.be/96UzSHyp0F8
4) MUCH nicer syntax than Erlang. Especially for ex-Rubyists. It's a functional language (with all the advantages that provides) with a Ruby-flavored syntax. Best of all worlds.
5) Phoenix, the Rails-equivalent web API, has come out of the gate with a 2 to 10x performance improvement over Rails using a fraction of the CPU load: http://www.littlelines.com/blog/2014/07/08/elixir-vs-ruby-showdown-phoenix-vs-rails/
6) Elixir provides true macros (in the Lisp sense). It…
An excellent source of information on the motives of UK legislators for passing this legislation, other than the incompetence and malice hypothesised in the other comments, is this parliamentary research briefing from 2022 [1], which summarises the previous five years of consultation and links to a heap of previous white papers and critical responses.
The "news" is that on 17 April 2023, the heads of WhatsApp, Signal and other companies published an open letter questioning "the Government's stated intention to protect end-to-end encryption and respect the human right to privacy" [2], and on 27 April 2023, a member of the House of Lords said that "services such as WhatsApp will potentially leave the UK" [3] if the Bill is passed. The debate is actually pretty informed and a refreshing antidote to the cynicism about democracy expressed elsewhere, until you recall that the House of Lords is not that democratic.
[1]: https://commonslibrary.parliament.uk/research-briefings/cbp-9506/
[2]: https://blog.whatsapp.com/an-open-letter
[3]: https://hansard.parliament.uk/Lords/2023-04-27/debates/AC7C700F-39F3-406C-854C-0EA6F3E3E911/OnlineSafetyBill#contribution-BE0861B9-7976-47A7-BE8D-C8AC25BBB896
> Then, an opportunity arose to use Elixir but, because of its early stage (this was right between 0.3 and 0.4), I couldn't deploy it in a production environment, so I ended up choosing Clojure.
At the time (and still today) I would probably have done the same. We still need a couple more months before we can stamp "Production Ready" in it.
> No need to; one could just adapt ClojureScript to spit out Erlang. It would depend on the JVM and wouldn't support native macros, but it would work ok, I guess.
I guess I can eventually take a look at this as well for fun. :)
> I understand it might be premature, but I would love to know what kind of projects/developers is Elixir attracting?
My background is web development, so expect something in this area in the future. It always amazes me how people like the What's App guys can get 2 million TCP connections in a single Erlang node (source: http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/). With web sockets and native clients becoming more and more common, having powerful abstractions around TCP connections seems like a good idea.
I got to about 500K processes on Erlang's VM on an i7 with lots of memory.
These people people got up to 2M concurrent TCP connections
http://blog.whatsapp.com/index.php/2012/01/1-million-is-so-2011/
And on top of it, it is using isolated heaps. That is beautiful I think. Completely concurrent GC is beautiful.
I know Erlang syntax is not to for everyone's taste (I do like it though). There is also Elixir (http://elixir-lang.org/). But the underlying BEAM VM is an awesome piece of technology.
> The thought was to have a billion threads on a SPARCStation 10
There are some green-thread C libraries I've been playing with, like Protothreads ( http://dunkels.com/adam/pt/index.html ) and libconcurrency ( https://code.google.com/p/libconcurrency/ ) I think they use setjump/longjump trick. Some use setcontext()/getcontext() POSIX call.
I still like Erlang VM best.