Where our story began…
You may first want to check out the first part of this blog post, Helping new users get on IRC. We’ll wait for you here. 🙂
A simpler way to choose a nick
(Relevant ticket: https://pagure.io/fedora-hubs/issue/283)
So Sayan kindly reviewed the ticket with the irc registration mockups in it and had some points of feedback about the nick selection process (original mockup shown below:)
Critical Feedback on Original Mockup
- The layout of a grid of nicks to choose from invited the user to click on all of them, even if that wasn’t in their best interest. It drove their attention to a multiplicity of choices rather than focused them towards one they could use to move forward.
- If the user clicked even on just one nick, they would have to wait for us to check if it was available. If they clicked on multiple, it could take a long time to get through the dialog. They might give up and not register. (We want them to join and chat, though!)
- To make it clear which nick they wanted to register, we had the user click on a “Register” button next to every available nick. This meant, necessarily, that the button wasn’t in the lower right corner, the obvious place to look to continue. Users might be confused as to the correct next step.
- Overall, the screen is more cluttered than it could be.
We thought through a couple of alternatives that would meet the goals I had with the initial design, yet still address Sayan’s concerns listed above. Those goals are:
Mo’s goals for the mockup
- Provide the user clues as to the standard format of the nicknames (providing an acceptable example can do this.)
- Giving the user ideas in case they just can’t think of any nickname (generating suggestions based on heuristics can help.)
- Making it very clear which nickname the user is going to continue with and register (in the first mockup, this was achieved through having the register button right next to each nick.)
- Making it clear to the user that we needed to check if the nick was available after they came up with one. This is important becauae many websites do this as you type – we can’t because our availability check is much more expensive (parsing /info in irc!)
We decided to instead make the screen a simple form field for nick with a button to check availability, as well as a button the user could optionally click on to generate suggested nicks that would populate the field for them. Based on whether or not an available nick was populated in the field, the “Register” button in the lower right corner would be greyed out or active.
Nickname field is blank.
If you click on the suggest button, it’ll fill the form field with a suggestion for you:
Checking nick availability
Click on the “Check availability” button, and it’ll fade out and a spinner will appear letting you know that we’re checking whether or not the nick is available (in the backend, querying Freenode nickserv or doing a /info on the nick.)
Nickname not available
If the nickname’s not available, we let you know. Edit the form field or click on the suggest button to try again and have the “Check availability” button appear.
Hey, your nick’s not taken! The “Register” button in the lower right lights up and you’re ready to move forward if you want.
Taking a verification code instead
I learned a lesson I already knew – I should have known better but didn’t! 🙂 I assumed that when you provide your email address to freenode, the email they send back havs a link to click on to verify your email. I knew I should go through the process myself to be sure what the email said, what it looked like, etc., but I didn’t before I designed the original screen based on a faulty assumption. Here is the faulty assumption screen:
I knew I should go through the process to verify some things about my understanding of it, though (hey, it’s been years and years since I registered my own nick and email with freenode NickServ.) I got around to it, and here’s what I got (with some details redacted for privacy, irc nick is $IRCNICK below:)
From "freenode" <firstname.lastname@example.org> To "$IRCNICK" <email@example.com> Date Mon, 06 Feb 2017 19:35:35 +0000 Subject freenode Account Registration $IRCNICK, In order to complete your account registration, you must type the following command on IRC: /msg NickServ VERIFY REGISTER $IRCNICK qbgcldnjztbn Thank you for registering your account on the freenode IRC network!
Whoopsie! You’ll note the email has no link to click. See! Assumptions that have not been verified == bad! Burned Mo, burned!
So here’s what it looks like now. I added a field for the user to provide the verification code, as well as some hints to help them identify the code from the email. In the process, I also cut down the original text significantly since there is a lot more that has to go on the screen now. I should have cut the text down without this excuse (more text, less read):
I still need to write up the error cases here – what happens if the verification code gets rejected by NickServ or if it’s too long, has invalid characters, etc.
Handling edge cases
(Relevant ticket: https://pagure.io/fedora-hubs/issue/318)
Both in Twitter comments and IRC messages you sent me after I blogged the first design, I realized I needed to gather some data about the nickname registration process on Freenode. (Thank you!) I was super concerned about the fragility of the approach of slapping a UI on top of a process we don’t own or control. For example, the email verification email freenode sends that a user must act on within 24 hours to keep their nick – we can’t re-send that mail, so how do we handle this in a way that doesn’t break?
Even though I was a little intimidated (I forget that freenode isn’t like EFnet,) I popped into the #freenode admin channel and asked a bunch of questions to clear things up. The admins are super-helpful and nice, and they cleared everything up. I learned a few things:
- A user is considered active or not based on the amount of time that has passed since they have been authenticated / identified with freenode NickServ.
- After the user initially registers with NickServ, they are sent an email from “freenode Account Registration” <firstname.lastname@example.org> with a message that contains a verification code they need to send to NickServ to verify their email address.
- If you don’t receive the email from freenode, you can drop the nick, take it again and try again with another email address.
- If a nickname hasn’t been actively identified with NickServ for 10 weeks, it is considered “expired.” Identifying to NickServ with that nick and password will still work indefinitely until either the DB is purged (a regular maintenance task) or if another user requested the nick and took it over:
- The DB purges don’t happen right away, so an expired nick won’t be removed on day 1 of week 11, but it’s vulnerable to purge from that point forward. Purges happen a couple times a year or so.
- If another user wants to take over an expired nick that has not been purged, they can message an admin to have the nick freed for them to claim.
This was mostly good news, because being identified to NickServ means you’re active. Since we have an IRC bouncer (ircb) under the covers keeping users identified, the likelihood of their sitting around inactive for 10 weeks is far less. The possibility that they actually lose their nick is limited to an opportunist requesting it and taking it over or bad timing with a DB purge. This is a mercifully narrow case.
So here’s the edge cases we have to worry about from this:
These cases result in the user needing to register a new nickname.
- User hasn’t logged into Hubs for > 10 weeks, and circumstances (netsplit?) kept them from being identified. Their nick was taken by another user.
- User didn’t verify email address, and their nick was taken by another user.
Need to re-register nickname
These cases result in the user needing to re-register their nickname.
- User hasn’t logged into Hubs for > 10 weeks, circumstances kept them from being identified. Their nick was purged from the DB but is still available.
- User didn’t verify email address, and their nick was purged from DB but is still available.
Handling lost nicks
If we can’t authenticate the user and their nickname, we’ll disable chat hubs-wide. IRC widgets on hubs will appear like so, to prompt the user to re-register:
If the user happens to visit the user settings panel, they’ll also see a prompt to re-register with the IRC feature disabled:
The registration process should appear the same as in the initial user registration flow, with a message at the top indicating which state the user is in (if their nick was db purged and is now available, let them know so they can re-register the same nick; if someone else grabbed it, let them know so they know to make a new one.) Here’s what this will look like:
The cases I forgot
What if the user already had a registered nickname before Hubs? (This will be the vast majority of Hubs users when we launch!) I kind of thought about this, and assumed we’d slurp the user’s nickname in from FAS and prompt them for their password at some point, and forgot about it until Sayan mentioned it in our meeting this morning. There’s two cases here, actually:
- User has a nickname registered with Nickserv already that they’ve provided to FAS. We need to provide them a way to enter in their password so we can authenticate them using Hubs.
- User has a nickname registered with Nickserv already that is not in FAS. We need to let them provide their nickname/password so we can authenticate them.
I haven’t mocked this up yet. Next time! 🙂
Initial set of mockups for this.
So there you have it in today’s installation of Hubs’ IRC feature – a pretty major iteration on a design based on feedback, some research into how freenode handles registration, some mistakes (not verifying the email registration process first-hand, forgetting some cases), and additional mockups.
Keep the feedback coming – as you can see here, it’s super-helpful and gets applied directly to the design. 🙂