Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plans: Update "free domain with plan" sidebar upsell to go to domains first #66022

Merged

Conversation

sirbrillig
Copy link
Member

@sirbrillig sirbrillig commented Jul 27, 2022

Proposed Changes

In #51609, we updated the "Free domain with annual plan" sidebar upsell nudge to direct users to pick a plan before searching for a domain (instead of adding one silently in the background). This was to address user confusion and refund requests. However, since the primary goal of users clicking on that upsell is to get a domain, the intervening plans page can itself be confusing.

The current flow is: Upsell button > Plans page > Domain search > (maybe) Email upsell > Checkout.

In this PR we modify the upsell flow so that we go to the domains search page first, then the plans page, then directly to checkout.

The new flow is: Upsell button > Domain search > Plans page > Checkout.

There are a few other differences as well:

  1. An informational banner will be displayed on the plans page to explain that we are in the upsell flow (see the screenshot below).
  2. The email upsell after selecting a domain is skipped in this flow to simplify the steps as requested in Domain Upsell Nudge: redirect users to domain search first #66017.

Some possible problems with this change:

  • The plans page supports a redirectTo prop that would be used by checkout after the product has been added. This flow will ignore that prop, but since it is added by the ?redirect_to= query string and this flow is started from a hard-coded link I don't think they will ever be combined.
  • The plans page supports a withDiscount prop to add a coupon to the cart along with the plan. This flow will ignore that prop, but since it is added by the ?discount= query string and this flow is started from a hard-coded link I don't think they will ever be combined.
  • If you select a domain transfer or domain mapping from the domains search page, you'll effectively leave the upsell flow and will not end up on the plans page when adding the domain product is complete.

Fixes #66017

This must be merged first, but the change will not be active until D84928-code is merged to change where the upsell link goes.

Screenshots

Screen Shot 2022-07-27 at 12 13 11 PM

Screen Shot 2022-07-28 at 6 03 36 PM

Screen Shot 2022-07-27 at 1 37 27 PM

Testing Instructions

  • First, apply D84928-code and sandbox the API.
  • Start with a site that has no paid plan.
  • Visit the customer home page for the site, eg: http://calypso.localhost:3000/home/example.com
  • Click the "Upgrade" button in the sidebar notification that reads "Free domain with an annual plan" (see first screenshot above).
  • Verify that you are redirected to the domains page for your site (see second screenshot above).
  • Click to select a domain.
  • Verify that you are redirected to the plans page (see third screenshot above).
  • Click the "Upgrade" button on a plan's card to select that plan.
  • Verify that you arrive at checkout with both the plan and the domain in your cart.

@github-actions
Copy link

github-actions bot commented Jul 27, 2022

@matticbot
Copy link
Contributor

matticbot commented Jul 27, 2022

Here is how your PR affects size of JS and CSS bundles shipped to the user's browser:

Sections (~2309 bytes added 📈 [gzipped])

name     parsed_size           gzip_size
plans        +8278 B  (+1.0%)    +2171 B  (+0.9%)
domains       +619 B  (+0.0%)     +138 B  (+0.0%)

Sections contain code specific for a given set of routes. Is downloaded and parsed only when a particular route is navigated to.

Async-loaded Components (~104 bytes added 📈 [gzipped])

name                                        parsed_size           gzip_size
async-load-signup-steps-plans                    +327 B  (+0.1%)      +52 B  (+0.1%)
async-load-signup-steps-plans-atomic-store       +254 B  (+0.1%)      +27 B  (+0.0%)
async-load-signup-steps-domains                  +231 B  (+0.1%)      +52 B  (+0.0%)

React components that are loaded lazily, when a certain part of UI is displayed for the first time.

Legend

What is parsed and gzip size?

Parsed Size: Uncompressed size of the JS and CSS files. This much code needs to be parsed and stored in memory.
Gzip Size: Compressed size of the JS and CSS files. This much data needs to be downloaded over network.

Generated by performance advisor bot at iscalypsofastyet.com.

@sirbrillig sirbrillig self-assigned this Jul 27, 2022
@michaeldcain
Copy link
Member

Thanks for the quick turnaround on this - the flow feels better.

If a plan is not selected, the domain will not be added to the cart either; they are added together at the end of the flow. This avoids the original issue where users would end up aborting the flow and have an unexpected product in their cart.

I think this is slightly different than the original issue, where we were adding a plan to the cart in the background, and the user never explicitly knew that they had added it. I think it's completely reasonable to add the domain to the cart when they select the domain - especially if the domain CTA says "add to cart" or something like that. I guess I could go either way - we could wait for feedback from the P2 post.

@sirbrillig sirbrillig marked this pull request as ready for review July 27, 2022 19:06
@sirbrillig sirbrillig requested a review from a team as a code owner July 27, 2022 19:06
@matticbot matticbot added the [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. label Jul 27, 2022
@sirbrillig sirbrillig requested a review from a team July 27, 2022 19:06
@sirbrillig
Copy link
Member Author

Per @michaeldcain's suggestions, I made the following changes (now reflected in the description and screenshots):

  1. Clicking to add the domain will now add it to the cart immediately rather than waiting until the end of the flow.
  2. The domain search page will now display "Free for the first year" next to most domain options.

@dzver
Copy link
Member

dzver commented Jul 29, 2022

This feels like a major improvement! Given that the plan is not auto-added, the conversion rate of the link might not be as good as it previously was, but it should go up. We can monitor the stats after the change is merged.

It looks good to me but I'll leave the final review to be from a person from Payments. I checked the code, and also tested it by following the test plan and trying a couple of other things that are not on the test plan.

I also think this is safe to ship without an experiment, as long as we do a follow-up data request or analysis and see what happened.

Copy link
Member

@michaeldcain michaeldcain left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This works well for me, and is a definite improvement.

I tested the main flow (CTA > Domain > Plan > Checkout) and everything worked correctly. I also tested exiting the flow after picking a domain (correctly added to cart), mapping and transferring domains (this forked to the existing flows smoothly), and exiting before selecting a domain (no items in cart).

I updated the plans banner to use a title and hopefully reuse existing translation strings. If you don't like the look of it, you can revert to how you had it:

Screen Shot 2022-07-29 at 1 26 16 PM

@sirbrillig sirbrillig merged commit e9fbdc4 into trunk Jul 29, 2022
@sirbrillig sirbrillig deleted the update/free-domain-with-plan-upsell-to-domains-first branch July 29, 2022 17:46
@github-actions github-actions bot removed the [Status] Needs Review The PR is ready for review. This also triggers e2e canary tests and wp-desktop tests automatically. label Jul 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Domain Upsell Nudge: redirect users to domain search first
4 participants