Products Must Solve Problems

Products are a game of problem solving.

Find a problem, then build a solution. Sometimes you just want to build a cool thing, but you don’t start with the problem. If you have a perfect solution to a problem nobody has, you lose.

The sooner you lose the better, because then you can get to work solving a real problem. Products are not about perfection, or about building something cool. Building a product is about finding an imperfect solution to a real problem, and improving from there. If you hone in on that, you can change and rebuild until it’s right, and eventually you’ll win.

I recently saw an ad for a water filtration system. They were describing the merits of the product, how it worked so much better than other filters. They could have told me until they were blue in the face about how great their system is, I don’t care because I don’t have a water filtration problem. I will never buy this product, no matter how great the marketing is, unless they convince me I have a water filtration problem I wasn’t aware of.

Do you know what your customer’s problems are? Do you know which one specifically you are solving? Is that clear in your marketing copy?

Find out what your customer’s problem is, articulate it clearly, and provide the solution. Then you win.

A Brief History of the WordPress Product Business

In January of 1848, James W. Marshall discovered a shiny piece of metal in his Sacramento lumber mill. He showed the metal to his boss John Sutter, and the two discovered that it was gold.

Sutter tried to keep the discovery a secret in order to avoid endangering his agriculture business. He failed.

In the coming years about 300,000 forty niners came to California with high hopes of finding gold in the American River. One of the places they came was a small settlement called San Francisco, which at the time had less than 1,000 residents. Within 2 years it would have 25 times that.

Fast forward 150 years or so, and that small settlement now has over 830,000 residents. One of those residents is named Matt Mullenweg.

In 2003, this San Francisco resident, along with Mike Little, forked a piece of software called b2. In doing so, they created their own little nugget of gold that would be called WordPress. Little did they know they were laying the foundations for another gold rush, a digital, open-source kind of gold rush.

Continue reading

Announcing Holler Box: A Better Way to Communicate With Your Audience

I built a new thing, it’s called Holler Box.

It’s a WordPress plugin I built for myself, because I wanted a better way to communicate with my site visitors. For example, I did a webinar a couple weeks ago, and I was trying to figure out how to announce it to people on my website so they could register.

I’m a developer, and even adding a simple banner or popup to my site is not easy. I have to write the code, test locally, push to staging, test there, then push to production and do a final test. When I want to remove the message, I have to reverse the process. I’m busy, and that takes time.

I looked at other options, like complex popup plugins, but that was totally overkill for what I needed. I could add a banner or a blog post, but what I really wanted was to create a subtle notification quickly, and then move on to other tasks.

I didn’t know a good way to do it, so I created Holler Box.

What is Holler Box?

It’s a smart, non-intrusive notification box to help you convert more visitors into customers.

Announce a webinar, collect email optins, show sale notifications, (fake) live chat with email capture, forms, and lots more.

Choose where and when you show it, and to which visitors. For example, show your sale announcement only on the pricing page to returning visitors. Show your email optin only on your blog posts.

It’s fully customizable and you can put just about anything you want in it.


Personalization filters are really important, because I don’t want to show everyone the same thing. I want to show potential customers one thing, and first time visitors something totally different. My checkout page should not show the same message as my blog page.

For example, I want to show an invitation to a webinar to a first time visitor, or an email opt-in. If someone else is a returning visitor on my pricing page, I can show them a notification that someone just purchased, or ask if they have any questions.

I also want to track how well those messages are doing, so I can optimize and improve them over time. All that and make it beautifully designed and easy to use.


There’s a Holler Box on this page at the bottom right, you can also see examples at the Holler Box website.

Simple message

Email opt-in

Sale notifications

Faux Live Chat

Why not real live chat? I’ve used several live chat providers, and I hate it. It’s distracting, time-consuming, and customers use it for technical support even if you explicitly tell them not to. I just want a way to capture emails so I can follow up with customers later. Faux chat FTW!

You can put whatever you want in the notification, including video, your latest blog post, a feedback form, and lots more.

I think this would work great for membership sites, to show members only messages to logged in users, then a different message for potential new members. The possibilities are endless.

How much is it?

You can download it free on here.

There will be a Pro version out very soon that includes the Holler Banner, better filtering, automatic message deactivation, more conversion data, support, and more. That will be announced soon on the Holler Box website.

Sign up for our email list if you’d like to be notified about Holler Box updates.

Don’t forget to give Holler Box a 5 star rating!

Marketing: What Works and Doesn’t Work (For Me)

Being a business owner who codes is an advantage in some ways, but also a major disadvantage.

It’s great to be able to build your own products without paying someone else, and do it on your own timeline. The problem is that it’s nearly impossible to pull yourself away from the code when it’s time to grow the business.

I’ve had my nose stuck in product code on and off for 3 years now, but recently I’ve decided to shift my focus to marketing. This is something I’ve done before, and it seems to come in cycles, depending on what my business needs.

Over the years I’ve tried many different things related to marketing, most of them have fallen short. A few things have worked, I thought I’d share some of my journey up to this point.

What Has Not Worked

Most of what hasn’t worked for me can fall in the “Little Stuff” category. A/B testing button text and site copy, testing a new paid tool (like cart recovery), minor website changes, and half-ass content efforts.

Cart Recovery

I tried a cart recovery tool, and it “recovered” one sale in two weeks. I’m 99% sure I would have recovered that sale without the tool, because the tracking methods for these type of tools are way too biased.

I know others who have had success with cart recovery tools, I just have a single product and no one is going to forget what they put in their cart. Cart recovery is useful for an eCommerce store with lots of products, just not mine.


I’m a big fan of the idea of dunning, but it’s more for SaaS businesses doing monthly payments. Dunning basically retries failed subscription payments multiple times, and sends the customer several emails trying to get them to update their payment info.

I have been using a dunning system, and have had “$798” recovered in 2 months. I put that in quotes because the payments were recovered with retries, which Stripe does automatically anyways. I don’t think the dunning system really did anything.

I charge for yearly subscriptions, and the volume is not high enough to make dunning worth it. I think if you are doing a high volume of recurring subscription payments (several per day), then it could be worth it.

A/B Testing

I’ve seen some success with A/B testing, but only when I test major changes. Changing button text, or a small block of copy has not produced significant results.

I believe in A/B testing, but I think it’s important to focus on big changes.

Minor site changes

Changing a few lines of text here and there doesn’t make a noticeable impact.

What works really well is re-thinking your entire website based on knowing what your customers are looking for. We re-thought our entire message and mapped it out from the homepage to the checkout page, and re-wrote most of our site copy based on that message. That’s the type of big change that can make a difference.

Other things that haven’t worked well are basically anything we haven’t put our full effort behind. That includes paid ads, affiliate marketing, and regular blog posts. We just don’t have the time to optimize multiple channels, and it is clear that we need to focus instead of using the shotgun approach.

What HAS Worked

I’ve seen the most action from major changes like major product version releases, pricing changes, and rewriting site copy.

When your company is young and you have a small team, you have to focus your time where it will make the most impact. A/B testing a minor change is a waste of time if you could be preparing for a major product update.

Creating a better product

Obvious, but so important.

AppPresser 3 is such a huge improvement, it overshadows any marketing efforts to date. Marketing is important, but only if your core product is solid. If it isn’t, it doesn’t matter how many people you can drive to your site with a few ads or blog posts.

Raising prices

We raised prices about 15% a month ago, and introduced a higher tier.

Any time you raise prices, you get a bunch of sales from people trying to get in at the lower price point. It’s a great way to generate a bunch of sales without providing a discount.

After we raised prices, sales did not dip at all. We essentially just got 15% more revenue without doing anything else. We introduced a higher tier because our most expensive package was the most popular. We added a very desirable feature to the new package, and increased the amount of apps you can create. So far about 20% of purchases have been of this new higher tier, which is 56% more expensive than our previous highest tier.

It’s important to add the caveat that this pricing increase was well justified, well thought out, and executed transparently. We didn’t just raise prices for the heck of it, we added a tremendous amount of value before upping the cost.


I never attend webinars personally, but other people love them.

I do webinars a couple times per month for AppPresser, and usually get 100-300 people registered, and about 40% of registrants attend live. We don’t have free trials for AppPresser, so demonstrating it is important. I don’t think webinars would be as important for someone selling a premium WordPress theme, but it works well for me.

Email Opt-ins

I recently put some extra effort into my email marketing, and I think it has paid off.

I created an ebook that I thought my audience would be interested in, which is basically just a compilation of old blog posts. I created an image and a form in ConvertKit, and put it in conspicuous places on my site.

So far it’s not killing it, but I have a steady amount of signups each day. I think if I try some other ebook ideas, I could increase signups even further.


I’ve also worked hard on segmenting my email list. Each person who signs up gets a tag in Convertkit, then I tailor my messages based on those tags.

For example, I know who signed up for a webinar, who already purchased, who signed up for my ebook, etc. I have automated follow up messages based on what they did, that give them more relevant information.

If they interact with a message, I can move them to a “hot leads” segment that is more sales focused. I can also be more selective on my email broadcasts, for example I exclude customers who already purchased from any emails about discounts.

Many of my recent marketing efforts stem from the advice of Syed Balkhi to focus on the bottom of the funnel. That means I’m working hard to convert the visitors I’m already getting to my site, instead of trying to generate more traffic.


I’m no marketing guru, but here’s what I have gleaned from my experiences thus far.

Make big changes if you want big results

Don’t over-optimize if your revenue is small

Focus your marketing efforts, instead of the shotgun approach

I would love to hear your experiences with marketing fails and wins in the comments.

Net Revenue Stats in Easy Digital Downloads

One of the most important metrics for my business is net revenue, but it’s a harder number to find than you’d think.

I use Easy Digital Downloads, and their reporting tool and app shows you a revenue total. For example, let’s say you see this in the EDD reports:

Total earnings this month: $10,000

You had $11,000 of gross sales, and $1,000 of refunds, then EDD shows you $10,000 as the total. Sounds ok so far.

The problem I had is that refunds are only counted if the purchase date was this month. This may not seem like a big deal, but it can actually cause the monthly total to be off by thousands.

For example, let’s take the numbers from above, but you give another refund for someone who purchased last month for $500. You issue the refund, and your earnings this month still show $10,000, not $9,500. Your earnings for last month go down by $500, but not this month.

I am only able to put $9,500 in my bank account this month, but my sales show $10,000. That may not seem like a big deal with these numbers, but the problem gets worse with higher revenue.

I think a rolling 30-day sales total is more important than “this month” and “last month”, and I want to see net revenue with all refunds accounted for. For this reason, I changed my plugin EDD Metrics to show net revenue, by using this equation:

$net_revenue = ( revenue from 60 days ago until now ) - ( revenue from 60 days ago until 30 days ago )

This ensures we have all refunds from the last 60 days accounted for in our net revenue number. You will now see this as the default revenue number in EDD Metrics, it will probably be lower than the total you see in your EDD reports. (Of course real net revenue would subtract gateway fees, but I have no way to tell what your gateway fees are)

I also added recurring revenue stats with comparisons, and made some other improvements. Download version 0.6 from

To be clear, I’m not accusing EDD of doing things the wrong way, I just prefer to see my revenue numbers a different way than they do it. That’s why I made my own plugin.

7 Figures

Earlier this month my sales counter app for AppPresser ticked over to 7 figures.

This is pretty exciting for me, it’s a major milestone for my career in selling products. It took us about 3 years to get to 1 million (not counting other revenue), and and it feels really good to reach this milestone.

It feels a bit awkward to share this, because I don’t want anyone to get the wrong idea. It’s not meant to sound prideful, in fact many people will read this post and think that our revenue is really low.

We have not had rocket ship growth like some of my colleagues, but we have always been profitable and have grown steadily. This year is looking to be our biggest growth yet for 2 reasons: AppPresser 3, and recurring subscriptions.

AppPresser 3 is off to a great start, our customers are confirming that it is as good as we thought it would be. The combination of a hugely improved product, along with a SaaS based business model is setting us up for a lot of great things.

In March we will begin to get yearly subscription payments which is projected to boost our renewal rate by 30-50%. I’m hoping this plus a decent growth in new sales will amount to more than double our growth rate in 2016.

The next major goal of mine is to be a 7 figure per year company, and I think we can do that within the next few years if we continue at this pace. I think this will require broadening our market by either expanding beyond WordPress for mobile apps, or creating a new product.

I hope I haven’t tooted my own horn too much in this post, but I just thought I would share.


2016 WordPress Business Review

2016 brought a lot of change in the WordPress product space, and lots more is coming in 2017.

Companies are getting bigger and more mature, hosts are pushing their weight around with acquisitions, and new players are entering the game. Established products are still doing well, but new products by old companies are gaining momentum. Many plugin authors have their eyes on SaaS for 2017, because of it’s superior business model.


GoDaddy acquired ManageWP and WP Curve, and these won’t likely be the last.

Hosts are getting interested in products that can add value to their infrastructure, and offer a differentiation from their competitors. ManageWP’s new dashboard fits the bill, and WP Curve brings a team that can help GoDaddy bring in extra revenue through custom development.

There was a great interview at Publish about this topic between Steve Lee and Josh Strebel. The main takeaway I got from that is getting acquired can be very different than what you see in the media.

It takes a lot of time, effort, and money to make an acquisition happen. Many of the valuations you see in larger transactions (i.e. Instagram) don’t apply to smaller companies. The valuations mentioned for some of GoDaddy’s purchases were 1.x. Meaning 1 year of revenue times 1.x. That would be a nice payday for a founder, but it doesn’t make much sense unless you are doing a lot of revenue.

Even a 1M/yr company would be a disappointing payday in my opinion. Let’s say you get 1.2x revenue, some cash and some stock, and you are a 50% partner. You end up with around $500K, minus taxes it’s more like $325k. That would be nice if you really want out, but you aren’t going to retire on $325k.

Hosts as Competitors

Hosts like GoDaddy have a lot more money to throw around than the average WordPress product company, and with their entry into this space, they become a competitor.

The more features that hosts add to their platform, the less room there will be for WordPress products that do the same thing. For example, if your host has nightly backups, do you really need a backup plugin?

If your host offers free security scanning and cleanup, do you need to pay for a separate product that does the same thing?

You could argue that the individual products are better at their job than the host, and they can certainly retain some customers because of that. The point is that if you have a product that works well with hosting infrastructure, you should be aware of this threat.

Will your plugin get acquired?

Another topic discussed at Publish was that plugins are not in a good position to be acquired. Since they are all GPL code, it’s difficult to explain to a buyer what they are paying for. Acquiring a company that owns several products makes sense, but if you have a small plugin business I wouldn’t hold your breath for an offer.

ManageWP has a proprietary SaaS, and it’s easy to see how that fits into GoDaddy’s business model. It’s much easier to sell a SaaS product, it’s something tangible and predictable.

Many product creators have their eyes on SaaS for 2017, but it’s not an attempt to get acquired.

SaaS All the Things

AppPresser is moving to a SaaS model in 2017 with AppPresser 3, and I know of at least 2 other popular products moving that direction. There will most likely be many more than that.

Why? Because a SaaS model is superior in many ways, including customer experience and revenue model.

Customer Experience

The customer experience is a huge one. A SaaS allows customers to experience your product without having to setup their own WordPress site. This is huge.

Squarespace and Shopify are popular because they are so easy to use. We need to bring this type of experience to WordPress.

For a long time WordPress plugins have been all about “build X inside WordPress.” You pay $29/mo for accounting software? I’ll make a plugin that does it for $49 one-time payment, and you host it yourself! We’ve done the same for a CRM, a/b testing, invoicing, eCommerce, and even mobile apps.

The problem is that building anything and everything into WordPress is not always a good thing. If you have a tiny business and a low-traffic site, it’s cool to put everything in WordPress. A business that has thousands of clients, invoices, products, and sales will not have a good experience doing everything in WordPress.

I’m not knocking any single product, just the idea that building every feature a business needs into WordPress is a good thing. I would rather use an external SaaS for almost everything not directly related to site content, such as accounting, a/b testing, and anything related to email. A SaaS can provide a superior experience because it is focused on one thing, and it does it really well.

Revenue Models

The revenue models are superior in a SaaS because we have the option of monthly billing. You can’t do that with a plugin. I don’t think that monthly billing is the holy grail, in fact if you do it wrong you will lose money.

For example, if I divided up our Agency Bundle payment of $499 to a monthly payment of $41.50, my lifetime customer value might go down. This would be due to the fact that most people won’t make 12 or more payments because of churn.

The biggest appeal is not the monthly billing, but the fact that you are providing a service, and customers will lose it if they stop paying. It should increase renewal rates, which are notoriously low in the WordPress plugin space.

Innovate or Die

Some companies, such as iThemes, have been around for 9 years.

As the businesses in our space mature, they are not coasting on the success of older products, they are innovating new ones. For example, BackupBuddy has long been iThemes’ flagship product, but they have continued to drive growth with Sync and Security.

Pippin Williamson of Easy Digital Downloads has been involved with two new projects, AffiliateWP and Restrict Content Pro. These two projects combined are now more profitable than Easy Digital Downloads, which he has publicly noted is not profitable right now. (EDD is still a very healthy company, and they plan to be profitable in 2017.)

It’s not easy to create more than one successful product, and even guys like Cory Miller and Pippin Williamson have failures. Innovation is key, it truly seems like if you aren’t growing, you’re dying.

I think the innovation in 2017 is going to be in moving towards SaaS. We seem to be running out of broad product categories that don’t have a couple dominant players, so we will have to get more creative within those categories.

What trends do you foresee in 2017? Let me know in the comments.

Some WP-API Tips for WordPress 4.7+

Now that the WP-API is in core, here are some useful tips for you.

Filtering Posts

Filtering posts was a bit confusing for me at first, because the documentation seems to suggest you would visit an endpoint like /posts/category/40 to get posts from a certain category.

Instead, you are supposed to use arguments in your request. For example, to show a certain category, you would make a GET request to this url:

The ’40’ at the end is the category term ID. You can do the same for tags by changing the parameter to ?tags=XX.

There are other parameters available, such as author, orderby, exclude, and more. For a full list, please see the “Arguments” section here.

You can string parameters like this:


There is no longer an option for ?filter, which was really handy for custom taxonomies. I would guess this will be added back at some point, but for now you can use this plugin.

That allows you to use WP Query arguments in your request, for example:[name]=the-slug

Custom Post Type Support

I’ve covered this before, but the WP-API won’t show CPTs by default. To add them:

add_action( 'init', 'sb_post_type_rest_support', 999 );
function sb_post_type_rest_support() {
	global $wp_post_types;
	//be sure to set this to the name of your post type!
	$post_type_name = 'product';
	if( isset( $wp_post_types[ $post_type_name ] ) ) {
		$wp_post_types[$post_type_name]->show_in_rest = true;
		$wp_post_types[$post_type_name]->rest_base = $post_type_name;
		$wp_post_types[$post_type_name]->rest_controller_class = 'WP_REST_Posts_Controller';

In the example above, your products would then show at the url wp-json/wp/v2/product.

You can also set ‘show_in_rest’ to true when registering the post type instead.

Custom Endpoints

The documentation covers this fairly well, but if you want to add your own endpoint it looks like this:

add_action( 'rest_api_init', function () {
	register_rest_route( 'sb/v1', '/author/(?P<id>\d+)', array(
		'methods' => 'GET',
		'callback' => 'my_awesome_func',
	) );
} );

 * Grab latest post title by an author!
 * @param array $data Options for the function.
 * @return string|null Post title for the latest,? * or null if none.
function my_awesome_func( $data ) {
	$posts = get_posts( array(
		'author' => $data['id'],
	) );

	if ( empty( $posts ) ) {
		return null;

	return $posts[0]->post_title;

You can then send a GET request to and get all the posts by the author with an ID of 1.

Post Meta

Post meta doesn’t show up by default, you have to add it. Here’s an example for adding the WooCommerce price:

add_action( 'rest_api_init', 'sb_register_post_meta' );
function sb_register_post_meta() {
    register_rest_field( 'product', // any post type registered with API
        '_price', // this needs to match meta key
            'get_callback'    => 'sb_get_meta',
            'update_callback' => null,
            'schema'          => null,

function sb_get_meta( $object, $field_name, $request ) {
    return get_post_meta( $object[ 'id' ], $field_name, true );

CORS Errors

If you are getting CORS errors from your API requests, you can try adding this header to your site:

add_action('send_headers', function() {
  header("Access-Control-Allow-Origin: *");

CORS is there for safety, so adding this may be unsafe. Please consult a security professional before using this code on your site.

That’s all I’ve got for now, leave your tips in the comments.

EDD Metrics Plugin Released

I’ve been working on a new plugin for Easy Digital Downloads called EDD Metrics, it’s now released on the WordPress plugin repository.

This plugin gives you valuable metrics on your business with comparisons to previous periods. If you are familiar with Baremetrics, this is basically a copy of that.  I love Baremetrics, but it just doesn’t work for the type of business I have.

WordPress based businesses like mine use a mix of payment gateways, recurring and one-time payments, discounts, renewals, and more. The gateway itself does not provide enough details to get the metrics I wanted, you have to get those from EDD itself.

Download the Plugin

To use EDD Metrics, login to your WordPress admin area, go to Plugins->Add New, and search for EDD Metrics. You can also download straight from the repo here.

Find the metrics under the Downloads side menu, under Metrics.

If you find any bugs, please report them on Github here, not on Also feel free to contribute!


The Metrics Dashboard


The revenue detail view



Here’s a couple of animated gifs if you want to see it in action.

EDD Metrics Dashboard

EDD Metrics Revenue Detail

Included metrics

  • Revenue
  • Sales
  • Average revenue per customer
  • Estimated yearly revenue
  • Estimated monthly revenue
  • Refunds
  • Discounts
  • Renewals, and renewal rate (if EDD Software Licensing is active)
  • Subscriptions (if EDD Recurring Payments is active)
  • Earnings by download
  • Earnings by gateway
  • New customers

All metrics can be viewed for any time period by using the date picker in the top right corner of either screen. It’s all ajax based, and there is a 15 minute cache to speed things up. This plugin doesn’t work great for long time periods if you have a lot of sales, but should be fine for most shops. If you’d like it to work better feel free to contribute 😉

Have fun, post issues on Github, and share on Twitter!


It would be better if your product didn’t exist

It’s true.

No one wants to use your product, and it would be better if they didn’t have to. This is not just about crappy products, it’s about great ones too.

Using your product is a necessary evil, because a better way doesn’t exist yet.

It would be better if I didn’t have to use Google to look stuff up, I just had the information accessible in my brain already. It would be better if I didn’t have to use my phone to text, I could just communicate with my thoughts. It would be better if I didn’t have to use your website builder, I could just magically have the site of my dreams.

I’ve taken the title and most of these thoughts from this awesome Smashing Magazine article. I highly recommend reading it.

Maybe this thinking isn’t new, but it’s not how I think about building my product. I focus on designing great app building tools, and making sure there are enough features. I try to write clean code and design a sleek product, but what if I focused on getting out of the way instead?

Nobody wants to build an app, they want an app in the app store. I focus on making my tools great, but what if I focused on getting out of the way?

Instead of adding settings and features, I should focus on reducing complexity. I could reduce the amount of steps it takes to get an app into the app store. I could make it easier to add my plugins, use better default settings, and automatically compile the app.

I could help people use my product less, and get the same result.

Are you helping people use your product less?