Filtering Tech Spec #111
Replies: 7 comments 16 replies
-
|
Thanks for writing this up! I'm going to break question up by category, starting with the filter categories:
What if we're missing a skill - what might the process look like to add a skill that we missed?
This makes it seem like it's a linear scale, where employed > others. Would it make more sense to have employment status (not employed, looking for work, employed, employed as SWE) as a separate field?
Just to clarify, this is not an exhaustive list, right? Thoughts on using something like country-data for an exhaustive list that they can choose from (and we can save just the country code instead of the entire string)? |
Beta Was this translation helpful? Give feedback.
-
|
Can we sketch out the proposed schema for the new tables as well? Skills, Interests, User Skills, User Interests. What column(s) would we add indexes to? |
Beta Was this translation helpful? Give feedback.
-
|
Otherwise, it mostly looks good to me - I think the one piece I'd want to see is how filtering would work, at the query level. What might a rough query look like if we wanted to "filter for all users skilled in React"? Or more challengingly, how do we "filter for all users skilled in TypeScript and are looking to mentor"? This SO link might be helpful: https://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation |
Beta Was this translation helpful? Give feedback.
-
|
All looks fine to me, only thing I noticed was this line mentioned below. Wouldn't we want to re-hydrate the page with the new data since we have React instead of a full re-render? (I'm guessing you assume a full re-render because of the mention to use getInitialProps)
|
Beta Was this translation helpful? Give feedback.
-
|
Is having a strict proficiency level our ideal way of categorizing. What I mean is, would it be to convoluted to have proficiency tied to skills? For example of someone is excellent with front end react but has little experience with java. Or do the separate skills tables solve this? |
Beta Was this translation helpful? Give feedback.
-
|
Also I am excited to learn more about sql querying!!! |
Beta Was this translation helpful? Give feedback.
-
|
Updated expected values for skills, proficiencies, employment, and interest. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
This technical specification assesses implemented filtering into PairUp.
Scope
This tech spec covers the expected features, design, and roadmap directly related to filtering.
The design of non-filtering components is not included.
Data Model
The data Model will need many adjustments to store the information related to each user and allow querying of the applicable user profiles promptly. Before considering options, we need to confirm what we will be filtering. We can break this into these categories: skills, proficiency, Interests, and locations. Below are the expected outputs to use at this time.
Skills should cover the main technologies that the user is proficient at. Skills include:
HTML,CSS,Javascript,React,Angular,Vue.js,Node,js,Python,Ruby,PHP,MongoDB,MySQL,PosgreSQL,Git,Cypress,Jest,Docker,KubernetesProficiency should give a sense of where the individual is in the learning process:
Beginner,Intermediate,andAdvanced.Employment should be
employed as a developer,employed,unemployed.Gender should be
Male,Female,Bigender,Non-conforming,Non Binary,Agender,Trans man,Trans woman,Rather Not SayInterest should cover what the user is trying to get out of the platform. Interest include:
Looking to Mentor,Coffee Chat,Resume Reviewer,Mock Interviewer,Pair Programming,Join a Project.The location should be the individual's country: United States, Canada, Germany. I’ve also considered offering a continent selection, but it would not provide much value outside of Europe.
We must assess where and how these four types should be stored. Proficiency and Location can be stored in the user model. Skills and interests can be stored using a many-to-many table to track all the potential permutations of skills. I’ve illustrated a brief table on how that would look below.
User Model
Skills Table
User Skills Table
Interest Table
User Interest Table
Schema
User Model
New table:
Skills TableNew table:
User Skills TableNew table:
Interest TableNew table:
User Interest Tablebold indicates a new field
New skills can be inserted into the skills table utilizing
insert intofor example:INSERT INTO skills (skill_id, skill_name) VALUES (5, 'NextJS');Eventually, we can look into adding an admin dashboard for inserting, editing, or deleting values from the table.
The end result would be Caleb with skills of React and HTML and interest of Looking for Mentor and Coffee Chat and Zach would have skills React, HTML and Javascript and interests of Looking to Mentor, Coffee Chat, Mock Interviewer
User Stories
Users will enter their filtering values during onboarding or can update their filterable values from their user profile.
Users can find other profiles that match what they are looking for by navigating to the discovery page and selecting one of the four category dropdowns: skills, proficiency, interest, and location. Users can select multiple filters and the page will re-render whenever a check box is selected or unselected.
Implementation Details
I propose implementing server-side filtering because of having multiple relational databases to store the filterable skills and scalability of the user base. Filter selection can be passed to an API endpoint. API endpoint must be flexible to handle multiple queries like skills, skills, and location.
queries could look like this:
Filter all the users skilled in REACT
Filter for all users skilled in Typescript and are looking to mentor
As suggested by @MainlyColors
inner-joininstead of usingwhere andcould be utilized as well. This can be investigated once tables have been implemented and we can test queries.UI should have four drop-downs to match skills, proficiency, interest, and location. Selections are stored in the state so they can be accessed by getInitialProps for the Axios request.
Considering the user limit, I do not think sorting would be relevant to implement. No search bar is required now, so we do not need to consider input validation.
APIs
Modify getUsers to accept any filter queries that may be passed from getInitialProps
Security/Privacy
I’m not recommending preventing non-authorized users from being able to filter. Users can share the information they want, which should be considered public.
Testing
Tests will need to accomplish these things.
Seed DB with certain users
Hit API endpoint that matches the expected input of skills
Verify API can return specified DB users
Test visualizing
Open Questions
Is there a way to make the filtering more responsive if we’re utilizing getInitialProps for the axios request to the API?
Deployment
Since we're updating the User table migrations would be necessary to make changes.
Beta Was this translation helpful? Give feedback.
All reactions