The interview process is as much about preparing yourself to answer questions about you and your skills as it is you interviewing the prospective employer to see if it is a place where you want to work. Very close attention should be paid to the interview process, or lack thereof, as you go through it.
The basic stages that you should expect from a well engineered interview process are as follows (not necessarily in the following order)
- Initial phone screen
- Technical phone screen
- Coding/Algorithm Challenge or Homework problem
- Hiring Manager, Tech Lead/Team interviews
- Offer and Negotiations
In general, it is my opinion that you should be asked to write some code. At the very least you should be asked to talk about code that you have written and/or walk through and discuss/debug some code. I’m not completely convinced of the value of the brain-teaser/algorithm type problems that some companies use to determine your skill as a Software Engineer, but they do get you to write code for them.
All along the way you should be also be interviewing the company. You should approach each interaction with a specific goal and a set of questions that you want to ask; each time learning more about a prospective employer.