My Facebook University Engineering Program Essays

I believe mobile technology can empower community builders in two main ways:
Mobile technology helps build communities of tech learners and builders. I know that the most popular software products in the world are all built by a community and for a community with an enormous amount of mentoring and learning involved. I’ve first learned how to code in JavaScript and build software with the Hack Club community. With the help and encouragement of my mentors, I turned my open source browser game, Shouty Flap, into an iOS game. It soon got quite popular among Hack Club students. For me, the fact that I am sure what I’ve built has potentially made at least a small number of students think that “if she came in barely knowing how to code and built this in a day, I can build it too” is truly exciting and empowering. This is why I am striving to become a community-oriented tech builder.

Mobile technology helps build communities of tech users. No piece of useful technology is built without valuing the voice of the user and putting the needs of the user at the center. Sadly, we still have a long way to go in genuinely valuing the inputs from students as a community. My college’s official student course registration system was not only not mobile-friendly but also painfully difficult to use. A group of students had formed a coalition calling for a better system until the introduction of SCU-Classes, a schedule builder in the browser developed voluntarily by two students provided a temporary solution. Unfortunately, with the graduation of the developers, mobile SCU-Classes didn’t work out because of worries of the app’s compromised usability in mobile. So our students had to continue the fight for a mobile course reg system. Recently the administration finally decided to build a mobile version of the course registration system. What I appreciated the most from this story was the power students gained to fight together because of mobile tech. I feel extremely fortunate to be in the middle of a highly progressive community built by people who believe in the power of tech, and I am eager to join this rank of builders and engage in my communities through the medium of mobile technology.

P.S. To Facebook hiring managers: consider hiring a higher proportion of folks from non-target, non-tier 1 schools. You’re losing out on too much amazing talent and passion. It costs you money and reputation. Just saying.


My technical interview experience with Dropbox, Twitter, Amazon, Box (2017-18)

Dropbox [90min] [OA]

Grid Illumination: Given an NxN grid with an array of lamp coordinates. Each lamp provides illumination to every square on their x axis, every square on their y axis, and every square that lies in their diagonal (think of a Queen in chess). Given an array of query coordinates, determine whether that point is illuminated or not. The catch is when checking a query all lamps adjacent to, or on, that query get turned off. The ranges for the variables/arrays were about: 10^3 < N < 10^9, 10^3 < lamps < 10^9, 10^3 < queries < 10^9.

This problem was quite hard for an internship OA. I got it in first semester freshman year with next to zero coding practice, not to mention reading up CTCI to learn the “right way” to solve problems.

Tips: Use time accordingly to plan solution.

Twitter [easy – medium] [45min] [onsite]


1 Given two numbers as strings, output their sum as a string.

Straightforward. For this question, be careful in the way you handle the carry. Make sure to consider a lot of different cases when testing.

2 Given an array of integers with duplicates, find the int that isn’t a duplicate (this int is guaranteed in the input array). followup: given that your solution will be used as a backend utility function, how to design a return value for invalid inputs?

You can approach it with a straightforward hash map and expect the interviewer to follow up asking for improvement in space complexity (hint: use bit manipulation). For the followup example answers are exception handling mechanisms or constants. I bombed the followup because I simply did not know how to answer it with a lack of design knowledge, but it seems like most of the time interns don’t get this kind of questions.

Behavioral: why major, what’s your proudest achievement, talk about a challenge you’ve encountered in group/team setting

Tips: Follow the process strictly but(!) also listen closely and communicate frequently with interviewer.

Amazon [easy] [OA * 2 + video interview]


debugging and logical questions (straightforward but time goes by really fast so manage it well!)


  1. amazon fulfillment center, find two boxes whose weight is less or equal to maximum weight

Classic combinatorial optimization, a variant to the knapsack problem.

  1. amazon data center, round-robin style access, find average waiting time of all clients

This problem was very hard in the sense that there were a lot of things one needs to keep track of when crafting a solution. You need a crystal clear understanding of the problem and plan your solution meticulously.

*Rumors say that if you did exceptionally well in OA2 they will skip the last round of interview and give you an offer

1-on-1 video interview [45min]:


Introduce yourself

Tell me about a project you’ve worked on with a tight time frame and how you got it done on time

General software engineering knowledge:

What is the difference between an array and linked list?

What is a foreign key in database?

What is TCP? How is reliable data transmission implemented?


1 Find the nth Fibonacci number

I bombed this question because I tried to recall an optimal bottom-up solution but was blanking out on the details of it. After being stuck for about 10 minutes I had to go back to the basic recursive solution, talked about optimization with memoization but ran out of time to actually implement it. I was sure that this left a bad impression; it showed the interviewer that I was unorganized and hasty by trying to jump to code without thinking through my solution first.

2 Check if a string is palindrome

Straightforward. Make sure you can go beyond the solution using something like reverse()

Tips: Don’t pretend to know something that you don’t actually. Never, ever try to come up with an optimal solution upfront without being 100% sure how it works and how to explain it. Start by talking about a naive solution and build it up elegantly to better solutions.


Box (Security Automation) [easy, specialized] [OA]


1 Check if a string is valid ipv4 or ipv6 address


3 Parse base url

Tips: Familiarize yourself with Python features. Know how to use regexp.


Practice/communication tips:

* Make sure your interviewer understands every step you take

* Practice problems, see patterns of best solutions (clean code, high performance)

* Be highly comfortable and familiar with one coding language (Python recommended because it’s used pretty ubiquitously at companies for interviews, UNLESS if you’re interviewing with Amazon because only Java and C++ are allowed for OAs)


Good luck and practice often!

Failures and bold steps

After an intense fall of internship applications and going through recruiting processes, I’m finally back!

If I learned anything from it, I think it is the detrimental fact that the experience of people who have experienced rejection and failure has never been valued as much as it should be. Of course, we only want to talk about our successes, not failures because we want to look good in front of other people and feel good about ourselves. And we want to learn from people’s successful experiences in the hope of being closer to succeeding ourselves.

But really, throughout all the years you’ve lived you must have known at least one “Big Head”, haven’t you? Some person who has absolutely no talent or tried nearly as hard as you have, but seems to get all the things everyone’s been dying for at school/work because of pure luck? These people, even though they might be in the exact right position to do so, can’t provide any valuable information for how to try and advance in something for all of us who’ve kept our faith in hard work and persistence. As a student and job seeker I’ve been asking around for advice at career fairs, career experts, industry professionals and online – I can only say I really am disappointed in all the generic job search advice and resume tips (easily obtainable from the Internet) I got from them so far. Don’t let these people’s bullSh*t bother you even a tad bit.

I was informed today that I wasn’t offered an internship at Twitter this summer despite that I have prepared for my interviews for a month beforehand. I had so much fun talking to the best engineers and fellow candidates and absolutely everything seemed to have gone so well. Here’s the important part, though: I watched all of CS Dojo (YK Sugishita)’s videos and went through his Udemy course all as part of my prep. Besides the superb coding interview prep videos, I was awed and fascinated by YK’s story as a former Google software engineer and now a full-time YouTube content maker who dedicated his time to help a growing number of candidates succeed in their next coding interview. Here’s one of his countless inspiring videos on this topic:


I’m not really the only person who deserved all the good things because I worked so hard and the world is unfair to only me. I mean just look at him. Why in the world would he quit his perfect job at Google to making YouTube videos full time which guarantees no decent income? He tried so hard to go through all the trouble of getting a job at Google and then just went and inflicted that “failure” on himself! This makes me believe that any successful person in the long term who has built up credibility and won the trust and likes of others would probably never go around and flaunt their achievements first thing when they make first impressions. And anyone who would accept you no matter what and appreciate whoever you are will never judge you even when you share all your failures with them. This is why YK is such a great mentor and has so many followers. He encourages people to take bold steps. Why can’t anyone who’s in the position of offering guidance to our students be just a little more like him?

From YK, my research and interviews with Twitter engineers, I’ve reflected and learned a million times more from my failures over the past two months than I have from seemingly helpful tips from recruiters at career fairs.

My Twitter Academy Essays

It’s getting closer and closer to internship season. I’m preparing for my onsite with Twitter next month and I want to share my responses to the questions on my application and hopefully this would be helpful for some of you.
#TellYourStory: In 280 characters or less, share with us who you are through a hashtag and explain why you chose that hashtag.

The hashtag I choose is #WeTheStudents. This is a hashtag Hack Club uses, and my friends there are making a movement to change the landscape of how high school students engage with computer science and coding. I am extremely fortunate to be a part of this movement. It has changed many of my longheld personal beliefs: growing up as an only child, I was used to being protected by my parents and believed that students and young people have little to no say in deciding a future for themselves because of the lack of knowledge and/or experience. To me, the title “student” used to indicate powerlessness. But my experience learning to code and interacting with Hack Club’s members liberated me from constraining myself within the circle of my own family; it made me dare to adventure, live differently and always open to new knowledge. Now I am more than proud to be a student because this title signifies that I am forever a learner who uses knowledge/power to empower others and the power multiplies with #WeTheStudents.

#ShipIt: Our engineers are constantly shipping (launching) new features and functionality on the platform. In 280 characters or less, list one idea you would ship that would impact the way diverse users interact with the platform?
Twitter’s accessibility efforts have already greatly enhanced the usability of the platform for disabled groups. For example, Alt Text is one of the best features that enables a blind user to be able to access images on Twitter. However, its usability is compromised when content providers are unaware of this option, when it takes too much effort for them to manually provide the descriptions for every image, or when descriptions provided are not detailed enough. The use of specific machine learning algorithms and image recognition technologies can solve this problem by recognizing elements in the image, thus providing a detailed description. After the basic feature is implemented, further optimizations such as natural language used in descriptions can be done, but content providers can still use the manual input option during the transitioning stage of this feature.

Local Hack Day 2017 @ Santa Clara

This slideshow requires JavaScript.

In October I got an email from someone at Major League Hacking about organizing Local Hack Day on campus. I fought alone last year to make LHD happen but failed – I tried to coordinate it through ACM but I couldn’t get anyone on board. Timing was probably the worst it could be: as much as people wanted to participate, having it during the weekend before finals week is a major factor that can hurt turnout a lot.

But this year LHD happened and it was a blast!


Shoutout to MLH for making logistics cake and hassle-free!

Extremely fortunate to have the board of ACM’s support on promotion and funding for food and those were HUGE determining factors in making this experience successful. I ❤️ SCUACM!

Shoutout to myself for initiating SCU LHD and handling backend tasks like securing venue and swag, coordinating with MLH for mentorship, creating Splash & FB event pages, and most importantly, ordering food 🙂

Why and how did SCU LHD happen?

There was a high level of enthusiasm from Bronco/other local hackers. That for sure was the primary motivation for me about bringing LHD here. ACM already has Hack for Humanity, one the biggest hackathons on campus every year in the Spring, but I felt that a small hacker gathering like LHD can do a better job of creating a pressure-free and welcoming environment for hackers to work together.

What went well?

We’ve had projects made by teams of hackers from SCU and UCSC that only had 12 hours to hack them together.

Holiday greeting card generator is a web app built with the Clarifai IR API that lets the user search for the name of an animal and generates holiday cards with images of it.

SCU Calendar is PC application written in C# that helps the user search for events on campus by keywords. It also uses filters to work around their schedule to make sure they can attend. Once matches are found, the app will notify the user via text about the event. View it on GitHub:

There’s an iOS app for help during natural disasters. The app allows to user to make emergency calls and/or send SOS messages in just one click. The team crash coursed on React Native and Twilio for a couple of hours and got their hands right away onto building it! That alone was pretty impressive, not to mention that this app can be literally live-saving!

What could have been improved?

  • <
    To be fair I would be surprised if ANYONE came, but we’ve actually maxed out our RSVPs and even had guests from UCSC. I was grateful for that. I learned that it’s pretty normal for hackathons to have a more than 50% dropout rate, and could have opened up more spaces for RSVPs.
  • Venue. The venue wasn’t optimal because it was inside a residential building that locked its gates on weekends. Comparing to a big, open space like Locatelli, a classroom isn’t really ideal for welcoming hackers. This is also what makes organizing hackathons much harder than you think (besides getting sponsorships).
  • Better swag and prizes. We didn’t have sponsors for prizes and T-shirts this time and those are big incentives for hackers. We don’t have a robust team dedicated to hackathon org at this point, but in the future we can recruit more people to work on getting sponsorships from companies and orgs.
  • Healthiness and variety of food for hackers. Our advisor, Dr.Figueira, was generous on arranging funding for food at the event. We had two hackers who were vegetarian and had to walk off campus to get dinner. Instead of doing quick online orders of Panda Express, the next time take advantage of the size of the event and collect feedback from hackers for diet options!

After all, organizing a hackathon was way more fun than I expected. It wasn’t big, but can’t say it wasn’t successful. And as a hacker, I could say that it was really nice to be on the other side once in a while.

“Optimistic nihilism” is liberating


Source: Uncrate

I once considered the possibility that Buddhism is a form of nihilism through some explanations of it in a reading. I thought that was a brutally hasty assumption by some but I lacked a good way to argue that realizing that there is no self is in no way intended to be nihilistic. Rather, it goes hand in hand with the Buddhist view of life that often provides people with insights on how to deal with existential dread. I needed to understand it better and needed someone to explain it to me in even more common language. I was confused until this day when I found this video which I thought is the closest explanation of what Buddhism is telling us.

Here’s my example of this idea: I did badly on my first AMTH test today and I let myself drown in a miserable mood for a while, knowing that I made stupid mistakes despite spending so much time studying for it. It was a hit on the head emotionally considering how passionately I’ve set goals for myself in this new year and how confident I was about my plans to reach these goals after careful analysis of my strengths and weaknesses. Ironically, the harder I tried to reflect on how I could have used that studying time better and do better next time, the more pain I felt and less reassurance I have about actually doing better next time. But if only had I realized that nothing will eventually matter, I would have been much less upset, and therefore my emotions wouldn’t have gotten in the way of my reflection. Then I won’t feel miserable and can be objectively sure that I *will* do better.

This is why realizing that there is no self (anything and everything will cease existing at some point) can be a liberating experience. It means to take the first step to overcome existential dread—rather than dwelling in it—and be able to live life meaningfully in a graceful, non-aggressive way.


Side note: I’m constantly blown away by the graphic designs and music by Kurzgesagt. Of course, content is always the main focus in the videos, but oh I just couldn’t help but appreciate how well they put together all the amazing animation and music to render their points…a design for even the numbers! I mean, if all they wanted to do was create educational videos, they could have just lazily typed big letters on the screen and threw a bunch of old photos together.

Essay Partners and my first internship experience at Panopath


I started learning Angular for about two weeks on my own, and it got me an opportunity right away at Panopath to work with another engineer and gain hands-on experience maintaining code and developing a hybrid app with the Ionic Framework.


Late July 2017


~3 weeks


It pairs you up with another high school student who is also working on college applications. Until both of you finish your application essays, you two will be “essay partners” and helping each other build plans on this app.

Each partner has their own plan which both partners can view and edit. To make it more user-friendly, we used local cache to store form data so the user’s name is displayed after registration.


Angular and the Ionic Framework provided the foundation and structure. The app itself looked and felt like a native mobile app and can use native functionalities because of Ionic.


Some of the biggest ones:

  • Improving code quality and readability, designing and planning the project before hammering away on keyboard coding.
  • Making sure that other engineers on the team can read my code, grasp the project structure and get their hands on the project as soon as possible.
  • Writing efficient documentation that has good usage examples for the above purposes.
  • Working at a student-run startup without an established management structure, many situations require everybody to take charge at least once at some point. Fortunately, my inputs were almost always valued by my colleagues. It’s hard to communicate technical details and requirements to management and/or design people who usually think the bigger pictures. But I will also say that putting myself in their shoes and thinking about what the project means for our organization helped a lot in build understanding and trust between us.


There have been so many day-to-day eye-openers, mostly coming from being exposed the first time to the real world of software development and how developers really do their jobs. Comparing to doing personal side projects that weren’t really rigorous, working with others in a relatively fast-paced manner while learning new concepts and technical terms was big to me. As a result, the area I had the most growth in is writing quality and maintainable code by using a consistent coding style throughout the project.


  • Angular
  • Ionic
  • Sass
  • Gulp.js (task automation)
  • Laravel

Spoiling Fridge is here!


Just dump all your ingredients there and you would be fed almost immediately with hundreds of recipes tailored to your needs.

One of my worst habits I’ve always wanted to get rid of is not planning for what to cook and getting a shopping list before the fridge gets empty and it’s time for groceries again. Sometimes I can just play it by ear, grab random ingredients and exotic spices and get lucky in the kitchen. But in reality, playing it by ear doesn’t work all the time. And when it doesn’t, disasters happen in the fridge. Foods that I’ve only used once begin to spoil horribly and all I could do is throwing them away. Since the fridge is empty now, I have to get groceries again. And because I never plan my meals, this just becomes a vicious cycle of getting random foods->using them only once->throwing them away->getting random foods again->using them once->throwing them away…


I decide to put an end to my endless wasteful actions. CodeBreak with StudentRND gave me the opportunity to think about this project and that’s when I decided to make Spoiling Fridge a personal cooking assistant.


June – July 2017


~30 hours


It’s a cooler-looking reimplementation of Edamam, a web app that takes in one or more ingredient names and returns a list of recipes that contain these ingredients. AngularJS is involved.

Thanks to the health and dietary labels you can apply filters to those recipes according to their dietary properties (i.e. low-fat, gluten-free, etc.).


The project was built with AngularJS. Design supported by Google Fonts, Animate.css and Font Awesome.

Every time you press enter after typing in ingredient names, a GET request is made to the Edamam API with the ingredient names as parameters in the API call.


Trying to get what REST really means and how HTTP works for the first time gave me headaches. All I was trying to code turned out to be just a simple GET request, but I spent about 40% of my time on learning these important topics in web dev.

The returned JSON object was also HUGE with a lot of extra information that I didn’t need. I familiarized myself with the structure of JSON objects and how to access them. All of it seems like nothing now, but once felt like climbing up Mt.Everest with my bare feet.


I spent most of my 30 hours of time on learning and familiarizing myself with Angular. ng-repeat was a super life/time-saver. At least I took the time to learn concepts and syntax of a powerful framework like Angular, though it would take me about the same time to just type out every single line of code for the boxes for each result, but will definitely save much more time in the long run.

Feel free to contribute to it on GitHub! 🙂



View this project on GitHub:

(This post is created from Devpost’s project story template)

CollabSketch! : Google Docs for Artists


Montage of creative works through CollabSketch!


My Painter Orpheus illustration. Orpheus is the mascot of Hack Club, the largest non-profit network of student-led high school coding clubs and the developer of the original Collaborative Sketch workshop.


June 2016


~8 hours


It lets you and others draw cool stuff together! If you are familiar with Google Docs or any real-time collaboration apps, this one is a real-time collaborative canvas.


It uses p5.js to support the drawing functionality and jQuery for saving and deletion. Firebase, a key tool, provides instant back-end services so that you won’t lose your masterpiece when you close your browser.


Forming line drawings was a feature that I spent a good amount of time trying to figure out how it works correctly. It required changing up the algorithm that originally drew simple consecutive ellipses to an entirely different one. Originally ellipses were drawn and data were pushed into an array and up to Firebase. In order for line-drawing to work, the new drawing algorithm has to listen to mouse events and keep track of two locations where it will draw the line between.


A change from dot-drawing to line-drawing might seem frivolous, but was actually an improvement on usability (was able to create much more sophisticated doodles).

Don’t be afraid to go the extra mile. You will be surprised by the amount of support and tools you need that’s out there!



(This post is created from Devpost’s project story template)