After applying online, they contacted me via phone. First, I went through a couple of phone interviews, where they explained me how Epic works and asked me the usual interview questions (projects I worked in, best and worst qualities, plus some very basic programming questions). A couple of days later, they called me to schedule a time where I could take a monitored online skill test. The test was pretty long (2-4 hours) and it had 4 parts. The first one consisted in 10 basic math questions I had to answer in 2 minutes (I answered 7-8), a second math part, with no time limit, a programming part, with 3 programming problems, similar to programming competition ones, and one last part where the explain you a fictional programming language and you have to solve several questions about it. Not extremely hard, but kind of tricky sometimes.
A week later, they called me and flew me to Madison to the in-person interview. I had to give a 20-minute presentation about a project I had worked in to an engineer. Finally, a HR interview where they asked me how much would I like to earn. They called to offer me the job about 3-4 days later. The salary they offered was above the salary range I told them.