September 6, 2016

Apply Filters is looking for a new sponsor! If you are interested, please contact us. Sponsors help us keep the show running and get a shoutout.

Today’s episode focuses on updates from Brad and Pippin, as well as mailbag questions.

Brad’s Update

Brad is testing a new product called Mergebot. It’s coming along well. It hit some snags, but no major issues. They started working on scaling and they’re getting really close to finishing the internal testing. Brad explained database sharding and how that works in the WordPress world. They’re testing the 1.2 release of WP Offload SP and doing a site redesign.

Pippin’s Update

Pippin: Pippin has been working on RCP updates, including rebuilding RCP into a standalone product. They released an add-on called RCP Grout Accounts to benefits schools and small teams. These groups can purchase a group membership for convenience and savings. They’re also approaching the beta version of Affiliate WP 1.9 and putting out software licensing for EDD version 3.5.

Brad and Pippin answer some mailbag questions.

Some of the topics covered include:

  • Marketing tips for plug-in offers.
  • Tips on how to write for your audience.
  • Information on sales trends and the ebb and flow that Brad and Pippin notice.
  • How to deal with slow periods when sales are declining.

Links and Resources

Brad’s article about Mergebot

Ash’s article on why CDM isn’t a silver bullet for performance

Gilbert’s article on scaling a cron

Pippin’s article on rebuilding the dying product

EDD Software Licensing Add-On on Twitter

Learn more about sponsoring Apply Filters

If you’re enjoying the show we sure would appreciate a Review in iTunes. Thanks!

Transcript
INTRO: Welcome to Apply Filters, the podcast all about WordPress development. Now here’s your hosts, Pippin Williamson and Brad Touesnard.

PIPPIN: Welcome back to Apply Filters, Episode 67. Today, Brad and I are going to go over some updates on things that we’ve been working on, and then we’re going to jump into some mailbag questions from listeners that you guys have been kind enough to send us.

First, however, if you’re interested in sponsoring this show, you can do so at ApplyFilters.fm/sponsorship. It helps us to cover the production costs and to bring you this. It’s greatly appreciated, and we can give you a little shout out for your team, your product, or your service.

Brad, what have you guys been up to in the last couple of weeks?

BRAD: We’ve been testing our new product, Mergebot.

PIPPIN: Is testing coming along well?

BRAD: Yeah, we’ve hit some snags, but no kind of major brick walls, I like to say. We hit quite a few brick walls throughout the year while we were developing it, which really kind of slowed things down. Yeah, the bugs have been relatively minor in comparison to those, and so we’re just working through them. We started working on scaling, thinking about scaling and how that’s all going to work. Yeah, it’s coming along and we’re getting really close to finishing up our internal testing.

PIPPIN: Can you elaborate a little bit on how you’re testing the scaling? I’m assuming in this case you’re talking about when you have a site that has a massive database.

BRAD: Yeah. If you have a massive database, that doesn’t really matter because we don’t store your whole database. We only store the changes that are made. As you make changes locally, we store those in our cloud app.

PIPPIN: Okay, so the scaling in this case, the number of changes that have to be done?

BRAD: The number of changes that have to be done and the number of users that are uploading those changes to our app, so the more people we bring on and are using it simultaneously.

PIPPIN: Oh, right. I forgot that you guys have the hosted side of this.

BRAD: Yeah. Yeah, so these queries are going to go up to our cloud app. That’s actually kind of the problem is the difficulty with scaling is writes. Database writes are hard to scale. Reads are much easier to scale because you can have a master database to do the writes to the database. Then you can have clones that are read only, so the master replicates to the clones. You can scale the read only ones fairly easily, but you can’t really duplicate the master database. Then you have to get into what’s called database sharding.

Anyway, our plan is I think we can get away with using Amazon RDS for quite a while before we have to build out database sharding. That’s the plan is to start with RDS and then scale. Scale the app as needed, I guess. Have you ever heard of database sharding before?

PIPPIN: I’ve heard of it several times. I’m not really familiar with it.

BRAD: Yeah.

PIPPIN: I think I know the basic concept, though I would be afraid of being poorly wrong if you asked me to explain it to you.

BRAD: Yeah, I’m not terribly well versed in it because I’ve never done it, but from what I’ve read. An example in the WordPress world is you know how in WordPress, WordPress MU, each set of tables has a different prefix?

PIPPIN: Yeah.

BRAD: Right. Theoretically you could put a set of tables on a different database server and then reference that server and that prefix on that server. That’s kind of the idea behind sharding. That’s one way of doing it.

PIPPIN: Splitting it up so that the entire database isn’t on a single resource. You split it up into little shards and so you can have it kind of offloaded.

BRAD: Right.

PIPPIN: Okay.

BRAD: Then the app can reference the data on server X, Y, Z, depending on where it’s sitting. Yeah, that’s the basic idea of database sharding. But, yeah, we’re not going to do that right away. That’s kind of like the next level stuff.

Anyway, we’ve been doing that, and we’ve been testing the 1.2 release of WP Offload S3, which is a big change for that plugin. We used to store the Amazon S3 URLs in the database. If you uploaded an image to your media library and then inserted that into a post, the URL in the post would be the Amazon S3 URL, the CloudFront URL, or however you have it configured. But we’re no longer doing that. We’re no longer storing that URL in the post content. We’re going to instead use filtering to change it on the fly.

PIPPIN: Which I believe we talked about quite a while back.

BRAD: Yeah.

PIPPIN: On some of the pros and cons of doing that.

BRAD: Yeah. Yeah, we had a debate about it and stuff. Anyway, we’re well down that path. I think we started like six months ago working on this, so.

PIPPIN: Have you been able to definitively prove that one is faster than the other?

BRAD: Oh, yeah. It’s definitely better to do it the way we’re changing it to because, for example, let’s say you change one of your settings that affects the URLs. Well, right now we have to do a find and replace on all your content. If you have 10,000 posts and an equal number of media library items, that’s going to take a really long time to go through all that to do the find and replace.

Whereas with this new system, it’s instant because we don’t have to run that find and replace and we’re doing it on the fly. You change your settings and they take effect immediately.

PIPPIN: Would I be right in saying that that will be minutely slower for loading a page that has those resources on it, but in terms of the overall server resources and usage it’s significantly faster?

BRAD: Yeah. Yeah, it’s barely even significant because there’s already filtering going on in WordPress. This is just like another little tack onto that, really. You think about short codes, responsive images. All that stuff is filtering.

The important point is to have caching in place and not have every request have to run all this filtering. Caching is important for better performance here.

I’ve also been spending a lot of my time on the redesign of our site. That’s been tying me up. I also wrote an article about Mergebot and how it would work and posted it on our blog a couple weeks ago.

PIPPIN: Go back one step. You said you guys are doing a site redesign.

BRAD: Yeah.

PIPPIN: Are you doing the site redesign? Is it someone else in house? Are you shipping that out to someone?

BRAD: Yeah. We had hired a designer to design it, and then I hired a front end coder to cut it up into responsive design. Now we’re applying that to our WordPress theme. We’re doing that part ourselves, and it’s taking a long time.

I just went through all of the “my account” stuff, like the checkout. The designer didn’t design any of that, so I’ve been kind of using his design as a guide and just applying it.

PIPPIN: Yeah. We’ve been in the process of redoing the Affiliate WP site. I always forget just how big that project is, any project, when you rebuild a site.

BRAD: Man, it’s so crazy.

PIPPIN: I don’t think I’ve really talked to Andrew in months because he’s just been in his zone building this site, and it takes forever. There’s so many pieces.

BRAD: Yeah. I’d like to eventually have dedicated members of the team to the site, just to the site. Their full-time job wouldn’t be just working on the site. I think they’d run out of work. But maybe–

PIPPIN: Maybe they own that.

BRAD: Yeah, it’s like half of their time or something would be spent working on the site or something.

PIPPIN: Yeah. We’ve done that with both Andrew and Sean across our four to five sites.

BRAD: Right.

PIPPIN: I think it works really, really well.

BRAD: Yeah, I’m looking forward to that because right now it’s just me and as much time as I can steal from Ian Poulson, who is also working on Mergebot, and so it’s kind of crazy right now to be pushing two. We’re pushing Mergebot forward, but I also want to get the redesign out, and it’s just competing priorities that are both high. Yeah. Mergebot has been kind of edging over the redesign.

PIPPIN: Once Mergebot is out, I’m sure a lot of that time will get freed up.

BRAD: Oh, yeah. I’m sure once Mergebot is out, there’ll be nothing to do on it after that. As much as I’d love to believe that.

PIPPIN: Yeah, that’s never going to happen. But at least you should be over the hurdle of the massive development of building the dang thing.

BRAD: Yeah. Yeah, yeah. Yeah, I agree. Yeah. I think once we have paying customers for Mergebot, we’re going to have to start hiring probably and start scaling up that part of the business. But that’s going to take resources to do as well, right? It’s like a chicken and egg problem.

A couple other articles that we published on our blog to take a look at: Ash wrote an article that a CDN isn’t a silver bullet for performance. The reason that he wrote that is because we were getting a lot of people buying WP Offload S3 thinking that it was going to magically make their site super fast, but they’re running their site on not great Web hosting and doing a lot of things that they could have fixed.

PIPPIN: Right. It is an improvement, but it is not a “be all, end all” of site performance.

BRAD: Yeah, there’s a lot of things you should do before you bother investing in a CDN. There’s tons of stuff, and so Ash lays that all out in that article so that now we can point people to that when they come to us thinking we’re going to solve their site performance issues. That’s a really great article. It’s going to help us out.

Gilbert told the story about his side project, so Web Uptime. His article was about scaling a cron, so checking hundreds of sites every minute using cron. One of the things I had no idea about is that with cURL, you can allow it to fire off a bunch of asynchronous requests in one call. I had no idea. Did you know about that?

PIPPIN: I do a little bit. I haven’t played with it, but I was skimming the article. I think that this is related to some of the improvements that were being put into WordPress 4.6 with the WP HTTP API. WordPress core replaced the HTTP class with a request library that–

BRAD: RIMAQ, yep.

PIPPIN: RIMAQ. There we go. That’s the name I was looking for. That he wrote and I believe it works kind of similar to this where it allows you to do asynchronous requests because that was one of the big benefits of that improvement that they put into core. And so that was the first time I had ever heard of it, and then this is now the second time.

BRAD: In WordPress 4.6, the request class got included into core. I think all of the HTTP stuff is kind of proxying to that library now. Have you had any issues with that? We’ve been running into a few issues.

PIPPIN: I haven’t seen anything that we’ve definitively tracked down to be due to that. We have had a couple of weird issues where all of a sudden requests don’t work for somebody. For example, we have a customer using MailChimp and suddenly their requests to MailChimp don’t work. They just get, like, a 500 error coming back. We haven’t tracked it down, but the speculation was that it might be related to those changes.

BRAD: Right. We’re still trying to figure out the problems. It seems like a lot of our Australian customers are having problems for some reason. I don’t know if it’s a certain host in Australia or something to do with DNS in Australia or what. We’re still trying to figure it out, but it’s a weird one. Otherwise it would be an easy one. Anyways, what have you been up to?

PIPPIN: Just like usually for the last five months, we’ve been cranking out some more RCP updates. My focus really for the last few months has been to rebuild RCP into a premier product that stands on its own and it’s kind of at the same level as Affiliate WP and EDD. Anyway, just a few days ago, we released one of the next big updates that is moving us further in that direction. That was group accounts.

We released a new pro add-on called RCP Group Accounts that allows organizations, whether you are a school, a corporation, a small team, or whatever, to buy an account on a membership website and then add sub-members to that account. Let’s say that I’m a teacher. I want to buy access to an education course for all the students in my class. I, as a teacher, would go register an account, and then I can add all of my students to that account. Then they are linked directly to my account, so when my account expires, they expire. If I upgrade my account, they get those privileges as well. But the sub-members don’t have any billing. They don’t have anything like that.

And so we released that, and that’s something we’ve been working on quite a while. I’ve been working on it a little bit in some for or other for about two years now. I originally built it for CGCookie, my brother’s website, for that exact purpose of them being able to sell school accounts, basically. Then it sat for a while. Then about a month ago we brought it back and started working on it to make it a standalone plugin that we can release. And so we released it, and so far the feedback has been really positive on that.

Then immediately after that, that was kind of one of the last add-ons that we felt like we needed to build in order to get RCP up to where we wanted it to be. Once we had that, now we’re kind of at that point where now we just want to go through and polish and improve all the existing features as opposed to building a bunch of new ones. The last five months have been basically cranking out all of the features that we’ve been missing for a long time that the plugin needed in order to be a full-scale membership platform.

Immediately after the group accounts update went out, I published a blog post titled Rebuilding a Dying Product, and it was just a little bit of a back story of how we took RCP. It’s one of my oldest plugins that launched in January 2012, so it’s a little over four years old. Maybe it was 2011. How it did really, really well for me for a long time.

Then as EDD and Affiliate WP kind of came around and they started taking up much more of my focus, RCP started to lose focus and very much became a side project as opposed to one of the primary projects we would work on. Because of that, sales dwindled. Customer happiness dwindled. Basically the product started to make its way towards the grave. And so this blog post was a little bit of a back story on how we decided we had to either sell it, let it die, or rebuild it, and so we decided to rebuild it and some of the things involved with rebuilding that.

We’ve got a long way to go, but so far it’s been successful. In two or three weeks, we will be at the six-month mark. My original goal was to double the plugin’s revenue in six months. We’re not quite there, but we got to about 1.6, and it’s still steadily going up. So far it’s being successful, I think.

BRAD: Was this your number one requested feature?

PIPPIN: Group accounts wasn’t. It’s not the number one requested feature, but it was frequently requested. One of the important things about group accounts is that nobody does it. There’s only one other plugin, I think that offers group accounts, and that’s iThemes Exchange. There might be one other that I’m forgetting, but it’s a rare feature. The thing is that for the people that need it, you can’t do without it. You have to have that feature, and so it is a fundamental feature for a large set of users, those being schools, organizations, corporations, et cetera.

Take a school for example. The last thing they want to do is have every single one of their students buy a separate account and then have to remember to get all of those cancelled or make sure that they’re all up to date with billing or what have you. They want one.

The same goes for corporations. Management of those financials is extremely important. And so if you can limit that to one account that then grants access to everybody else, that’s going to be much better than trying to have everybody have their own or to share a login.

The other thing here is that because each member technically has their own account that falls underneath the umbrella, they all have their own logins, their own passwords, et cetera. It’s a really important feature for a small set of users. There were a lot of other features that I’ve talked a little bit about in previous episodes that we’ve built as well, but this was kind of one of the last ones on our bucket list that we had to build. Actually, we have one more coming up, but it might be a little bit longer.

Other than that, we are approaching our first beta version of Affiliate WP 1.9, which is a pretty exciting release for us. There are a lot of cool things in it. Our original plan was to start internally beta testing it by putting it on our live sites yesterday. That didn’t quite happen, so that’ll probably be either today or tomorrow. But there are a lot of things that we’ve done in this that I’m really excited for, for what they allow in the future.

The first one is we built a complete REST API. Well, we built a read only REST API. We haven’t done the write side yet. It’s a REST API that extends the WordPress core endpoints, and it’s working really, really well.

We decided we didn’t like the idea of requiring our customers to use OAuth or Basic Auth, for one because OAuth is just ridiculously difficult to get up and going as a consumer and Basic Auth is just not very secure. And so what we’ve been doing is building a custom authentication method using API keys based off of what we built in EDD three years ago. That was a lot of fun.

Then that API also extends a new, internal, data structure that we built. We built new objects for all of our database schemes. We have affiliates. We have referrals. We have visits, creatives, and payouts. And so we built new objects for all of those, which we had never had before. We had never had a formal object for those in Affiliate WP, and we built those for 1.9, which then led into building the REST API very easily.

BRAD: Nice. Yeah. It feels good to get things, objects for everything, doesn’t it?

PIPPIN: Oh, absolutely. That also allowed us to very easily build WP CLI commands, and so now we have CLI commands that allow you to interact with all of those four objects from the command line. We also introduced a new object for payouts, so right now, or up until 1.9, if you pay your affiliate accounts, let’s say that you pay five people X number of dollars, those payouts get sent to them, but there was no real record stored in Affiliate WP that said these commissions were paid at this date for this sum amount to these affiliates. There was no record of those transactions going out, and so now there is.

We built a new payout logs system. It’s not only a database schema and an object, but it’s also a full UI that allows you to see those logs, allows the affiliates to see the logs of their payouts that they’ve received, et cetera. It was one step in getting better reporting in Affiliate WP.

There were a lot of other things that we added such as sample unit test. I think Drew added probably close to either 100 or 200 unit tests in this version. Basically, everything that got added–the new objects, the new REST API, the payout logs, the CLI commands, et cetera–all got unit tests, as well as doing a bunch of unit tests for stuff that didn’t have them before, so our coverage has gone up significantly.

Then the last thing that we’ve done so far, one of the last things, is a PayPal standard integration. PayPal has been around for a really long time. One thing that we’ve never had in Affiliate WP is a direct integration that allows somebody to put a PayPal button on their site and then track affiliate commissions for that. I never thought that that would be a super requested feature. It was requested every single week for the last two years, and so we finally got it built. It works, and it’s pretty cool.

Three other really quick updates, so we’re doing software licensing for Easy Digital Downloads. It is approaching a new major version as well for version 3.5. One of the things that we started to do in EDD as the plugins have aged is we started to go back to some of our primary plugins and start basically taking three months and really focusing on that plugin to address a lot of the pain points that we’ve accumulated over three years, do a bunch of improvements, kind of relook at it, rethink about the plugin. We did this with the recurring payments plugin. Now we’re going to do it with the software licensing plugin, and so here in a month or so 3.5 will be out, and it’s going to be pretty sweet.

BRAD: What’s kind of like the focus of 3.5? Is there any focus?

PIPPIN: Yeah, there are a couple of focuses. Number one is to rework the UI. There’s been a lot of aspects of the UI, the software licensing, that are very dated and have shown that the plugin obviously started as a much simpler beast and has grown a lot.

BRAD: Right.

PIPPIN: And a lot of pieces were just kind of tacked on here and there.

BRAD: You posted a teaser screenshot on Twitter.

PIPPIN: I did.

BRAD: I just remembered that. Yeah.

PIPPIN: Yes. For example, one of the things that software licensing has never had is this idea of an admin view of a single license. There are a lot of things associated with a license. There is a purchase record. There are activation limits. There’s a history of all the URLs or the machine IDs. There’s a log of events. There’s related payments. There’s upgrade paths. There’s renewal dates. There’s delete buttons, renew buttons, et cetera. All of these different things and none of that has ever had a formal, single, details page.

It’s always been inside of a single list table with a couple of little, weird, side screens. And so we’ve taken all of that and rebuilt this details page for individual license keys that allow you to see all of that information and access it all from a much more intuitive interface. That’s one of the big things in 3.5.

There are a couple others that we’re really hoping to get to. We don’t know if they will yet. One of those is version tracking. Software licensing is primarily used for distributing up for selling software and then distributing updates to those customers. The software that’s utilizing the API, it could be a WordPress plugin, it could be a desktop software, it could be anything. It will call the store server and ask for version information, and then the store will send back the version and say, okay, the current version is 3.5. The customer side will say, well, I have 3.4, so I need an update.

What we’ve never done is had any kind of logging for those update requests so that store admins can see a breakdown of versions that are installed by customers. For example, if you go to WordPress.org, you can go to the developer’s tab and it will show you a graph that shows you the percentages of the versions: 50% is on 3.5, 20% is on 3.4, et cetera. We want to offer that, and so we’re hoping to build that into 3.5, the idea of logging those requests so that we can build this view to know what your customers are running.

Another big improvement that we want to make is the underlying data schema. We’re in the process of moving all of this data that has been stored in the WP post and post meta into custom tables, and 3.5 is hopefully going to be the version that makes that first set of changes. It’ll introduce a new license object. It’ll introduce a few things like that and a whole bunch of backwards compatibility layers.

Then the last thing that we’ve been working on for a while is a new version of our EDD iOS app. We have this iOS app that allows you to view your stats for your EDD store. You can see your sales, your earnings, your customers, your products, et cetera. We’re building a whole new version of that. That should be a pretty nice and welcomed update that we’re pretty excited for. We should have teasers for that coming pretty soon.

BRAD: Cool. We’ll link up the screenshot teaser of the EDD software licensing add-on if anyone is interested in seeing that. We’ll link up the tweet that you posted. Cool.

PIPPIN: All right. Should we jump into some of our mailbag questions? I know we’ve got a few left over from a few weeks ago.

BRAD: Yeah. All right. Let’s start with a question from James Kemp. He asks, “I’d be interested to know your marketing tips for plugin authors.” Do you want to take a crack at this one, Pippin? Should we just talk about kind of our marketing experience so far?

PIPPIN: Yeah. Well, I mean, okay. I’ll say this for myself, and I don’t know if you would echo this or not. Any advice that I’m going to give you when it comes to marketing is based purely on my own experiences on what I’ve done and what worked and what didn’t work.

BRAD: Mm-hmm. I’ll echo that. Yes. The same for me.

PIPPIN: With that, take it with a grain of salt. I don’t think either one of us, and I know for sure me are not marketers. Sometimes people will tell me that we have successfully marketed our products, and I think that that’s mostly a happy accident, so this is mostly me looking back and thinking, “Well, I think that probably worked well.”

BRAD: I do think that you just touched on something important there, though, that making a great product is itself marketing, right? If you make a great product, it will spread. It’s also known as word of mouth marketing. But for word of mouth marketing to work, you need a great product. I mean Seth Godin talks about that in, I think it’s called Purple Cow, his book Purple Cow, which I highly recommend reading. Seth Godin is a great marketer to read if you’re interested in learning about marketing.

PIPPIN: Yeah. I think you’re absolutely right that, number one, you have to have a great product. We do have to be careful, I think, and make sure that we’re not saying just because you have a great product means you will succeed because unfortunately that’s not the truth. It would be cool if it was.

There’s a few things that I’ve done, looking back, that I think were successful. Number one, and this is the same answer that I gave somebody who sent me an email a few days ago, is I think you need to write. You need to write a lot, and you need to put it out there. You need to write more. Then when you’re tired, write some more.

It’s basically coming down to content marketing. When I look back on the last five years of this business, in the first two years or so I wrote extensively. I wrote on my blog. I wrote on other blogs. I did guest posts. I just wrote and I wrote and I wrote and I wrote.

A lot of that fell on deaf ears. A lot of it never got seen. A lot of it was never read. But what it did do is it basically was a disbursement of information throughout the Internet that made it suddenly that if somebody was looking at one of the products, they would see my name, and they would say, “Hey, I remember that because I saw a blog post two weeks ago.”

When you write enough, and you get enough information out there, that will start to happen. It might take a really frickin’ long time for it to happen, but it will happen. That doesn’t just have to be writing on your own product. It could be writing on any subject. Basically, you want to get enough good information out there that people start to recognize you and then also start to recognize you as being knowledgeable in your field in whatever it is. I think that can be tremendously helpful. Frankly, I think that if I hadn’t done that, I don’t think we would be where we are today.

BRAD: Yeah.

PIPPIN: That’d be my number one.

BRAD: Building an audience is super important, and that’s a really good way to do it is just to write.

PIPPIN: I think I should add that it doesn’t just have to be blogs. It can be Twitter. It can be Facebook. It’s information anywhere and everywhere.

BRAD: Yeah. One thing I will add to that is don’t just write and publish. That is great that you’re doing that. But if you don’t capture your audience, it’s hard to get them to keep coming back. You don’t want to rely on people stumbling upon your writing through Google searches.

PIPPIN: Right. You need to have a purpose for your writing.

BRAD: Yes, and you need to build an email list and email people when you publish a new article and have them keep coming back.

PIPPIN: I think you should also try to define who your audience is. For me, when I was starting, my audience was plugin developers because I wanted to teach other people how to write plugins, and so that was my only focus was plugin authors.

Now that might not be your focus. That might not be your customer base, but that was mine. And so figure out who your audience is and target them specifically. Don’t just write random stuff.

If you have a random blog that’s great. I love random blogs. But for building your product, you need to have a focus.

BRAD: Yeah. Absolutely. You have to speak the language of your audience. We sell to developers, so it’s fairly easy for us developers because we speak the same language as our customers.

PIPPIN: Yeah, and you’re not talking about spoken language. You mean like we’re talking in code. We’re talking tech. We’re doing those kinds of subjects, not English versus Mandrin versus–

BRAD: That and, for example, when we write an article, we don’t dumb it down. We write it for technically inclined developers. We’re using acronyms. We’re assuming kind of a base level of experience and knowledge with development because some of the articles we write are pretty technical. By doing that, you do alienate a large group, but you don’t want to write for everyone. You want to get a passionate kind of small audience. I’d rather have a small audience that is passionate about what we do than appeal to kind of everyone and have everyone kind of be like, eh, they’re all right. Anyway, that’s just my thoughts.

PIPPIN: It’s actually the same thing that we’ve decided to do with this podcast. When you and I were first discussing doing this, we thought, okay, should we try to have just general WordPress? Should we focus it to development? Should we focus it to product development? What should we do? We decided that it should be development focused, and we will alienate a lot of people. That’s okay.

BRAD: Yeah, absolutely.

PIPPIN: By figuring out who your audience is and speaking to them directly, it allows you to have a much better conversation with them.

BRAD: Yeah, absolutely.

PIPPIN: You can’t talk to everybody at the same time.

BRAD: Yeah.

PIPPIN: I think that absolutely plays into the success of your marketing.

BRAD: Right.

PIPPIN: Do you have any other good tips for James and everyone else?

BRAD: Well, I’ll just share kind of how I’ve started marketing in the beginning. WP Migrate DB was a free plugin on WordPress.org that I’d thrown up there. I built it for myself when I was working at an agency. Just threw it on .org, and I didn’t do anything with it. It just sat there.

Three or four years went by, and people kind of stumbled upon it on the repository. At a certain point, I think it was 2011, probably the tail end of 2011 or the tail end of 2012, I decided to make it into a business. The first thing I did was I added a sidebar into the plugin with a question: Pro version?

It said, “Would you be interested in a pro version that allowed you to push and pull your database?” You know just the basic features of the pro version. “Yes or no” and a submit button.

When you hit “yes,” then it slide down. It asked you how much you’d be willing to pay, and it asked you for your email address. This was a way, early on, to build my email list so that when we, first of all, figure out, a pro version, if anyone is interested in it at all, but then also build an email list so that when I do build a pro version and launch it, I have people to email about that.

I was not a writer. I had a blog, but I didn’t write very often, and so this was a way for me to build my audience without writing, basically. It’s kind of another, a different approach. It worked quite well. I think the list was about 300 people at launch time, and so it wasn’t big, but it was enough to generate traction, generate some buzz, and kind of grew from there.

PIPPIN: A small little testament to that working is I’m pretty sure I was on that initial list, and I bought it immediately after you sent that first email.

BRAD: Right, and you tweeted it, which was a huge help. A bunch of people that bought early like that tweeted about it as well, and it generated this buzz. Yeah, it worked out. I’m not promising that it’s going to work for everyone. Let’s be clear about that. But it can work, so yeah.

Anyway, we could probably do a dozen episodes of this podcast just about marketing because it’s a huge topic.

PIPPIN: Well, and it’s something that we’re constantly learning too.

BRAD: Yeah, exactly.

PIPPIN: I know that we’ve mentioned this a few times, but neither of us are even remotely trained in what we do, like aside from … training, and so everything from the marketing to the development to everything involved with our product businesses is all self-learned and self-taught, trial and error, and observation. Maybe my last tip for it would just be keep your eyes open and be willing to try everything. Just because Brad says this works, Pippin says this works, or so and so says this works, doesn’t mean it will work. And just because someone says that this one doesn’t work doesn’t mean it won’t also work for you.

BRAD: Yeah. No, I mean that’s what I do is I experiment.

PIPPIN: Yeah.

BRAD: I run experiments. If it works, then I do keep doing it. If it doesn’t work, I try another experiment.

PIPPIN: I think this is the proper time to mention you should also try A/B testing.

BRAD: Yeah.

PIPPIN: Which we should talk about in depth at some point.

BRAD: Yeah. I have a love/hate relationship with A/B testing – mostly hate.

PIPPIN: Yeah. Okay, let’s move on. We’ve got one more question here to get through. This comes from Daniel Powney. I apologize if I pronounced your last name wrong.

I’ll preface this with a quick back story. A few weeks ago we were looking at finances, and we were looking at how we had done for the summer. Summer was kind of tough for us. Summer was very, very slow. May, June, July, et cetera was a pretty slow period for all of our websites. And so it reminded me that making sure that you manage your cash flow properly is important. I sent out a tweet saying something like, “Having a cushion in the bank is a great way to get through the slow summer months.”

Daniel responded with kind of a question, and he said, “I just saw a tweet from Pippin having a cushion cash flow for slow periods. I’m from Australia and have noticed less than usual sales of my product, which I have worked out is probably due to Independence Day and holidays in the U.S. I’d be interested to hear your sales trends and when do you see spikes or things slow down? Examples: after major releases, addition of a new add-on, new affiliates, public holidays, special discounts or promotions, busiest times of the day, et cetera.”

He’s kind of got a couple of questions in here. Maybe the first one is what kind of sales trends do you notice, Brad?

BRAD: Yeah. Well, let’s start, I guess, with the macro, I guess. I think seasons that are slow are kind of the height of the summer is slow, so for July. July was quite slow for us. This month hasn’t been super either. July, August, that’s the height of the summer.

Then Christmas holiday period is very slow for us, and even the time leading into it, so kind of late November can start to slow down, and usually mid January, right up until mid January is slow for us as well. That’s about it for the annual kind of seasons of slowness. Is that what you experience as well, Pippin?

PIPPIN: Yeah, I would pretty much echo that with the biggest one being summer. For us it was June through July was really slow. Then August started to pick back up. I don’t mean just a little slow. I mean like, “Oh, my gosh! What are we doing wrong? How do we fix this?”

BRAD: The website is broken!

PIPPIN: Yeah. You start worrying about it like there’s got to be something. People must be getting errors on checkout. What is going wrong? It’s just because it’s slow.

Ultimately, I think it comes down to people are taking vacations in the summer. People are out having fun. They’re going to the lake. They’re spending time with family and friends. They’re not interested in — I mean maybe they’re interested, but they’re not spending as much time in the office, building their business, working for their employer, or what have you.

Now what’s interesting to me, and maybe this is because the U.S. constitutes a majority of our customer base, but we don’t see major slowdowns when it’s summer on the other half of the world, at least not that we notice. I think that has to do with the percentage of the customer base. While we have customers all around the world, a majority of our customers are in the U.S./Canada area.

BRAD: Right.

PIPPIN: That would be my speculation.

BRAD: Yeah. Now if we zoom down kind of to the micro level, like on a weekly basis, like where are the slow times, that’s exactly right as well. It follows the U.S. kind of business hours. For us anyway. We usually have kind of the majority of our sales between the 9:00 to 5:00 hours. Then it kind of slows down in the evenings.

The weekends are very slow for us, generally. We see 50% less sales. Even probably less than that on a weekend, a weekend day versus a week day.

PIPPIN: We see exactly the same trends.

BRAD: Yeah, so that’s normal. You just learn to live with it.

PIPPIN: Yeah, for sure.

BRAD: Yeah.

PIPPIN: Daniel mentioned that he tends to see or thinks he sees slower sales during U.S. holidays. Do you notice that as well, being a Canadian business?

BRAD: Yes. Yeah, absolutely. I do notice that. The majority of our customers are U.S. based as well.

PIPPIN: Okay, so do you see a similar slowdown for Canadian holidays?

BRAD: No, not at all.

PIPPIN: Fascinating.

BRAD: Our Canadian customers are a very small percentage of our overall customer base. They’re probably less than 5% of our customers. Yeah, so Australia, Canada. Germany is actually a much higher — has a much higher share of our customer base than Canada, Australia. The U.K. is up there somewhere too. But, yeah, the U.S. is by far the highest.

We do notice, after major releases, there tends to be an increase in sales, especially for renewals and upgrades. If we release a new version with some new features or something and you have an expired license, you don’t have access to the new zip file, so people upgrade or renew their license at that time when we release a new version.

PIPPIN: Yeah, we see the exact same thing.

BRAD: Yeah. It kind of makes sense, right?

PIPPIN: Yeah.

BRAD: Yeah.

PIPPIN: I think that the other part to Daniel’s question, which is kind of insinuated, is how do you deal with those slow periods. A one day dip in sales is not a big deal, but what if you have a month long period where your sales declined by 20%? How do you guys deal with that?

BRAD: Well, we have a cushion in the bank. I don’t know exactly how much of our kind of expenses it is. It’s probably a month or two of expenses. I know I’ve heard Joel from Buffer say that they’re going to be putting six months. They’re going to try to build a cushion of six months of expenses, which for me, I think that’s crazy. I’m willing to operate with a bit more risk than that.

Yeah, six months of expenses is a lot of money to have in the bank. If your company made zero sales all of a sudden, how long can you survive? That is an unrealistic scenario, right? If that happens, that’s like an asteroid strike kind of scenario. You know? I don’t see. But anyways, I think that using that as kind of a guide.

PIPPIN: Yeah, the baseline.

BRAD: Yeah.

PIPPIN: A more realistic scenario would be what if you suddenly, for the next two years, lose 20% of your business. How long can you operate at your current expense level, basically?

BRAD: I mean that’s a catastrophic failure, though, in my opinion. And if it did come to that, you have to reevaluate what the hell you’re doing, potentially restructure your business, and take drastic action. I’m not sure that having cash in the bank is necessarily going to be the fix for that scenario.

PIPPIN: No, what I think it really is, it’s the cushion that allows you to figure out what the fix is.

BRAD: Right. Right, it gives you that runway to kind of pivot or whatever. Yeah. Yeah, it makes sense. I guess it just really depends on what you’re comfortable with. What are you guys looking–?

PIPPIN: Right now we keep for the last — it hasn’t been the same for the last two years because we’ve grown a lot in terms of expenses, revenue, and team members. Right now we have about two months of cash on hand that we keep there intentionally to deal with slower periods.

Ultimately one of our goals is to, number one, make sure that if things go south for a while that we don’t miss payroll for team members. That’s one of the things that cushion is there for. Two is you want to make sure that you have cash on hand if it comes time that you realize we want to make a significant investment, and we want to be able to do that. That’s another great reason to have that cash on hand.

Then also that catastrophic event, whatever it is, we would like to be covered at least for a little while so we can try to figure things out. Is that likely to happen? No, probably not. But it’s kind of like insurance.

BRAD: Yeah, absolutely. No, I completely agree. Yeah. Are you going to look to build a bigger cushion, or are you happy with two months?

PIPPIN: I’d like to get it three to five months.

BRAD: Three to five? Okay.

PIPPIN: Yeah.

BRAD: Yeah.

PIPPIN: Here’s one of the big reasons that I like to have a cushion, more so than to support us if all sales go away. It’s being able to scale up and add new team members.

For example, before I ever hired my first employee, I decided I was going to have their salary in the bank for a year to guarantee that they were paid no matter what. Then I wanted to do that with employee number two, and employee number three. It gets a little bit harder as you get up to employee six, seven, eight, nine, ten, et cetera because that is a lot more. But I wanted to ensure their security.

What I also wanted to be able to do is to say, all right, we need to scale up. Maybe we don’t have enough revenue right now to cover the monthly expenses of adding that other team member, but we have the cash on hand to be able to pay them. Then bringing them on is going to help us grow to cover their payroll. For the first three months we might be taking a small loss, but we have that cash flow on hand to be able to do that. I think that’s a really important aspect that maybe is sometimes overlooked.

BRAD: I would say that that falls under investment, in a way.

PIPPIN: Yeah, absolutely.

BRAD: Yeah. I mean it’s an investment that’s into the growth of your business.

PIPPIN: Right.

BRAD: Yeah, makes sense.

PIPPIN: I think one of the challenges that a lot of people run into is they recognize that they need to scale up their team because they’re overworked, they’re burning out, or they’re overburdened or something like that. But they don’t have the resources to be able to bring that team member on. They have to first grow to bring that team member on, but you can’t grow until you bring a team member on.

And so you have to start figuring out ways to get around it. Maybe you don’t pay yourself for six months, you live off of your savings, or you somehow encourage them to come on with zero pay or very little pay, or what have you. If you can be proactive and start getting a little bit more money in the bank every single month, when it comes time to scale up that team it’s going to be a whole lot easier.

BRAD: Right. Absolutely. Well, should we wrap it up?

PIPPIN: Yeah, I think now is a good time.

BRAD: All right.

PIPPIN: We have one more quick shout-out. If you are interested in sponsoring future episodes, you can go to ApplyFilters.fm/sponsorship. It will help us to bring you this show and keep the lights on. We greatly appreciate it.

BRAD: All right, talk to you next time.

PIPPIN: Thanks for listening.