Job hunting can be one of the most time and energy consuming tasks we have to do. Unfortunately there isn’t a perfect formula but some tips could definitely help to alleviate the process or at least know that you are not alone.
In the following article I will try to provide you with some tips and tricks when applying and preparing for a job interview as a Software Engineer. There is a lot of information on the web but I will try to sum up the areas you should be focusing on and point you to some helpful websites.
This podcast episode can be found on iTunes, Pocket Casts, and all the other major podcasting networks, or it can be heard for free below:
A summary of the episode can be found throughout this blog article.
Some of the Ways to Search for Software Engineer Positions
A bit more tailored job recruiting websites like Hired, InterviewJet, StartWire and others. Usually you are assigned to a recruiter and when you are ready to start applying for jobs they release your profile to potential employers; on average they leave your profile for a week or two so you can accept or decline an invitation to carry on an interviewing process. Applications via this type of platforms are more tailored to your profile.
Startup sites like AngelList and Built in NYC. In these types of websites you usually are in direct contact with the employer.
Attending HR meet up events (for example in NY there is a group called NYC Tech talent), woman who code or any other tech meet up depending on your stack.
Let people find you online by setting and opening your profile in GitHub, Stack Overflow, and LinkedIn.
Glassdoor is a great way to see the salaries, job opportunities and sometimes even the exams that they are going to ask.
Go directly to the websites of the companies you are interested in.
Resumes and Portfolios
Although portfolios open you the doors quicker, resumes are still required in most of the applications whether in a file format or on a platform website form.
Having a quality number of well done projects in GitHub could say more than thousand words. Do not worry if you do not have a lot of projects in your repo; this is about quality over quantity. On the other hand, if you have a lot and they are not very polished at least make sure they are organized.
Stack Overflow and contributions to open source libraries and frameworks also speak a lot about your passion for coding. Understanding the project of somebody else by itself says good things of your skills.
Resumes are still useful, but I would say not as relevant as a portfolio; actually, usually is just the sum up in case you will be interviewed by another area and they need to have an overview of your career.
What Should Every Portfolio Have?
At least one project on the stack of their domain on GitHub, CodePen, JSFiddle, etc.
Best practices, at least the most obvious ones like no duplicated code, self explanatory code, some sort of test or validation.
A branching strategy so you can show your GitHub skills.
A nice to have would be to show some volunteering in a tech community, participation in open source and active participation in a community from your tech stack.
A clear picture of the developer career whether it is deep or wide. That will help the potential employer evaluate your potential.
A blog or any other sort of web exposure (GitHub, Stack Overflow, LinkedIn).
The process I am going to explain is based on my own experience in the USA in NYC; however, the process could vary depending on your country, tech stack, size of the company, professional level and other factors.
In my experience small startups (3-10 people) are pretty straight forward, usually you can negotiate equity opportunities and stock plans. Medium startups know more about what they want and have a longer process. Big companies like Facebook, Amazon, Microsoft, corporates, etc., know exactly what they want and the process is more structured as you are always in contact with an HR person that leads you all the way.
In a very general way the processes is the following:
The Algorithm and Data Structures Test
A test consisting of a 45 minute whiteboard session.
Write an efficient function that takes stock_prices_yesterday and returns the best profit I could have made from 1 purchase and 1 sale of 1 Apple stock yesterday.
Write a function that takes an array of cake type objects and a weight capacity, and returns the maximum monetary value the duffel bag can hold.
Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example: Given “25525511135”.
In a room with 99 closed boxes, a number between 1 and 100 resides in each of them. How can you best find out which number is missing from the boxes?
You can find multiple examples of this in Leetcode.com, Interview Cake and those type of preparation websites.
The Home Coding Test
After passing the computer science basics, usually you have a 30 to 45 minutes home coding test or a recording online test in platforms like JSfFiddle
They provide you an API url and you have to display the data in the front end using any framework, library or sometimes neither.
They provide you with a piece of code with a couple of bugs so you have to fix them and refactor the code if you have time.
You have to write the architecture of an API to return an inventory.
The Deeper Computer Programming Tests
Another round is a set of deeper computer programming test(s) where you have to implement a full stack application, for example: implement the back end and front end to create, read, update and delete books from a database.
The First Onsite Visit
Until this point most of the process is via email and online, it is now when you are invited to go to the office and usually have a more in house realistic white board test(s) where you can collaborate with the rest of the team. The test(s) in this round(s) could vary and usually depend on how you do in the previous exam. I guess the point it is to find where you could fit in the company; identify what are exactly your tech strengths. In this round(s) the interviewer seems to be more interested in talking about more complicated topics like: software architecture, design patterns, security and more.
The Second Onsite Visit
In some cases after the intense round of tests you have a second visit or after one of the technical tests you get to know some other team members and/or employees from other areas interested in interacting with you as you will be working together. If there is a pair programming stage, usually it is at this stage where it takes place.
Meeting with the CEO
Usually the end of the process is having the opportunity to highlight your soft skills having a conversation with the CEO (for startups).
There are also some other cases where you are invited to the office immediately for a pair programming exercise, coding challenge or a white board interview but I found those cases very exceptional. As I mentioned before the previous steps could vary, but I hope you get a general idea.
I have worked (hence job hunting) in other countries like Australia, UK and Mexico and I can definitely confirm that on my experience the interviewing process is longer in the USA.
How to Prepare for Technical Interviews?
If you have heard the saying “looking for a job is a full time job” then similar thing applies for coding, the only way to prepare is by coding as if you were in a full time job and mocking up computer science tests everyday.
Revisit Data Structures and Algorithms
Refresh your algorithms and data structure knowledge. Get used to speaking aloud your thinking process and using a white board or piece of paper to implement the solution rather than the computer.
The most important data structures: ArrayLists, HashTables, Stacks, Queues, Trees and Graphs.
The most important algorithms: Merge Sort, Quick Sort, Binary Search, Depth-First Search, Breadth-First Search and others, but the mentioned ones are a must.
General concepts like: Big O time, Big O space, recursion, memorization and dynamic programming. All of these ones are very important as they are very frequently asked in both small and big companies.
Get very familiar and comfortable with the language you are going to apply.
Get your computer with all the programs, code editors and tools that you need up and running. In most of the cases they are timing your test so you want to focus on the actual task rather than in the shortcut on your editor or setting up a server.
Have some basic utility functions and styles ready to be reused. I personally think that as long as you implement them there is nothing wrong in the end you are re-using code and not reinventing the wheel.
Have an architectural structure already in place to be re-used
Interviewing is a site where you have anonymous technical interview practice with engineers from Google, Facebook, and more.
For online tutoring in specific areas, Wyzant could be an option.
Mock Up an Interview with a Friend?
Definitely you should practice with a friend, in front of the mirror or by yourself and feel comfortable standing up next to a white board and explain your thinking process to solve the problem.
You should also time yourself when solving an algorithm problem or when you are coding a specific demo project.
There are so many questions that you should prepare in advance even if they sound obvious. Usually with the nerves we tend to forget very important or critical information. Questions like:
What was your most challenging project and why?
Why is X your favorite language?
Where do you see yourself in 3 years?
Some Extra Tips
Before even starting your job hunting write what are you looking for in your next position, what will motivate you everyday to wake up. It is very easy to get distracted on the way if you don’t even know what you want and are looking for. Sometimes the salary, the well known name of the company and other factors can distract us from our real goal.
Interviewing is a two way street; you should also evaluate them from the way they wrote the job description, the way the treat you and your time along the process and of course the interviews itself. Try to be able to read red flags. For example, I personally do not like vocabulary like rock start developer, guru expert and that kind of slang.
Do not rush it. Take your time to evaluate the options and accept an offer. Take your time to read about the company (Glassdoor is a good place to find about employee satisfaction), what their employees say on their social media accounts. Sometimes the job recruiting platforms have a one week limit or simply they are as interested as you to find you a position but that doesn’t mean you cannot take your time to evaluate the situation.
Do iterations along the process, I would treat it as sprints, let 4 weeks pass and see which interviews when well, which ones went wrong and why; make notes so you can remember your strengths but mainly your weaknesses so you improve in the next round and re assess. For example: at the beginning of my job hunting journey I was applying for only senior positions discarding the mid senior ones and even the junior ones; however, along my way I realized I was better fitted in the mid-senior roles as my expertise was more spread horizontally among different technologies than deep into one.
In a very polite way ask for feedback; what could you have done better.
Interview at a few companies before applying for the one you are targeting.
Some Things to Watch Out for While Looking for Jobs?
Do not start working without an agreement.
Be careful with the non-competing agreements; sometimes 1 year could be reasonable enough or 2 years max.
Bonuses are not warrantied, they are discretionary so do not take them as part as your salary.
Be open about your salaries expectations and remember if the recruiter or employer ask for your previous salary you can very politely say “I’m sorry, I usually do not disclose my previous salaries”.
If you are going to receive shares you can ask for the Cap Table (list that says who owns what in a startup) in order to see the percentage of the company.
Subscribe to my newsletter for monthly tips and tricks on subjects such as mobile, web, and game development.