Lately here at MailChimp we’ve been trying to bring in more developers to help us keep the innovation coming fast and furious as the application grows in scope and scale. It’s always been difficult for us to hire really good developers, just because of where we are. Our office is here in Atlanta GA, not exactly a hotbed of cool startups in the last few years. On top of that we’re fundamentally an email company, which is far from a sexy problem for geeks to sink their teeth into. But the biggest negative reaction we get when hiring new developers is when we mention the programming language we use.
Ewww, you use PHP? I thought you were cool!
Yes, I’m afraid we have to come clean. We use PHP here at MailChimp. For the non-programmers among you, PHP is a programming language that is extremely popular in dynamic web sites and applications. Even this blog is written in PHP. Despite its popularity, PHP is considered by the programming elite, almost without exception, as one of the worst languages currently in use today. The term "good PHP programmer" is considered an oxymoron. Yet it’s the primary language we use here for development, and it’s the only language we use for everything touching the production MailChimp application. You can imagine the horror and surprise we see when we try to tell a good developer that we use PHP to solve cool and interesting problems.
So here’s my best answer to that.
We’ve built a framework for developing applications in PHP specifically designed to allow for fast innovation in the high-load, high-performance environment we live in every day while still keeping the API extremely simple to deal with. This isn’t your grandfather’s PHP, or even your slightly older brother’s. I can say without doubt that it is the most sophisticated framework for this environment that I’ve heard of except for perhaps what Facebook uses. Our architecture is heavily sharded, fast, and scalable to handle the absurd amount of growth we’ve had in the last few years.
We use this architecture to process well over thirty million emails sent by tens of thousands of users every day*, generating tens of millions of bounces, opens, clicks, and unsubscribes that all need to be handled in near-real time. We further process millions of API requests and millions of subscribes and confirmations every day. All told, we handle well over 500 million dynamic page views a month. Our backend systems run millions of jobs every day, calculating statistics, querying geographic data, and scanning everything for bad behavior and abuse.
We handle all kinds of users, from small groups with lists in the tens of emails to huge multi-million subscriber lists, sending anywhere from yearly to multiple times a day. On top of that, we have to process detailed segments and analytics, allowing our customers to slice these hundreds of millions of people in completely unpredictable ways. This is just going to get bigger and bigger as we grow by 500% or more every year – adding new features every step of the way. And that’s not even touching the deep infrastructure for actually sending the emails or filtering for fraud, abuse, and spam.
And we do all of this in PHP, which is really pretty cool. It’s true that the platform wasn’t really designed for what we put it through and it hurts us from time to time, but that is to be expected. Once you get to the scale of computing we’re at, the language you use is much less important than the platform you build on it. A simple language change isn’t going to make these problems less complicated, or less awesome.
So before you jump on that bandwagon thinking nothing interesting could possibly be done with PHP, think of us (or Facebook). You might be missing out on something great.
* Update (12/9/14): We’ve grown a lot since this post was written 4 years ago. Currently, our 7 million users send 400 million emails every day, which works out to just north of 12 billion emails a month. And yes, we still use PHP.