Martin joined us this summer from MIT, where he's studying Computer Science and Engineering. He loves reading, learning about learning, playing foosball, and programming. His spirit animal is a dog and he gives the best head scratches.
Martin joined the infrastructure team and spent the summer working on a number of critical projects related to data migration and security efforts. After starting the summer by designing a new Postgres schema and orchestrating the migration of all our account metadata from BigTable to his new system, he went on to land a number of other improvements in our system. He built in support for webhook events that hook into our billing system and designed a mechanism to control data cardinality that makes our systems more stable. Over the course of the summer he befriended one of our office dogs, Luci, and she misses him dearly.
How did you get interested in computer science and software?
I got exposed to PowerPoint in elementary school and I really enjoyed messing around with being able to create things in there. It's a surprisingly powerful program in that you can create different states and triggers to animate things, so I started making games in there.
My parents didn't know anything about programming, but they saw this program and liked it so they helped me get access to some more powerful programming tools. Then I just started messing around from there and creating other games and doing tutorials. This was still elementary school.
Originally I was just interested in games, but then it spread to robotics in middle school, websites in high school, and I kept making games and tools as well. I enjoy creating things that are fun or useful.
How did that develop when you got to college?
I had one programming class before college. It's mostly been that the themes I've been interested in in computer science have changed over the last 4 years. In the beginning I was interested in robotics, but that interest faded out at some point. It got replaced by an algorithms and machine learning interest, which has more recently been superseded by building tools and helping people think about how to solve problems more effectively.
How did you get interested in Apollo?
It came originally from my interest in Meteor, which more broadly came from an interest in both being a good software engineer and understanding how to improve the tools that software engineers use. I was glad to see that the Apollo project is motivated by the same goals as the Meteor project, in terms of making programming more accessible and easier to get right.
How has your summer played out compared to your expectations?
The impression I have of any company is that most people are not immediately working on the direct goal; there's a large chain of work and hierarchy that supports our company's goals. I worked on our tool, Engine, which helps people understand how their website is performing and what other members of their team are doing.
I was a few steps removed from the product design thinking, but I didn't mind that because I was learning lots of interesting stuff about how Engine works and technologies I hadn't used before, and trying to figure out how to become a better engineer within the technologies and in general. There were a lot of systems and design problems that I hadn't thought about before.
What did you learn?
There's a long list of new technologies I picked up. Some I'll use in the future, like Kubernetes, SQL, and site reliability concepts. That bleeds into the things I learned about systems as well. By learning some of the specifics about how to use the technologies I learned more general systems concepts and how to build systems in a way that doesn't totally fail. It's in the company's culture and product to think about how people develop software and how people could develop software better.
Any new passions this summer?
I got interested in studying pneumonic techniques at the beginning of the summer. I did a lot of exploring San Francisco and biked to the Golden Gate bridge several times with friends. I enjoyed the city and the weather :)
What projects did you work on?
One of the projects I worked on was to add a defense mechanism to our system. Data that we receive from users is processed in a variety of ways in a long pipeline so we can surface statistics to users about how their GraphQL queries are performing. We had a limitation with our system that would cause things to start to break down if we tried to aggregate statistics about too many different types of queries. I put this mechanism in place that would identify when we were getting too many different types of queries from customers so that we could help ourselves from getting spammed.
My mechanism would basically count dimensions in a set and do it in a way that was efficient and didn't impose too much load on the rest of our infrastructure. It needed to be fast and reliable. If the blocking mechanism engaged we also needed to make sure it responds nicely to the customer and also triggered the right protocol for our team's response.
We did some research and found that there are some powerful algorithms that people use to approximate the size of sets. We ended up using a data structure called a hyperloglog counter, which uses an extremely small amount of memory to make the approximations and does it with very close approximations. We were pleased to find that this data structure is already built into a bunch of infrastructure tools and would therefore be easy to run in our system.
It took a lot of design work to land on this plan and we're still iterating. I worked on this towards the end of the summer so I felt a lot more comfortable in our codebase working on it and generally knew how things worked. I knew all the shorthands, how our Kubernetes cluster worked, etc. I learned from some mistakes I'd made earlier in the summer and tried to build in monitoring, concurrency, and thinking about memory overheads from the beginning this time.
What would you tell new members of the Apollo team?
Make sure that you're writing down what you're learning and doing, especially longer term learnings that you want to take away. I got a lot of benefit out of talking to various people in the company, like the CEO over lunch :) Read all the existing documentation you can find. Focus on identifying the things you don't understand and figuring them out. Be comfortable with an initial lack of knowledge but make sure that you're systematically growing your knowledge and finding resources to do that.
What do you think the future of GraphQL is?
It depends how far in the future you're asking about. I think the most interesting long term vision is that every piece of data in the world will be able to be processed and queried, which is interesting both in terms of making it easier to write software the right way and data also being openly accessible. You lower barriers to knowledge. This unlocks the ability to make software more efficient and change how people think about it.