After nearly 7 and a half years at my last job, I've finally moved on and gotten a position at a new company as a senior software engineer. It took about 2-3 months of serious job searching and even though people will tell you that it's easy to find a job in the tech sector nowadays, it wasn't that easy (at least for me). I had a lot of applications out and went to a lot of interviews. I'm going to try and distill a little bit of what I learned.
The tech interview is a complicated animal. You have the initial non-technical phone screen where the HR person basically asks you all the typical questions like "What made you decide to look for a new job?" or "What did you like most/least about your current job?" or the classic "What made you decide to apply with us?"
After that, you go through a tech phone screen where a fellow techie will begin to grill you on some technical questions such as "What tech stacks have you worked with in the past? What did you like/hate about each one?" or the generic "Tell me about a problem you've encountered before and how you solved it." Then they'll start going into some real tech questions that may or may not involve an online collaboration website service so they can see how you code. This can include the typical interview-style questions similar to "Write a function that accepts a string as input and determines if the string is a palindrome" or, if you're lucky, the standard Fizzbuzz. If it's an algorithm question and the company is an actual tech company, they will probably supplement the problem with questions about the runtime (big O) and then might change the requirements ever so slightly to see how you adapt to change.
If you're lucky and managed to pass all the phone screens, you get invited for an onsite interview. This is the hardest part, but even if you don't end up getting the job, making it this far is still rather awesome for most companies in my opinion. Besides, if you make it this far, a lot of tech companies tune their interview processes to weed out false positives, which means they get false negatives. In other words, they might have rejected you the first time, but that doesn't mean you shouldn't try again later. They might miss really good engineers, but at least they're not hiring people who can't do the job. An onsite will typically last half a day or the whole day. The onsite is your best opportunity to interview the company as well. Don't think it's just them asking you questions. This is your time to make sure this is the place you want to work for. I had an onsite which I breezed through early on in the job search and that set off red flags for me because it seemed like they were just hiring anyone they could. You don't want to work in that kind of environment because you can't trust if your coworkers are competent or not. Throughout the day you will meet with a bunch of different people, most likely members of the teams which they are thinking of placing you into. This is to make sure you "fit" into the team culture and meet their needs. Some companies will make you go around to all the different people, while others keep you in a single room and bring everyone to you. This is usually not a cakewalk. During the onsite, you will be talking (mostly re-answering all the questions you've answered during previous phone screens) and whiteboarding. In my opinion, whiteboarding is the hardest part of the tech interview process. You are given limited time, limited whiteboard space, and a lot of problems. They want you to write bug-free syntactically correct code (no pseudocode) to see how well you do under pressure. I find that the better tech companies mostly ask generic programming questions, but if the position requires specific knowledge of certain platforms/languages then I'm sure they focus on those specifics.
After the onsite, you'll probably talk to an HR person who will tell you that the company will get back to you as soon as they've decided whether or not you got the job. At this point, if you got the job, they will probably let you know very quickly. If you don't hear back from them, that is most likely a flag that you did not get the job and they don't want to put themselves in a position of liability by telling you that (which totally sucks). You'd think the bigger companies would be better about this, but even they do it. If you got the job, then congratulations are in order. If you didn't, don't feel too down. Try and remember where you might have had difficulties during the onsite and focus on training yourself to not make those mistakes again. If you can get the HR person to tell you exactly what you need to work on, that'd be great. Unfortunately I've found that most HR people want nothing to do with you if you didn't make it past the onsite. As soon as you're up for another interview round, they'll be your best friend, but as soon as they get a negative interview result, they pretty much just clam up and try to speak to you as little as possible from what I've noticed. Anyway, hopefully these notes help someone out there.