Category: Business

The WordPress Way

I’m writing down the core values for our business and team. Here is one of our 5 core values:

We are committed to open source and “the WordPress way”.

Stranger Studios, LLC Core Values

What does that even mean? How does this value specifically show up in our actions? Why is this important to us?

What does “open source” mean?

In our case, open source means following the GNU General Public License. I wrote about the GPL and why our code is GPL before, but there are basically 2 reasons we embrace the GPL:

  1. We think using the GPL license will result in the best code.
  2. WordPress uses the GPL license, and Matt Mullenweg and the other WP leaders encourage and expect plugins to be GPL.

Some companies respond mostly to #2 there, and begrudgingly apply the GPL license to their code. For us, reason #1 is more important, and so we have embraced the GPL and try to not only live up to the law of the license but the spirit of it as well.

What does “the WordPress way” mean?

This one is more difficult because what is considered “the WordPress way” is an ever-evolving set of standards and conventions that will change over time, but basically what we mean is that our code, UI, and UX should be familiar to other WordPress developers and users interacting with our software.

What does all of this mean more specifically?

Doing things the WordPress way means making all of our software free and open source, just like the core WordPress software.

It means the plugins we write to integrate with other plugins and third parties are hosted in the WordPress.org repository because that will incentivize both parties to maintain the plugin.

It means our code will continue to work as expected if your paid license expires.

It means providing simple one-line code solutions to disable our upsells or extra gateway fees.

It means using the WordPress coding standards so our code is more readable to developers used to reading WordPress-based code.

It means finding the right hooks and filters to modify the behavior of a site instead of fully replacing existing functionality of WordPress and other plugins.

It means adding hooks and filters into our own code to make it easier for others to modify the behavior of our plugins.

It means striving to have documentation on par with the WordPress Codex.

Why is this important to us?

We believe that embracing open source and the WordPress way is going to result in the best software, and having the best software as our foundation will be a competitive advantage for our business. That’s it.

For sure, it’s not bad business to focus on paying customers, or charge for software, or make decisions to maximize profits. But I also feel that’s not the WordPress way.

WordPress is software designed for everyone, emphasizing accessibility, performance, security, and ease of use. We believe great software should work with minimum set up, so you can focus on sharing your story, product, or services freely. The basic WordPress software is simple and predictable so you can easily get started. It also offers powerful features for growth and success.

We believe in democratizing publishing and the freedoms that come with open source. Supporting this idea is a large community of people collaborating on and contributing to this project. The WordPress community is welcoming and inclusive. Our contributors’ passion drives the success of WordPress which, in turn, helps you reach your goals.

The WordPress Mission Statement

We believe in making money. We’re the “get paid” folks and understand the good that steady income means to individuals and organizations. But we believe that making software that is aligned with our values and the WordPress mission statement is more important than making money.

If a decision comes down to something that will make the software better and something that will make us more money, we choose the option that makes the software better.

For us that means embracing open source and the WordPress way, making our software available for free to get the most users and contributors, and building a business on top of the software we are making by adding value instead of artificially limiting our software and selling the cure.

Blog less for more views?

The @MrBeast interview on the @joerogan Experience podcast is a good one. Mr. Beast's life story is interesting, but there is also a bit of marketing advice that's useful for businesses trying to produce viral content.

Here’s a link to the podcast. It’s on Spotify. You need at least a free account to listen.

Here's an excerpt on YouTube that I think covers some of the stuff discussed here: 3/

Anyway, what's the advice. It's pretty simple:

Make fewer, better videos.

Mr. Beast says he's helped several channels increase their views and earnings but mostly convincing them to make fewer videos, but spend more time on them.

Specifically, Mr. Beast emphasized having a better idea.

How do you do that? Early on, he would spend at least an hour a day thinking of ideas. He would use random word generators to plant a seed and then riff on that.

Why are ideas so important? It's the algorithm.

The YouTube algorithm optimizes for 2 things: clicks and stickiness. It's most important to get folks to click on your video, and then it's important to get them to watch the entire video.

Having a better idea helps to get those clicks. So does good titles and thumbnails.

How do you get people to watch the whole video? That seems to be the secret sauce. It involves pacing the video to keep it interesting while at the same time teasing the info coming later.

Mr. Beast talks about that some more here:

I found this concept of fewer, better videos fascinating because it goes against the advice I learned in the blogging world which used to work so well. That advice was basically post content as often as possible, and that consistency was key.

Posting a lot made sense in the early days of blogs and RSS, when a typical behavior was to visit a specific site daily to see what was new.

But no one does that anymore. The algorithms control what we see. So optimizing for the algorithm is way to go viral. Duh!

I watched a @neilpatel video this weekend too that also suggested blogging less. Less blogs, better ideas, more time to market your posts. It's a quick video, but has some good specific tips to try.

One thing I like about the old "post as often as possible" strategy is that it really forces you to produce and figure out the process and the medium. Good for starting out. But that's not really useful if you hit a plateau and your content doesn't get any better.

So the current trend, which makes sense based on the role algorithms play, is to produce fewer, better videos and blog posts focused on clicks and stickiness.

Mr. Beast posts Thursdays and Saturdays. Neil Patel posts on Tuesdays, which might be better for biz/work stuff.

Originally tweeted by Jason Coleman πŸ€”πŸ’‘πŸ’»πŸ’Ύ (@jason_coleman) on March 21, 2022.

How to come up with business ideas and figure out which ones are good.

Saw someone who wanted to start a business asking for ideas, which is odd to me because I have tons of ideas. My handle on many sites is “ideadude”.

So here’s a thread from the ideadude on coming up with ideas and figuring out which are the good ones. πŸ§΅πŸ‘‡

Back in the early days, @colemank83 and I would spend at least one weekend each month working on new ideas. We would build what we could in 2 days, push it out there, and see what stuck.

We got lucky and were able to transition from consulting into a software biz doing well.

In hindsight, there are better ways to come up with ideas for businesses. Here are some.

I recommend reading @jaltucher‘s article How to Become an Idea Machine

https://jamesaltucher.com/blog/how-to-become-an-idea-machine/

The big idea. Write down 10 ideas every morning. Practice coming up with ideas. Most of them will be bad ideas, but that’s okay, it’s the practice you want.

If you like that post, then I would also suggest reading James’ book Choose Yourself. It has many similar ideas.

Once you have ideas, how do you know if they are good?

For that, I recommend reading the great stuff by @amyhoy and @alexhillman at

https://stackingthebricks.com/

Specifically, check out their stuff on Sales Safari

https://stackingthebricks.com/video-sales-safari-in-action/

Ha! In this post Alex calls out the “see what sticks” approach that might have worked out for us, but took too long.

https://stackingthebricks.com/cant-find-audience/

Another related idea I learned from Stacking the Bricks is the “ebomb”.

https://stackingthebricks.com/the-ebomb-recipe-that-works/

The big idea here is to recognize all the questions you are already being asked by email and in person and publish the answers publicly.

If one of your ebomb posts gets attention, it could be a good candidate for building a service, product, or SaaS around.

My final advice is to just step aside from your day to day work and life for a while.

Every time I take a week off, travel away from home, and aren’t forced to focus on work, I come up with tons of ideas on how to improve our business.

Maybe you were able to get away for the holidays and are back and ready to work hard on your business.

If not, plan a getaway now if you can.

So there are some resources to learn how to practice your idea machine, do sales research with intention, come up with ideas for targeted content, and find the space to let your mind work.

Tell me your best practices, tools, books, & resources are for coming up with good ideas.

Originally tweeted by Jason Coleman πŸ€”πŸ’‘πŸ’»πŸ’Ύ (@jason_coleman) on January 4, 2022.

How we do profit sharing for Paid Memberships Pro.

Here's a thread about how we do profit sharing bonuses for @pmproplugin, a company of about 15 people.

Lots of inspiration from @wilreynolds and @Shpigford on this and generally how to treat employees well.

Some lessons learned through the years. πŸ‘‡πŸ§΅

Make It Rain Money GIF

First, why give bonuses vs straight pay increase?

We try to pay good base salaries as well, but on top of that, we give bonuses (a) to share the success and profit of the company and (b) to encourage employees to work toward that success and profit.

We don't give raises as a reward for a job well done. Raises are given to account for inflation and to compensate our employees properly based on the job they are doing and how they've been growing in their roles.

The bonuses we give are one time payments. If next year isn't as good as this year, we can pay a smaller bonus or even skip it.

Employees might be disappointed, but it's much worse to have to lower salaries or let folks go if revenue drops.

Step 4: Profit.

Revenue – expenses = profit.

Bonuses can be based on other goals and KPIs, but our bonuses are profit sharing bonuses. It's works out nicely. Employees get paid if the business gets paid.

We set a profit target for the period. Usually between 15-30%

This changes based on what's going on with the company. If we are hiring and investing into the business our profit target will be lower. Sometimes it's higher.

Anything above the target goes into the bonus pool.

Well, most of the profit above the target goes into the pool. Although there are spreadsheets involved, this all is more an art than a science.

If we expect some tight quarters in the future, we will make the pool smaller.

If profits were low or negative, but we have the cash on hand, we sometimes make the pool larger.

Big one time expenses or future investments might eat into profits in the short term, but if everyone is working hard, we like to have as much of a bonus as we can.

Another important note here is that @colemank83 and I pay ourselves a reasonable salary for the roles we take on in the business. For purposes of the bonus pool, profits are calculated after we pay ourselves.

Here's an example of what our forecasting spreadsheet looks like. These may or may not be real numbers.

So for Q3 here, if our profit margin target was 15%, we would set aside about 4.5% of revenue or 25% of profits for the bonus pool.

That's a forecast above. It starts out as an estimate. I make the numbers light gray. Then as real data rolls in on the revenue and expense side, I make it black.

We're often paying out the bonus before the quarter is over. We use our best conservative guess for the last month.

We have since settled into biannual bonuses. One in June and one in December.

We started out doing quarterly bonuses. Our revenue and expenses are surprisingly predictable, but quarterly fluctuations mean that some quarters are not profitable. We were missing bonuses too often.

Happy December GIF by GIF CALENDAR

Who is eligible for a bonus? Anyone who has been "on the team" for most of the period in question. New hires are excluded, but any other full or part-time employee (we have overseas contractors we treat like employees) is included.

Kim and I also include ourselves in the pool.

Why include ourselves in the pool?

For one, it's nice to mentally tag that payment as a bonus. It's easier to spend that money on something fun like a synthesizer or big trip.

Another reason is that if we were to hire replacements for ourselves, they would need a bonus too.

Once we know the pool size and who is eligible, how do we split it up?

There are many different methods. We've tried a few. Here's what we've settled on…

Half of the pool is divided among the team based on each member's base salary relative to the total salaries in the pool.

Someone paid 10% of the total salaries for the team would get 10% of that 1/2 of the pool.

This means folks who make more get a bigger portion of this pool.

We want to compensate everyone (partially) based on the contributions they're making to the business, and we're basically using base salary as a measure of those contributions.

The other half of the pool is divided based on a rating that Kim and I give everyone based on our subjective opinion on how well they performed in the period.

We take 100 points and divvy them up among the team.

Someone getting 10% of those points will get 10% of that pool.

Right now it's just Kim and I setting the scores for the second half of the pool. We try our best, but end up being biased toward "what have you done for me lately?"

As we formalize our employee reviews and 360 feedback processes, we will use that feedback to set those scores.

For each team member we add the first and second halves together to get their portion of the profit sharing pool.

The sheet looks something like this. (These are absolutely random numbers.)

We try to default to transparency, but we also like there to be some mystery in how the bonus is calculated. For example, we don't share our profit targets, the full size of the pool, or the % grades given.

Again, this is more of an art than a science. We want to avoid folks expecting a specific bonus amount, which would be a defacto pay raise.

We want to avoid folks reverse engineering the system entirely and wondering "how come I didn't get more"?

Explaining why we lowered our target profit margin from 30% to 15% might sour the celebration of the bonus. Explaining that we raised our target back to 20% to make up for paying a bonus last time even though we didn't hit our target would be confusing.

Remember the bonus is meant to share our success and profit and to align employees with the goals of the business. It should also be a positive thing that makes us all feel good about working hard together.

If the bonus feels disappointing, it fails.

I know folks on the team are going to read these tweets, and I'm curious to hear from them what they think about all of this. πŸ™‚ Reply here or reach out to me directly.

In review. Every 6 months, we set a profit margin target. Any profit above that goes into the pool for everyone on the team, including us owners. We split half the pool based on base salary and the other half based on a subjective grade for the period. We pay it out.

I feel incredibly blessed that @colemank83 and I are able to do the kind of work we love to do while working with people we love to work with.

Business is great, and I'm grateful to our team for working hard.

I'm happy to be able to share the success of this business with them.

Originally tweeted by Jason Coleman πŸ€”πŸ’‘πŸ’»πŸ’Ύ (@jason_coleman) on December 6, 2021.

Business Update 2020

I try to write these transparency reports every so often. You can find some previous transparency reports here:

I wrote most of this down last year, but it’s taken a while to publish. The 2021 Transparency Report should come out soon after this one.

The COVID 19 Pandemic

In early 2020 the COVID 19 virus spread around the globe, causing a worldwide pandemic. With a global team, it was interesting to see different countries responding at different times and in different ways. As lockdowns started, a lot of our friends were off from work or shutting down their brick and mortar businesses. They were worried about being paid, earning income, finding money to pay their employees or their rent.

It was odd for me that our life, and work life in particular, wasn’t changing that much.

In many ways, things continued as usual. We all already worked from home. People were still buying membership software and building membership sites. In fact, there was more demand for our software and service as many organizations and businesses had a more urgent need to collect payment online.

At the same time, we were all very distracted and impacted by the virus, the lockdown, kids at home, and just the general malaise that was happening around the world.

Leading this team through COVID, from a business standpoint, was the greatest challenge I had yet as a CEO and business owner. I felt I really needed to step up and be there for my team.

Early into the lockdown, another online business owner tweeted something along the lines of “this is the time to go on offense, double down, and hit those business goals”. I thought, are you crazy? It seemed like an insensitive thing to put out there while people were dying and many businesses were incapable of running at all, let alone going on offense. I replied “Nah. We’re on defense…”

I learned that there was a time and place for subtweets. This is maybe minor in the context of a global pandemic that was spiraling out of control at a time when we had know idea how bad things would get, but it was a genuine lesson. That business owner was talking to his customers and motivating them in good faith and also looking to make a living himself. While I disagreed with his stance, instead of replying to the tweet, I could have tweeted it by myself. Maybe he would have seen it and followed up with me there, but it would have been more out of sight of his customers.

In any case, we were on defense. Support was busy, about twice as many tickets as usual. We stopped our development and marketing cycles and all focused on supporting our customers and each other.

New sales were double their pre-COVID levels. We were making a lot of money. But we didn’t use that money to go on offense in any way. Who knew what would happen going forward. We saved. We share a lot of that profit in a bonus that summer. The team deserved it more than ever.

April and May of 2020 were especially busy and new sales slowed down a little bit, but not by too much. Instead of a 100% YoY increase each month, we were seeing a 50% YoY increase, which was still above our earlier targets and honestly our ability to handle.

In the summer development cycle, we focused on improvements to our support system to allow our support engineers to be more efficient and better able to stay on top of their tickets. Later in the year, we standardized our processes around escalating tickets.

Our support team did a remarkable job keeping up with things despite the chaos around them. Everyone on the team leveled up and supported not just our customers but each other.

New Hires

In the 2019 Transparency Report, I wrote “I’m hoping to pause at 12 employees working on PMPro,” and we stayed around that size. We hired a support engineer early in 2020 who has since grown into an important part of our dev team. We had another dev hire who didn’t make it out of the second trial phase. (We often run a 2 week and then 3 month trial for new hires.)

With a few part timers coming and going, we generally stayed around 12-14 employees, including Kim and myself.

Shape Up

We continued to run the Shape Up system to manage our product development.

The Shape Up system is useful for lots of teams, but was built specifically for Basecamp. We made some tweaks to make it work better for us. We tested different lengths of cycles and other variables to find a pace that fit our product and team.

The 2 big differences between our company and Basecamp are (1) our product is open source and (2) our team is smaller with less defined roles.

Because our software is open source, we can’t just push out intermediate work with the ability to change it later. Once it’s out in the wild, people are using it, and it becomes harder to refactor. To help with this, we do fewer cycles with longer time in between so we have time to properly launch things.

Because our team is smaller, we all have “day jobs” within the business outside of development. All of us are involved in customer support, marketing, and handling day to day management of the platform and products. To help with this, we assume each resource is only 50% available for cycle work and basically double our estimates for how long things will take.

We’ve settled into a nice schedule that looks like this:

  • We have 4 cycles per year, roughly one per quarter.
  • Cycles are 7 weeks long, with 6 weeks in between.
  • We added a floating “off” week for each person in the middle of the cycle. People either really take off or more often use that time to catch up on day to day responsibilities.
  • In between cycles we wrap things up for launching, work with marketing, and also focus on dangling day to day activities that were put off during the cycle.

Using the Shape Up system has helped us to prioritize our work and stay focused as a team. I know some other companies in the WordPress space are using Shape Up as well. I’m hoping to share some more specific details about how we use Shape Up in future posts and videos.

What major features or add ons did we push out?

In 2020, we finally launched our own frontend login and profile pages. People have often asked for or just expected this out of a membership plugin. Until recently, we would recommend a separate free plugin that did the job better than we could. When that plugin went premium, removing some of their features from the free plugin, we were further motivated to build our own versions of these features.

We really embraced the task and worked to build a login and profile UX that works how we want it to. There are a lot of little touches we put into the UX to make things feel as seamless as possible… when configured properly and free of conflicts.

WordPress logins are extremely confusing and prone to issues. So many other plugins, themes, and mu-plugins installed by hosts are interested in tweaking how the login works. Compatibility issues come up a lot. About half of the code in our /includes/compat/ folder is to help with login issues.

We were already helping our customers with a lot of login issues. I knew that once we had our own login page, we would get a ton more support tickets related to login issues, and that has been true. We help our customers through those issues and whenever possible find ways to avoid the issues for other users. The nature of WP makes this an inevitable problem, so we’re working on a troubleshooting guide to address login issues on any WP site. This should be out by 2022.

We put Stripe Connect on hold, but it’s coming soon.

Stripe Connect is a new way to interface with Stripe that “connects” your Stripe account more closely with Paid Memberships Pro. Among other things, this adds some security to the connection and gives us some greater ability to debug issues with your Stripe account.

From a business perspective, the big motivating feature of using Stripe Connect is that we would have the ability to charge an additional % fee on top of each transaction. This, along with lots of encouragement from Stripe, is why almost every ecommerce plugin for WordPress uses Stripe Connect now.

I believe that we deliver incredible value in our software and deserve to apply this fee to transactions. A lot of our resources go into maintaining our Stripe integration and the extra revenue helps with that.

That said, I also believe that we must always put the needs of our users ahead of the needs of the business. I didn’t want to integrate with Stripe Connect just because we could make money from it. I needed the Stripe Connect integration to truly be better than the alternative of using your own “legacy” keys. It wasn’t. I felt like we were being pushed to implement Stripe Connect to make money for ourselves and some Stripe sales people. It didn’t feel like a decision in the interest of our users. Despite spending a lot of time developing the new integration and having it nearly complete, we didn’t launch the Stripe Connect feature in 2020.

I’m actually editing this in 2021. This past August we DID launch Stripe Connect. You’ll have to read my next transparency report to find out why I changed my mind. There is some information on how PMPro uses Stripe Connect here.

Other Product Updates

We added digest emails that go out every day, week, or month and update you on how your membership site is going. Our motivation for this was to create something that would basically remind our users that PMPro is powering their website and helping them to grow. Digest emails were an opportunity to give useful information to our users while also keeping our PMPro brand in their minds.

We got together to figure out what site owners would want to see in that email and have come up with something that I think works great. We also worked hard to avoid spamming our users and make it easy for them to control how often, if ever, they get that email. We don’t have tracking stats, but I expect most users appreciate that email. (Although, it can be a little depressing on sites that aren’t growing. That’s something we can work on as we iterate this feature.)

We added REST API endpoints to the core PMPro plugin, which makes it easier to integrate PMPro with other services and apps.

We launched a minimal “Words” theme for Memberlite. This is the theme I’m using on this very blog right now. It’s a great theme for a blog. We likely won’t be focusing on theme development for a while, as Gutenberg and block-based design has taken over WordPress, but we may work on specific child themes like this that work perfectly with PMPro.

We launched Apple and Google Pay for Stripe. This work also prepared us for future Stripe and general checkout page updates. There is a lot more work to do here, but it’s nice to offer 2 of the most common and fastest payment methods to any PMPro site integrated with Stripe.

Finally we launched a new notification system for PMPro inside of the WP dashboard. You will notice these as green bordered banners showing up on the PMPro settings pages asking you to review PMPro or consider an add on of ours. Banner and notification spam is a huge issue in WordPress, and we did our best to come up with something that wouldn’t add to that. I think we’ve done that, and I may do a future write up on how our notification system works so it might be adopted by others or we can learn how to improve it.

At year end our revenue was up 50% from $800k in 2019 to $1.2m in 2020.

Revenue-wise, we had a phenomenal year, growing exactly 50%. Our profit margin was around 30%. We were happy to share much of this profit with our team in a second bonus in December.

We attributed much of the rise in revenue to what we and others call the “COVID bump”. Staying connected through online membership sites became much more important in the world, and lots more folks were investing into their technology.

It was hard to tell how much of our growth was from the bump or other growth initiatives we had. Based on what we heard from some other businesses, our YOY growth was a bit bigger than some other companies. So we must have been doing something else well.

We stopped giving discounts on renewals.

Before March 2020, we used to discount the second and recurring years of membership. So if someone paid $297 when they first checked out, they would only pay $197 in subsequent years. This was based on the idea that we generally don’t have to support existing members as much as new ones. Most of their support needs come in the first year. Having a lower renewal price that more closely matches the perception of value provided will help with retention and can help you to make more money overall.

This pricing structure wasn’t optimal for us. We were fielding a lot of support queries from people who were confused about the discount they were getting. “I thought this was $297? Why did I pay $297 last year if it’s only $197.” In the minds of our customers, they weren’t paying extra for extra support in year one. They were paying for PMPro and the support is just expected to be part of that. They didn’t see our discount as a discount on the second year, it seemed like a tax on the first year.

So we decided to run an experiment. Let’s remove the renewal discounts and see what happens. A few more people cancelled in year 2 for sure, but it wasn’t enough to cancel out the extra revenue from charging 50% more on all recurring members. Our pricing is already fair. We run regular sales for folks who can’t afford full price. All in all, this change in policy probably accounts for a 15% rise in revenue.

We tried to launch Sitewide Sales again and it didn’t go so well.

Another big initiative for 2020 was to launch the Sitewide Sales plugin, which was spun off from a PMPro Add On the year before. The launch did not go so well. We sold only a handful of licenses and haven’t gained much usage outside of the folks who were already using it with PMPro. To really grow, we need WooCommerce sites to use the plugin.

I think we have a good product here, but we’re struggling to position it and find product-market-fit. Over the summer in 2020, I offered to give away the plugin for free and even set it up for folks all free of charge. I had no takers. Not a single one. I used to charge at least $300/hour for my consulting, and now I can’t even give it away for free.

It has been tough to focus on Sitewide Sales when there is so much we can do to shift the needle with our core PMPro product, but we have some ideas and will try again in 2021.

In Summary

It was a long year, and a challenging year in so many ways. Despite not being able to meet up in person, our team has grown closer together over this year. We’re working better than ever. I’m proud of the work we are doing and the impact our software has on so many people’s lives.

How we started running BFCM sales and made an extra $150k

In the early years of @pmproplugin, we never ran sales.

In 2017, we ran our first Black Friday/Cyber Monday sale. Now we run 3 sales per year.

What were we worried about early on? What changed our mind?

If you want sweet BFCM πŸ’°, but have concerns, this thread is for you.πŸ‘‡πŸ§΅

First, what kind of sweet cash are we talking about?

We’ve commonly heard that a BFCM sale can bring in 25-100% of your typical November revenue.

In software, where late November and December are slow times, that can be a nice bump.

Seasonal sites can do even better.

For us specifically, we make an additional 20-30% revenue any month we run a sale. At 3 sales per year, this is about 5% of our annual revenue or ~$150k over 4 years.

For reference, it cost us ~$150k to renovate our garage into a “sweet” home office.

In 2016 though, we were nervous about running sales. We were worried about:

(1) Confusing our customers.
(2) Looking cheap.
(3) Wasting time.

We’ve since made sales software for WordPress sites that addresses these concerns specifically.

I’ll include a link to that software at the bottom of this thread, but first let’s break things down and hear how we got over these fears and are now running successful sales 3x/year.

(1) We didn’t want to confuse our customers.

In 2016, we weren’t even sure if we had our standard pricing down. We were changing our plans and pricing every year or so already. We thought throwing a discount into the mix would confuse our customers.

We thought running sales would confuse ourselves too. Sales would muddy up the data we were tracking.

How could we tell if that price increase to $297 was really working if we sometimes were still selling things for $197?

BTW, consider running a sale when you’re about to raise prices. You’re set up for a natural experiment of sorts where you can honestly say something like:

“This is your last chance to purchase before we raise our prices. Lock in now.”

(2) We didn’t want to look cheap.

This is a big one and almost common knowledge for ecommerce stores.

We were concerned about how discounts, especially running sales too often, could hurt our brand image.

We were already fighting the image we had as “the free membership plugin” since all of our code was fully GPL and available for free.

Running a sale could send the message that our paid services weren’t worth the full price.

In reality, our service was the best and worth more.

We all know how jewelry stores at the mall are perpetually selling things for 50% off the list price, training us to take every price we see and cut it in half.

Even now, in mid Sep, if you visit the websites of traditional jewelry stores, they are littered with sales pricing.

Perpetual sales might work for some businesses, but we didn’t want to send the message that our PMPro Plus membership was “cheap”.

Our plugin was the best. Our service was the best. We should be charging the highest prices, not be “forced” to put our membership on sale.

(3) We didn’t want to waste our time running sales every month.

Each sale involves at least a few hours writing up sales copy and emails. At worst, it involves designing one-time landing pages and custom programming to handle the pricing logic.

What do you do if someone who purchased in July for $197/year is checking out in November for $147/year?

Here’s a small snippet of *some of* the pricing logic we used to have running on the site. The current pricing.php file is about 140 lines of code.

<?php
// This is an excerpt from *some of* the custom pricing logic we had running on our site to support legacy prices and sales.
// Our current custom pricing script is about 140 lines long.
/*
If purchasing PMPro Plus and they've had plus or core in the past,
calculate the appropriate price.
*/
if($level->id == 20 && is_user_logged_in()) {
// If the user has a current subscription, use the billing amount on file.
$user_level = pmpro_getMembershipLevelForUser();
if( pmpro_hasMembershipLevel( 20 ) && pmpro_isLevelRecurring( $user_level ) ) {
$level->initial_payment = $user_level->billing_amount;
$level->billing_amount = $user_level->billing_amount;
} else {
// Check if they had a discount in the past.
$paid_47 = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE user_id = {$current_user->ID} AND membership_id IN(6,20) AND total IN('47', '47.00') AND status NOT IN('refunded', 'token', 'error', 'review') AND timestamp < '2017-08-30 00:00:00' LIMIT 1");
if($paid_47) {
$level->initial_payment = '47.00';
$level->billing_amount = '47.00';
return $level;
}
$paid_97 = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE user_id = {$current_user->ID} AND membership_id IN(6,20) AND total IN('97', '97.00') AND status NOT IN('refunded', 'token', 'error', 'review') AND timestamp < '2014-08-30 00:00:00' LIMIT 1");
$paid_147 = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE user_id = {$current_user->ID} AND membership_id IN(6,20) AND total IN('147', '147.00') AND status NOT IN('refunded', 'token', 'error', 'review') AND timestamp < '2017-08-30 00:00:00' LIMIT 1");
$paid_197 = $wpdb->get_var("SELECT id FROM $wpdb->pmpro_membership_orders WHERE user_id = {$current_user->ID} AND membership_id IN(6,20) AND total IN('197', '197.00') AND status NOT IN('refunded', 'token', 'error', 'review') AND timestamp < '2017-08-30 00:00:00' LIMIT 1");
if($paid_97 || $paid_147 || $paid_197) {
$level->initial_payment = '147.00';
$level->billing_amount = '147.00';
}
}
}
view raw gistfile1.php hosted with ❤ by GitHub

When we did client work, some clients were constantly looking for the right discount/invite scheme, and every month we’d have to update their pricing across the site.

And every month, we’d have to write code to handle all these new edge cases we were creating.

So what changed our mind? Mostly it was FOMO.

We had heard from friends (@scottbolinger, @learnwithmattc, @pippinsplugins, and others) who were making 25-100% of their typical Nov sales just over BFCM weekend.

Again, Thanksgiving week was one of our slowest periods. The whole month of December is usually our lowest-revenue month.

Getting an extra month’s worth of revenue during this time helps a lot of smooth things out.

It also gives us a nice bump when we are calculating bonuses.

Here are our November sales from 2016 and 2017 with the BFCM weekend highlighted.

2016 – no sale. 2017 – with sale.

Here is a shot of our revenue from last November, 2020. In addition to extra sales from our promotion that month, we benefit from all the recurring sales year after year.

November went from a slow month to our busiest month.

My friends who had run BFCM sales eased our concerns 1-3 as well.

Q: What about people asking for the discount after the sale is over?

A: It was just a few people the following week and no one after that.

We recommend giving these folks the discount.

Q: Do you think the sale hurt your brand or undermined your pricing?

A: No. People *expect* us to be running a sale over BFCM.

This is the one time of year you can rune a sale without it looking bad.

Q: Are you spending all your time running sales now?

A: Yes and no.

Some of those we talked to run sales almost every month now. Some just a few per year.

The latter appeals more to us, and after some experimenting, we have settled on 3 sales spread throughout the year.

For the past few years, every year, we run a Black Friday/Cyber Monday sale one week in November.

Then a Spring Sale one week in March-May.

Then a Summer Sale one week in June-August.

We experiment with content, pricing, and length, but also have templates we can reuse easily.

That’s our story of how we came to start running Black Friday/Cyber Monday sales, made a bunch of money, built a home office, and now are trying to help others do the same.

I’d love to hear from others who have had similar success, or better yet different struggles with sales.

Oh yeah. Here’s our pitch for Sitewide Sales, a complete BFCM and flash sale plugin for WordPress.

https://sitewidesales.com/

It works with WooCommerce, PMPro, EDD, and other ecommerce plugins.

I said that we address concerns 1-3 directly, and it really does.

Originally tweeted by Jason Coleman πŸ€”πŸ’‘πŸ’»πŸ’Ύ (@jason_coleman) on September 13, 2021.

5 Tips I Wish I Shared During My Mixergy Interview

My interview with @Mixergy is live. Check it out here: https://mixergy.com/interviews/stranger-studios-with-jason-coleman/

It's great. We cover 15 years of business.

I like getting tactical on podcasts. I know Andrew likes it too. I missed some spots. So here are 5 tips I wish I shared during the interview.

πŸ§΅πŸ‘‡

1) During recessions, get close to the money.

I talk a bit about what business was like in 2008. Besides some personal struggles, 2008 was also a time when individuals and businesses were clamping down on spending. So what can you do if you are freelancing through that?

Get close to the money. People will be cutting spending on things that seem superfluous, but any tools, service, or consulting that ties directly to the company's bottom line will be the last to go.

This was part of what encouraged us to focus on membership sites.

I remember some clients we built websites for, even friendly clients (maybe family members ;), saying to me "The website is nice, but it didn't really bring us business."

!!!

We weren't tracking it. The membership sites we helped launched had reporting built in showing $$$.

2) When going up against established competition, don't compete with them head on. Focus your marketing efforts on features and in spaces they aren't addressing.

There were already a couple established membership plugins for WP when PMPro launched.

Making PMPro free and open source was a decision that has lead to better software (what I go into in the interview), but it was also a Judo move to circumvent the competition at the time that was relatively expensive and not OSS.

We didn't waste money to compete with their Google or Facebook ad spend.

We didn't try to recreate the affiliate networks they had already set up.

We focused on becoming the best free membership plugin available on the http://wp.org repository.

3) Speaking of focus. Focus on one project at a time.

When I told Andrew about the frustrations of dealing with 3rd parties changing their APIs when trying to grow WineLog, he asked "Do you have to deal with that kind of thing with PMPro?"

Yes! We do. What's different? Focus.

When Google removed wine from their shopping results, it was the final nail in the coffin for WineLog, as we had just spent months building technology on top of those results.

We didn't have the energy, time, or desire to pivot and try something new.

In business, things are going to fail sometimes. What do you do when you have a set back?

If you have other active projects, you can turn to them for what seems like easier progress.

But if you only have one project to focus on, you HAVE to make it work…

… and you will do what what's needed to try again.

Stopping work on WineLog, InvestorGeeks, and the other side projects we had back around 2010, gave us the time and attention needed to make PMPro a success.

In 2015, we made 80% of our income from making membership sites for others.

When we made the switch from consulting to 100% products-based revenue, we turned down $90k in new work over 3 months to focus on a PMPro relaunch.

The relaunched PMPro 4x'd revenue immediately. Focus.

4) Our Auto-Renewal Checkbox Add On caught Andrew's attention while he scanned our site during the interview.

https://www.paidmembershipspro.com/add-ons/auto-renewal-checkbox-membership-checkout/

I glossed over that one to talk about other add ons, but ARC is pretty cool. The idea behind it is insightful even if you don't use PMPro.

On some sites, customers will purchase a recurring subscription and then CANCEL RIGHT AWAY.

They maybe want access to something right away, but don't really see the benefit in extending membership another month or year.

Auto-Renewal Checkbox tries to address these customers.

ARC gives customers an option at checkout to pay just a one time fee for a membership that expires or to lock into a recurring subscription.

You see this kind of UI all the time when donating online.

However, if you notice this pattern on your site, you should try some things.

Why do your customers only want to pay you one time? Figure that out.

Think about how you could create a separate 1-time-payment product. Maybe your subscription is giving TOO MUCH value, and you should break part of it off into a separate product.

People are really focused on getting recurring revenue on their site. It is nice, but you can find yourself shoehorning what's basically a one-time purchase into a subscription product. Don't force it.

I talk more about timing and pricing here:

https://www.paidmembershipspro.com/front-load-membership-pricing-double-revenues/

5) Finally, I missed a chance to talk about the value of disconnecting.

I said it was easier to step away from work in a products company vs a services company.

Andrew said, "Yeah? What's the longest you stepped away?" Maybe hoping for a great sabbatical story, but I had none.

The longest I've stepped away is 1 or 2 weeks, but I'm definitely able to REALLY get away and disconnect 100% when I go on vacation now. And that is HUGE.

*Every single time* I step away from the day to day of my business for a week, I come back with ideas that grow our business at least 10-20%.

I'd say 4 days in the minimum to really get away. Shoot for 7. More could be better.

If you haven't done that in a while, work it out.

Those are 5 tactical tips that I wish I shared during the interview. You get them for free here on Twitter and my blog. πŸ˜€

If you can, watch the interview anyway. Like it on the site. Ask a comment there. It really helps to show Andrew you're listening.

https://mixergy.com/interviews/stranger-studios-with-jason-coleman/

Originally tweeted by Jason Coleman (@jason_coleman) on November 9, 2020.

What I Learned During the Mixergy Pre-interview

When I am a guest on someone else’s podcast, I try my best to deliver value to the podcast’s audience. I want them to learn something from the stories I’m telling. For the first time the other day I realized that *I* learn from these interviews too.

This week I did a pre-interview with Arie Desormeaux for the Mixergy podcast. Arie and Andrew have been doing this a while and ask questions that are effective at pulling useful tidbits out of the entrepreneurs they interview. While chatting with Arie, even though I was telling stories I’ve told numerous times before, I had a couple big realizations that I hadn’t thought of before.

These things might come up in the full public interview, and when that happens, I will share a link for y’all to get the full story. But for now, I’ll share the 2 tidbits I hadn’t realized before doing the pre-interview.

(1) In 2008, our son Isaac was born with medical complications that kept him in the hospital for 2 weeks and kept us from working for 2-3 months. Isaac is fine and healthy now, but it was a scary time for us as new parents. We were freelancing at the time and unable to work to bring in money, while also spending somewhere around $15,000 on unexpected medical expenses. (Thank god for the insurance we had and the ACA for allowing us to later get better insurance for our son with pre-existing conditions.)

This moment in our lives was important and pivotal for numerous reasons, but I just realized the other day during the pre-interview, that these months after Isaac were born are part of what motivated Kim and I to move away from consulting into products. We wanted enough money to be able to weather situations like this, and we wanted a business we could step away from for 3 months without risking our financial safety.

(2) We also talked a bit about WineLog during the chat. Arie asked what was the struggle we had with WineLog, and I mentioned how we had a string of issues where crucial technology and business partners made updates and pivots that made it harder for us to monetize our traffic.

For example, at one time Amazon announced they would start selling wine on their site. We spent a lot of time writing code to integrate with Amazon’s APIs. Then Amazon changed their mind and stopped selling wine, making all of that work useless. Similar changes at Google, Facebook, Apple, and others threw us off at different points.

Anyway, during the pre-interview Arie asked if we ever had the same issue with Paid Memberships Pro. At first, I thought no, but in reality we still deal with constantly changing technologies, APIs, and business partners. We have many weeks and months even, where we are doing development we aren’t always expecting, working to fix integration with tech partners. Why are we better able to deal with those things now? One reason is that we are fully focused on Paid Memberships Pro and can spend the time needed to work on these things. Being open source helps as well, allowing other developers to help us with these things. But there are likely other things we’re doing better this time around. Arie’s question really prompted me to think about it.

I’m looking forward to the full interview. I’ve been a Mixergy fan for years. I’m excited to share some of my story and some of the things I’ve learned in business over the past 15 years or so. But I’m also excited to talk with talented interviewers that can probe me so much that even I learn something during the chat.

If you are interested, watch this interview between Andrew and Arie going into the pre-interview process they use at Mixergy. And stay tuned to the Mixergy podcast for my interview whenever it comes out.

How much money can you make during a Black Friday/Cyber Monday sale?

How much can you make during a Black Friday/Cyber Monday sale?

Here are our numbers from last year. We made an extra $20,855 over 10 days.

For comparison, we made just about $20,000 total over the previous 10 days, including renewals. All told, revenue is about 2x normal when running a sale.

Can anyone else out there share numbers from their own BFCM sales last year? Hit me up on twitter @jason_coleman.

BTW, this report is from our plugin Sitewide Sales.

You can run awesome BFCM sales like us, with reports like these when using @pmproplugin or @WooCommerce.

We also had a "Pre Black Friday Sale" Oct last year… to promote the Sitewide Sales plugin when it was just an addon for PMPro and our other content around BFCM. To give customers time to setup their sales and move some of those Nov sales to Oct to even things out.

Originally tweeted by Jason Coleman (@jason_coleman) on October 20, 2020.

More info on how much you can make during BFCM in a post by Kim at the Stranger Studios blog.

PMPro Business Update

I wanted to post an update on our Paid Memberships Pro business. In the style of other “transparency reports”, I will share real numbers for our business. I will also share some of my current goals and planning for the business.

Business is Growing

  • $3,000,000 in all time sales.
  • $810,000 in revenue in 2019, a 23% growth over 2018 sales.
  • Active on over 80,000 sites. We had about 4000 paying customers last year.

What About Profit?

Kim and I are the only 2 owners of the company. We also work roughly full time in the business.

Of that $67k/mo we made in 2019, the expenses broke down like this:

  • $50k for salaries and benefits, including for Kim and myself.
  • $5k for travel and marketing, a big retreat, going to and sponsoring WordCamps.
  • $3k for credit card fees and affiliate payments
  • $2k for server and other IT costs.
  • $7k of profit. (A nice portion of this was distributed as a bonus in December.)

Our Team is Growing

  • Went from 8 employees to 10 in 2019. (We hired 2 more in Q1 2020, for a total of 11 full time employees and one part time employee.)
  • We had our first full team retreat in September 2019. All but one of our employees was able to come to our home (and a nearby AirBnB) to spend a week getting to know each other better and planning for the future. Five of us hit up WordCamp NYC the weekend before and really made a presence there in our Nugget shirts. Good times bar hopping and eating pizza and ramen in NYC.

Product Developments in 2019

  • We launched PMPro v2.0, with a newly designed dashboard and support for Gutenberg and the REST API
  • We overhauled our proprietary customer support system used on the PMPro and Memberlite sites.
  • We ran a successful Spring Sale for PMPro and experimented with other sale formats in the fall.
  • We revealed Nugget, our PMPro mascot.
  • We released the Payfast Add-On for PMPro. Payfast is the payments processing service for South Africans and South African websites.
  • We launched PMPro v2.1, with SCA support for Stripe and native 8 decimal support for Bitcoin and other crypto currencies.
  • We finished the initial version of the Sitewide Sales plugin for WooCommerce, our first, non-PMPro ecommerce product.

Why write a transparency report?

Our primary goal as a business is to support the Paid Memberships Pro open source project. Our customers and partners will want to know that our business is sustainable and we will continue to maintain the project and provide quality support.

Many people will have ideas about how big our business is and how well we are doing. Some will think we’re bigger than we are and wonder why it takes so long to reply to support or push new features. Some will think we’re smaller than we are and wonder if we’ll be able to stay in business. If we share our real numbers, we won’t avoid criticism or concern, but at least these interactions will be based on facts.

I also want to help others looking to start a business like ours. By sharing our story, I hope others can learn what to expect when launching a WordPress plugin or a paid support plan around an open source project. These numbers are specific to our business and product, but they can be one more data point for someone deciding whether they should get into a business like this or keep pushing on a side project.

Hang in There

This is what $3,000,000 in sales looks like.

In 2012, one year after our launch, we were making little more than $1000 per month. I hear of so many projects at this stage of income, with the founders wondering if it’s worth it to continue working on the project or move on to something else.

When I hear someone taking a project to $1000 per month, I usually quip “That’s awesome. You’re halfway to $10,000 per month.”

I can only share our own experience, but it is as hard or harder going from $0 to $1000 than $1000 to $10,000. For Paid Memberships Pro, it took 2 years, 2010-2012, to get to $1000 per month. Two years after that, in 2014, we were making almost $10,000 per month. Two years after that, in 2016, we were making about $34,000 per month.

In 2019, we averaged $67,000 per month. If we can grow just a bit more than we did last year, we will cross the magical $1,000,000 per year milestone.

Targets and Budgets for 2020

We are targeting another year of 20% growth for PMPro, which would bring our average monthly revenue to $80k. With that in mind, we have hired 2 more developers to help with technical support and maintenance of the core plugin and Add Ons.

For the past few years, we’ve had this neat little cycle of reinvesting in PMPro that goes something like this:

  • Target a 20% annual growth in revenue.
  • Target a 20% profit margin.
  • Hire and invest in marketing such that we will break even if we match last year’s sales.
  • If we hit our growth targets, we will be on pace to earn 20% profit going forward.

Starting out with a breakeven budget, then growing 20% in revenue throughout the year, means that we typically end up banking about 10% of our total revenue, which has allowed us to save enough cash to build a comfortable cushion for the company. We could have been taking on debt to grow even faster, but this has been the right level of financial risk for Kim and I with this business.

What if we don’t hit our revenue target? Then we’ll have some hard decisions to make to cut costs or dip into cash or debt. If sales are flat or just growing more slowly, we can adjust our goals for the next year.

Onward

What are we working towards this year besides 20% revenue growth?

We’re looking to officially launch the Sitewide Sales plugin and along with it a generalized platform for us to release future non-PMPro products.

In Q1 of 2020, we implemented a new development planning and scheduling process based on the Shape Up book by Ryan Singer and the Basecamp team. It is going well so far. We will have a true feel for how this has improved things for us as we get through a few development cycles. “You should bid on that next cycle” has become the new “patches welcome” in our chats.

I’m hoping to pause at 12 employees working on PMPro, with a focus on scaling up the skills and effectiveness of the team we have vs hiring new people. This is about the size company I am comfortable with for now. I believe we will be able to figure out the natural boundaries and needs of this PMPro business and make it work with the team we have.

I’m freeing up some time and headspace to explore the various business opportunities related to PMPro and will consider pursuing those projects with smaller independent teams. Some other great companies in the WordPress space have spread out successfully this way. We can look to them as models and also figure out a version of that that works for us.

Follow Me

I’m going to be writing about my thoughts, struggles, and results in business more often going forward. Join my mailing list to get my new posts direct to your inbox.