Why WhatsApp Only Needs 50 Engineers for Its 900M Users
wired.com
wired.com
And that's why it's strange that the article focuses on Erlang: Are all of the client apps written in Erlang?
Yes yes, I do believe there's some boosterism going on when their success is entirely attributed to Erlang/FreeBSD alone. Sure the stability and scalability of the backend may have been helped by using Erlang but the fact that they got to scale at all has to do with all these other business/cultural/timing/design factors that I mentioned above.
Btw, the one factor I forgot to mention above was the call to use phone numbers as the namespace for user identity. I believe they were one of the early ones, if not the first ones, who eschewed email and/or social login and went straight to phone number. That made them a direct replacement for SMS in large parts of the world where SMS costs were meaningfully expensive to the population. One more example of focusing outside the US market in general and outside of Valley bubble in particular.
The servers, on the other hand, have to serve all the million users connected at any single moment. That requires a lot of parallelism, and that's the most likely place where Erlang was successful.
I recall whatsapp being free before it was for pay, how was it bootstrapped?
iPhone was hugely popular in North America. BB, on the other hand, is hugely popular in Asia (and probably Europe...?) that consists of 3 most populous countries: China, India, Indonesia... guess who uses WA the most...?
Support for other platforms came out very late...
However of all the various applications you could conceivably scale to hundreds of millions of users this is one of the simplest. I do not think acknowledging that is cringeworthy at all.
What other apps besides social networking and communication apps even get to hundreds of millions of user?
You are quite the optimist.
A bit more info here: http://highscalability.com/blog/2014/3/31/how-whatsapp-grew-...
With regard to fun challenges to solve, from that article:
"Lots of problems related to scale as you might imagine. Problems with flapping connections, queues getting so long they delay high priority operations, flapping of timers, code that worked just fine at one traffic level breaking badly at higher traffic levels, high priority messages not getting serviced under high load, operations blocking other operations in unexpected ways, failures causing resources issues, and so on. These things just happen and have to be worked through no matter what system you are using."
> I feel the language choice is probably the least contributing factor in terms of what's interesting at that scale.
However, as they say "right from the horses' mouths", WhatsApp engineers have said that Erlang and FreeBSD are critical tools for their success. One can accuse them of lying, of course, but why?
Here is an interview with Eugene Fooksman:
https://pdincau.wordpress.com/2013/03/27/an-interview-with-e....
---
...and the consensus in our team is that it is largely because of Erlang. We’re managing to serve huge amount of connections from single front-end server...
---
There is the "That A Billion With A 'B'" talk by Rick Reed at Erlang Factory (already posted somewhere) in here.
Here is another older directly from their website:
https://blog.whatsapp.com/196/1-million-is-so-2011
Clearly states Erlang and FreeBSD are important.
> These things just happen and have to be worked through no matter what system you are using.
Yeah but that is a bit too generalizing. It is like saying "well the language is Turing Complete" argument, yet it is but one tool is much better than another. Surely Twitter runs on JVM, Google doesn't use Erlang etc etc. So you can do it many other ways. And, at least in this case, they certainly picked the right tools, as we can see from their success. The number of users * amount of messages processed / # of engineers is a not a bad metric to see how good a tool is. And Erlang is a great tool here.
(Another example is when you use the smartphone to access the Internet, chances are 50% of the time that connection is set up by Erlang. It is there in the background doing its job, not crashing, setting up even an order of magnitude larger amount of data than we see from WhatsApp).
I never said that.
It's here https://www.reddit.com/r/programming/comments/3l2spe/why_wha...
In its entirety:
I can explain a bit more in depth than the author did.
Erlang uses a model known as the actor model. This means that each part of your program is a completely independent entity like a mailbox, known as an actor. For one actor to communicate with another actor, it simply puts a message in the intended actor's mailbox. Since each actor is independent, this means that we can spawn as many actors as we want to read messages from a single mailbox, and do what is requested.
In terms of what WhatsApp is doing, this means that they can have (potentially infinite) conversations going on between users all at the same time. If any part of their pipeline is working too slowly (there are more messages being put in the mailbox than taken out) they can just spawn additional actors to read mail (at any time they want, even programmatically). Additionally, as alluded to by the author, in Erlang you can do something known as "hot loading," which means spawning newer versions of actors (when the implementation changes) while still running the old actors so that there is never any loss of service.
Haskell is similar to Erlang in its ability to scale. In fact, there is a library in Haskell known as HdpH-RS that enables fault-tolerant (the programmer does not have to worry about intermediate failure at all) distributed computing/memory (tested up to 1400 cores). The main reason for this is that Haskell is strictly-typed, meaning all types must be defined (or derivable) at compile time, and immutable, meaning that variables cannot change their values after they are defined.
Due to all of this strictness, you never have to worry about errors found in languages like C such as segfaults, or improper use of a function since you can enforce usage with types. For instance a function that should only accept unit vectors would use a type UnitVector instead of Vector (Note that this approach is generally a bad idea in C/C++/Java etc). Essentially, if your program compiles, then it will run correctly (generally the only real errors you run into are logical ones -- the algorithm itself being incorrect). This makes it really easy to refactor code later on. The reason Facebook can handle urgent tasks so quickly is mostly due to Haskell's generics, which are like templates from C++ or generics in Java. The main difference however is that Haskell lets you create generic mixins for types known as type classes. This means that you can write extremely general code to handle almost anything in the high level. Then, whenever you need to handle something new, you just have to choose which mixins you want and just add them to your type by defining the interface. For example, I could make a Multipliable type class, I would require the programmer to only define the multiplication operator for his type, and then it would automatically create things like pow or sqr.
In Erlang, message queues are tied to processes. You can't have multiple processes reading from the same mailbox without writing your own message broker process to implement a multi-reader mailbox.
Erlang and BEAM were designed for highly concurrent messaging applications. Surely that's of some importance.
Wired isn't writing articles for programmers. It's a pop-science magazine writing tech articles for the mainstream.
They could be using really good tools. Or each of those 50 programmers are 10x more productive than regular programmer (I don't believe in this imo).
Whether that evidence implies anything about the product's complexity is the speculative part.
If the explanation is that every single programmer at WhatsApp is 10x more productive than programmers at similar top companies, then my first question is how did WhatsApp manage to hire such people but Google, Facebook, etc., did not?
> A ton of people would chose the latter just to be in a more important core role.
Yeah, and a ton of people would choose the former just to be in a bigger company with more perks or because they want to work on something other than an IM app.
Who knows? This isn't nearly strong enough to form a conclusion either way.
> the per engineer capita is 20 times better at WhatsApp
Perhaps, but why? You can't say that they got better talent just because they were a startup, because then I can point out all the other startups that don't have such talent.
> I'm betting any of those engineers that had options are very very happy with their current job.
I'm sure they are. I'm also sure they're not oracles who can predict the future. So they couldn't have known when joining that WhatsApp would be acquired for such a spectacular amount. So why WhatsApp over all the other startups? What did WhatsApp do to attract such world-class talent? I'm looking for a real, concrete answer that couldn't equally be applied to every other startup out there.
The alternative explanation, of course, is that WhatsApp just isn't as complex as some here are proposing it to be. Then we don't have the mystery of how they beat every other company in the world at hiring the greatest unknown talent. Rather, they simply timed the market perfectly, probably partially through luck.
We don’t bring them in specifically because the engineer knows Erlang,” Mahdavi said on Monday. “We expect the engineer to come in and spend their first week getting familiar with the language and learning to use the environment. If you hire smart people, they’ll be able to do that.”
" Experience: - 2+ Years of Erlang Programming"
[0]: https://www.whatsapp.com/join/?dept=software-engineering&id=...
We sit them down for a day with a fairly simple task (build a simple web or mobile app, about three screens with a basic data model) but we make sure to give them a language or framework they are unfamiliar with.
They have Google, Stack Overflow, and other employees to use as a resource. It's a great way to get to know new hires while seeing how resourceful and interested in learning they are.
Every candidate has built the app to spec with a few hours remaining, but it's really good to see those who take the initiative to spend a bit of extra time polishing it and explaining it to us, and responding to our feedback.
Wouldn't most people take a day off to interview somewhere? I know I wouldn't be comfortable ducking out for a few hours to interview — it would feel tense and uncomfortable.
Facebook, and I'm sure many other places, do full-day interviews. It's certainly not unusual.
Not always possible. One of the big annoyances when I was working for a company was that if I wanted time off it was two weeks notice. Doesn't work particularly well when the interview invitation tends to be more along the lines of, 'Hi, your interview date is next week.'
Plus, if you are going to hire in this fashion, why even bother with resumes, or extensive resumes? Just bring people in for a test? If they do well--hire them?
I always felt a test is the fairest way to hire new employees. Tests do away with upperclass privilege(better contacts, padded resumes, etc.) I wish more companies vetted employees in this fashion. It might get rid of something I have always dreaded, and get slightly nauseous when I see the behavior in action--and that is Networking. Sorry, I always thought it was phoney.
I still imagine your company relies heavily on resumes, and uses the test--because they can? Meaning--there's still a lot of desperate software engineers out there; willing to do anything to land a job?
As it happens, Erlang is an excellent platform upon which to build a message exchange service. Also, the article doesn't mention their completely non-traditional approach to ops. Despite the conventional wisdom in the valley, they run their own servers. And squeeze an enormous amount of value from a small number of servers. Their unique ops strategy is probably as much a part of their success as simply using Erlang.
http://www.erlang-factory.com/static/upload/media/1394350183...
I think most seasoned game developers would be faster making a simple 3D game with Unity rather than just openGL + C ( mainly because with Unity you get soon much boilerplate-y stuff out of the box)
The language and the amazing properties of failure tolerance could be productivity multipliers ( think of the times you've had to deal with catastrophic failures of software)
You example, unity, isn't a language, but instead an off the shelf engine and toolchain.
But just like the development on an individual game seem less impressive technologically the more they rely on existing tech [1], admitting "Yeah, we forked ejabberd and rigidly fight scope creep" doesn't have the same ring as hyping up features in the runtime of a hip yet obscure programming language.
[1] Fun side note: If you watch the games press interviews devs, pay attention to when they ask about what engine they use. The press don't and viewers often don't know anything about software projects, so the devs are reluctant to to admit how much they've relied on off the self components for their admittedly-huge undertaking. Fun to watch the paid hype men try to talk around that.
WhatsApp only needs 50 engineers because of who they hire. Even using Erlang, I pretty sure they would need more than 50 engineers if they hired mainly around average engineers.
I haven't heard of anyone who has figured out how to measure an engineer's abilities.
Some people test algorithms. Others test how often they've shipped things. Most just look for years of experience. A few even test whether you know certain facts.
Who doesn't say that though? No company says they hire average engineers.
But I agree that their success does kind of prove that they succeeded in that.
Right. There's not even a way to adjust notification levels based on person or group. I ended up turning off notifications for the whole app, so it stopped serving the same use cases that text messages do. People still need to text or call me if they need an urgent answer.
That was just an example anyway. I could easily have pointed to the ambiguous end-to-end encryption (are my messages even being encrypted?) or the lack of encryption in group chats.
My takeaways:
- Pure functions in little composable pieces. Screw the fact you can't find programmers. With 1/20th the staff, it's not important
- Zero to few meetings. Keep focused on one thing. No playing around with WhizzBang Platform 7.0 because all the cool kids are using it. Mind your knitting.
- Keep It Simple, Stupid. Engineers are our own worst enemy. Solve the most simple problem possible. Then add complexity a little bit at a time, only as a last resort. For those of you saying "But messaging is solved", "Erlang was written for messaging", and so forth, this is where you missed. Any complex system (with a few notable exceptions) will look very simple when solved in this manner. In fact, that's the entire point.
- Running and deploying are the same thing. CI/CD. There is no Big Red Button to push because we're always working on the airplane engines while the plane is flying
Coming from a traditional OOA/D/P background, this mentality was extremely foreign to me. Even though I was using and talking about TDD, it was still in terms of composing and re-arranging object graphs. It wasn't until I got into F# several years ago that the pieces started coming together. This is a very difficult conceptual leap to make, because a lot of the ways you work looks completely ass-backwards to folks who are used to doing it the other way.
If you're interested, my contact details are in my profile. Happy to have a call/Skype. It's an important topic.
This has nothing to do with private VC's; I completely understand why they are in the game. I'm talking about government programs or government-funded NGO programs that provide tax incentives and other funding or support to startups in the product/app space hoping it will create jobs. Maybe this isn't every state, but where I live this is the case.
Also, remember that Google and FB have put a lot of cash in to D.C. in terms of lobbying [2]. FB is essentially using the start-up scene as their R&D departments, occasionally having to fork out the moolah to buy WhatsAps and other viable competitors.
[0] https://www.quora.com/How-many-employees-does-Google-have
[1]https://en.wikipedia.org/wiki/General_Motors#History
[2]https://www.washingtonpost.com/politics/how-google-is-transf...
[1] http://fortune.com/2013/11/27/by-the-numbers-how-foxconn-chu...
You can’t get electronic tax filing without technology, you can’t get full open data availability with nice diagrams like https://www.destatis.de/bevoelkerungspyramide/ without lots of IT workers in the government (this is available for every data collected by the German Federal Statistics Agency, btw), and you can’t get stuff like http://ims.kiel.de/extern/kielmaps/ which show even lanes and zoning for cities without people working on it.
Part of the job of governments is also always having reliable, high quality data about their country, for government purposes. But it also means they need to publish those for citizen, and they need people taking care of that.
The people rich enough for congress' ear says the jobs are hard to fill. What the employers mean is that they're expensive. What the government hears is high demand. Government will champion tech work until labor costs are driven down.
Look at startups like Cloudfactory: http://www.cloudfactory.com/home (they are actually on a mission to create jobs for millions)
There are many funded startups and publicly traded companies that are doing the same thing.
http://www.ibtimes.co.uk/whatsapp-rolls-out-new-spam-blocker...
What they should control is the APIs that are popping up like promotional SMS with support for Whatsapp. These companies are obviously circumventing their endpoints.
Whitelisting should always be an option - it's simple to achieve technically and allows the consumer to have complete control.
Edit: And the fact there is no whitelisting is also the reason I removed the app from my phone.
Answer: because sending short messages from A to B is basically a solved problem. There is even a programming language (Erlang) that was made with this application in mind. The prototypical "Hello World" example for Erlang is a messaging application.
I really dislike the arrogant attitude behind these types of comments. Have you worked at WhatsApp? Do you have any idea what they spend their days doing, what their systems look like, what their requirements are like?
WhatsApp have close to a billion users, 50 engineers and they manage to produce a near flawless experience. This is not trivial, no matter how many armchair critics claim otherwise. It used to be the case that people dismissed FB as just another CRUD app ("not even written in RoR, but in PHP, yuck" ~ 2005-2010), but given the tools they have been pushing the last few years people seem to have stopped dismissing them as casually. Perhaps in a few years people will stop dismissing WhatsApp as casually as well.
Obviously, creating Whatsapp is nothing near a weekend project. But I think there founders should be commended especially for avoiding some classic mistakes: the NIH syndrome and going on a hiring spree once the investments started rolling in. Their managerial skills are at least as good as their engineering skills.
Not so long ago, maintaining hardware that could support 900M user would have required an IBM scale company. A single developer today can develop, deploy and maintain a medium scale ecommerce site using infrastructure like AWS, a myriad of OpenSource solutions, plenty of services to handle payments, ... yet he will probably be using the same language than 15 years ago when 20 times more developers were needed to achieve the same result.
* SoftLayer is their cloud provider, bare metal machines, fairly isolated within the network, dual datacenter configuration
Softlayer is an IBM Company, so ultimately it DOES require an IBM scale company to run this ( at some point in the chain).
I'm building a product that only a few years ago would have required a VERY significant investment, but now is basically stacking and connecting lego blocks of services :) - sales-as-a-service isn't mature yet, but if we had it, it would even sell itself :) .
Ok, it's probably a pain if one of the black boxes fails, and I do know enough about the underlying architecture behind the services I'm using - I could probably replicate (badly) most if not all of them given time and money, but why would I?
I don't think this is a possibility whose importance can be understated. In most of my apps running on IaaS/PaaS offerings like heroku, key pieces of the infrastructure tend to fail for short times (typically very inconvenient times) fairly frequently, on the order of once or twice a week. The relative cost of this is highly variable and business-dependent, but at best its mildly inconvenient and at worst can be crippling. Its definitely something that needs to be accounted for. That said, I've also been lead on apps that used the same pieces of server infrastructure that had far better uptime when I handle ops myself instead of delegating that to another provider. (Not to pick on the providers—they have a very difficult job to do in a cost-effective way, and I'm quite certain that they do it better at that scale than I would.)
The choice of Erlang for WhatsApp was strategic if for no other reason that that it allows them to dispense with some of those choices. Many of the typical use-cases of Redis, for example, are easily supported by OTP.
Do you? If yes, please enlighten us. Otherwise I don't see the point of your objection. No one said that it can be done in a weekend. All that the parent comment said is that the fundamentals of building WhatsApp are already solved. He/she didn't dismiss it. Just because something isn't rocket science doesn't mean it's not useful.
As for Facebook, people used to dismiss it not because it was seemingly too easy to build but because they failed to see its usage. Long before it became a platform it was pretty much a waste of time. Obviously anything with more than a hundred MM users is difficult to maintain.
Go watch this: https://www.youtube.com/watch?v=TneLO5TdW_M#
What I in _no_ way could do is rewrite fb or twitter at the scale these systems operate today with a billion users and even more posts and data points. I don't agree with the sentiment of the previous poster, but fb & twitter were initially basic CRUD apps.
And yes of course you will want to take a step back and change almost everything about it if you want it to scale to more orders of magnitude.
There's a ton of work involved in making a platform like WhatsApp a polished user experience. There's then a ton more work involved in making it _solid_. In choosing Erlang, they chose a platform that trivialises a large part (though not all) of the latter, allowing them to focus on the former.
Is this a simple 'solved' problem that anyone could do? No. But is it a super-human feet that only a handful of people could achieve? IMO, no as well. I think people in the latter extreme like to believe this as it's something they can aspire to - to say otherwise is to devalue their vocation. In the former camp, I think it's people pushing back against this too far in the opposite direction.
Maybe the backend. I couldn't write a Blackberry Java app though which was WhatsApp's initial value proposition.
From a technical standpoint, WhatsApp, the product, and the scale they operate at are nothing new.
(note that both google and facebook use proprietary chat protocols now i believe)
Don't forget WhatsApp has applications on all platforms.
- What if A has a Nokia and B has an iPhone?
- What if you want A, B, and C to have a chatroom?
- What if someone starts spamming random people?
- How do we QA the thing for all these platforms?
- How about someone to keep the visual design fresh?
- What about a million corner cases like when someone is not online, someone sends a message that's too big, one of the servers goes down, and so on?
Etc.
You're right that the scope is not as big as some other apps, and that's what makes 50 a sensible number rather than 5000.
It's easy to see what pieces you need. But there's still work in glueing them together and testing the result.
I think 50 is a sensible number of in-house engineers for this sort of thing. You want cover as well in case someone leaves or gets ill. You want people to be able to upgrade the system when things change. You want people to look ahead at future requirements. And you want to be able to do these things all at once, with slack built in for peak load.
WhatsApp did nothing technically challenging, but they did strap a business model (err, sort of) to something many others failed to capitalize on.
http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html
Also, let's not forget to give credit to Carl Hewitt who came up with actors in the first place [2].
Talking about ejabberd is admitting a core piece of the product is standing on the solders of giants. Something startups are often loathe to do.
That's a social problem though (the fact that 35 guys generate so much cash, while on the other side of the planet 350 millions are looking for a way to pay the rent), not a technical one :-)
Also, an army can only send so many messengers before you run out of soldiers (or operational readiness). Packets are free and plentiful. If you're on a network link so bad that you can't even occasionally receive a TCP ack, then you're very much an outlier.
Also make sure to support offline devices being sent text, audio, video and image files (and the client application on several platforms)
I hate how tech blogs take a thing thats quite well known and old and spins into a "did you know?" post like it was just unraveled (Oh, maybe your staff just heard about it, doesnt mean no one knows shit.)
There are a lot of startup people here, who work at a startup, bet their time, money, life? on one, and talking about a successful lean startup sold for 19B probably bring feelings of "How come it is not my startup?".
And then for Erlang, it has different syntax, and have to think about concurrency, functional programming, and it is hard for someone used to curly braces. Maybe many tried it, but dismissed it, or bet (time, money, life?) one something else so it is easy to say "But it is not about the platform or technology". Because other conclusions might mean "heck, maybe I made a mistake, I should have that up as well for my problem domain", nobody like to feel that way. Of course, nevermind that engineers from WhatApp have mentioned Erlang was one of their strategic advantages.
Managing 2-3M connections per machine means needing to have fault tolerance (so Erlang is a good choice), but also means managing an order of magnitude less machines! One of the deeper insights we can learn in general is that at scale no matter how cool the concurrency mechanisms, how fast, and new, if they don't go hand in hand with fault isolation then it will just be a very fast system until it starts crashing and its throughput drops to 0. Of course you can do fault isolation with separate servers and OS processes (containers,VMs...) but in this case they do it at a finer grained level.
One aspect of this trend of resentment you describe is that having comparatively less robust and using less efficient languages (like js with nodejs) in the servers would make them require more cloud resources.
We as humans tend to rationalize our past choices, probably a fair amount of the dismissal is from developers who think their "secret sauce" is using AWS with auto-scaling.
And the only one who wins something from this trend is Jeff Bezos and other cloud shareholders.
1. No web interface, I'm forced to use a tiny mobile keyboard
2. Identity tied to my phone number which changes every month
3. Ugly (subjective)
4. My friends are already on Facebook, why have another service that does the same thing but worse.
5. No chat bubbles.
6. No meme search
I could go on and on. They just got lucky and hit the lotto with foreigners who couldn't afford decent phones and are now locked in to their platform.
Edit: formatting
Not a problem for most people. On the other hand it works well on pretty much every phone out there. In comparison Facebook messenger runs terribly on my iPhone 4. I'd hate to try and use it on a lower end android phone.
> 2. Identity tied to my phone number which changes every month
I've had the same phone number for over 10 years. Everybody understands and is familiar with phone numbers and have been for a long time. My 70 year old mother has no problems using whatsapp. Many more people have my phone number than have my email address.
> 4. My friends are already on Facebook
Good for you. Many of my friends aren't. Most of my family and relatives aren't. I'm thinking of leaving it myself as it's just a big time waster.
> I resent them because Whatsapp is terrible, terrible software compared to Facebook Messenger yet somehow made $19B.
Except it's really only bad for your particular use case. For most people Facebook messenger was late to the party and doesn't have any real draw.
Facebook messenger still doesn't have basic functionality I want. For example if I scroll to a particular point in a chat conversation and later come back to the conversation FB Messenger has not kept my scroll position. Basic basic usability problems.
Facebook Messenger has been around since the launch of Facebook. I've personally been using it over 7 years in various forms. WhatsApp is the one that was late to the party.
> On the other hand it works well on pretty much every phone out there.
Of course it does, because it has no features. You can't send money with it, you can't send stickers or GIFs, you have to physically open the app to send a message, it doesn't have link previews, and so on and so forth.
And it was a crap experience on mobile until it was pulled out of Facebook into its own app.
> Of course it does, because it has no features.
It has the most important features for good individual and group chat.
> you can't send stickers or GIFs
That's a feature.
> you have to physically open the app to send a message
I'm not sure what that means. I have to open the FB Messenger app too? Maybe it's different on android.
> it doesn't have link previews
Again another point in whatsapps favor. I hate link previews in FB Messenger.
> You can't send money with it
Not really much of a feature because of all the setup involved. It's got potential and if it could tie in with the host operating system or payment providers etc on mobile it could be really great.
The only reason I use Whatsapp is for contacts that don't have Skype (even your fancy Facebook is too new and webby for me).
Video calls are a must for me, but they seem to be a thing of the past now.
WhatsApp success is built more on MS failure than anything else.
No idea how recent this is, I discovered it a couple of weeks ago: https://web.whatsapp.com/
Edit: not to mention the security implications of having authentication tied to one's phone number. Any telecom employee, foreign government agent, or skilled social engineer can impersonate one on WhatsApp reasonably easily.
I have found other mentions about it, perhaps on Erlang mail lists, here is an interview with Eugene Fooksman:
https://pdincau.wordpress.com/2013/03/27/an-interview-with-e...
"""
And the consensus in our team is that it is largely because of Erlang. We’re managing to serve huge amount of connections from single front-end server (this is from last year’s Erlang
"""
I don't know how much clearer can it get.
Here is another directly from their website:
https://blog.whatsapp.com/196/1-million-is-so-2011
It is a bit older they clearly indicate that FreeBSD and Erlang are key and critical elements that let them operate they way they do.
http://highscalability.com/blog/2014/2/26/the-whatsapp-archi...
Perhaps the mods could merge/replace this (pretty bad) Wired article?
I really need to sit down and spend some time properly learning a functional language. I can hack my way through Haskell code but I do it in a very non-Haskell way. I really need to change that. My primary language is C++ and I am open to any recommendations for what direction to go in :)
https://pragprog.com/book/jaerlang2/programming-erlang
The problem with learning functional languages is finding pragmatic learning materials.
I would claim F# is currently the most approachable functional language (just my opinion but I have at least toyed with the other mainstream offerings).
My background is also in C++. The F# materials listed helped me personally to develop as a programmer and have made approaching other languages like Erlang easier.
Sestoft's programming language concepts: https://www.itu.dk/~sestoft/plc/
Expert F# 3.0 contains lots of short snippets and examples: http://www.apress.com/9781430246503
Flying frog consultancys materials are steep in price but I found them worth my dime (Visual F# 2010 for Technical Computing and the materials in The F# Journal) http://www.ffconsultancy.com/products/index.html
This is kind of true. But there is a nice community around erlang. I always found good, valueable input at erlangcentral.org and stackoverflow.
https://pragprog.com/book/elixir/programming-elixir <-- dave thomas has a great writing style.
https://www.edx.org/course/introduction-functional-programmi...! is a MOOC in Haskell
The app is still a remarkable achievement. Those engineers have done a remarkable job integrating everything (plus their own business logic on top), but they are also leveraging a great deal of work done by others.
However I doubt people pay much attention to the companies quarrying rock to make concrete, or the engineers designing the axles of the trucks. Any large project is a team effort, but to count tangentially related projects as partitions of another ignores the achievements of those projects (i.e. AWS and Erlang are massive achievements that have, and will, exist regardless of WhatsApp).
So, WhatsApp has 50 engineers modulo any dedicated support staff.
No, it shouldn't. A complete account should just be people employed by the company.
So the point is that it is not surprising for a similar app to be developed 5 years later by a small group of people.
Concurrency is not parallelism! /whacks author over the head with a Go manual
"A method of programming where you can safely allow many different, but related computations to occur simultaneously to arrive at a desired result. Thanks to the "safety" aspect, these computations can be automatically processed in parallel (at once) by many thousands of computers to increase the speed of the program, but no collisions of data processing will occur. In other words, no two parallel processes will work at cross purposes as a result of parallelization - when the code is written correctly and concurrently."
I think west really hates it as most of the people there have iphone and they had this $1 signup which made it unpopular there. They never had that on android which made it a darling of non-west
You can make a better IM with fewer people, when you don't have bloat like stickers market and celebrity chats. And don't try to push people to buy those stickers in every possible menu. (Hi Viber).
Anyways, Facebook has more users than WhatsApp. Where do you live that people don't have Facebook? What is the advantage of having a WhatsApp account instead of or in addition to a Facebook account?
I doubt it's ever a good idea for a company like Facebook to do layoffs but I wonder if there are any lessons from the WhatsApp team for a company that size - their intern cohort looked way bigger than 50 and they seem to have almost 50 offices [0]. Obviously a very different product and much more complex but it's interesting to wonder what the same product led by Jan Koum would hypothetically look like.
If you already know the language fundamentals...you'd not be asking about linked lists; you can only have singly linked lists in an immutable language (without extremely bad performance, that requires every update/insert/delete to re-copy the entire list), and they're so fundamental that the language's core has them for you. And most of the common data structures are well discussed in Learn You Some Erlang For Great Good. Sorting, eh, https://gillesleblanc.wordpress.com/2012/05/12/sorting-algor... . Graphs, you need to narrow down a bit, different types of graphs require different implementations, and due to the immutableness of Erlang will likely require thinking about in a different way than in a mutable language.
But an even better idea is to check out Elixir http://elixir-lang.org/ and http://www.phoenixframework.org/ which have been gaining a lot of steam as of late.
It does, can personally confirm.
I mean this is partly a reflection of the teams brilliance, and the foresight. But its also that the operational cost is relatively low compared to a payroll system that needs to abide by government regulations and reporting requirements (for instance).
This scale isn't unusual at all. Really it's a lot more about feature development. The smart way to build most mobile startups is to use managed providers like google app engine, AWS Container Service, or Heroku. Between that and how not-bad both Android and iOS are to develop for these days (compared to their history), it's possible to get your engineering team size pretty small.
How many apps are used by 13% of the world population every month?
When architected correctly, the actual amount of code to be written and maintained is quite low. And an easy way to jump-start that architecture is to have other people who have amortized the cost into a service model do that work for you.
Are you making something that searches the entire internet for relevant documents based on a custom query? Or are you sending a picture to another phone that goes away in < 5s? Or is this a blog?
If you're talking "minimum" then theoretically it could be 1 person. It's very easy to scale static pages. Heck - you could host a static page on S3.
http://instagram-engineering.tumblr.com/post/89992572022/mig...
The Erlang thing is nice a nice fit, but mostly because they leveraged an open source product.
My sense is that WhatsApp spends all of its energy on the very core product offering and not a bunch of superfluous activities. I don't think the language choice has much to do with it unless there's some sort of "keep it simple" thinking that the languages somehow exude.
My company has recently learned about scrum and pair-programming, that seems like the only way to success to them. So, it would be nice to know how other successful companies are organized and develop software.
This article should talk about what the 47 others are doing.
One UX example in the iphone app is the action sheet that pops up when you want to send photos or your location. While in facebook it gets embedded in a fancy keyboard drawer. The action sheet version probably took about 5 hours total for all of it, while facebook messenger's version probably took 500 hours minimum.
Another example on the backend is how they are relatively stateless, do not keep chat histories, do not have real multi-device w/ one account capabilities and so on. Each of those features would increase engineering and machine cost, sometimes significantly.