After almost seven years at my most recent job, I decided it was time to move on. I have over ten years experience and the past few years I’ve had a very senior role with the fancy title of “Principal Engineer” (whether I deserved that title is a different story). There are many stories about how to get a job after going to a boot camp or after graduating college, but nothing about experienced engineers switching jobs. Here are some tips and observations from my quest for a new job.
- There is a lot of demand – Many companies are looking for or claiming that they are looking for senior engineers. A lot of it is noise but a lot of it is good. Though, don’t get cocky.
- Update your resume – I’ve definitely been asked about random aspects of my resume. Remove old languages you haven’t used in a while (Perl?), projects you worked on many years ago, and anything you can’t go into with great detail. Don’t include projects you cannot explain in deep technical detail or any technologies that you barely used because someone might ask you about it and you will look pretty dumb.
- Some head hunters are decent – I worked a little bit with bamboo talent and they were actually fantastic. But most still are used car salespeople trying to sell you bad goods.
- Referrals – Referrals will help you get your foot in the door. You might even be able to skip one interview round. However, having a friend at a company is not a shoo-in to getting a job, so prepare for those interviews! Though, if you are good friends with the CTO or CEO or something you can probably get the job without interviewing (or even being right for the job), so kudos to you if you have such an awesome connection.
- Algorithm questions – Whether or not you agree with their value, algorithm questions are still a big part of interviewing. While I was programming or reviewing code about 75% of my time at work, I rarely had to implement any data structures myself or determine the complexity of an algorithm. I practiced solving algorithm questions for a few weeks before interviewing by using LeetCode.com. There are plenty of sites like this, but your best bet is to do as many questions as you can (focus on trees). After you solve a problem, look at the “best” answer. Most problems have a short and elegant solution. Knowing, understanding, and being able to recall these elegant answers will make your interview much better. So revisit questions and make sure you can give an elegant solution.
- Memory vs performance – When asked an algorithm question, there are usually multiple solutions depending on whether you want to save memory. Don’t assume anything, ask the interviewer.
- Practice interview – Interviewing is tough and you will probably fail your first (or first few) interviews no matter how smart you are. Set up a few interviews with companies you are not very interested in before you interview at places you are interested in. This way you can get good feedback and practice.
- Pair programming – It’s common now for companies to use some browser-based IDE when conducting interviews. I like these questions because there is an actual compiler and programming on a computer is a lot more familiar than writing code on a whiteboard. Sometimes there is a pairing aspect to this exercise, so get used to that.
- Know the role – Know what role you are interviewing for and the team. If the role doesn’t sound interesting, it is probably not interesting.
- Perks aren’t everything – If the company sounds silly, then it is probably silly. Don’t let a smart team or tough interview fool you. Don’t work at a place just because they have great perks. It’s also kind of insane how complicated some interviews are for uninteresting mundane simple jobs.
- Titles vary – Companies define titles very differently, so be prepared for that. Just because you were a VP at your old job (if you are at a bank…) doesn’t mean you will be a VP at any other company. It’s not a bad thing, just prepare yourself.
- Negotiate – If you are senior and good, you have leverage to negotiate. So do it.