Hireflow is a web app built as one of the projects at UBC Launch Pad, a student-run software engineering team devoted to building software projects in a collaborative, professional environment. Our team consists of 6 developers, 1 UI/UX designer, and a lot of passion.
Building a web app that aims to make recruiting new UBC Launch Pad members less exhaustive, less prone to human-error, and more systematically efficient.
September 2020 - April 2021
UI/UX Designer
React, Express, MongoDB, Figma, Whimsical
Connor Fong, Andrea Tang, Kavpreet Grewal, Leonardo Kamino, Nancy Wan, Thomas Lapadat, Fransiskus Filbert
Building a web app that aims to make recruiting new UBC Launch Pad members less exhaustive, less prone to human-error, and more systematically efficient.
For our MVP, our target audience are the execs who are handling the application process. In the future, however, we would like to expand our product for public use— clubs, hackathon organization, and even business companies.
Hireflow is an all-in-one internal tool that integrates multiple key features often used by UBC Launch Pad into one streamlined, sytematic platform.
The Dashboard displays applicants who are at various stages of the screening process and allows the user to view the information associated with each applicant, such as their application type (i.e., Designer or Developer), their experience level, and their resume/application.
By importing a single Google Sheets URL using our built-in import tool, we automatically pull the applicants’ responses and display them in an easy-to-read interface.
The numeric scoring system lets you score and rate applicants based on their compatibility skills, allowing for an objective evaluation.
Use the filter and sort feature to go through different types of applicants based on their experience level, scores, and/or roles.
Bulk actions allow users to select multiple applicants simultaneously for quicker actions. Sorting through hundreds of applicants has never been easier.
Input notes and responses all without ever leaving Hireflow. These responses can then be viewed again in the future if it’s time to make a decision.
The first thing I wanted to do was to identify the pain points that execs face during the hiring process. Are there any behavioural patterns that are shared between the execs that might induce specific pain points? This step is crucial in providing insights and context during the creation of Hireflow.
I initially interviewed 6 club execs, all within UBC Launch Pad and who are mostly university students. I asked questions mostly about their prior experience in recruiting new club members and was provided with the past Google Form question and responses to better understand the behavioural and technical pattern of the hiring process. Here are the results:
• Creating and sorting through multiple spreadsheets is very “time-consuming” and “resource-intensive”
• Scheduling an interview time that works for both parties is hard to manage
• Manually sending decision email to applicants is ineffective
• Google Forms and Sheets create a lot of duplication, is resource intensive and very prone to human error.
• Scheduling an interview through a single Calendly account and migrating the appointments onto a spreadsheet is time-consuming and intensive
After compiling the data I have found from the research, I utilized Whimsical and began creating flowcharts to better visualize the end-to-end recruitment process for a clearer understanding of the pain points. I also created multiple case flows for the edge cases and also to identify which flow and/or feature works best for our project. Converting my research findings into a flowchart is very important as it allows me to tackle the problem more critically and systematically; visualisation is a very powerful method of processing mass data.
Afterwards, I began creating the end-to-end product flow using charts to make sure that I didn’t miss anything and that every feature integrates cohesively with each other. It’s very time-consuming to make a whole product flow alone, but it’s completely worth the time and effort as it’s going to tremendously help me in creating the lo-fi wireframe later on down the line.
Using Figma, we began creating the lo-fi wireframes to visualise what we had in mind. This step is necessary as it provides us with a rough estimate of what the outcome is going to look like. Moreover, since lo-fi wireframes are generally easier to create and fix, the developers can begin to visualise the development early.
With the lo-fi wireframes ready, we did a thorough user testing with the president of UBC Launch Pad, Rob, to hear his insights and feedback. Based on his crucial input, I then began modifying the wireframes to better accommodate UBC Launch Pad’s specific needs. More specifically, he wanted the pipeline shortened to be more effective and to have separate pages for the sorted and unsorted applicants.
With everything laid out and ready to go, I moved on to the (arguably) most fun phase of the whole design process: designing the Hi-Fi prototypes. Still utilizing Figma, I began bringing our wireframes to life with wonderful design entities such as: colors, illustrations, content writing, etc.
Throughout the duration of this project, the team were working asynchronously throughout multiple timezones as a result of COVID-19. Hence, I learned a lot about teamwork and syncing up with people from different time zones.
Designing is not all about creating prettiest interfaces. Sure, it’s one thing to make it look visually appealing in the end, but most importantly, I learned that tailoring your product exactly to your user needs is ultimately the goal that I need to strive for as a designer.
Converting research findings into flowchart helps tremendously in identifying pain points and helps me see my project from an unseen perspective. Even though it’s time consuming, it’s very much worth it to have my research data visualized in the form of flowcharts.
Play around with this project and explore on your own!
Each of these major components utilizes reused instances of child components. The Sidebar contains Sidebar Link components, which allow for navigation between the main UI views. The Dashboard Header contains cards that allow the user to choose which applicants they would like to view based on the screening stage (i.e., Application Reviewed, Scheduled For Interview, Interviewed, Final Decision). The Dashboard Buttons component contains filters, which provide further customizability for the user regarding what types of applicants they would like to view. The Dashboard List contains cards that display applicant names as well as any relevant buttons/scores for that applicant.
There are five arrays that allow for applicant tracking, each of which correspond to a different screening stage:
• Pending Applications
• Application Reviewed
• Scheduled For Interview
• Interviewed
• Accepted or Rejected.
Each applicant object also contains a status property that represents where they are in the screening process. Once applications are imported from Google Sheets, every applicant is placed in the array that corresponds to their status.
The status property is also used to determine which applicants are displayed on the Dashboard, depending on the screening stage that the user is viewing. Only certain buttons are displayed within each applicant’s card depending on their current screening stage. For example, only the “Reject Applicant” and “Schedule For Interview” buttons will be rendered next to each applicant name if the user is viewing the “Application Reviewed” stage. Interacting with these buttons will move the given applicant forward in the screening process and when this happens, the following events occur:
a. the applicant is removed from their current array and placed in the array that corresponds to their new status
b. an HTTP PATCH request is made to the server to update the applicant status
In addition to these two events, if an applicant’s score (i.e., the Interview score or the initial application Screening score) is created or updated in the process of moving an applicant from one screening stage to another, an HTTP POST request is made to the server.
This allows web-browsers (clients) to visualize and interact with data in our backend (server). Our backend consists of a Node server to facilitate communications via our RESTful API, as well as a MongoDB database to store our application’s data such as its users, applicants, reviews, and sheets. Our API endpoints were developed using Express framework and our controller functions communicate with our MongoDB instance using the Mongoose library. The Node server and MongoDB instance were both dockerized and deployed on Heroku.
Each of our models: users (interviewers), applicants (interviewees), grades, and sheets (for Google Sheets integration) were modifiable through GET, POST, PATCH, and DELETE requests. The API endpoints are secured through middleware functions that check the user’s cookies to verify authorization.
Hireflow uses Google OAuth to authenticate users on both the client and server-side, and provide seamless integration with Google Sheets. When a user logs in, a Google Auth token is stored as a cookie in the browser and is attached to API calls to the server to authenticate the user. This grants the user access to the application and prevents unauthorized access. The Auth token is also used to access to user's Google Sheets, which can then be parsed to import applicants into the database.
Building and running the application can be a challenge in a cross-platform team. Our developers used a combination of Windows, MacOS, and various Linux distributions. To simplify running the application and ensure that local builds behaved the same as deployed ones, we used Docker Compose to spin up a client, server, and MongoDB database on containers.To keep deployments frequent and agile, we employed the CI/CD paradigm. Any changes marked for review were run against our suite of unit tests. Upon successful merging to main, the main branch would be tested again. Once everything passed, it was automatically built and deployed to our Heroku instances. As a result of heavily automated deploys, our product was often successfully rebuilt several times a day.
You’ve reached the end. Thank you for reading!