Custom User Roles
2018 / PRODUCT DESIGNER / WEB
How do we empower school owners to scale to multiple admins, while giving them the ability to dictate and control what each administrator can and cannot do?
Up till recently, Teachable had a fairly flat admin system. The user tiers were as follows:
Student: A user who is enrolled in a course OR does not belong to any of the other roles (i.e. simply “signed up” to the school)
Primary Owner: A super user with access to all available privileges. By default, this is the creator of the school, but a primary owner is able to “transfer ownership” to another. There can only be one per school.
Owner: A user who can manage all parts of the school, except special privileges only available to the primary owner, such as updating payment/tax information and the school plan.
Author: A user with access to most editing / administrative privileges and a revenue share scoped to specific courses (currently associated through the “author bio” on the course).
Affiliate: A user who earns a revenue share via affiliate attribution on the school (specific courses can be whitelisted).
Author, affiliate and student roles are fairly limited in what they can do. So if you’re a school with 4-5 admins, every user has “owner” privileges, which means that they can do anything a superadmin can do. If you want to give a finance professional access to just the financials of the school, without any of the course creation or management features, that was impossible under the old system.
I worked with a team of 4 (head of product, a FE dev, a BE dev and QA) over the course of two and a half months as the primary product designer.
What's the problem?
“I am hiring some people to help with customer service and it would be SO helpful if they could have a separate account with limited admin privileges - they need to be able to look up student accounts, issue refunds, change emails and passwords, and moderate comments. But they shouldn't have access to my payment information or dashboard and such.”
“I want to give teachers and school administrators the ability to see how much progress their students have made after we have sold a course to their school, without letting them modify courses/see financial info.”
“Can I add an admin who can deal with everything but billing and payments and other sensitive functions?”
Teachable has a wide variety of schools—some of them are small schools based around a niche hobby or small audience. But we also have schools that make $1M+ a year, and these are often managed by teams of people with very specialized roles. Having a tiered admin system was a request of many customers, and we decided to work on it in order to prepare our platform for larger schools and differentiate our High Volume plan from the other paid plans we have.
So what should V1 of this feature allow users to do?
Primary owners can create new custom roles
Primary owners will be able to choose from a list of privileges and modify these custom roles freely
A primary owner will be able to edit a previously created role and ALL edits will apply to ALL users the role is tied to.
The users admin/staff table will have a filterable column that reflects the staff role they have.
Role ability is present for ALL users (students/owners/authors/aff/custom)
If user has access to custom roles, show full role creation ability
If user has free or non-qualifying plan, the only two options in dropdown are “Owner” and “Create New Role”.
Upon selecting “Create New Role”, user would then be shown a feature gate.
Select would be helptext except when a user is already an “Owner”
What happens when school downgrades? All additional roles are wiped out and everyone is turned into an owner.
Would remove ability in user -> information to modify privileges. Everything would now take place in new roles tab.
How do we measure the impact of this feature?
Number of school upgrades from Pro -> High Volume attributed to custom user roles
Number of schools with custom admin accounts
Much of the initial ideation consisted of working out edge cases around downgrading (since this is a feature only available on certain plans), issuance of multiple certificates (how to manage several versions of a certificate once it has been issued), how to handle one-off certificates, as well as figuring out what info would be customizable by the school owner.
I worked with my head of product to whiteboard out our initial problem statement, design stories, flows and questions.
We got to a point where we came up with a shared approach on how to handle versioning, customization, manual issuance and upgrade gating.
Upon creating a certificate, a user could choose between three certificate templates, as well as the ability to build a custom template using a liquid theme. The three templates would have similar layouts, but customizable text and border/text colors.
As a school owner edits a certificate, we decided to pre-populate the name of the school, the course that it relates to, as well as the student name. Everything else is made up to the certificate creator.
The index screen is where a user can manage the current active certificate, as well as see a list of alternate inactive certificates. Each certificate has a preview, as well a tally of how many times the cert has been issued/a list of students the certificate has been issued to.
The idea of the active certificate correlates with automatic issuance upon completion—if there are no active certificates then nothing happens when a student finishes a course. This also happens if a user toggles the option to “Issue Certificate Manually”.
Below are the three certificate templates we present to users. Each course certificate has a unique serial code attached. A user can edit the border color, primary text color and secondary text color, as well as upload their own signature file.
On the student side, they’re able to view the certificate as well as download it as a PDF in their course detail screen. Once issued, a certificate lives permanently on their course detail, unless deleted or replaced by the school admin with a new certificate.