Long but quick.
The interview process is several steps. It started with a very awkward video interview, not with a person but just a website and my webcam. The site provides several questions, gives you a minute (1 minute) to think about your answer, than 1-2 minutes to answer before it cuts you off mid sentence. It was very awkward as I couldn't really prepare for it and as it wasn't with anyone, it was impossible to get any kind of feedback. However, the questions weren't technical or tricky, mostly just talking about your experience as a developer and why you want to work at WillowTree. I assumed that it was just to weed out those who didn't understand the job they were applying for or were grossly unqualified.
Next was a phone interview with the recruiter. This happened within 2 days of the awkward video and was very friendly. Again it was mostly just talking about my experience and the company. At the end, I was scheduled for a technical phone interview with an engineer for later in the week.
The technical interview was also very friendly. The interviewer had prepared ahead of time by looking over my GitHub (which I included on my resume and on the application). Most of the interview was him asking questions about the repos on my GitHub, and asking general questions about iOS development. Although there was supposed to be a coding exercise as well, my interviewer opted not to do it after reviewing my GitHub.
The next day, I was invited to do the take-home test project. This was kinda like a homework assignment, in that I was given instructions to build an app, which I was allowed to do at my own pace with the understanding that I shouldn't spend more than 8 hours total on it (I probably spent 10 in total over a few days). The project was actually pretty fun and I enjoyed doing it over a weekend, sending it back on Sunday night.
By Tuesday or Wednesday, I was invited to Charlottesville, VA for a day of in-person interviews at WillowTree. I was put in touch with their travel coordinator, who set up round-trip flight and a night at a local hotel (I was coming from out of state), and put together my interview itinerary. As part of the interview, I was also asked to put together a presentation / class on a topic of my choice, and asked to bring my laptop.
The in-person was a full day of interviews with like half a dozen people. I showed up a couple minutes early (interview was scheduled for 930) and was greeted (by name!) at the door. The technical recruiter met me a minute later and gave me a tour of the office before bringing me to a conference room for the first interview. The morning's interviews were what I would think typical developer interviews are. Mostly they involved problem solving and white board coding. The air was casual but professional, and the interviewers were friendly, smart and helpful.
Lunch was provided, which itself was an interview with two current engineers who took me to a local restaurant.
The afternoon interviews were different from the mornings. They included an HR interview, a pair-programming exercise, and delivering the presentation I had prepared to a few people (apparently I was the second person to be asked to do this). The final interview was a walk with the head of engineering and was very casual. The day ended at 430ish. Overall it was a good experience, although a full day of interviewing was rather exhausting.
I received a written offer via email an hour after leaving.
Overall, the entire process lasted less than a month, which was lengthened primarily because of my availability to travel.