I applied to GitHub through their careers page and heard back a little over three weeks later. A month after that, they made me an offer. It was a great experience! Here were the steps I went through:
The recruiter reached out, asking me to complete a pre-technical exercise. This is the same exercise mentioned in other comments here: building a REST API. I had five hours to complete it in the language of my choice. I finished the assignment under the time allotted and used the remaining time to make improvements and add test coverage. In retrospect, I don't think that was necessary, as this assignment didn't come up again in later stages of the interview. They responded a day later, saying I had passed.
A couple of days later, I had an interview with the recruiter. She asked a few questions about diversity and inclusion, and it felt very much like a conversation. She also spoke a little about the role, although the team I was interviewing for wasn't defined yet. They were basically putting all SWE candidates through the same process and only assigning us to specific teams in the later stages.
Then came the technical interview. This took a couple of weeks to happen due to a holiday, and they wanted to schedule candidates for a Tuesday and Thursday of the same week. On Tuesday, I had two 90-minute pairing technical interviews with a 30-minute break in between. There were two different GitHub engineers for each 90-minute block, all from different teams. The first 30 minutes of the first block were behavioral questions, covering topics like managing technical debt, managing projects, and resolving conflicts. Then, we started working on a problem together. I had to build a client app/script that did data wrangling and posted to an API. It mostly involved talking out loud as I solved the problem, with them asking why I chose to do something or posing "what if" questions. After a 30-minute break, I started the second 90-minute block with two different engineers. We picked up the problem where I had left off and began working through edge cases, validations, and other considerations. Once 30 minutes were left, they started asking behavioral questions similar to those the previous engineers had asked.
The final round of interviews. The technical interview described above happened on a Tuesday. On Wednesday, they met to decide whether I made it through and which organization I would be a candidate for. On Thursday, I had my final interviews: 30 minutes with a director and 30 minutes with the hiring manager. The director's first question was about how the process was going, and I mentioned it was very positive and that I hadn't had high expectations given comments I'd read on Glassdoor. He said they had dropped the ball in the past and were working to improve, which I appreciated. He was very honest about previous mistakes and embraced continuous improvement. The director asked things like why I wanted to work at GitHub and about my general experience. The hiring manager had good questions about diversity and inclusion, as well as the general process of working on a production application. Both were incredibly nice and felt much more like a chat than an interview. I received an offer the following Monday.
Some general thoughts:
What are the things that make an application production-ready?
What was a mistake you have made that you learned from?
The following metrics were computed from 43 interview experiences for the GitHub Software Engineer role in United States.
GitHub's interview process for their Software Engineer roles in the United States is extremely selective, failing the vast majority of engineers.
Candidates reported having mixed feelings for GitHub's Software Engineer interview process in United States.