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

[website] Add perpetual option to pricing page #35504

Merged

Conversation

joserodolfofreitas
Copy link
Member

@joserodolfofreitas joserodolfofreitas commented Dec 16, 2022

Summary

On the last iteration of the pricing model, we stepped in the direction of creating a subscription model to have better revenue planning/expectations based on renewals.
We removed access to perpetual licenses (for new customers) and created the concept of "perpetual in production" that applies to a subscription model.

Not having a perpetual license might have been one of the biggest factors impacting our sales growth, and in fact, we've seen a rise in support requests related to confusions regarding this topic.
Additionally, the MUI Developer survey 2022 is trending to show that more than 70% of users care about having a perpetual license (the rate seems to be bigger between Paid customers).

Problems

  • Make subscription appealing compared with Perpetual.
  • Make users know that they can have a Perpetual plan to fallback, in case they feel trapped by a subscription model.
  • Clear the confusion generated by our subscription model (Most competitors have only Perpetual licenses)

It’d be great if the prototype also accounts for the future possibilities:

  • Standard and priority support
  • Number of developers
  • Custom components list (for users selecting a few components from X portfolio)

Related meetings

Related issues

Design

Preview

https://deploy-preview-35504--material-ui.netlify.app/pricing/

Benchmarks

@joserodolfofreitas joserodolfofreitas added website Pages that are not documentation-related, marketing-focused. MUI X labels Dec 16, 2022
@mui-bot
Copy link

mui-bot commented Dec 16, 2022

Netlify deploy preview

https://deploy-preview-35504--material-ui.netlify.app/

Bundle size report

No bundle size changes (Toolpad)
No bundle size changes

Generated by 🚫 dangerJS against 9a02ff1

@joserodolfofreitas joserodolfofreitas marked this pull request as draft December 16, 2022 13:51
@github-actions github-actions bot added the PR: out-of-date The pull request has merge conflicts and can't be merged label Jan 15, 2023
@gerdadesign
Copy link
Member

Updated & consolidated info:
Notion shaping page
Notion project tracking page


Draft 2

In lieu of coordinating schedules, I put together a Loom presentation (but it had to be in 3 parts 😅 for now).
Loom 1 — Overview and context
Loom 2 — Versions and structural options
Loom 3 — Store considerations

Figma file for contextual comments

🗣 Feedback for this draft:

  • preferences on page structure between version 1 and 2 (separate pricing factors section vs one section)?
  • do the described interactions make sense and are they doable?
    • dynamic pricing
    • sticky bar when scrolling the detailed chart comparison
    • passing information from MUI → Store
  • are we aligned on showing Subscription / Perpetual as equal options in the hierarchy, but using styling and defaults to emphasize one?
  • are we aligned on showing annual price instead of monthly?
  • are we aligned on removing the early bird banner at the bottom?
  • any other comments around structure and hierarchy; style and detailed copy will be addressed in a following draft

@oliviertassinari
Copy link
Member

@gerdadesign Thanks for sharing this iteration. Thought on moving forward:

  1. I think that we should release a first version, that involves minimal changes, so we can quickly see the effect in the next few days. For example, if needed, I could have bandwidth the next weekend to ship the first version of the perpetual plan.
  2. I left comments on the Figma file.

@joserodolfofreitas joserodolfofreitas force-pushed the perpetual-option-in-pricing branch from 7968893 to b280d37 Compare February 14, 2023 21:13
@github-actions github-actions bot removed the PR: out-of-date The pull request has merge conflicts and can't be merged label Feb 14, 2023
@joserodolfofreitas
Copy link
Member Author

joserodolfofreitas commented Feb 16, 2023

@oliviertassinari, I believe we have a good first step to start iterating on the details.
https://deploy-preview-35504--material-ui.netlify.app/pricing/

The current solution encompasses the following:

  • A switch on the Plan's boxes to keep the options contextualized and isolated from the community plan.
  • The switch maintains both options visible, so they are searchable and easy to spot.
  • The key information about paid plans was moved up to close the gap between the concept introduction and explanation.
  • A tooltip with a short explanation of Annual and Perpetual. @gerdadesign pointed out that the use of the tooltip here is not the same pattern as of those on the pricing table (visible by hovering over a ℹ️ icon). But I'm not sure there's another practical way to display a short contextualized description for the license types.
  • Currently experimenting with displaying Perpetual with full price while Annual with monthly price.

I'll leave the PR on draft for now because some parts of the code need a small refactory.

@oliviertassinari oliviertassinari force-pushed the perpetual-option-in-pricing branch 11 times, most recently from 892f456 to 85c62e6 Compare February 20, 2023 01:19
@oliviertassinari oliviertassinari marked this pull request as ready for review February 20, 2023 01:27
@oliviertassinari oliviertassinari force-pushed the perpetual-option-in-pricing branch 2 times, most recently from bc2bbec to a9155ef Compare February 20, 2023 01:51
@oliviertassinari
Copy link
Member

oliviertassinari commented Feb 20, 2023

I have spent a few hours on this, I have pushed as far as I could, and I think that it's good enough :). I feel that it's typically the kind of changes for which we miss a design engineer, José or me going into the weed of these changes won't scale.

@gerdadesign
Copy link
Member

Looking good so far! I made some small color and shadow adjustments for better contrast as well as more consistent hierarchy in dark. For easier Figma navigation, use cmd+click to deep select the object or frame and in the Figma right panel, select Inspect. That has all the style info.
Dark mode
Light mode

Copy link
Member Author

@joserodolfofreitas joserodolfofreitas left a comment

Choose a reason for hiding this comment

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

Thanks for the improvements, @oliviertassinari!

It's a good idea to display Perpetual first on the widget, and I love that it has an animation when using the tabs component.

It's a small difference, but I think we can consider having a different order for the key information section items, one that prioritizes a reading flow and the most important questions customers may have.
I'm thinking about the following one (even though it's not the most optimized in terms of height).

image

docs/src/components/pricing/PricingTable.tsx Outdated Show resolved Hide resolved
docs/src/components/pricing/PricingTable.tsx Outdated Show resolved Hide resolved
@gerdadesign
Copy link
Member

Is there a value to have 3 different sections for Annual vs Perpetual? It seems like we could condense the content into one description for Annual and one for Perpetual. Or one "Annual vs Perpetual" and have a clear & concise description here. Perhaps @samuelsycamore would be helpful to tease out these copy edits?
Additionally, calling out again the use of the Annual title when we show price per month. Is there a reason we want to stick with / month while also showing the Annual title?

@samuelsycamore
Copy link
Contributor

samuelsycamore commented Feb 22, 2023

Can we rethink the layout/structure of this section? This doesn't feel like the best way to convey this information, in my opinion, and the differences in length in each box leads to it feeling out of balance.

Screenshot 2023-02-21 at 5 27 10 PM

It seems like there's a lot of overlap in the content here and in the FAQs further down. I would think that this section would answer all of the FAQs. Maybe we should consolidate these two sections into one somehow? Could it all be one big FAQ (or Key Information) section?

@joserodolfofreitas
Copy link
Member Author

Can we rethink the layout/structure of this section?

@samuelsycamore, happy to hear what's your proposal. I ordered and grouped them based on the main questions the customers may have after seeing the price and what I thought was a good flow of reading.

Perhaps, as @gerdadesign suggested, there's a better way to phrase/put the contrast between Annual and Perpetual.

It seems like there's a lot of overlap in the content here and in the FAQs further down. I would think that this section would answer all of the FAQs. Maybe we should consolidate these two sections into one somehow? Could it all be one big FAQ (or Key Information) section?

I don't think the overlap of content is a problem in itself if they are adding up to the same concept and not getting contradictory. The redundancy might even be beneficial if it means we reach users journeying our pricing through different angles.
But I agree that there's an opportunity to improve these two sections. Maybe that's worth its own PR.

@joserodolfofreitas
Copy link
Member Author

joserodolfofreitas commented Feb 22, 2023

Maybe we should consolidate these two sections into one somehow?

Btw @samuelsycamore, they weren't separated before. Do you mean we should show them together as we do at https://mui.com/pricing/ currently?
(And show the testimonial section only after those two)

@danilo-leal
Copy link
Contributor

Jumping in here quickly, I've just pushed some changes:

  • Tried to tackle the Key info section by using display: grid instead of the Grid component. By not using flex for this, I think we enable a sort of layout that might help a bit?! Y'all tell me ⎯ it's looking better to me!
  • Light style tweaks to the tab (so it uses primaryDark when in dark mode).
  • Light arrangement tweaks to the FAQ section ⎯ I'm hoping the content order there wasn't specific!

@oliviertassinari
Copy link
Member

oliviertassinari commented Feb 23, 2023

shadow adjustments for better contrast

@gerdadesign Interesting, I also feel that the contrast was a bit too light.

  • The shadow could help, I think to try.

It's a good idea to display Perpetual first on the widget.

@joserodolfofreitas I felt that it was making a lot more sense, it communicates to the users it's taking a step back, in terms of renewals but also updates.

I love that it has an animation when using the tabs component

I wanted to use Joy UI initially, but because of the context isolation, everything was broken. I considered MUI Base but felt that Material UI's focus indicator was going to be great. For customization, the DX with Joy UI and Material UI felt the same, I think that it really depends on which one is closer to your target. Material UI has min-width, and min-height values which made it a bit painful. The keyboard as well:

  • We need to fix the indicator during the first render, it flashes. Here is the initial render:

Screenshot 2023-02-23 at 01 46 15

it's not the most optimized in terms of height.

This was the primary driver for the position of the blocks and the content itself inside these blocks. We can definitely try different variations but we can't have big gaps like in the screenshot.

It seems like there's a lot of overlap in the content here and in the FAQs further down

  • I can find one that overlaps, with the required quantity. I think that it's OK but we can improve it, by using the same copy and making the header clearer.

they weren't separated before

The motivation to split them was two folds: 1. visual balance 2. breaking down the content to be easier to process. I think that there are 3 different things:

  1. The difference between the two license types
  2. Important aspects of each license type (once you understand the bug of the difference)

I think that the FAQ is great for frequent questions but that it's not good enough for very frequent questions. This feels like one of the most important aspects of pricing.


const monthlyDisplay = annual;

const priceUnit = monthlyDisplay ? '/ dev / month' : '/ dev';
Copy link
Member

Choose a reason for hiding this comment

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

Would it make more sense to get rid of the monthly price?
After switching between Annual/Perpetual tabs, the first thing I did was calculate the price for Annual per year (15 * 12) to be able to compare it with Perpetual.
I didn't even notice "Billed annually at $180/dev." note below 😅

Screen.Recording.2023-02-23.at.17.23.56.mov

Copy link
Member

Choose a reason for hiding this comment

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

Would it make more sense to get rid of the monthly price?

Why not try to change the display but I don't think it should happen in this iteration. I think it's more important to measure the impact of the perpetual license with as few other variable changes as possible. Maybe this could have an important impact.


const monthlyDisplay = annual;

const priceUnit = monthlyDisplay ? '/ dev / month' : '/ dev';
Copy link
Member

Choose a reason for hiding this comment

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

Furthermore, the Premium Annual plan feels too crowded with numbers which might be confusing:
Screenshot 2023-02-23 at 17 29 23

Copy link
Member

Choose a reason for hiding this comment

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

Also, these numbers do not add up: ($49 * 12) - 25% = $441
I understand that the difference comes from the rounding of the monthly price, but this seems like another reason to avoid monthly pricing given that it's billed annually anyway 🙂

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed, we throw too many numbers at the reader all at once here. As an aside—how long is this "early bird special" going to last? It's been around for as long as I can remember now and is starting to feel not-so-early anymore. 😅

Copy link
Member

Choose a reason for hiding this comment

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

I've had both of these same questions, too.
For reference, this is what was in design (I've had the same point about monthly vs annual too). @samuelsycamore I was told the reason for early bird still being there is because the Premium plan features are still not fully fledged out enough to consider it full price?

Does this screenshot feel clearer to you both?
Figmamockup

Copy link
Member

Choose a reason for hiding this comment

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

Looks much cleaner! 👍

Copy link
Contributor

@samuelsycamore samuelsycamore Mar 5, 2023

Choose a reason for hiding this comment

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

Big improvement for sure!

@oliviertassinari oliviertassinari force-pushed the perpetual-option-in-pricing branch from da4efdb to 5ae3065 Compare March 3, 2023 23:13
@github-actions github-actions bot added the PR: out-of-date The pull request has merge conflicts and can't be merged label Mar 3, 2023
@joserodolfofreitas joserodolfofreitas force-pushed the perpetual-option-in-pricing branch from 5ae3065 to 3bf3cf4 Compare March 15, 2023 14:44
@github-actions github-actions bot removed the PR: out-of-date The pull request has merge conflicts and can't be merged label Mar 15, 2023
@github-actions github-actions bot added the PR: out-of-date The pull request has merge conflicts and can't be merged label Jun 29, 2023
@oliviertassinari oliviertassinari self-assigned this Jul 6, 2023
@oliviertassinari oliviertassinari force-pushed the perpetual-option-in-pricing branch from 00e5429 to 9a02ff1 Compare July 10, 2023 00:58
@github-actions github-actions bot removed the PR: out-of-date The pull request has merge conflicts and can't be merged label Jul 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
MUI X website Pages that are not documentation-related, marketing-focused.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants