A new beginning

Finally concluded my job search and accepted an offer. This is the new beginning.

Reflection on my job search:

I was very nervous prior to the hiring day, worrying about not having enough interviews. With an average performance during my speed dating in hiring day, my interview pipeline was solid average, not fantastic. As some of my classmates got offers in their first interviews, I was once again nervous about myself. Only after getting my first two offers, I begun to feel everything is under control and started to enjoy interviewing. When you have at least one offer at hand, interviewing is fun. It is fun to meet so many different people, solving all kind of random problems on the whiteboard and collaborating with them. I think I can do that as my full time job … no, I am just kidding … Making a decision among job offers is always hard, and I think I would love to work for any one of them. They are all super cool ideas with very competent teams. In the end, I have to pick one based on, base on gut feelings….

Anyway, made my decision and looked forward to start the new journey. Yeah!!!

Oh, a good article to read on making decisions: http://brandonb.cc/advice-for-cs-students-considering-a-startup

Oh, the biggest mistakes I made:

– please please please focus on front-end JavaScript engineering role. That is where JavaScript really shines right now, and that is what the training is for, and that is what most companies are looking for anyway… Node.js is awesome but very few companies are using it… That was the mistake I made in my speed dating on the hiring day.


Personal growth vs team vs others

Once upon a time, I was asked, if you have to pick only one, “personal growth, team, something else I forgot”, which one would you pick? The correct answer is “it depends”. The next optimal answer is “it would be nice to have all of them”. In reality, after debating briefly, I picked team.

There is no right or wrong answer, but for me, I will probably pick team over anything else. In an ideal team, or in our Prelinked team, the team is:
– well balanced. Each team member has his own expertise.
– team members are willing to help each other. After he is done with his share of work, he will voluntarily help other team members.
– he works hard because of self-motivation. He should have a high bar in terms of quality of his own work, and he will drive himself to meet that bar.
– he is fun to work with. That is what will get the team through tough nights.


How to get a job offer

Based on one hour session with Dylan from the senior class.

Dylan is one of the first in the senior class to receive and accept a job offer. He must have something special.

The employers looked at the following things:
– his personal project.
– his group project
– his personal website.
– his GitHub profile

Personal website:
– His website is fantastic. Hence, whenever the employer wants to see the portfolio, he sends the website to impress them.
– It has to be responsive. Employers would literally resize the window to check.
– A good model is alexpaley.com

Personal projects:
– Working and pretty/presentable
– Not necessarily the most complicated project
– The other extreme is the technical challenging ones, such as building a WebRTC framework or build a REST interface to Mongo(?)

Group projects:
– Understand all the code other people wrote.
– Implement a couple of design patterns such as observer or mediator in the project.
– Make sure the code is nice / clean / presentable to employers

GitHub profile:
– Activities are important. Similar to your undergraduate GPA, it is hard to cheat on your commit activities.
– Showcase a couple of the projects

Other recruiting channels:
– AngelList
– LinkedIn (change your title to software engineer)

High level thoughts:
– 50% technical details
– 50% like-ability

Practical stats:
– all interviews coming from hiring days
– 5+ onsite interviews with more voluntarily declined
– To nail the 5 minutes speed dating in hiring day, be personable, smiling. A lot of conversations end up being non technical. Don’t underestimate the people you meet since he might become your biggest advocate inside the company.

Phone interview:
– 50% tech depth
– 50% personable

Onsite interview:
– 3-4 hours each, one hour per person
– All coding on whiteboard
– Talk through the coding process
– Practice writing code on the whiteboard
– Be proactive. Reach out and not necessarily aggressive.
– When struggling, don’t get frustrated. Ask for help.
– After making a mistake, admitted it.

Other thoughts:
– Meteor.js is cool to know. However, it is so new and so powerful that few companies are using it in production. Also, employers might not take you seriously if you build a project with Meteor. Meteor is definitely the go-to weapon in a Hackathon.
– When asked about the expected salary. First, avoid giving a definitive number, saying “average market rate / what is competitive”. Second, if pressed again, referring to a high anchor point, “Peter in our previous class got an offer of $125k with signing bonus. While I don’t expect your company to offer the same salary, it does give us some range to think about.”

Common interview questions:
– Write SQL to join two tables
– Explain CSS box model
– Promises
– Implement promises in jQuery without using .done() or .success()
– jQuery events
– Make a drag & drop modal without using any library. Hint: mouse_down -> mouse_move -> mouse_up
– Backbone
– Some angularjs

May or may not be true:
– People likes Ruby but don’t like Rails
– CoffeeScript is ok

Example – what is the output for the following program:

var a = 8;
var f1 = function(){
  var a = 7;
  var f2 = function(){
    var a = 6;