Posts by Kimberly Coleman https://www.strangerstudios.com/author/kim/ WordPress Plugin and Theme Development Sun, 02 Jun 2024 12:49:52 +0000 en-US hourly 1 https://wordpress.org/?v=7.0 https://www.strangerstudios.com/wp-content/uploads/2020/09/cropped-Stranger-Studios_favicon-32x32.gif Posts by Kimberly Coleman https://www.strangerstudios.com/author/kim/ 32 32 Migrate From WP User Avatar to Basic User Avatars https://www.strangerstudios.com/migrate-wp-user-avatar-to-basic-user-avatars/ Sun, 02 Jun 2024 12:47:58 +0000 https://www.strangerstudios.com/?p=10420 WordPress itself does not include a way for users to upload their own avatars. Instead users are encouraged to use the Gravatar service. There have been many discussions about building in an avatar upload feature, and I think it may actually make it into a future release of WP any day now. In the meantime, (more...)

The post Migrate From WP User Avatar to Basic User Avatars appeared first on Stranger Studios.

]]>
WordPress itself does not include a way for users to upload their own avatars. Instead users are encouraged to use the Gravatar service. There have been many discussions about building in an avatar upload feature, and I think it may actually make it into a future release of WP any day now. In the meantime, there is a plugin for that. In fact, there are a few plugins for that.

While Paid Memberships Pro works well (as far as I know) with the most popular avatar plugins, we wanted to be able to recommend one of them above the others. We wanted one that worked as seamlessly as possible with our frontend profile page and directory plugin.

Taking Control of the Basic User Avatars Plugin

Last year, we reached out to Jared Atchison about taking over maintenance of the Basic User Avatars plugin. There were a few minor bugs and enhancements we had done for our customers. We did a pull request against the GitHub repository and offered to maintain the WordPress.org repository for the plugin going forward. Jared said yes, and gave us access on GitHub and WordPress.org.

To be clear, our intention still is to keep Basic User Avatars as a simple avatar upload plugin until such functionality is made available in the core WordPress software. Many of our customers require this functionality for their site, and we like being able to recommend a plugin we know we can fix if an update to PMPro, WordPress, or any popular plugin breaks that functionality.

WP User Avatar Becomes ProfilePress

One plugin we used to recommend for avatar uploads was called “WP User Avatar”. We noticed a couple years ago that it had been acquired by a competing membership plugin. We thought the new owners might add features that made it more than the single use plugin it was, and so we stopped recommending it, but we never expected them to do what they did this week.

Basically the plugin that was WP User Avatar is now a lite version of the ProfilePress plugin, with a lot of features that conflict with PMPro, or features you just don’t want if you only want avatar uploads for your site. WP Tavern has covered the release and confusion around it well.

Migrating from WP User Avatar to Basic User Avatars

Today we released version 1.0.5 of Basic User Avatars. This version added a feature to automatically convert avatars formerly loaded through the WP User Avatar plugin to the Basic User Avatars format. This means that you can disable WP User Avatar, activate Basic User Avatars, and have a seamless transition for existing avatars in your site. Be sure to update any avatar upload form that used the [avatar_upload] shortcode to use our shortcode: [basic-user-avatars].

Digging into the Code

Some of the developers and product folks reading this might be interested in the thought process behind how we decided to code the migration. At first we built a system that checked the user meta table to see if the WP User Avatar plugin had been used before. If so, we displayed a notification with a link to begin a migration process that loaded the avatar data from user meta in the old format and then saved it into the format used by Basic User Avatars.

This worked well, but when we tested it out on our staging site with over 100k users, the migration was slow. We were working on ways to increase the performance and reliability of the migration, when we realized (really it was our Lead Developer David Parker) that instead of migrating all avatars at once, we can instead migrate the avatars “on the fly” as they are loaded on the site.

We removed the migration code and instead added some code to our get_avatar filter that looks for WP User Avatar data if no Basic User Avatars data exists. This adds a fraction of a second of compute time the first event that any old format avatar is loaded, but in practice, this shouldn’t impact the perceived performance of the site, while still making sure the avatars that matter are updated.

This is a useful pattern that can be applied in any situation where you need to convert data from one format to another. WordPress does something similar when it generates resized versions of images on the fly. We do something similar with the license keys for PMPro members on this site. The pattern can be described as “write a function to get the thing; if the thing doesn’t exist, generate it”.

I hope this post explained some of the history of how we came to maintain the Basic User Avatars plugin, our plans for that plugin, some information about the WP User Avatar update, how to migrate from WPUA to BUA, and some insight into how we coded the migration.

The post Migrate From WP User Avatar to Basic User Avatars appeared first on Stranger Studios.

]]>
Adapting Shape Up for WordPress Teams: A Framework for Intentional Work https://www.strangerstudios.com/shape-up-for-wordpress-teams/ Sat, 28 Oct 2023 20:44:09 +0000 https://www.strangerstudios.com/?p=10242 The Shape Up development methodology is a tried-and-true approach to software development that emphasizes cycles of focused work and reflection. But can Shape Up work for your WordPress Team? If your team is struggling to complete purposeful, high impact projects, while juggling day-to-day tasks and maintenance, Shape Up is a proven option to explore. In (more...)

The post Adapting Shape Up for WordPress Teams: A Framework for Intentional Work appeared first on Stranger Studios.

]]>
The Shape Up development methodology is a tried-and-true approach to software development that emphasizes cycles of focused work and reflection. But can Shape Up work for your WordPress Team?

If your team is struggling to complete purposeful, high impact projects, while juggling day-to-day tasks and maintenance, Shape Up is a proven option to explore.

In a recent conversation between myself and Jason Coleman, we broke down the basics of Shape Up as introduced by Ryan Singer and the team at Basecamp.

Our interview and this article then explore how used an adapted version of Shape Up in our WordPress product teams over the past 3 years.

Banner Image with team desks and words "Shape Up Method For WordPress Teams"

Video Interview: Adapting Shape Up for WordPress Teams

Understanding Shape Up: The Original

Shape Up Book Cover

What is Shape Up?

“Shape Up” is a development methodology introduced by Basecamp, the company behind the popular project management tool of the same name. The methodology is described in a book titled Shape Up: Stop Running in Circles and Ship Work that Matters written by Ryan Singer, one of Basecamp’s product strategists.

The “Shape Up” methodology is Basecamp’s response to challenges they faced with traditional agile and waterfall development methods. It introduces a number of unique principles and practices aimed at helping teams build better products in more focused cycles.

Key Concepts of Shape Up

  • Six-Week Cycles: Work is done in six-week chunks called cycles. Following the cycle is a two-week cooldown period. During cooldown, teams can focus on smaller tasks, bugs, or take a break.
  • Shaping: Before a cycle starts, senior team members shape the work. They define the rough outlines of a solution but don’t go too deep into detailed specs. This is delivered as a “Pitch” at the “Betting Table”.
Example screenshot of a Pitch document at Stranger Studios
  • Bets: Instead of committing to a roadmap of features, the team makes bets on which projects to tackle next. This means they’re betting their time on projects they believe will have the most impact.
  • No Backlogs: Unlike many other methodologies, there’s no perpetual backlog in Shape Up. If something is deemed important, it will be shaped and bet on in a future cycle.
  • Hill Charts: A unique way to represent the progress of a task. Tasks start on the left side of the hill (the unknown) and move right as things become clearer.
  • Circuit Breakers: These are mechanisms to ensure that projects don’t drag on indefinitely. For instance, if a project isn’t showing promising results within the first few weeks, it might be terminated early.
  • Fixed Time, Variable Scope: Instead of trying to cram all the work into the given timeframe, adjust the scope. This way, teams ensure they deliver something meaningful at the end of the cycle, even if it’s not everything that was originally envisioned.
  • Appetite: Before shaping the work, the team decides how much time they want to spend on a particular project. Setting the appetite helps constrain the solution and prevents over-engineering.
  • Rituals: There are specific rituals in the Shape Up process, such as the kick-off at the beginning of each cycle where the teams learn about the projects they’re going to work on.
  • Teams of Three: For many projects, a designer, a programmer, and a tester form a small cross-functional team of three. This ensures a diverse skill set while still keeping the team lean and nimble.

Shape Up emphasizes deep work, meaningful results, and a sustainable development pace.

While it may not fit every company’s needs or culture, many organizations have found value in adopting or adapting some of its principles. I recommend diving deeper by reading the “Shape Up” book, which is free to read on Basecamp’s website.

Read Shape Up online for free here.

How We Adapted Shape Up For WordPress Teams

At its core, Shape Up promotes focused work cycles and intentional breaks.

As our team grew, we struggled to find a system that balanced our team’s time on maintenance and bug scrubs, alongside big picture projects that drove new product features or extensions.

Then Jason found Shape Up. We had a few key team members read and internalize the core Shape Up process over a few weeks of book club-style learning and sharing. Then we tried it.

Now 12 cycles into using Shape Up, we’re confident that the core model plus the following adaptations are worth a shot if your team was suffering similar issues as ours: a desire to ship meaningful, high impact work without burning out.

Here’s a breakdown of how we’ve adapted Shape Up for WordPress teams:

Extended Work Cycles in the Stranger Studios Shape Up method: 7 week long cycle, floating week off, 6 week gap between cycles

Extended Work Cycles

  • Duration: While Shape Up recommends 6-week cycles, we extended ours to 7 weeks.
  • Flexibility: To accommodate holidays and other commitments for our remote team, we integrated a floating week off for each person during the cycle.
  • Longer Intervals Between Cycles: Basecamp’s rhythm is a constant flow of pitching, reviewing, and betting—almost perpetually. For us, the same people doing Shape Up work wear multiple hats, from pitching ideas to executing them. This dual responsibility meant we needed a longer buffer. We extended our “off cycle” to 6 weeks (instead of the usual 2).
Example screenshot of the Work Cycles spreadsheet for Stranger Studios

A More Cautious Shipping Approach

Shape Up has an agile mantra: if something has bugs post-release, simply revert.

This approach doesn’t translate to an open-source software project like Paid Memberships Pro or LifterLMS. When using Shape Up for WordPress teams, you need to do things a little differently.

Once our code is out in the wild, there’s no taking it back. It is super important that we do thorough code reviews before any release.

Our extended off-cycle time enables this review period.

Additionally, we now build phases like “launch project X” into the actual cycle period. While this isn’t necessarily ‘new work’, it does also benefit from intentional time placed on the Work Cycles spreadsheet (schedule).

The Introduction of the “Ideas Meeting”

Before diving into pitch writing, we hold a meeting dedicated to discussing and evaluating any and all ideas. It’s a filter, ensuring we invest our energies only in concepts with potential.

There are two main benefits of the addition of an Ideas Meeting:

  • Efficiency: Given our team’s size, drafting a pitch could be a large investment of time and resources. The Ideas Meeting helps us sidestep pitches that might not see the light of day.
  • Guidance: People from different teams and with varying degrees of experience with the company attend the meeting. This brainstorming session aides newer members in understanding the company’s priorities and refining their pitches, while bringing fresh perspectives to the people who’ve been here the longest.

The way we adapted Shape Up for WordPress teams helps the system fit into our work culture. The core method gave us a much needed structure, and the adaptations lead to more flexibility and creativity—key drivers of why Shape Up has been such a success.

Example screenshot of the Ideas spreadsheet for Stranger Studios

Post Mortems in the Shape Up Process

Our Post Mortems serve as a conclusion to specific cycle work projects, since we rarely launch projects within the cycle itself.

We needed a way to leave the completed work documented for our future selves: to understand what was left undone, and decide on the next steps.

Key Points of Our Post-Mortem Process

  • Summarizing Completed Work: We start by outlining what was accomplished during the cycle, reiterating the major tasks completed based on what was initially proposed in the pitch.
  • Identifying Unfinished Tasks: We provide clarity on what’s unfinished by listing out any significant tasks we thought we would finish but couldn’t.
  • Deciding on Next Steps: We make a clear plan for the future, deciding if the project needs a few more days of work, if it needs a new pitch, or if we realized the project is larger than anticipated and needs to be reevaluated.

This process serves as a conclusion to a project in cycle. Post Mortems signal that it’s ok to put the pencils down and shift focus to the next cycle project or to take a much needed break.

The Post Mortem addresses a person’s internal struggle with leaving tasks incomplete by providing a sense of closure. A way to file away unfinished business for later review.

By adopting this practice, we’ve seen improvements in both restarting projects as well as team morale. The structure helps to clear away lingering thoughts about unfinished work and ensures that we are always moving forward.

Shape Up: Adapted for WordPress teams - Extended Work Cycles, Cautious Shipping Approach, Introduction of Ideas Meeting, End of Project
Post-Mortem

Custom Templates: Shape Up for WordPress Teams

We put together a Google Drive folder with a few key templates we use for this adapted Shape Up method. Follow the link below to duplicate this folder for your own workspace.

The folder includes templates for:

  • Ideas Sheet: A Google Sheet for tracking the ideas you will pitch, the pitch owner, and teamwide voting to help the writer understand how meaningful or popular the idea is.
  • Pitch Template: A Google Doc template for writing a pitch.
  • Work Cycle Calendar: A Google Sheet for quarterly work cycle scheduling across all participating team members.
  • Post Mortem Template: A Google Doc template for writing a Post Mortem.

The Basics Always Apply: Product Teams, Agencies, Freelancers, and Solopreneurs

This methodology works for more than just software development. Early in 2023, we introduced this adapted methodology to the team at LifterLMS. For both product development and sales/marketing, the results were transformative.

Their team experienced renewed excitement for projects, started shipping more meaningful work, and are now operating with more targeted initiatives across all teams.

The structure offered by this adapted Shape Up system also enabled a more cohesive interaction between developers and key stakeholders—without requiring everyone to be a developer.

We’ve realized that Shape Up’s core principles and how we’ve adapted the system is deeply versatile. Whether you’re an agency on retainer, a freelancer, or a solitary membership site creator, you can benefit from its structured approach.

By setting clear priorities, defining deliverables, and establishing boundaries for what to tackle (and what to set aside), Shape Up provides a roadmap to efficient, meaningful work

Let’s Connect About Shape Up for WordPress Teams

Interested in adapting this methodology for your team or a solo endeavor? Jason and I are here to collaborate. 

Whether through a Slack chat or something deeper, we’d love an opportunity to continue to refine and adapt Shape Up for diverse environments like yours.

At its heart, Shape Up is about purposeful work. And that’s a core value Jason and I both hold tightly to—in our work life and personally.

The post Adapting Shape Up for WordPress Teams: A Framework for Intentional Work appeared first on Stranger Studios.

]]>
Free Template Download: Budgeting and Forecasting for WordPress Products https://www.strangerstudios.com/budget-forecast-wordpress/ Wed, 16 Nov 2022 15:45:42 +0000 https://www.strangerstudios.com/?p=10041 Join our mailing list using the form below to grab access to a Google Drive folder with:

The post Free Template Download: Budgeting and Forecasting for WordPress Products appeared first on Stranger Studios.

]]>

Join our mailing list using the form below to grab access to a Google Drive folder with:

  • Forecast, Balance Sheet, and Budget Template you can copy and use for your business.
  • Household Income and Expenses Template for your personal life, including a monthly and annual income statement, plus a personal Balance Sheet for tracking your total assets (net worth).
  • Jason’s presentation from WordCamp Orlando 2019 which includes the slides plus four unique worksheets for goal setting and forecasting based on your business type (product, consulting, SaaS, general)
Screenshot of the forecast template for free download

The post Free Template Download: Budgeting and Forecasting for WordPress Products appeared first on Stranger Studios.

]]>
Product Founder Talks: The Update Billing Page and Switching Payment Gateways https://www.strangerstudios.com/founder-talk-switching-payment-gateway/ Mon, 31 Jan 2022 18:01:43 +0000 https://www.strangerstudios.com/?p=9759 We’re writing an article on how to switch payment gateways for Paid Memberships Pro. In the article, we want to help site owners with the best practice way to get old members moved to the new gateway. One option is to cancel everyone and ask that they buy again through the new portal. Some sites, (more...)

The post Product Founder Talks: The Update Billing Page and Switching Payment Gateways appeared first on Stranger Studios.

]]>
We’re writing an article on how to switch payment gateways for Paid Memberships Pro. In the article, we want to help site owners with the best practice way to get old members moved to the new gateway. One option is to cancel everyone and ask that they buy again through the new portal. Some sites, though, want to slowly migrate people to the new gateway only when their payment method fails on the old one.

In this video, Jason and Kim chat through a feature request for the Paid Memberships Pro plugin to better handle billing method and subscription updates when a membership site has switched payment gateways.

[00:00:00] Kim Coleman: We are writing an article about switching payment gateways, and a part of this article talks about the membership billing page, which is the page in our plugin where a member would get an email saying ” your payment method on file is expiring” or “your payment method failed.” Update your billing information.

So when those two events happen, an email is sent. A link is included to the membership billing page. But there is a edge case where the payment gateway for the live site may be different then the payment gateway that was used when the subscription was originally created. Right.

The article outline I wrote says that you should put a note on this page to say that “We are using a different payment gateway. If you see a notice that your billing information cannot be updated, you should complete a new checkout. And Patrick and Mandy have asked whether this could be something automatically handled in the plugin.

So I am interviewing Jason. Yeah, slash in public talking through how we as founders would think about this as a feature and the implications.

[00:01:10] Jason Coleman: It might help to think about what’s ideal. Pretend we could snap our fingers and make it work, in an ideal world.

That message we show this feels like a catch all. Oh, I’m confused. Just show them the message that it can’t be updated. Right, right.

[00:01:24] Kim Coleman: We’re looking at here.

Screenshot of the Billing Information page when a payment method cannot be updated.

[00:01:25] Jason Coleman: Your billing information cannot be updated at that time. So we, we’re not making a judgment when we do that. But what would you want it to do? You would want it to just work and you can keep your payment settings in the background for Authorize.net while you have Stripe settings. And so when you’re on this page, we theoretically should be able to tell the subscription associated with this user is linked to another gateway. Update them through the other gateway. As long as we have API information, credentials and things.

I think an ideal world. Completely ideal world. Is that. It would come to this page, allow you to update billing information. And automatically create a new subscription at the preferred default site gateway.

You don’t want people on Authorize.net anymore. What might come up in that post, what I recommend a lot of times is: cancel everyone’s subscription, send them an email, tell them that you have a new payment gateway, give them a month free and have them switch over.

Everyone says, oh, we can’t do that. Not, everyone’s going to sign back up, which is totally true.

[00:02:24] Kim Coleman: There’s a lot of fear there. For people who’ve built up a longstanding number of people they’re making the switch for the new payment gateway for who knows what reason?

[00:02:34] Jason Coleman: Saying, Hey, just cancel all the subscriptions, force them to switch over now. We know they’re going to lose some subscribers. So what you want to do is if someone’s dangling onto the old’s subscription, let it go. But when they check out again, give them a new subscription. If their billing fails and we’re asking them in the update, ideally don’t have them update the old subscription, have them check out again for the new one.

[00:02:54] Kim Coleman: So intercept the “your payment couldn’t be processed” email, and instead of sending that send a new type of message. Or send a link to the new checkout page. Filter the contents of the “payment method failed, click here to update your billing information”, to actually be like a checkout.

At that point they’re already in this dunning stage, they’re already expired. So them completing a new checkout at that point with the new gateway, isn’t bad. It’s a good thing.

[00:03:21] Jason Coleman: We could redirect them. In some cases, when you say “update billing” and we can’t, let’s redirect them to the checkout page.

[00:03:29] Kim Coleman: For the same level.

[00:03:31] Jason Coleman: The problem is that update billing. It says Hey, just update the credit card and leave the subscription alone. Checkout has all this stuff: is it the old price then if you check out again and it’s going to by default be the new price, correct. And maybe they’re supposed to be locked into their old pricing, or when you check out again, proration is going to come into account, it’s going to try so hard to know what people intend.

When they’re checking out. Oftentimes you could get five smart humans and three out of five of them would agree on what’s supposed to happen to this user when they check out.

[00:04:01] Kim Coleman: So Jason has established that this is not a problem that five smart humans will have consensus about. Oh, yeah.

We could disable the payment method. Expiring soon email, we could disable the payment method failed.

What helps is what you said, if we just let them, the payment failed, let their subscription cancel. And then they get the Hey, your subscription cancelled. Tabula rasa.

Because at that point, a new checkout isn’t a loss so don’t send the payment information expiring soon message when you will be taking them to a page that looks like this. Yeah, that looks like, okay, well, you can’t actually do anything about this.

[00:04:41] Jason Coleman: The thing is we don’t the software doesn’t know what’s an old gateway. It just knows it’s not the main one. Sometimes you have multiple gateway options. There’s onsite and offsite. You usually only want one on-site.

[00:04:52] Kim Coleman: If you checked out for an onsite type payment method, that was credit card based, and the current gateway…

[00:04:59] Jason Coleman: If it was a credit card and it’s not the main gateway, you should not send the update billing.

[00:05:06] Kim Coleman: And not only not send the update billing information email, but also don’t show the link to the update billing page from the membership account page people and perhaps improve the message here.

[00:05:18] Jason Coleman: Sometimes we get clever and we hide this because we know it’s not supposed to be there and then people are like, wait, I know there was an update billing there before, and now it’s not there. Where did it go? Yeah. And then that’s why it’s good to have it, even though it’s not functional and then show a message saying: this isn’t functional for this reason.

There’s a really weird edge case too with Stripe this a thing where in the API you say the app that is making this subscription is Paid Memberships Pro. That’s a new feature. I don’t know exactly when they added it. We started using it in December. One of our customers had an issue where now Stripe, when they’re trying to update billing, we say, Hey Paid Memberships Pro is updating the subscription and they say, oh, no, no, no. Some third party user management system created the subscription to start with. We help them import their subscriptions into PMPro. But now you try to update the billing and Stripe says, I’m not going to let you update that because that’s not the same application.

Why did it start happening now when we start passing up ID, but also it may be, it’s just Stripe decided to implement that implement as a feature. Yeah, of course, why let different apps edit the subscription, but the app. Is, this is like a tangent, but it’s related that there’s other reasons that the update billing page fails. This is what we’re trying to, cause this is a similar thing we’re saying like, Hey, you know, which customer signed up on the old platform because it was before a certain date. Show those customers a message. Hey, if you were imported over from the old system, you need to checkout instead of update billing.

Some way to detect and filter or let site owners in a setting or code say this is an old gateway.

And if it’s an old gateway and it used a credit card. An onsite versus offsite is just a soft designation on the gateway. There’s not a piece of code saying this is onsite. No. But we can kind of assume. Hey, if you’re switching from Braintree to Stripe, you don’t want to have those as two options at the same time.

Maybe different countries have. Sometimes different country, like Stripe doesn’t support this so I use onsite.

[00:07:08] Kim Coleman: The longest road to resolving this, which is a medium level of goodness is like you said, if we still know that the gateway credentials are present in the database. Try it right. Yeah, I think this is Authorize.net. We’re currently on Stripe as our active gateway, why not try it.

[00:07:28] Jason Coleman: We want people to probably check out again instead though so they get on the new system. The site owners should make that decision. So then in our article about switching gateways like, here’s a bit of custom code or here’s the hidden setting you gotta go click. I don’t want people using this gateway anymore. Yeah.

[00:07:44] Kim Coleman: That could be as simple as erase the gateway credentials.

[00:07:48] Jason Coleman: It is though. For recurring orders. It depends on the gateway. As soon as we get a message saying this is PayPal and a thousand dollars was charged, the first thing the gateway IPN and webhook handlers does is: is this real? And it sends a message back to Stripe. It says: this is real. You have to have the APIs to do that. So you can’t get rid of the API credentials. You want to have it, but. But we do want to detect that situation.

Hey, don’t let them check out again or don’t let them update, but instead of update billing, switch to checkout. So I think that’s it. This is probably why we didn’t code it. It’s not even worth programming, find the old gateway API and update the billing because people probably don’t want to do that anyway.

So instead we should detect that situation and get them to check out again after their membership expired.

[00:08:28] Kim Coleman: I also think, because we don’t already support that, by adding that back in, it would cause more confusion. This code has been live for a long time. So anyone who has done a gateway switch doesn’t expect that billing information can be updated. So if we add that now that’s going back on what decision we already made. People expect that it doesn’t work or they’ve experienced that it doesn’t work and our goal is to improve the user experience. And build upon a decision we already made.

[00:08:56] Jason Coleman: When people try to update billing the redirect to checkout and have them checkout, we should list all the problems with that potential problems and then try to make a list of solve those cause those are things that we kind of want to solve anyway. It’s hard. Some of that needs like more direction from the site. What do you intend in this situation? Like the ‘legacy’ are people locked in or not could be somehow. There’s a lot of these cases where like importing from another site. Changing your gateway. Doing some other kind of system change. Changing from Mailchimp to ConvertKit. It doesn’t just work anymore. You know, like the system is confused and it’s handling two different sets of users. The default decision isn’t always clear.

But the big one would be if you have a recurring level and you check out early for a recurring people kind of intend figure out when the next payment date was and then extend their membership from that date. And keep it going. And I feel like we have code that does that, or in certain situations we get it right. And some other situations, we get it wrong.

[00:09:49] Kim Coleman: Set up their subscription, charge them $0 today and set the delay for the sub to start on the next payment date.

[00:09:58] Jason Coleman: We could at least probably build a gist that says, if we do a redirect to checkout, redirect to checkout, and it’s going to kind of break, it’s not going to work how people really want it. And they’ll be like, Hey, it doesn’t really work. We could maybe that redirect to checkout could set a parameter or a flag saying this is a special old user checking out, from an old gateway to a new gateway and this custom code could check for that flag and in this situation what I want to do is find out what they paid. Update the pricing. Yeah. And make sure that we start on their old payment date.

Subs table fixes this.

[00:10:29] Kim Coleman: It makes it easier, but it doesn’t fix it.

[00:10:30] Jason Coleman: We don’t keep track of the next payment date. We either ask the gateway: what was the next payment date? Or we guess. Well, you checked out on the fifth, there’s an order and you said it was monthly, so I’m assuming the next one’s coming on the fifth of next month. But it’s not always the case. Maybe you tweak the subscription at the gateway, or maybe there’s some kind of custom trial built in, or maybe your IPN handler wasn’t really working so we haven’t been getting your orders, but then you fixed it and now we’re getting orders and some of them were backlogged, so there’s gaps.

We can’t guess it correctly. The subs table says we’re going to actually ask the gateway and keep it in sync. And we’ll always have a better guest basically. I mean, there’s still will be. You know, ways to fool it. But if we know what their next payment date is, then you can reliably say, oh, give them a trial until the next payment date. It’s a thing that you can write in code and know with 99% certainty, not 80% certainty, that it’s actually going to work how you want it to.

That’s why we don’t do this.

[00:11:27] Kim Coleman: There’s no straightforward answer. I like the idea of not sending the “update your payment method” email. We could also, if that flag was set, ignore old gateways, we could also cancel immediately.

[00:11:42] Jason Coleman: If a payment fails, cancel and have them check out again as a decent option for a lot of sites. Sometimes it’s a little aggressive. There’s a reason we have uptake billing code, but, it kind of simplifies. They fail the payment, I’m gonna assume they’re not in. But if you do that only for certain gateways, you’re kind of minimizing the downside of being that aggressive with your canceling.

[00:11:59] Kim Coleman: But isn’t that the same as just setting everyone’s accounts to cancel on the day, they would have re-processed.

[00:12:06] Jason Coleman: But some some people will pay for eight months and then get cancelled. It won’t just get canceled at once.

[00:12:12] Kim Coleman: We’re just gonna keep taking your money until your credit card is about to expire. We can’t take anymore. And then we can’t take your money anymore so we’ll stop.

[00:12:18] Jason Coleman: We need permission again to check out.

[00:12:20] Kim Coleman: That’s not bad.

[00:12:21] Jason Coleman: I think we could write some things down to get done and… we probably can detect that situation, disable the billing failed email. Then their subscription will be canceled and then will get caught by the “Hey, your subscription cancelled. You want to sign back up?

[00:12:35] Kim Coleman: So the code in core would say: This is an old gateway. The payment failed once. Expire and cancel immediately.

[00:12:44] Jason Coleman: Probably make it cancel too. And then they’ll get to cancellled the email.

So the only case actually is the payment failed. So it usually is on the date their subscriptions should be over if the payment failed. We don’t send them the update billing. We cancel them immediately. They get a ” your membership was canceled.” They’re going to be redirected to check out again. And then maybe they want to get the old pricing. Here’s a list of articles about how to program that. We have code like this. There’s a grace period. Let them have the old price. But the thing is that has to be custom code because it has no idea how your website set up. It doesn’t know how many membership levels you have or what the pricing was or.

[00:13:17] Kim Coleman: Thanks for talking this through with me. I hope it illustrates to people who listen that product decisions are complicated when you have no control over how people are using your system and how long they’ve been using it. And that you need to account for obvious use cases, but also edge cases. Great. Thanks.

The post Product Founder Talks: The Update Billing Page and Switching Payment Gateways appeared first on Stranger Studios.

]]>
12 Tips For Planning a Remote Team Retreat https://www.strangerstudios.com/remote-team-retreat-planning/ Wed, 13 Oct 2021 17:48:00 +0000 https://www.strangerstudios.com/?p=9631 At some point (hopefully sooner than later), teams will be able to resume large-scale, in-person retreats and meetups. We’ve learned a thing or two about coordinating a remote team retreat and want to share with other people considering an event for their team. No matter the size, budget, or location, these tips should help you (more...)

The post 12 Tips For Planning a Remote Team Retreat appeared first on Stranger Studios.

]]>
At some point (hopefully sooner than later), teams will be able to resume large-scale, in-person retreats and meetups. We’ve learned a thing or two about coordinating a remote team retreat and want to share with other people considering an event for their team.

No matter the size, budget, or location, these tips should help you plan your event.

Banner for Planning a Remote Team Trip or Retreat

Stranger Studios had an almost full team meetup in September 2019 and had hoped to repeat that event in 2021. Safety, personal comfort, and travel restrictions may have kept us from planning the second annual team retreat, but we were able to do a smaller meetup with two new people that joined our team in 2021.

In no particular order, here are some thoughts to get you going as you design, plan, schedule, run, and reflect on in-person events for remote teams.

12 Tips For Planning a Remote Team Retreat

  1. Plan well in advance.
    While the thought of having a remote team retreat was always in the back of our minds, we seriously started planning for our first retreat about one year in advance. We began saving for the event and loosely considering destinations. Map the travel routes for your entire team. If possible you want to avoid picking a location where half of your team needs to spend 20 hours flying and the other half only needs to drive 2 hours.

    About half our team lives in South Africa so there were travel requirements to get in order so that as many of our team members could attend as possible.
    • Start researching what it takes for your team members to get to the country where the retreat will be held.
    • Gauge the difficulty of acquiring proper travel documents for each possible destination.
    • Inform team members well in advance of the location you are hoping to host the event at so that they, too, can support researching travel requirements, travel insurance, and keep their family informed of how the travel impacts them. 
  2. Cover all costs.
    As a business, you are responsible for covering the total cost of travel. This includes lots of expected things like flights, accommodations, and catering. It also includes visa applications, travel or medical insurance, per diems, and transportation to the airport for departure and arrival. Let every team member know you are covering the full cost of the trip as early as possible. This gives each team member the best chance to participate and reduces travel or financial anxiety.
  3. Include time for work and, more importantly, for play.
    A remote team retreat shouldn’t be a conference. Include time for team-building outings. Share personal origin stories and bridge cultural gaps (food is a great way to share culture). If you’re planning a team outing, consider an escape room, arcade, fun class, or a guided tour. Escape rooms are especially awesome for smaller groups (less than 10 people). Reflect on what you know about your team—their interests, physical activity level, and personal “comfort-zones”—for the best-fit type of outing. HelpScout has a helpful list of retreat activity ideas if you need inspiration.
  4. Plan for day-to-day responsibilities.
    Your business’ normal daily tasks and duties need to continue. What will you do about high priority work during the retreat? ​​If your entire team is attending the retreat, address how you will handle these tasks. Have all team members get their projects in shape before the event. Have them plan as if they were on a true vacation and not able to check in. You don’t want to disappoint customers, lose business, or stall any ongoing projects while the direct team is busy.
  5. Set expectations, especially if you do not have any.
    Ask each team member or respective team leader what they would like to achieve during the time together. You can opt for a loose schedule or a more detailed event full of presentations. Some of the best events I have attended have a singular focus: building relationships. But above all else, be ready to let the schedule evolve.
  6. Reflect on success and share future goals.
    Encourage your business founders to share a presentation on all the awesome work the team has accomplished in recent months. Then, share a roadmap of future goals to get the team involved in shaping and tackling new challenges. Collaborative goal-setting helps everyone hang on to the energy of the team retreat once they to remote work. 
  7. Super large team? Consider smaller group meetups, too.
    It may not be possible to run a full team retreat every year or two, especially for large teams of 50 people or more. Your teams  Encourage cross-team projects and breakout sessions
  8. Don’t forget to include chill time in the program.
    Everyone has a different energy level and personality. Some people are introverted and become heavily exhausted after a few hours of in-person interaction. As we are all working remote, you as the leader may not realize how each person uses their time throughout the day. Be aware of each person’s need to rest and recharge. 
  9. Use anonymous forms to gather preferences and feedback.
    We used a Google Form to request anonymous information from the team before and after the event. These responses helped us meet every team member’s needs in our planning and schedule design. Check out Zapier’s list of post-retreat feedback questions as a starting point. Feedback gathered after the event helps us do better in the future—it identifies specific areas we could improve and highlights what we did well. You can also consider one-on-one interviews with voluntary team members or specific leadership to gather deeper feedback.
  10. People love good food, but food preferences vary.
    Food could be the most important logistic of a remote team retreat to organize well. People are generally flexible with unexpected changes in the program and content of the retreat. But with limited availability to their own transportation, kitchens, and food choices, bad food planning can be a total morale killer. Plus, you aren’t only planning meals. You need to plan snacks and drinks, too. And while we’re on the topic of drinks—do you plan to supply alcoholic drinks? Rely on your survey data and “expectation communication” from the team leadership as you consider meals, snacks, and drinks for your team.
  11. Spouses? Kids? What to do.
    This is a tough one—and I do not have an easy answer for whether you should or should not extend an invitation to outside guests. In some cases, opening the retreat up to partners and children is an amazing gesture. You’ll be giving their family a chance to see new parts of the world, whether before or after the retreat, as well as get to know your team on a deeper level.
  12. Be a moderator.
    In-person conversations, especially during chill time and “after hours” can be more casual than you and fellow leaders are used to. Remember that this is still a work function. Consider sharing a code of conduct in advance of the event. You can create your own code or borrow from the WordCamp Code of Conduct. When conversations steer into territory that raises eyebrows, be the moderator. Step in and guide the conversation back to safe territory, especially if you feel that some team members recognize an awkward situation but are not speaking up. Push through the awkwardness of coming across as a “parent”—it’s your one job to ensure everyone feels comfortable.

There are an almost crippling number of details to consider before, during, and after your retreat. If you cannot plan the event on your own, there are businesses that offer complete team retreat packages—they handle all the plans and some even offer on-site retreat facilitation. We opted to plan our own events so far, and I think that was the right choice for the size team we have. But who knows what I will do next time around.

Ready to go for it? Start by clarifying your goal.

If I have to pick one starting place from this list, it’s goal-setting. Your goal is a common thread in every decision you make, especially as you justify costs (because it will not be cheap).

No two retreats have the exact same exact blueprint. Have fun and let the retreat be an extension of who you are as a remote team.

The post 12 Tips For Planning a Remote Team Retreat appeared first on Stranger Studios.

]]>
Running Experiments in a Recurring Subscription Business https://www.strangerstudios.com/running-business-experiments/ Wed, 22 Sep 2021 17:55:27 +0000 https://www.strangerstudios.com/?p=9463 Experiments have the power to make a huge difference in how you run a subscription business. With that power comes the flip side: the potential to damage your brand, compel you to try unethical things, and maybe even lose you a lot of money. This article explains experimentation and shares the key experiments I’ve run (more...)

The post Running Experiments in a Recurring Subscription Business appeared first on Stranger Studios.

]]>
Experiments have the power to make a huge difference in how you run a subscription business. With that power comes the flip side: the potential to damage your brand, compel you to try unethical things, and maybe even lose you a lot of money.

This article explains experimentation and shares the key experiments I’ve run over the last 10 years leading Paid Memberships Pro. My goal is to help you identify one experiment to run in the next 30 days for your subscription website.

Banner for the Art and Science of Running Business Experiments

This article is a companion to my presentation for the 2021 WPMRR Virtual Summit on Wednesday, September 22. Download the presentation »

I’ve been running experiments for a long time.

For context, I do personally run a recurring subscription business. And my product is a platform for WordPress that helps people start recurring subscription businesses. So my knowledge is informed through personal experiences as well as things I’ve observed through my customers.

But first, know that this is not a guide on the tools that help you run business experiments.

Experimentation doesn’t have to be a formal process. So don’t focus on running a perfect experiment.

Each experiment needs different reporting and analysis: some are more robust, while others can be “quick and dirty”.

If you’re just getting started, don’t overwhelm yourself and try to control everything. Yes, make sure you aren’t pulling too many levers and tweaking too many things—some factors must be in the “control group” if you want to get all scientific.

Just focus on running a somewhat controlled experiment.

So, what is an experiment?

100% of decisions are made without 100% perfect information. So when you think: “What is an experiment?”, think “an experiment is anything that tests a hypothesis and gives me data to help make decisions”.

Put differently, experiments test your assumptions to help you make better decisions.

As business owners, we are navigating the world of information overload, with ideas streaming in from a bunch of places.

Sources of information that help business owners make decisions
  • user, customer, and team feedback
  • advice from other business leaders
  • something you heard on a podcast once
  • stuff you observe about your competitors
  • your personal ethics, knowledge, experiences, and, a highly underrated aspect, gut instinct
  • …plus some deep hopefulness and finger crossing (or holding thumbs if you live in South Africa)

Here’s an example of how you might be making decisions.

  1. Identify something you want to change
  2. Gather information from all of these inputs
  3. Informally or formally rank their importance
  4. Make a few educated guesses on what to do
  5. Choose one and decide do it

In each step of that process you could probably identify over 100 things that you’ve assumed. And you know what people say about assumptions 👀

When you add experiments to your business, you insert an activity between steps 4 and 5. Before you reach a final decision, you test the choice. If the experiment gives you the right confirmation you need to make a change with confidence, you can make the change and move on. Or, you run another experiment.

Visualize how business owners make decisions and where experiments fit in

Experiment: Simplifying Prices

Here’s a personal story, one of many I’m going to share. It focused on pricing and the renewal rate for our most popular membership level, Plus.

We’ve been changing our prices every few years since we started Paid Memberships Pro in 2011. Since then, we always front-loaded the initial year of membership, and lowered renewal rates for years 2, 3, 4 and so on. As the pricing settled into something that felt right, we offered our most popular membership level at $297 for the first year and $197 for every year following. And we operated that way for a couple years.

The problem was: people were confused. The levels page, the checkout page, their membership account page all said $197 per year. We tried to “get smart” and never show a logged in user the “first year” price, and instead updated it everywhere to just show what their next renewal price would be.

This meant that people would buy Plus, somehow end up back on the pricing page and see the price $197. Then they would email me and say “Hey, you, I paid $297 but now it says $197. I want my $100 back!”

By front-loading our pricing, we had made it unclear what the user would be charged, when. 

And what’s worse is that we were possibly leaving money on the table.

In May 2019, we ran a month-long experiment where we just changed the pricing to be $297 per year, every year, no discount on renewal. I literally edited the membership level, changed the annual recurring rate to $297, and hit save.

Guess what happened? There was no impact on conversions. So the “experiment” became the new price. 

Revenue effect of removing the front-loaded pricing

The chart here shows an example of 4 years of revenue for the old and new pricing model. This assumes 2,200 new members per year (we get more signups, now, but that was closer to our 2019 number) and a 50% retention rate (ours is a little better).

And then we waited, again. We waited until May 2020 to see how this higher price would affect retention rates.

They stayed the same.

We are now getting more value from our users—making 33% more revenue for every renewal payment.

The data from this experiment and how we changed pricing adds an additional $192,500 in revenue for the three years following the change.

PLUS the change reduced confusion for our customers and reduced admin overhead. No more “what the heck?” emails.

Front-loading is a valid pricing strategy, and if we’re honest, our product really does deliver more value in the first few months.

If you’re thinking about adjusting pricing, you can also consider testing the opposite. Say you’re charging $50 per month for your membership, but you find customers canceling after two to three months. Consider instead charging $150 upfront and $20 per month after that. The $150 will match the lifetime value you were getting before. And while raising prices means fewer sales, you’ll often make more money overall. Experiment to find the specific numbers that work for you. 

So what kinds of things can you experiment on in a subscription business? 

The most obvious place people look to experiment is price. Price experiments give you endless opportunities to test assumptions and tweak your model. And, most importantly, help you grow revenue.

I just shared the experiment on renewal pricing. We’ve done a few other price experiments over the years including faking a price increase.

In August 2017 we decided it was time to raise prices. Over time our product was getting a lot better. We had more premium Add Ons. Our support was faster and more technical. We were trying to grow our team and hire more dedicated developers and pre-sales team members. Not to mention that we were the least expensive (ahem, and best) option among our competitors in the WordPress space.

Example of how we faked a price increase to test the effect on conversions

So before we increased the price of our Plus level from $197 to $297, we tested the price increase. We ran an A/B test. Half of our visitors saw the $297 price everywhere on the website except the checkout page. At checkout, we truly charged this half of users $197 and displayed a message about a secret “Fall sale”.

We weren’t testing how many people would complete checkout at the higher price. We were experimenting on how a higher price changed the number of people clicking through to our checkout page from the pricing page.

This isn’t a perfect test. But for an imperfect test it gave us a tiny bit of validation that changing prices wouldn’t drastically reduce the number of people hitting the checkout page. So we confidently raised prices, still always honoring historic lower prices to old members and anyone that came and asked.

There is so much you can experiment on with pricing. 

But don’t stop here! There are so many other areas you can experiment with. Things like 

  • Sales, discounts, and promotions
  • Your sales funnel, marketing strategies, and site layout
  • Testing Products or Services
  • How you offer support, and even
  • How you operate and grow your Team

Experiment: Homepage CTA—where to?

Here’s a marketing experiment we ran in 2016 for our homepage “call to action” (CTA).

We have this firm belief that a homepage should do one thing. Especially in a membership type product where the goal is sign ups. 

Like most homepages, our main banner shows a video, short blurb, and button. In 2016, we experimented with where our CTA button linked to.

We tried three options:

  1. a “learn more” button where users were taken to a features page,
  2. a “view pricing” button where users were taken to our levels comparison page, and finally
  3. a “get started now” button that included the price of membership and linked directly to checkout for our most popular membership level
Homepage CTA options tested during the experiment

We ran this experiment with some custom A/B testing code. We also added a few Goals to our Google Analytics account so that we could visualize the funnel of users that completed checkout, what pages they visited prior, and where they disappeared.

Through that experiment, we learned that the more users we push to our Plus membership checkout page, the more users we can convert. After that experiment, we left “Get Started Now” as the only homepage CTA button. 

Then just a few days before I was preparing this content, Jason gathered new data about our goal. We realized it’s time to run a new experiment on that homepage CTA. Which leads me right into the next thing I want to say about business experiments…

Test what is working, too.

Continuous Improvement Process: Plan > Do > Check > Act

Don’t just test what you are struggling with. You also have to test what you believe is working. Even the things that are working really, really well.

If you haven’t seen it, this concept is kind of like the Continuous Improvement Process

To oversimplify, continuous improvement in business is a mindset that everything can and should be improved upon. You and your team readily embrace new ideas, hypothesize, run tests, reflect, and make meaningful changes.

Always be testing. Be on the lookout for opportunities to run tests when you’re making changes to your website or product, or anything else. If you are making changes, think “is this decision based entirely on my assumptions?” And if the answer is “yes”, you can either trust your instinct or go get some information out of a new experiment.

I want to share another experiment—this one is an active experiment so come find me in August 2022 if you want to see how it went. This is an experiment around sales, discounts, and promotions.

Experiment: Sales—Discount First Year Only

We run a few sales every year, primarily timed to boost revenue in slower months.

I talked earlier about how we ran an experiment and decided to simplify pricing. Everyone pays the same price every year, no front-loading and no renewal discounts. In this experiment, we decided to “back-load” our price. Let me explain.

Example of what the renewal discount pricing experiment is testing

Every sale we have ever run was the same: your discount is locked in for the life of your membership. We would offer a $100 discount on the first year, and every year following.

$197 per year if you bought during the sale.

Then we hired Patrick and his jaw quite literally dropped. I’m serious. He couldn’t believe we were offering lifetime discounts with every sale. It was unheard of in his business experience and he strongly felt that we were leaving money on the table. Lots of money. 

In an average week long sale, we have around 100 new member signups. Discounting renewals was leaving almost $10,000 on the table over the next few years, assuming a 50% retention rate. Multiply this by 4 sales per year and that pile of money of the table grows pretty fast.

Chart of projected revenue growth by not offering renewing discounts

So we had a sale at the end of July and changed that policy. We let our team challenge our assumptions.

  • I assumed people would get angry that the discount wasn’t recurring. It was the wrong assumption. No one emailed us after their purchase and asked why the price is $100 more next year.
  • I assumed it would be hard to write the sales copy that made it clear what people were paying, when, and for how much. Wrong again. We had the discounted price on display, the line below it said “then, $297/yr.” and we even put an additional sentence about the discount on first year only at the end of the form. Their confirmation emails clearly show that the recurring membership is the full price. I wasn’t trying to be sneaky, so it was easy to make this information all clear 
  • This sale performed better than most seasonal sales we’ve run in the past. I think it’s safe to assume that removing a recurring discount didn’t noticeably impact conversions.
  • I still have a small assumption that people will reach out next year when they renew and ask to pay less. While I won’t know whether my assumption is correct for many months, I do know that if they ask, I’ll give them a discount. At a $197 renewal, we are still profitable.

Are business experiments safe?

Ok, I recognize that this is a vague question. The answer is, of course, some are and some are not. 

I want to talk about “experimenting safely” because if you screw this up you can do some permanent damage to your brand. You can damage personal and business relationships within your team, with your customers, and with your peers.

You could also lose money. So you have to think of a business experiment as an investment.

I’m going to asterisk and footnote this whole section, though, for the very early days of your subscription product. While you should never do anything outright illegal, in the launch phase, it is ok to experiment and possibly upset the small number of early buyers.

We had to pivot our pricing in the first year. I think our first pricing for Paid Memberships Pro was $10/month. That was the absolutely wrong price. People were getting loads of help then cancelling in month 3. We had to move these people into annual plans and remove that payment option.

So with safety in mind, remember that a healthy experiment:

  • Has a start and end. Experiments should not run forever, so when you set out to run the test, define what “done” looks like. This could be a set time frame, a count of new signups, a number of total work hours elapsed, or monetary value reached.
  • Starts with a hypothesis and ends with reflection. Before you begin an experiment, take time to gather notes on “what you think will happen” and “why you think that will happen. Then, after the experiment is all wrapped up, sit down and reflect. You need to set time aside to work on finding and interpreting the data as well as time for internalizing the results. Write it all up in a post mortem and share the notes with your team.
  • Doesn’t create inequity. 
    • If you’re doing a price or promotion experiment, offer the discount to anyone who asks.
    • And, before you run an experiment on price, think about how the change affects existing customers. As much as you might try to avoid it, your paying customers may see a deal and ask for it. As a company, we always match a discount for anyone who asks.
    • If you’re experimenting to raise prices, your existing customers may be concerned that they, too, will have a price bump. We always maintain historic, lower prices for existing customers even through a price increase. There are people paying for our highest tier of membership (now $297 per year) for just $47. Obviously we could force these users to pay the full price or leave. But that’s not the kind of company I want to be.
  • Isn’t illegal, unethical, or dangerous. Again, another broad statement. Avoid experimenting in areas you aren’t ethically comfortable changing. If an experiment tells you to engage in something that doesn’t sit well in your heart, that was a useless experiment.

Why are you running an experiment?

Why are you motivated to bother running an experiment at all? There is notable effort involved in designing, running, and reflecting on the outcome of experiments for your recurring subscription business. Sure, some experiments are very simple. But others require a lot of work. 

So as you choose your first business experiment, think about how the outcome, how that “assumption validation” and new knowledge is going to make a positive contribution:

  • Does the experiment help you make more money—whether through improved customer retention or new signup growth?
  • Will you, your team, or your customers save time with the new and improved strategy?
  • Does the experiment help you spend less money on your product support and development, customer acquisition cost, or content marketing efforts?
  • Is this experiment a way to test an idea? To release an MVP, help you validate that a market exists for a non-existent product?

So what experiment are you going to do first?

At the start of this piece, we set the goal that you’d leave with a single business experiment to run in the next 30 days. To that end, here’s a list of 10 more unique experiment ideas. I hope something in this list both applies to your business and feels like something you can get going in the next 30 days.

  1. Just stop doing a thing you don’t like (within reason). If there’s a part of your business that you dislike doing, is there a way to just stop doing it? Case in point: we turned off blog comments on our PMPro site’s blog because no on enjoyed moderating them (and they needed moderation). Problem solved?
  2. A/B test subject lines (transactional emails, too). Don’t overlook the transactional email your business sends when testing subject lines.
  3. Add a free membership level. Is there something you can section off from your business and offer through a free membership website?
  4. Add or remove the paywall on something popular. Removing a paywall or allowing a limit of free post views is a great approach to letting non-paying members get a taste of your premium stuff.
  5. Offer pre-sales calls or call random customers. We tried it—it was interesting, deeply insightful, and can be really painless to just start trying.
  6. Repurpose Content: Make an eBook from 10 popular premium or free articles. Some paid membership sites are built entirely around delivering content in a better format. For example, a course version of what you’ve already published as standalone blog posts.
  7. Add your phone number or live chat to your website.
  8. Run a different kind of sale. We ran a sale once where we just threw the banner up on our site and didn’t email our list. We were testing how many people would buy the product just from the banner (it was not a good thing and we won’t do that again).
  9. Hire a freelancer, maybe 3 for the same project. If you have a back burner project you just cannot personally make the time for, could you hire someone to do it? Even to get it started?
  10. Take a 7 day vacation or staycation. Everyone benefits from taking a mental and emotional break from their business.

Go experiment!

The post Running Experiments in a Recurring Subscription Business appeared first on Stranger Studios.

]]>
How can WordPress plugin authors disrupt harassment and fight abuse through code? https://www.strangerstudios.com/wordpress-plugin-code-disrupt-harassment-fight-abuse/ Mon, 19 Apr 2021 19:35:32 +0000 https://www.strangerstudios.com/?p=9272 I recently participated in a panel discussion on Fighting Online Harassment in WordPress. Coordinated by Matt Cromwell, Co-Founder and COO at GiveWP, the panel aimed to continue the conversation about online harassment, which recently became more personal for the WordPress community through Mika Epstein’s experiences shared on her personal blog. You can watch a replay (more...)

The post How can WordPress plugin authors disrupt harassment and fight abuse through code? appeared first on Stranger Studios.

]]>
I recently participated in a panel discussion on Fighting Online Harassment in WordPress. Coordinated by Matt Cromwell, Co-Founder and COO at GiveWP, the panel aimed to continue the conversation about online harassment, which recently became more personal for the WordPress community through Mika Epstein’s experiences shared on her personal blog.

You can watch a replay of the discussion on the GiveWP YouTube channel. This post shares thoughts that my team and I gathered on how we, as the creators and maintainers of the open source plugin Paid Memberships Pro, can approach fighting abuse and harassment through our code.

Banner image for Disrupt Harassment and Fight Abuse Through Code

Jump to: Skepticism | Limiting the Potential for Harassment | Coding Against Abuse for Site Admins | Coding Against Abuse for End Users


At first I was skeptical: what can code really do?

Open source products are unique from traditional premium software or SaaS solutions.

  1. Users are not customers. Our software is open source, so in general we can’t stop people from using it. If we find they have beliefs different from ours, or if we find out they are creating a membership site designed to abuse or harass others, we can’t stop them from using PMPro. We have no idea what people are doing with our product, and we have no idea if they are building secure WordPress environments that will keep their users safe.
  2. Like WordPress, we carry a GNU General Public License. This means, among other things, that you may install the plugin on any site for personal or commercial use, and that the plugin is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

In general, you cannot stop people from using your open source software. However, as a business, you can choose who you do business with. You can exclude customers from your support and paid services.

From a business perspective, this is the best route every plugin author can take to fight abuse and disrupt harassment. For example, include a policy related to hateful sites and action you will take against these users in your Terms of Service for any paid or free user support offered. Some TOS are more specific, but ours is pretty general and we use it to remove the occasional hate group customer: “Stranger Studios, LLC may terminate your access to all or any part of our Services at any time, with or without cause, with or without notice, effective immediately.”

Another important factor here is building in policies that support your team directly. Our team knows what to do if they get assigned a ticket they feel uncomfortable supporting. For any reason, a team member can hand off a customer or a specific ticket to their team leader, Jason, or myself.

These are all business policies, though. So what can code do?


Teach Site Owners How to Limit the Potential For Harassment

Aside from code-based solutions, I feel like it is our job as plugin owners to educate the people on all sorts of business topics related to running a membership site with PMPro. While this list is unique to the memberships/ecommerce domain, I’m including it as an important reminder. As a plugin author, you are in a unique position to share the depth of knowledge you have about your customer’s users. Use your knowledge to help them protect their sites and their communities from negativity.

  • Remind the site owners that use your plugin product to have current Terms of Use and Privacy Policy pages. Plugin authors that facilitate user account creation and ecommerce should check that the site has defined a policy under Settings > Privacy and include a link to this page in the forms that allow user registration. WordPress allows you to suggest text for your users’ privacy policies.
  • For membership sites, we have seen that charging even a notional fee for access to a site will keep some trolls from signing up. If you had a free membership level and saw a lot of account abuse, adding a small fee of $1 / month can greatly improve the quality of members joining your site.
  • We encourage site admins to remove any friction that can lead to problems. For example, we are big fans of the “no-questions-asked 100% refund policy.” This simple policy prevents the majority of enraged communications that our team would have to process. Further, we advise site admins not to engage with these non-customers. A simple “Your refund has been processed.” is the best and only response needed.

Build Better Products for End Users and Site Admins

This section details some of our team’s code-based opportunities to build better products. Products that make it much hared for site admins to abuse end users and for end users to abuse the site owner.

Coding Against Abuse: For Site Admins

  • Paid Memberships Pro, our primary product, allows users to create accounts on your WordPress site. We create all users with the site’s default user role, which for most WordPress sites is the “Subscriber” role. Plugin authors must protect the site admin and ensure that users do not have capabilities beyond the most basic access rights granted by the Subscriber role. Yes, there are cases where a higher level of access is needed. For most sites, though, the Subscriber role carries the correct level of account privileges.
  • If you do give users a higher tier role, take steps to ensure strong passwords or even enforce two-factor authentication for specific users that have higher tier access. It is the site administrator’s job to maintain security for their WordPress install, specifically in an ecommerce environment with historic customer data.
  • WordPress should consider a safeguard against the site default role. I cannot think of a single instance where the default role should be set to “administrator”. I suggest that we force an override in wp-config.php to show “administrator” as an option in the Settings > General > New User Default Role dropdown. (There is a trac ticket about this.)
  • From a plugin standpoint, here are a few of our tools that protect membership site owners from various types of account-related abuse:
    • Lock Membership Level Add On: restricts a user from joining or cancelling membership on your site indefinitely or for a fixed term. We built this tool in part for our own use case as we noticed a few users would repeatedly sign up, receive help, then ask for a refund. While not the most harmful of cases for online abuse, our team did feel the stress of seeing these “customers” float in and out of the support channels. I recommend this tool to sites that are experiencing similar account abuse.
    • WP Bouncer plugin: designed to discourage user account sharing. This plugin is free in the WordPress.org repository. Similarly, setting up 2-factor authentication will further discourages account sharing.
    • Approvals Add On in combination with required registration questions: Membership communities often want to ensure that they are attracting and including the right type of member. These communities are successful because they create a safe space for members to discuss shared topics and values. For membership communities, using an approval process for membership allows them to pre-qualify members before allowing them access to their community. Sites can use a series of custom registration questions to force members to opt-in to your values before gaining access.
  • Fields validation is another way plugin authors can ensure safe data is being collected and stored for the related field. Field validation can also protect the site admin from users injecting corrupt files or other scripts into their site.
  • Consent logs, audit trails, and local data logs are a great way for plugin authors to support admins in the event that there is an abusive event. These methods track when a user or other admin managing your site makes changes. Along with this, though, plugin authors have a responsibility to anonymize stored data if that data log is “phoning home” to a remote location for technical support or other debugging.

Coding Against Abuse: For End Users

It’s WordPress. Everything is customizable. Site owners can get as scammy as they want, but plugin authors do not have to make it easy for them. For this reason, even though OUR direct customer is the owner running a membership site, we build our software with the end user customer in mind.

  • Some misguided site owners might want to hide payment reminders or payment confirmation emails from their customers. We enable these by default because the end user customer would want it that way.
  • In this same vein, we default to allowing members to cancel and terminate their subscription without the need for admin intervention or approval. Some subscription products make you call or write a specific letter to get cancelled. We believe users should have control to terminate their account whenever they want, for any reason.
  • Not every member of your site wants their information made public by default. For example, we added an option to our Member Directory Add On that allows users to opt out of inclusion in the directory. If you are building a product that can expose user, member, or customer data on the frontend, please add a way for members to turn this off. For example, have you ever seen those FOMO “Social Proof” notices on an ecommerce site. Did that purchaser know their name and maybe even their avatar would be shown as a popup on your site? The people building these tools are overlooking an important step to protect the end user customer.
  • With GDPR came a new system in WordPress to facilitate users in accessing or erasing all of the personally identifying information collected about them. Plugin authors should take steps to include their custom data in Personal Data Exports and Personal Data Erasures.

An Open Free Internet For All

Dealing with haters, abuse, and harassment is an important part of running an online community or open source software project. Ignoring these poisonous users and customers can lead to issues that spiral out of control and cause a lot of damage.

I hope that sharing some of our current thinking about these issues may help others. We will continue to review and improve our processes and actions to ensure that we are protecting each other while continuing to advocate for an open free internet for all.

The post How can WordPress plugin authors disrupt harassment and fight abuse through code? appeared first on Stranger Studios.

]]>
Get Set Up For Black Friday: Open Office Hours https://www.strangerstudios.com/black-friday-open-office-hours/ Tue, 17 Nov 2020 19:10:02 +0000 https://www.strangerstudios.com/?p=8935 We’re hosting open office hours to answer your questions about running holiday sales. If your question is related to Black Friday sales, we will answer it for you. Event schedule: 1pm EST on Thursday November 19 and Friday November 20. The event is over. You can watch the replay on our YouTube channel here. Sitewide (more...)

The post Get Set Up For Black Friday: Open Office Hours appeared first on Stranger Studios.

]]>
We’re hosting open office hours to answer your questions about running holiday sales. If your question is related to Black Friday sales, we will answer it for you.

Event schedule: 1pm EST on Thursday November 19 and Friday November 20.

The event is over. You can watch the replay on our YouTube channel here.
Banner graphic for Setting Up Your Black Friday Sale Open Office Hours

Sitewide Sales is a new plugin brought to you by the creators of Paid Memberships Pro. It’s the fast way to set up a Black Friday, Cyber Monday, or Giving Tuesday promotion on your PMPro or WooCommerce site.

Can’t make Thursday’s stream? Subscribe on YouTube and check your email for a link to the next Open Office Hours session on Friday.

Please contact us if you have any questions.

The post Get Set Up For Black Friday: Open Office Hours appeared first on Stranger Studios.

]]>