How Facebook Ships Code
Hugh Pickens writes "The two largest teams at Facebook are Engineering and Ops, with roughly 400-500 team members each, together making up about 50% of the company. All engineers go through 4 to 6 week 'Boot Camp' training where they learn the Facebook system by fixing bugs. After boot camp, all engineers get access to the live DB and any engineer can modify any part of Facebook's code base and check-in at-will so that engineers can modify specs mid-process, re-order work projects, and inject new feature ideas anytime. Then arguments about whether or not a feature idea is worth doing or not generally get resolved by spending a week implementing it and then testing it on a sample of users, e.g., 1% of Nevada users. 'All changes are reviewed by at least one person, and the system is easy for anyone else to look at and review your code even if you don't invite them to,' writes yeegay. 'It would take intentionally malicious behavior to get un-reviewed code in.' What is interesting for a company this size is that there is no official QA group at Facebook but almost every employee is dogfooding the product every day."
That explains a LOT...
After boot camp, all engineers get access to live DB
So anyone who's ever worked at FB as an engineer will have likely downloaded copies of all their friends' / family's / ex-girlfriends' inboxes, chat history, etc.
Not surprising really.
It's too bad much of the article is wrong.
Comment forecast: Bits of genius surrounded by a sea of mediocrity.
But will they catch unintentionally malicious behavior that gets un-reviewed code in?
Not all engineers are licensed. Civil engineers are usually licensed. Mechanical engineers and electrical engineers are usually not licensed. Similarly, there is no licensure for system engineers. There are "certifications" but these are essentially meaningless.
My blog
Bear in mind how Facebook works internally. It's a large number of programs intercommunicating through a remote procedure call system. There's no one big "build". The interfaces between programs are well defined, and changing out programs individually is normal.
Yeah, I had to look it up. Never heard of the term "dogfooding" before.
It seems a silly word choice, since in context it carries no more meaning than the rather more conventional word "using".
Bow-ties are cool.
We get to read this story every few years. Some company makes a popular product and all of a sudden they are the authority on development. News flash guys, enterprise software wasn't just invented and we've been rolling out features to millions of people for years. In environments where any discrepancy can lead to serious legal repercussions. So just for a second, hear us out. We know what we're doing and we don't need to reinvent it every few years because the guys from Facebook, Basecamp, Hacker news, or any other place said we're doing it wrong. Our bottom line and years of quality deliveries say we're doing it right. What do these guys have besides a history of rolling out mistakes? Their value is based on hype, not their code quality. Some of us don't have the luxury to make huge mistakes and have our customers be okay with it.
Tiger Blooded Bi-Winning Machine
I know they're always looking to "streamline" Facebook, but sometimes really obviously good features vanish without explanation and leave users scratching their heads. These decisions would make more sense if you could see some way that FB was making life easier for advertisers or something, but often, the feature regressions are just nonsensical to the extreme.
A few:
- Facebook got rid of statuses. The one e-crack feature they're best known for. Gone with the new profile. Now they're just wall posts to yourself that quickly fall down the page. *facepalm*
- Photos are now uploaded in descending order. It used to be that a group of images would be uploaded like this: beachtrip-1.jpg, beachtrip-2.jpg... and so on. Now it reverses the order of an uploaded album. The last photos taken are displayed first. Posting vacation pics? Well your friends get to see the day you left and work their way back to the day you arrived.
- The "Reverse Photo Order" option was removed when the above "feature" was introduced. You can drag around photos to manually reorder them, but every photo that you mouse-over jumps out of the way and moves to different rows. It's a UI disaster.
- A few months ago I started seeing tagged photos of friends despite the fact they were in private albums of people I'm not friends with who also happen to have locked-down profiles where you can't see anything at all unless you add them.
This is still a learning process as they're one of the biggest guys out there usage-wise. It's hard to tell what's real and what's fake but I reviewed Beautiful Data for Slashdot a while ago and am reminded of a chapter by Jeff Hammerbacher about Facebook's database in the early days. Maybe the culture is still a little bit like those early days with the database where they spend more time constantly addressing data issues and trying to step up to the next <prefix>abyte? You can go ahead and presume all you want but I'm going to guess the developers are pretty busy dealing with some serious scaling issues. Past performance of the website reinforces this and, let's face it, the "chat" feature was and always will be a nightmare to use.
At a staff of 200, I would also wager that new features take a back seat and would propose that this is why we see Facebook's "upgrades" as being almost purely cosmetic (i.e. layout, markup, etc.).
My work here is dung.
It's easy not to have QA when your users aren't paying you.
Google's in the same boat - the websites aren't the product, the end users are. When your website is your product this crap won't fly.
I have a degree from a university in electrical engineering. I work as an electrical engineer and I consider myself one. I am not licensed as a professional engineer (PE) and have little interest in obtaining that license at this point as the type of work simply doesn't appeal to me.
As you suggest, those PEs do put their license on the line when they sign a document. From my understanding, companies that have resident PEs will only have a few and have other non-licensed engineers do the less expensive work.
If it is a product it will usually need to meet expectations set by a different regulatory body (ETL, UL, FCC, whatever). If it is a building, power related, whatever, then it requires the review of a PE.
http://en.wikipedia.org/wiki/Professional_Engineer
I'm not really sure how they would regulate Facebook with their data ... I've never dealt with something like that.
Mathematician, n.:
Someone who believes imaginary things appear right before your i's.
Engineer is just another cheap title, like CEO/CFO/CIO/CTO, etc, free to be used by anyone.
No, this is not true. There is a big difference between being the employee of a company and being an officer of the company. Those "O" titles actually mean something. Doesn't mean that the people who are officers of the company are the right people for those roles, but there's real baggage that comes with those titles, including a higher standard for the consequences of entering into contracts, obligating the company to act or pay bills, etc.Being an "O" also makes you more of a law suit magnet.
Don't disappoint your bird dog. Go to the range.
Engineer is defined as someone who designs, builds, and maintains.
It has nothing to do with licensing, government accountability, code of ethics, accreditation, or anything else.
It is not a cheap title, it is a description of the job. When they say Facebook engineer, we get a sense of what those employees are required to do; which extends beyond the role of just programming.
> I'd have thought that a team of 3-4 engineers could achieve the same effect.
This is very typical sentiment in people with little to no experience in running large sites. They believe a) What they see is all the exist, b) Scale does not matter, and c) The site never changes.
This lead them to the faulty conclusion that any high-availability, high-traffic site could be run by two people (of which they no doubt are one) live-updating PHP scripts on the fly. See Also: Dunning-Kruger effect.