Skip to main content

Flow to reduce Shopify churn

Background: Send simple one-click email survey to Shopify uninstalled app

  • Figure out uninstall reasons
  • Flow for users that might want to come back, similar to cancel flow (My account -> Subscriptions -> Cancel) we have on powr.io for Shopify

Overview of mockups - https://www.figma.com/file/dPphu5Kh600nvk4Bq3ZcMx/Shopify-churn?node-id=0%3A1

Scenario: Send email when Shopify user uninstalls (no eng required)

GIVEN a Shopify user with active store (not closed)

WHEN the user downgrades an app from store.myshopify.com/admin/apps

Or uninstalls a paid app

THEN we should send him the following email

Email:

alt_text

Note: Email will be built in Campaign Builder by marketing, no engineering required

Scenario: Email links should contain info on user’s subscription id, shopify id, shop url (no eng required)

GIVEN a user receives the email

THEN the button links should be of type https://powr.io/subscriptions/:subscription_id/cancellations/:reason

And the links should contain user’s subscription id

Note - links for other buttons:

https://powr.io/subscriptions/:subscription_id/cancellations/expensive

https://powr.io/subscriptions/:subscription_id/cancellations/bad-design

https://powr.io/subscriptions/:subscription_id/cancellations/missing-features

https://powr.io/subscriptions/:subscription_id/cancellations/not-needed

https://powr.io/subscriptions/:subscription_id/cancellations/other

Scenario: Clicking the email link will take users to the respective flow page

GIVEN a user receives the email

WHEN they click on one of the buttons in the email

THEN they should be taken to the respective flow page depending on the button

Eng Notes: \ Create a new controller for cancel feedback \ Create 1 haml page, with sections for each flow and show based on params. \ cancel-feedback/:param

Scenario: When opening any flow page the user’s details should be saved to cancel_feedbacks table

GIVEN the user that received email

AND there is no existing cancel_feedbacks record on the subscription id

WHEN the user opens flow page

THEN a new record is created in cancel_feedbacks table with the respective reason:

id | 55522


reason | "expensive"/”badDesign”/"missingFeatures"/"notNeeded"/"other" (depending on the button clicked)


subscription_type | premium/pro/enterprise


subscription_id | xxxx


details | %textField value% (only for “Other” and “Bad design” flow), blank for others


created_at | now


updated_at | now


cancelled_by |


deleted_at |


source | shopify_churn_survey (new column)

Scenario: When opening any flow page for the first time the user’s details should be saved to cancel_feedbacks table

GIVEN the user that received email

AND there is existing cancel_feedbacks record on the subscription id

WHEN the user opens flow page

THEN record should be updated in cancel_feedbacks table with the respective reason

Scenario: User somehow opened the page without parameters

Given any user

When they open the page without any parameters

Then the page should give 404

Scenario: User clicks on different buttons in email and opens more than one flow

Given any user

When they open 2 or more links from the email

Then the page should save to cancel_feedback only the first option

Note - you can check if it’s from email by the column “source”

Expensive flow

alt_text

Note - if we don’t know which plugin was used - then use word “plugin”

Flow overview: \

Scenario: Assign a discount to user when they open a page

GIVEN a user on “It’s too expensive” flow

WHEN they open the page

THEN they should be assigned a 50% discount

Name of the discount - 50_off_everything_shopify_cancel

Note: discount to be used - (ensure discount has notification days set to 7) \ Eng notes: Create a user notification with active, discount duration same as that on discount.

Scenario: Link to Shopify app market

GIVEN a user is on the expensive flow page

WHEN they click on Shopify app market link

THEN they should be taken to https://apps.shopify.com/partners/powr-io on a new tab

Bad design flow

alt_text

Scenario: When user clicks “Submit” save his answer and clear textarea

GIVEN a user on the bad design flow page

AND Text area is not blank

WHEN the user clicks Submit

THEN we update the existing record in cancel_feedback with text from text area saved to “details” column

AND a toast notification appears on the top of the page saying “Thank you for your response”

AND the text area is cleared

Scenario: Submit button is disabled if no text in textarea

GIVEN a user on the bad design flow page

AND Text area is blank

THEN the Submit button is disabled

Missing features flow

alt_text

Scenario: Write info to cancel feedback and redirect to Zendesk page

Link with parameters: https://help.powr.io/hc/en-us/requests/new?&src=shopify_churn_missing_features&email=...

Pass email, platform, email_subject = “Can't get it to do what I want”, website_url, plugin (if available)

Example - https://help.powr.io/hc/en-us/requests/new?&src=shopify_churn_missing_features&[email protected]&platform=shopify&email_subject=Can%27t%20get%20it%20to%20do%20what%20I%20want&website_url=powr.io

Eng notes: we don’t need to build a page for this, they user will go through the controller, create the db record for cancel feedback and then be redirect to POWr.

Note - the page is built by Zendesk

Not needed flow

alt_text

Scenario: Show minimarket

GIVEN a user is on “I don’t need it anymore” flow page

Then they should see message and a minimarket below

Other flow

alt_text

Scenario: When user clicks “Submit” save his answer and clear textarea

GIVEN a user on the other flow page

AND Text area is not blank

WHEN the user clicks Submit

THEN we update the existing record in cancel_feedback with text from text area saved to “details” column

AND a toast notification appears on the top of the page saying “Thank you for your response”

AND text area is cleared

Scenario: Submit button is disabled if no text in textarea

GIVEN a user on the other flow page

AND Text area is blank

THEN the Submit button is disabled