E-mail exchange with a code sample request, followed by a casual phone interview, then an online programming test, and finally an in-person interview with salary negotiation by e-mail.
Flaky communication with the hiring manager, who dropped the ball multiple times, and accidentally offered a salary that was too high, only to have a second hiring manager make a new, much lower offer.