GitLab.com will not currently have these plans activated, as such all users are currently getting full EEP features as before
This issue describes what needs to be done to activate these plans with 9.4 roll-out once we have added all features to the license check, updated GitLab.com Pricing Page and improved and automated the payment flow.
Todo
Execute query to set all users who purchased plans before 9.4 rollout onto their current plan with a SQL query
All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609)
Manually set gitlab-org and gitlab-com to Gold plan and unlimited minutes.
On September 1st turn on Namespace-level licensing on GitLab.com via Admin Area
On September 1st re-run Early Adopter migration script to pick up anyone who has registered in the last few days
All of the above should be tested on staging prior to touching the production environment
Do we want to email all users or put something in the newsletter?
Generally, I favor a "less is more" approach to marketing communications. Better to receive few marketing communications that are very relevant and useful than get bombarded with too much communications. However, when it comes to pricing and packaging changes, I am an advocate for a well thought through communications plan.
Given this, from gitlab-com/customers-gitlab-com#147:
Grandfathering all existing users & groups
To avoid taking all existing features away from existing users, users & groups created before the 9.4 roll-out will be put on a special plan that will allow them to continue to use those features for at least 1 year. New paid features will not be made available to these users and they will have to upgrade to a paid plan to get these features.
We really need to make sure this information is clear to those who may believe that change would represent a loss of functionality. As such, this would be an ideal time to ensure we communicate completely, and understand the various groups of people we're communicating with.
We don't want a communication absence or insufficient communication leading to confused or irate customers thinking their current plan is going away without warning.
We want to make sure to the extent possible we communicate in the best possible way. Is someone on a dotcom plan a heavy user of EE features, and might they be especially anxious about a change like this? What about people who have never used EE features on their dotcom plan? I'm sure there are additional ways to segment our customer data to ensure a communications plan is worthwhile for them to read and addresses what they need to know.
It might also be worth giving some context into why we are making this change, and what it means for the future of our SaaS plans. Maybe we can get our users excited about what's to come, while keeping them informed on how they'll be impacted by our plan changes.
I'd like to invite product and content marketers extraordinaire @amara and @erica to the thread. The three of us will also be huddling on a comms plan and how we can best plug in to support this effort and our customers, and will update this issue following that meeting.
Courtland, Erica, and I just met to discuss the communications plan for the pricing updates. I'll create a marketing issue on the comms plan and share it will you all by tomorrow. Once that is created @mydigitalself it would be great to meet to firm up timing and to make sure we have all of the details around feature set per plan and grandfathering.
@mydigitalself one thing that would greatly improve the rollout of this news is the ability to segment our existing .com users by their current usage. (i.e. is someone is a heavy user of EES features today we should send that person different message than someone who is only use a smaller subset of what we offer). Do we have the data on .com users to be able to get to that level of information?
Rubén Dávilamarked the checklist item Execute query to set all users who purchased plans before 9.4 rollout onto their current plan with a SQL query as completed
marked the checklist item Execute query to set all users who purchased plans before 9.4 rollout onto their current plan with a SQL query as completed
Execute query to set all users who purchased plans before 9.4 rollout onto their current plan with a SQL query
All customers who purchased a GL.com plan before 9.4 have a complete Namespace record on GL.com now:
# Before syncirb(main):087:0> Namespace.where('plan IS NOT NULL AND shared_runners_minutes_limit IS NOT NULL').count=> 26# After syncing user namespacesirb(main):088:0> Namespace.where('plan IS NOT NULL AND shared_runners_minutes_limit IS NOT NULL').count=> 83# After syncing group namespacesirb(main):089:0> Namespace.where('plan IS NOT NULL AND shared_runners_minutes_limit IS NOT NULL').count=> 167
@DouweM@oswaldo thinking again about the expiration of the subscriptions I think a pragmatic approach can be to add a new plan_expires_at column to the namespaces table. This will be very useful for the Early Adopter plans and we can use the same mechanism for the other plans as well, WDYT?
Update:
Given we basically need it for the Early Adopter plan, an even more simpler but manual solution can be to mark the desired date on the calendar so we can run a script to reset all the Early Adopter plans. For the other plans we can handle it through an API call from the subscription portal.
Given we basically need it for the Early Adopter plan, an even more simpler but manual solution can be to mark the desired date on the calendar so we can run a script to reset all the Early Adopter plans. For the other plans we can handle it through an API call from the subscription portal.
@rdavila I think that's what we decided on in the call :)
I wonder if we can somehow define actual limits within the plan? Currently, we store limits on per-namespace/per-project basis. Having plans which define the limit would make actually way easier to do.
This would basically apply for all limits, not only CI minutes. This actually makes it good, as we have a single place where we edit all limits, and we have a single place that we have to extend.
Douwe Maanmarked the checklist item Manually set gitlab-org and gitlab-com to Gold plan and unlimited minutes. as completed
marked the checklist item Manually set gitlab-org and gitlab-com to Gold plan and unlimited minutes. as completed
Douwe Maanmarked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as completed
marked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as completed
Douwe Maanmarked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as incomplete
marked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as incomplete
Douwe Maanmarked the checklist item All of the above should be tested on staging prior to touching the production environment as completed
marked the checklist item All of the above should be tested on staging prior to touching the production environment as completed
Douwe Maanmarked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as completed
marked the checklist item All existing users and groups to be grandfathered using a query such as UPDATE namespaces SET plan = 'early_adopter' WHERE plan IS NULL AND created_at < :some_datehttps://gitlab.com/gitlab-org/gitlab-ee/issues/2391 this should be done early and re-executed again once the namespace level licensing is turned on. This should be done using a batch query so that we don't lock up the database. (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2609) as completed