[Tracking] Add a private domain email check to the new user onboarding flow
DESIGN DOC
If you havenβt already, check out our contributing guidelines for onboarding and email [email protected] to request to join our Slack channel!
Issue reported by: @MitchExpensify Slack conversation: https://expensify.slack.com/archives/C07HPDRELLD/p1729809438307289 Figma file: https://www.figma.com/design/ir27daDKHaB1g4iZCT22K5/Onboarding-v2?node-id=7690-61846&t=VUO5F3YHDzF2O7Sw-1 Pre-design 1: https://expensify.slack.com/archives/C07HPDRELLD/p1730909567485999 Pre-design 1 summary: https://expensify.slack.com/archives/C07HPDRELLD/p1731000105159589 Design Doc: https://docs.google.com/document/d/1JlM9G3jZpaHDlcILWL9170ancMLtOnI2a73dQgX6ENo/edit?tab=t.0
Proposal Add a private domain email check to the new user onboarding flow
Problem
Our product works a bit better when a user signs up with a private email address because we can more reliably get their First/Last name, better name auto created workspaces, etc. Further, our sales processes are enhanced when we know the domain of a user so we can target high-profile leads. Yet, the majority of our users sign up with public emails and/or phone numbers making it harder to catch edge cases where they accidentally create a new account when they should have added a secondary login to an existing account.
Solution
-
Users sign in to New Expensify for the first time using a phone or public domain email address
-
We will add a step immediately after signing in to the onboarding flow asking if they have a work email address.
- This email field will only accept private domain entries, otherwise, it will throw an error: "Please use a valid work email from a private domain"
- If they enter a work email and choose to "Log in with my work email" we merge the accounts, making the work email their primary login
- If the work email is tied to an existing account, we send a magic code and add a step to verify it so that we know they own it before merging.
- Once merged, users continue on their onboarding path or get redirected to Classic
- If the work email is on any policy that is not
isPolicyExpenseChatEnabled=true, or istryNewDot.classicRedirect.dismissed=true, or has notryNewDotNVP they are routed to Classic. Everyone else goes to the next NewDot onboarding step (Intent)
Work email check step:
Magic code step for existing accounts:
Tasks
- [x] Post Proposal (full Problem/Solution statement) in ~~
#expensify-open-source~~ '#convert`: https://expensify.slack.com/archives/C07HPDRELLD/p1730909567485999 - [x] Wait at least one full business day, and until the post has a majority (2/3) of positive reactions (π)
- [x] Paste Proposal in the space above with a link to the Slack thread
- [ ] ~~Email
[email protected]and paste in the Proposal~~ This is not a What's Next proposal but we're using the Design Doc template to make sure its done right - [ ] Fill out the High-level overview of the problem, Timeline, and Terminology sections of the Design Doc
- [ ] ~~Email
[email protected](continue the same email chain as before) with the link to your Design Doc~~ This is not a What's Next proposal but we're using the Design Doc template to make sure its done right - [x] Host a pre-design meeting (example) in
#expensify-open-sourceto discuss any necessary details in public before filling out the High-level of proposed solution section: https://expensify.slack.com/archives/C07HPDRELLD/p1730909567485999 - [x] Fill out the High-level of proposed solution section
- [ ] ~~Email
[email protected]again with links to the doc and pre-design conversation in Slack~~ This is not a What's Next proposal but we're using the Design Doc template to make sure its done right - [x] Add the
DesignDocReviewlabel to get the High-level of proposed solution section reviewed - [x] Respond to any questions or concerns and bring up blockers in Slack to get a consensus if necessary
- [x] Confirm that the doc has the minimum necessary number of reviews before proceeding
- [x] Host another pre-design meeting in
#expensify-open-sourceto ask for engineering feedback on the technical solution. - [x] Fill out the Detailed implementation of the solution and related sections.
- [x] Re-add the
DesignDocReviewlabel to this issue - [x] Respond to any questions or concerns and bring up blockers in Slack to get consensus if necessary
- [ ] Confirm that the doc has the minimum necessary number of reviews before proceeding
- [ ] Email
[email protected]one last time to let them know the Design Doc is moving into the implementation phase - [ ] Implement the changes
- [ ] Add regression tests so that QA can test your feature with every deploy (instructions)
- [ ] Send out a follow up email to
[email protected]once everything has been implemented and do a Project Wrap-Up retrospective that provides:- Summary of what we accomplished with this project
- What went well?
- What could we have done better?
- What did we learn?
Do we want to add this in the Stage 1 flow? @MitchExpensify
That's the idea @anmurali, do you think it makes sense to add for everyone signing up before the "what would you like to do today?" options or after a choice on that screen and only for certain options?
I think track, manage, and get paid back all indicate a higher chance the user should have logged in using their work email so I'd lean to the latter (Adding the check after the welcome message only for certain choices)
So long as it is optional, I would try it across the board and if conversion through the stage 1 funnel falls, we can do something else.
Pre-design here https://expensify.slack.com/archives/C07HPDRELLD/p1730909567485999
Pre-Design summarized - https://expensify.slack.com/archives/C07HPDRELLD/p1731000105159589
Will update this issue as a next step
Current assignee @MitchExpensify is eligible for the NewFeature assigner, not assigning anyone new.
:warning: It looks like this issue is labelled as a New Feature but not tied to any GitHub Project. Keep in mind that all new features should be tied to GitHub Projects in order to properly track external CAP software time :warning:
Current assignee @shawnborton is eligible for the NewFeature assigner, not assigning anyone new.
Not overdue, I think we're all good from a mockup standpoint at least.
I'm gonna get this into a Design Doc as a next step to make sure we don't miss anything and get good visibility on the plan
Design doc is coming along here: https://docs.google.com/document/d/1JlM9G3jZpaHDlcILWL9170ancMLtOnI2a73dQgX6ENo/edit?tab=t.0
I still need to:
- Confirm what the plan for secondary logins in NewDot is for the resource management section
- Get @blimpich 's help completing the data storage section
Then send it out for review
Raised some questions about edge cases and starting a conversation with what to do about them here.
I might need a little help from you here, @shawnborton. What do you think the generic merging error screen should look like? https://www.figma.com/design/ir27daDKHaB1g4iZCT22K5/Onboarding-v2?node-id=8053-5297&node-type=frame&t=Rio4Ccv3iyJ9Izr9-0
Why does that error happen? To confirm, it would happen after the user enters their magic code?
One idea is to just add the error right on that screen, which feels more in line with the rest of the app:
The other idea is something like you have, just a different illustration and a line break:
cc @Expensify/design for thoughts on this one too.
Why does that error happen?
It could happen for a bunch of different reasons, and we don't really want to surface any of them in this onboarding flow because I think it's a little overly technical for someone just trying to get into the app. (You can check this thread for a bit more context)
The other idea is something like you have, just a different illustration and a line break
I prefer this option because it feels more like it's guiding you through the experience, which I think for onboarding makes sense.
Cool cool, I can get down with that!
Finished writing the Data Storage and API Changes section of the high-level. Spent a lot of time today thinking about the implementation and how it could exactly work. Need to confirm a few assumptions but I think we can start getting reviews on the HL sometime next week.
I like what you've done here Shawn. Initially I was thinknig we should have a try again, but I think it's better to just keep going and tell them where to retry like you've done
@shawnborton, @blimpich, @MitchExpensify Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!
Updated to the new illustration, thank you both for the input!
Doc here ready for review https://docs.google.com/document/d/1JlM9G3jZpaHDlcILWL9170ancMLtOnI2a73dQgX6ENo/edit?tab=t.0
:wave: Hello Generalist Track Team - you have been assigned to review this High Level Design Doc. Check out this Stack Overflow for some tips on reviewing a design doc. Once you are done, simply press the Add "Reviewed Doc" comment button in the right hand side K2 panel or follow these instructions.
@alexpensify(Expensifier / Graduate) - https://github.com/Expensify/App/issues/52710@thienlnam(Expensifier / Graduate) - https://github.com/Expensify/App/issues/52711@zsgreenwald(Project Manager) - https://github.com/Expensify/App/issues/52712@greg-schroeder(Project Manager) - https://github.com/Expensify/App/issues/52713@nkuoch(Product Manager) - https://github.com/Expensify/App/issues/52714@pecanoro(Product Manager) - https://github.com/Expensify/App/issues/52715@danielrvidal(Generalist) - https://github.com/Expensify/App/issues/52716@davidcardoza(Generalist) - https://github.com/Expensify/App/issues/52717@trentpetty(Accounting Technical Team) - https://github.com/Expensify/App/issues/52718@jamesdeanexpensify(Marketing Team) - https://github.com/Expensify/App/issues/52719
hey @anmurali @blimpich I am interested in working on this project (worked on a lot of onboarding PR's in the past so this interests me), can start from writing detailed section of design doc as well. let me know if this would require a C+ for implementation/review π
@allgandalf Thank you! We're still working through the high-level, and I've mostly been focusing on what backend changes will be needed for this, but I think hiring a C+ for the frontend design/implementation would be a good idea. Need to do a few things first though, I'll get back to you about what we might need ππ
I have read and reviewed this Design Doc!
I have read and reviewed this Design Doc!
I have read and reviewed this Design Doc!
I have read and reviewed this Design Doc!