A better way to conduct technical interviews.
As university students that are interested in pursuing careers in software engineering, we are familiar with the typical technical interviewing process, and how many different platforms are used. We constantly found ourselves in interviews where the interviewer was using an external service and it simply didn't work. Additionally, we've had interviewers ask us to copy & paste our code and send it to them to keep track of!
There has to be a better way and we thought why not just have all our resources in one place! Looking into monday.com revealed that it would be a great idea to build in a coding environment for conducting technical interviews. This simplifies the process internally for HR and software engineering teams, as we can track a candidate's progress throughout the application process all from within monday.com. Our vision for Assess was to provide a scalable solution to unify the experience between HR and software teams such that there exists maximum visibility across organizations and enables companies to focus on what matters most - hiring the best candidates.
What it does
Conduct remote, real-time technical programming interviews with candidates right in monday.com - all while tracking a candidate's progress. We hope that Assess can bridge the gap between HR and Engineering teams, enabling them to consolidate their data in a single place!
It all starts with the candidate completing the job posting's form. Once the application is submitted, it automatically creates a new row in the "New Applicants" group.
Through the use of monday.com automations, if ever an applicant's phone interview or in-person interview status changes that applicant will move to the appropriate group.
Once the candidate reaches the technical phone interview, an interviewer simply needs to share the Code Editor board with the candidate. The Code Editor board has a Code Editor view, which includes:
- Auto code completion
- Complete code execution
- Support for 7 major languages
- Access to console output
- Error notifications
- Time limit exceeded detection
Our Code Editor allows candidates to showcase their abilities in an environment that resembles most to that of a work environment. Our tool lets candidates write programs that run. It's simple, yet powerful. Hiring candidates gets easier when you give them the best experience!
Prior to the interview starting, the interviewer can choose a technical question using the dropdown provided. This dropdown is populated using the Questions board - a prebuilt board that comes with the Assess workspace template. Although this may seem like a minor feature, it allows engineering teams to work alongside each other and build a repository of interview questions. Having a single repository means one team can be inspired by another's set of questions.
In addition to providing an enjoyable candidate experience, consolidating the technical interview with the recruitment pipeline in one place makes an interviewer's life that much easier. No longer does one need to copy over notes.
It should be noted, that our Assess app is not limited to interviews for engineering roles. It can most definitely support non-technical interviews. Consolidating applications into one location allows for much smoother communication between various teams and HR.
How we built it
We built Assess using React on the frontend and Express on the backend.
We used Ace editor, a tried and true, embeddable code editor used by the likes of AWS Cloud9 and Khan Academy for our editor. The questions panel and console panel we built ourselves from scratch
We used Judge0, an open-source code execution library that allows us to run code in various languages through our API and return console outputs, compilation errors, or anything a compiler would give you if you run the code in the terminal.
We used Socket.IO for real time communication between the clients and the backend. We polled from the interviewee's client, sending their code to the server, which is sent to the subscribers of the socket. This allowed us to update the code editor for the interviewer in real-time, and run the compilation and console output for both users in real-time, so the interviewer sees what the interviewee sees.
Monday SDK and API
None of this would have been possible without the Monday SDK and API. We used the Monday SDK and API to get the current user and check their guest status to determine who the interviewee was and who the interviewer(s) were. This allowed us to determine which clients were the one's to poll for the code values, and who were the clients that we had to update. We also used the Monday SDK to determine the board view ID, so that we could use it as an identifier for the Socket.IO private channel. This way we could make sure that only people who were on the board could see the updates, so that multiple concurrent interviews can happen at the same time. Lastly, we used the Monday API to pull questions from a separate board where teams can easily add questions for interviewing. The questions that are added to this questions board would be selectable from a dropdown within our App.
Hosting our App
Because of the Monday SDK and API, our app forgoes the need for having a database. Everything that is needed for our App is either served via Monday.com or through our API. Thus, to maintain our app, all we would have to do is host the API, and upload the frontend build folder to team's monday.com. This makes our app very cost effective and scalable, as all we have to pay for is the server and make sure that it is capable of handling multiple concurrent socket connections.
Challenges we ran into
One of the biggest challenges we ran into while building this monday.com app was ensuring the candidate's and the interviewer's code editor were in sync during an interview. We decided to use web sockets to achieve this functionality, but no one on our team had worked with web sockets before. Our unfamiliarity with web sockets proved to be a challenge as it took us a long time to get the feature up and running. Additionally, none of us had worked with GraphQL prior to this hackathon, but were excited to learn a new framework!
Accomplishments that we're proud of
We are proud of the app that we built to solve the problem of conducting technical interviews. We think that this will make HR and software teams' experiences recruiting candidates much easier, since it is all in one place on monday.com now. We are also very happy with how well we integrated adding questions and conducting interviews with guest users, it makes it super easy to add new questions for interviewing, and to track applicants without having to navigate away from Monday.com.
From the perspective of a company looking to find new team members, we hope that this makes things more unified and easier to track the best candidates. We, as individuals who are too familiar with being on the other side ourselves, could only wish the experience was this streamlined!
What we learned
Throughout this hackathon, our team was able to familiarize ourselves with the monday.com SDK and the monday.com API V2. We believe that our new-found knowledge will put us in a better position to develop more monday.com apps in the future. In addition to the monday.com API we gained a deeper understanding about web sockets and how to implement them. Finally, we gained learned about GraphQL and how it solves the problem of multiple endpoints.
What's next for Assess
Some additions for the future include storing candidate code and adding an item view in which candidates can write notes which will automatically update in the monday.com board column.