New users are unable to learn Dark without the aid of an external source (ie: a reference or walkthrough videos).
I've been an advocate for in-editor onboarding since I joined. But we were never able to make time for the initiative until recently.
Dark initially positioned itself as a new language; it attracted attention from the programming languages community.
These users approached new concepts with patience, willing to learn first before doing.
But they rarely ship projects in Dark.
The most successful demographic, who ship projects in Dark, turns out to be new developers, students, and front-end engineers. They explore new territory and learn by doing!
But consistency can't be achieved with just rigor to a style alone.
We got here because, every time we added a new tooltip, we aimed only to solve the current problem.
Let's take a step back to understand what we were trying to achieve in the past, and what we want to achieve in the future.
First, found all instances where tooltips are used in the editor.
Then I categorized them by the functions they serve.
Lastly, theorized how we can use tooltips in the future to either introduce Dark to new users or highlight new features to seasoned users.
Our editor has over 60 tooltips. They all fall into one of the four categories: | |
Labels -- provide text equivalents (in 5 words or less) to icons | |
Descriptions -- explain UI elements in more detail in a few sentences | |
Exceptions -- explain deviations from expected behaviors | |
Suggested actions -- tells a user to do something to help them along |
Right now our tooltips have no memory. They will show regardless if the user had seen them before.
Tooltips will also need a trigger condition.
It will determine if the tooltip should appear or not. For example: has the user seen this tooltip 10 times already?
Property | Data type | Required? |
---|---|---|
Attached element | DOM element | Yes |
Title | Text | Yes |
Description | Text | No |
Trigger condition | Function | Yes |
Button label | Text | No |
Button action | Function | No |
First I made 6 different treatments.
We voted internally and chose the top 3.
We voted internally and chose the top 3.
I hashed out the details for our top contenders. And made mocks for tooltips with a description and an action button.
We asked our users to vote on the top 3 styles and this won out
then I made additional adjustments for contrast visibility | ||
When I applied the component model to exisiting tooltips, I realized we missed capturing one category.
Exceptions -- explain deviations from expected behaviors
Our component model does not capture the difference between an informational tooltip and an exception tooltip. Let's revise our tooltip model
Property | Data type | Required? |
---|---|---|
Attached element | DOM element | Yes |
Title | Text | Yes |
Description | Text | No |
Trigger condition | Function | Yes |
Button label | Text | No |
Button action | Function | No |
Style | INFO or EXCEPTION | Yes |
INFO | |||
EXCEPTION |
From watching many first time users struggle with our product, I wrote a proposal for all the places we should have tooltips to help new users learn.
For example, Dark captures all incoming data, even invalid requests. Users can use that data to construct their program. We want to make sure new users knew about this feature.
Title | Handle your 404 errors | |
Description | Dark keeps tracks of all incoming requests. You can create an HTTP handler populated with the data from a 404 request. | |
Trigger | This tooltip will appear if the project has 404s, and the user has not yet created a handler from their 404s yet. It will appear without them hovering over the 404 icon. |
If I am ever unsure about the feasibility of my designs, I will test it out first.
A product owner used this as a jumping-off point to create an in-editor onboarding flow. And a frontend engineer implemented the tooltip component.