At Facebook, our engineers collaborate to create an open environment where ideas win and are executed quickly. Each week, our engineers will give you a look into what it's like to ideate and build at Facebook in our new "Meet a Facebook Engineer" Q&A series. Check back weekly to hear from different engineers about what problems they're passionate about solving right now, what they're up to at Facebook and what advice they have for you.
Q: What problem are you most proud of solving at Facebook?
A: Scalability problems. I truly believe the scalability problems Facebook has today will become the ones many other companies will have to solve tomorrow. More and more companies will have large websites with a lot of data, and keeping up with data growth is challenging. Facebook is among the first companies to attempt to solve these problems on a massive scale, and I'm proud to be part of the effort. Today, different companies and groups are coming up with separate solutions for similar problems, but eventually managing data will become more streamlined and more groups will be able to handle large amount of data with ease. This is exciting.
Q: What problem are you most passionate about solving right now?
A: As a part of my commitment to solving scale problems, I'm currently writing a distributed SQL database. I think traditional databases have already come up with a great way to abstract data access in SQL, but the context of old implementations has been single-machine based. Very few of these databases have done a nice job scaling up to handle very large amounts of data. In addition, not all databases have different ways to handle data with different access patterns, which results in inefficiency. My new database is trying to address these issues. I'm very passionate about this project because I think I'm getting a head-start on something that people will have to deal with soon.
Q: What does a typical day look like for you?
A: My day varies depending on which phase of project development I'm in. When I was initiating and preparing v1 of HipHop for PHP, I spent a lot of time finding the right people to discuss my vision with. These days were full of meetings and whiteboard discussions. After that phase, I started my coding phase, when I'd spend the day writing code on my laptop from the office, home, Starbucks, etc.—anywhere my soul could be entirely with my program! After this phase, I began having conversations about deployment issues and trying to solve real problems with my code. This is when I started to do intensive testing and deployment, which is the phase I'm in now with my database. Testing and deployment usually involves taking new feature requests and modifying existing code, which involves a lot more collaboration. Finally, once the code is running in production, most of my day will be spent monitoring machines and debugging live problems. I love each of these phases, and enjoy that I have the flexibility to tailor my day to whatever phase of development I'm in.
Q: Why do you come to work in the morning?
A: I can hardly tell what is work and what is fun—coming to work in the morning reminds me of when I was a student in middle school, rushing to the computer room whenever I could. Even today, I rush myself to office after I park my car. Finishing a piece of code and watching it run makes me happy, and there's the satisfaction in knowing that it will help make millions of our users happy, too.
Q: What advice do you have for other engineers?
A: As a senior engineer, I have been through the programmer ranks and have distinct advice for each stage.
For intermediate-level people, I think Facebook is one of the greatest places for having impact. By taking on challenging tasks, you can make changes that affect millions of users. Nothing is more exciting than seeing your code change the world. Facebook counts on our talents to come up with genuine ideas, respectful communications, and great implementations.
For senior people like me, it's really our job to coach young engineers on how to approach technical problems systematically and how to resolve disagreements gracefully. The job comes with the great responsibility of supervising the entire engineering force to move in a direction that we as a company are happy with. I hope senior engineers are willing to spend their time helping other people grow instead of just focusing on their own work. By putting ourselves into "sharing mode," we can help build a great software community within our respective companies that will proliferate for long, long time.
Haiping Zhao, a senior software engineer, writes code…for fun.