Category: Stranger Studios

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.

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.

Mistake #2: Playing Designer

Unless your business is website design or something else in the arts, you don’t need a beautiful website. A nice looking website is a bonus, but make sure you’re working towards a functioning website instead of something that will look great printed out and framed on your wall.

Oftentimes when going over design mockups or newly updated websites, you’ll find yourself leaning back in your chair and staring at your homepage for a minute or two taking it all in.

Stop it! No one browses the web this way.

If you think of your website as a work of art, you surely will find little things here and there that might be smaller or larger or a little bit to the right. Resist the urge to do this.

If you know the primary goal of your website (see post #1), make sure the design focuses on that goal. Focus your design feedback on how well the design enables sales, mailing list sign ups, contact requests, etc.

As for website design, hire an experienced web designer at a decent rate and trust their instincts for what looks good.

If you hassle your designer with a lot of feedback on what “looks good”, they are going to shut down and move into “code monkey” mode where they just code up whatever requests you have. Unless you are paying bottom dollar (in which case you get what you pay for) you are wasting money by paying designer rates for code monkey work.

More importantly, micro managing a code monkey will not get you as good of a website as one where you control the vision via a strong primary goal, and an experienced designer controls the particulars of the site’s look and feel.

View all posts in this series here.

Mistake #1: Lack of Goals

One of the biggest mistakes made by website owners is to have a website that is totally detached from any business activity.

Maybe your website is beautiful. Maybe it has tons of information about your business. But what is the goal of your website?

What do you want people who visit your website to do?

If you haven’t thought about this question yet, do it. Some good answers are:

  • Buy my product.
  • Sign up for my mailing list.
  • Call me for an appointment.
  • Follow me on social media.
  • Fill out a contact form.
Mistake #1 has a corollary: Too Many Goals.
When asked what the goal of your website is, you might have answered 2-5 things. Great! Throw away items 2 through 5. What was your first answer? Do that. On your homepage.

WordCamp Philly 2012 Scholarship

I’ll be speaking at WordCamp Philly coming up October 20th and 21st this year. Would you like to join me? Do you want to mingle with the smartest folks working on WordPress in the Philly area and beyond? Are you a little strapped for cash and balking at the $20-$25 tickets?

Well have no fear. We’ve raised enough money via CharityGoal (runs on WordPress, show it some love) to provide scholarships for 4 attendees to this year’s WordCamp Philly. Big thanks to Scott Kingsley Clark who donated on behalf of the Pods Framework.

What?

  • One Saturday or Full Weekend Pass (your choice) to WordCamp Philly, October 20th and 21st 2012.

How?

  • Make sure you are available to attend. Did I mention the conference is October 20th and 21st, 2012?
  • Write in the comments here or by email (a) how you would benefit from going to WordCamp Philly, and (b) why we should pick you over the others trying.
  • Optionally, send out a tweet thanking @Jason_Coleman and @ScottClark for the opportunity.

I will pick four lucky winners by October 1st and announce them here.

Don’t Break The Code

Last Saturday at WordCamp Philly, I ran a session on “Building a Plugin in One Night”. Together, with about 50+ attendees, we brainstormed ideas for a new WordPress plugin that I could code that night.

The brainstorming went great, coming up with some good ideas… like plugins to:

  • Help first responders after a disaster (Big Idea!)
  • Add VIM (a Linux editor) shortcut commands to the Visual Editor
  • Disable the Visual Editor on a per-post basis (The Winner)
  • Allow users to create pages from the front end
  • Add easy donations
  • Log into WordPress via Google+ (Brian did it!)
  • Add syntax highlighting to the Visual Editor (Chris did it!)

The concept that the audience voted for me to work on was a way to disable the Visual Editor tab on a per-post basis. The motivation for this is the fact that the autoformatting of the Visual tab will sometimes break a complicated (or not so complicated) HTML structure ruining your code. Folks wanted a way to say, “Hey, WordPress, back off on this page/post”

And someone (you introduced yourself to me later, but I forget your name) came up with a kick ass name: Don’t Break the Code. It explains the purpose and also harkens back to my days at Haverford College, which has a strong social/academic honor code.

CharityGoal.com Launches, Support our Cause

I’m happy to announce the launch of CharityGoal. This is a site we built for a client whose goal is to enable anyone to raise money for any (legal) cause. CharityGoal gives you an easy way to accept donations online, a beautiful landing page, and quick access to social network sharing.

For those interested, the site is built on top of WordPress. “Causes” are custom post types. A custom plugin we developed allows users who have signed up to create new causes through a front end form and to manage that cause. The checkout code was pulled from the Paid Memberships Pro plugin (also developed by us and GPL) and tweaked to work specifically for this site.

So take a look. While you at it, I’d appreciate a donation to our cause: