February 13, 2014

Joining us for Episode 13 is James Laws and Kevin Stover from WP Ninjas. Throughout the episode we hear about the the history of WP Ninjas and their flagship product, Ninja Forms, as well as learn some of the challenges the two have faced as they’ve built their business around WordPress over the last few years.

WP Ninjas are also an ongoing sponsor for Apply Filters, so getting them on as guests was a real pleasure, especially just to be able to say Thank You in person.

Show Notes:

Photo credit: Daniel Go


PIPPIN: Hello, everyone, and welcome to Episode 13 of Apply Filters. I’m Pippin Williamson, and with me is my cohost, as usual, Brad Touesnard. And also joining us, our special guests James Laws and Kevin Stover from Ninja Forms. Ninja Forms is also our ongoing sponsor, so a huge thank you to them. Brad, take us away.

BRAD: Sure thing. Well, guys, welcome to the show, first of all.

JAMES: Well, thank you for having us. We’re excited to be here.

BRAD: Yeah. So how about you just start off by just kind of telling us who you guys are and what you guys do kind of on a day-to-day basis?

JAMES: Sure. Well, we have a company called WP Ninjas. My name is James Laws, and I kind of handle mostly the business side, a little bit of hackery, development, CSS, you know, UI, stuff like that. But we have a business, WP Ninjas, and we basically build plugins. I mean that’s kind of the core of our business. We do a little bit of client work here and there if a project kind of piques our interest, but mostly we focus on plugin development.

KEVIN: My name is Kevin Stover, and I’m the lead developer, I guess, here at WP Ninjas. The main thing that I do is watch over Nina Forms, treat it like a baby and cry when I introduce bugs or when other people introduce bugs, and maintain all of the other people who help commit to the code.

BRAD: Cool, awesome.

PIPPIN: So what is Ninja forms exactly?

KEVIN: Ninja Forms is a framework for building. Really, we want to emphasize that, by the way. I’ve been in England too long. That it’s a framework for building forms in WordPress. And what we envision it as is any time you need to get user feedback for whatever you’re doing, then Ninja Forms is a solution for that.

BRAD: Okay, cool.

PIPPIN: Great. So anything from like contact forms to surveys to —

KEVIN: Yeah.

PIPPIN: — feedback, anything. Awesome.

KEVIN: Yeah.

JAMES: I would say even application development. You know, if you’re building an application and you’re using kind of WordPress as your core framework for that, but you also need to receive a lot of user input, you know, I think I can see something like real estate sites or any kind of a booking site, or you’re receiving information that you need to then take and do stuff with. Ninja Forms works as a great framework and a model for getting all of that data and doing stuff with it.

BRAD: Cool.

PIPPIN: Very cool. I’ve been watching Nina Forms for a while now, and you guys have really come up a lot in, I guess, the plugin world. I feel like it went from, like a year or two ago, a lot of people knew about Ninja Forms, but your popularity and your user base has just exploded over the last year. Would you say that’s probably true?

JAMES: Yeah.

PIPPIN: That’s from an outside perspective, what I see.

JAMES: Well, I appreciate that, and actually hearing the outside perspective is actually really important for us because I think sometimes when you develop a project, you can kind of do so kind of in a bubble. So you know what you see, and you know what support tickets you’re getting, and you know who the people are who are reaching out to you. But sometimes outside of that realm, you have no idea who even knows you exist. So it’s always interesting when, you know, you’re at a WordCamp, or you talk to somebody you know on Twitter and they go, “Oh, no, I know your product.” And you’re like, “Oh, that’s great,” you know.

PIPPIN: Right.

JAMES: So I would say yeah. In the last, especially in the last year, just in 2013, our growth has just been, I think, explosive, although I don’t have a lot to measure that against.

PIPPIN: Do you think that’s just because you guys are putting more and more time into it?

JAMES: I think it’s probably a combination of, you know, it’s a combination of putting more time into it. It’s become our main project, so we’ve kind of pushed everything else off to the side. I think it’s also been probably a combination of other people who have found the plugin and like it and use it. I would say, you know, just kind of a shout out to you, Pippin. When you kind of came in, in May, and kind of took a look at it in 2013 and wrote a review and wrote an extension for it, I think that definitely kind of helped as well because a lot of the people in the WordPress community obviously respect you for good reason for your development. So when you say something is good, I think they’re like, okay, this thing is good. So I think that helped a lot.

BRAD: If Pippin says jump, I’ll jump.

JAMES: That’s right. Exactly.

PIPPIN: Brad, jump.

BRAD: I’m sitting down, man.

PIPPIN: Well, stand up.

JAMES: Yeah.

BRAD: All right, fine.

JAMES: I think those things helped.

KEVIN: Yeah, I think also for me as a developer, it helped a lot to have someone step in and say, “Hey, you know, this is something that’s worth looking at,” so that’s cool.

PIPPIN: Certainly. I know from my own experience building several different plugins that have a little more of a community focus and as opposed to being like my own projects that only I work on, but actively looking for community feedback. When you start getting that feedback from other users, no matter whether they’re an advanced developer, a beginning developer, or even just a user, it definitely helps bring not only additional attention, but also helps look at it in a different way. I remember the first time that somebody told me the way that I’d done something was terrible, or that it was awesome. Both of those, both of those outside perspectives help you look at something in a completely different way. It can be huge.

KEVIN: Yeah. Definitely so. Definitely so.

BRAD: I think one of the — when we launched Migrate DB Pro, I felt this, and we started getting feedback through support. It was like this huge relief because we’d been working in isolation. We were making assumptions all the time. And then to hear people saying you could probably do this better this way or that way, it was like, oh, yeah, totally, we could do that.

PIPPIN: Yeah, well, when you’re working in your own little bubble for months on end, and you’re the only person or the only team that’s looking at something, your perspective gets skewed so much. I mean, whether it’s in a good way or a bad way. And it’s kind of like —

BRAD: Not only that, I find it’s exhausting to be guessing all the time, guessing what people are going to want.

PIPPIN: Oh, it’s huge. Definitely.

JAMES: Yeah. I think there’s definitely a huge bonus when you have a growing user base and other developers who are developing on and are using it for their own businesses in their development work to kind of come in and either validate or give you different perspectives. So you don’t have to, like you said, so you’re not just kind of guessing and just kind of the exhaustion of, I hope this is what people need and want just because I think it’s what I need and want.

KEVIN: Right.

BRAD: How long did it take you guys from kind of start to release to get this thing out?

KEVIN: That is a tale that does not fit betwixt the times that we have to tell. Ninja Forms started life as a project for a client who needed events. And because James and I were both fairly new to WordPress at that time, we didn’t think, hey, let’s go buy Gravity Forms or Formidable, or another, you know, or a form solution because we didn’t know anything. So we built a solution for the client, and eventually thought, well, hey, what if we released this as a product? That was Ninja Forms 1.0 eventually, which exists now just in the dark crevices of Ninja Forms as legacy code.

JAMES: Exists lower than anything else.

KEVIN: Yeah.

BRAD: So you’re basically saying that Ninja Forms was born out of ignorance. Is that what you’re saying?

KEVIN: Yes, pretty much. Yes. Yes.

JAMES: Pretty much it was.

BRAD: Beautiful.

KEVIN: And so then in 2012, I spent all of 2012, my whole life in 2012, besides studying Roman History, was rewriting Ninja Forms from scratch to be extensible and to be modifiable and all the good developing words we like to use to say other people can do things with it. So that’s kind of the development cycle. Then in 2013, we decided to launch 2.0 in 2013 in January, and that’s kind of where we are now. Anything you want to add to that, James?

JAMES: No, I think that’s it. You know, Pippin, you wrote a post just recently, you know, or maybe a while back, I can’t remember now, about developing plugins that scratch an itch. That’s kind of how Ninja Forms came. We had something.

You know, the truth is that we knew of other forms plugins, but none of them really had the functionality that we needed for the project that we were working on. And so instead of, you know, forking them or hacking them or doing some other thing like that, we just kind of built something from scratch. And it’s just been a long road of kind of, you know, as we all know, after a very short period of time, you hate your own code. And so we just kind of rewrote, and we’re actually rewriting now, so kind of doing a major shift for Ninja Forms.

PIPPIN: Nice. It’s got to happen every now and then because, I mean, you look back and you find all that legacy code and, I mean, legacy might be six months ago.

JAMES: That’s true.


JAMES: That’s true.

KEVIN: Yes, absolutely.

PIPPIN: Has Ninja Forms always been a free plugin in WordPress.org, or was it ever sold as a commercial product before that?

JAMES: It actually originally started as only a commercial product.

KEVIN: For a massive $15.

JAMES: That’s true. We launched it. We sold it on our own website. We decided to set up some simple PayPal button.

KEVIN: Were you about to tell them how much we made from that endeavor for the year, however long it was?

JAMES: Oh, I think, for the entire year, we probably sold, I think, somewhere in the maybe pushing $9,000 for the year.

PIPPIN: That’s substantially more than a couple of plugins that I could tell you about.

JAMES: Sure, but it was our only one.


JAMES: And it was like our main thing and, of course, it was terrible sales, but it was enough to make us think, well, we could sell stuff. Like we can keep doing this.

KEVIN: Right.

PIPPIN: It was enough to open your eyes and realize that there was potential of turning it into a business.

JAMES: Absolutely. Absolutely.

BRAD: So that’s about like 60 customers, approximately.

JAMES: Yeah, probably pretty close to that.

BRAD: Yeah, well, that’s a great start. Yeah, it’s a good place to start.

JAMES: Yeah, it kind of started that way. I think at one point we raised the price to $30 because we thought, you know, maybe on some level, you know, you get what you pay for. And so we’re charging $15, and we’re sure people are looking at that going, that certainly can’t be worth anything.

KEVIN: Right, and that’s $15 unlimited sites, unlimited support forever.


JAMES: Yeah.

PIPPIN: So what made you guys decide to switch from that paid only model to a free model? As it is now, Ninja Forms has the free plugin available in WordPress.org, and then you have paid extensions. What made you make the change from the paid only to the freemium model?

JAMES: Well, you know, we went through a lot of transitions to kind of get to where we are now. We had the original premium and, to be honest, our first reason for changing to a freemium model was all business and promotion. The idea was, we weren’t getting a lot of exposure. It was getting hard to get traffic and get people to find us. So we thought, you know what? We’ll take Ninja Forms Pro, and we will kind of gut it a little bit, and kind of gimp it a little bit, and we’ll release a lite version of it. And then that’ll act as feeder traffic from, you know, WordPress.org to us, and that’s when we’ll make all the money. So it was kind of —

KEVIN: That didn’t happen either, by the way.

JAMES: Yeah, that didn’t happen. It was a wrong motivation.

PIPPIN: You mean it didn’t happen that you never actually made that switch or didn’t happen about the change wasn’t successful?

JAMES: The change didn’t work for us. We did do it. We had a lite version of Ninja Forms in the repo for probably about seven of eight months of the life of 2012 with Ninja Forms Pro. And so we had this lite version. But the reason I think it didn’t work wasn’t so much about promotion or product or what the plugin did or didn’t do. And this sounds kind of philosophical, but I think it was our motivation in going into it.

Our motivation was, you know, hey, this will make us money. And of course, you run a business, you need to make money. That’s fine. There’s no shame in wanting to make money. But that’s definitely the wrong reason to release a free plugin.

So the shift to where we are now, which is now not just a gimped free plugin with extensions, it’s a full framework that really does everything a form plugin, for the most part, should do. And with filters and actions, you can really make it do anything you want with or without extensions. You don’t need the extensions. We wrote the extensions with those action hooks, so anybody could do that.

The shift for us was, we really wanted to provide something that the community could use, something that was helpful, whether they paid us money or came to us or needed to work with us or not. All of a sudden it really did become more of a shift for us as we were developing, saying, man, this would be really useful for the community. How do we make something that they can use that’s free, that can become the community forms plugin? That’s our real goal is that Ninja Forms would be the forms plugin, the free forms plugin anyway, of the WordPress community.

BRAD: Interesting.

PIPPIN: That’s great. I think the point at which when you can recognize that you have achieved that is when you start seeing a lot of themes, primarily commercial themes, adding in support for it, as like the default contact form. I know for a long —

JAMES: I think….

PIPPIN: What was that?

JAMES: I was going to say, I agree with you. I think you’re probably right about that.

PIPPIN: Yeah. I think, for a long time, the default has always been like Contact Form 7, and so you’ll go to it, like to go to any theme on ThemeForest, and you’ll see, oh, this theme has default styling for Contact Form 7. And then you’ll see this theme has default styling for Gravity Forms, or Formidable, or Ninja Forms. And so when you start seeing a huge number of themes providing that default styling, I think you’ve achieved that.

JAMES: I think you’re right, and we have some things that we want to do really to work with the themeing community to help them because, you know, there’s always been this great war, specially among some of like the ThemeForest marketplaces and things like that where there’s all this functionality built into themes. And, as plugin developers, we all know that they’re sometimes the pain of our existence dealing with support because so much functionality just doesn’t belong in a theme.

And so we want to work with — we have a plan to try to work with theme developers to give them the ability to have great form functionality with almost not even clicking a button, just by installing their theme with using Ninja Forms. So we have some stuff we want to work on to kind of help that process along. I think it’ll be really great. But it’s not even just for us. It’s for the theme developers. It’s being able to kind of can and have a prepackaged form that’s specific for your theme already installed.

BRAD: Cool.

PIPPIN: Yeah, very cool.

BRAD: So you guys provide — so your main business is selling add-ons to the Ninja Forms core.

JAMES: That’s correct.

BRAD: And you guys provide support, I’m guessing, for those add-ons.



BRAD: So how big is your support volume, and do you guys have others that are helping you with support, or is it just both of you?

JAMES: Right now it’s pretty much just Kevin and myself handling support. We probably get somewhere between, you know, 450, 550 tickets a month. And they range anywhere from they don’t know where a setting is or, you know, something simple to obviously much more complex theme, conflict, server conflicts, or things like that. But we handle pretty much all of those. We probably have about 4,500 users currently on NinjaForms.com in the site, you know, support.

BRAD: So is that a forum?

JAMES: We have a support system that we actually built with Ninja Forms. So it’s kind of a private ticketing system between developers, either developers of extensions or ourselves and the actual individual. You know, it sends emails when they submit a ticket. It sends us a notification by email. When we respond, it sends them. We have private replies for moderators to be able to communicate with each other if necessary, things like that.

BRAD: Oh, I see. So extension developers — so if I’d have built an add-on to Ninja Forms, I would be supporting it through the system?

KEVIN: You could.

JAMES: You certain can, yes. You know, the way we do it currently is, Kevin and I generally first touch all support tickets. So if we can avoid bringing in the developer because it’s not necessarily an issue with their plugin, we try to do that. But on occasion an issue will come up that’s actually related to the plugin specifically, and then we can actually assign that ticket to that third party developer, and then they can come right in and chime in on the site right from their dashboard.

PIPPIN: I built three extensions for Ninja Forms. I think I have three different ones now.

JAMES: Mm-hmm. Yep.


PIPPIN: And over the life of those, I think you guys have sent me two tickets.

JAMES: It’s true. Yeah.

PIPPIN: Yeah. I mean, in general, extension developers really don’t, at least from my experience, don’t touch on very many support tickets. I know I got one yesterday. You guys sent me one. And then I had one like two weeks ago. And so far they’ve all been super minor.

JAMES: Yeah. I mean, generally speaking, I think probably your experience is probably the norm for most developers. Actually, there are some developers who have never ever gotten a ticket from us.

BRAD: So if I wanted to contribute to Ninja Forms, how would I go about doing that?

KEVIN: If you go to GitHub, you can get to GitHub.com/Ninja-Forms, and you can open an issue or look at issues that exist, and you can commit to the develop branch, please, or pull request. I’m sorry. Submit a pull request.

JAMES: Stuck in SVN.

KEVIN: I’m stuck in SVN. I apologize. GitHub, excuse me. I’m stuck in SVN in my brain. You can submit a pull request on the develop branch of Ninja Forms, and then we can look over it and commit it. I think we have — how many people have committed to the core plugin, James?

JAMES: I want to say probably about 15. It’s 15 accepted people who have had pull requests submitted so far, and that’s something we want to do better. I mean, we’ve had a hard time kind of getting other developers probably just in the know more than, you know, getting them interested. Most people who use Ninja Forms usually get interested fairly quick. But, you know, getting them involved and showing how they can get involved, we definitely probably have some work we can do there.

BRAD: Interesting. What about the WordPress.org support forms? You guys are handling requests there as well?

JAMES: We try not to. We get a few tickets there. I kind of go in there every once in a while and point them back to our support system. You know, for a while there, we had probably about seven different plugins that were in the repo, plus some pro versions of those or whatever the case may be. And it just got too hard to juggle all the different repos and missing email notifications, and so we just kind of consolidated everything into one support system on our site. And it just makes things a lot easier with the number of requests that we get to kind of handle them. Occasionally I’ll kind of go in and just kind of re-point them in the right direction, but we have a sticky post in the forum that kind of points them to our support system.

KEVIN: Yeah. James has a bugaboo about support forums. He does not like support forums at all. As he said, in order to respond to tickets rapidly, we try to put them all in one location because I’m sure you guys know it’s really difficult to handle support when you’re getting it via email and three support forums. It can get really hairy and hard to deal with.

PIPPIN: Definitely.

BRAD: Yeah. I can understand that.

PIPPIN: Yeah. Getting all of that put into one centralized location, whatever that location is, is really important.

JAMES: Yeah.

PIPPIN: And you really kind of have to be a stickler about it with customers that, if they contact you via a non-supported method, just have to tell them, “Look. You have to go through here.”

We still get, both for Easy Digital Downloads and some of my other plugins, I still get emails from customers asking for support. And sometimes I almost feel bad doing it, but I have to tell them, “Look. You have to go through the support forums. I’m sorry it takes you a little bit longer. And I’m sorry that you need an account.” But when you get into high-ticket volumes, it’s really important because it will drown you otherwise.

KEVIN: Definitely.

JAMES: I completely agree with you. We still get occasionally a support request via email, and I fight back because I keep trying to add new levels to explain to them why they need to be in the support forum. If you go to Ninja Forms, and you go to our contact us page, and you select general inquiry, which is how some people will send support requests, I finally got it to the point now where it says, you know, sometimes people mistakenly request support through this email form. We don’t actually handle support requests through email. And then I link to the support forum. And then I have a conditional logic on there that says they have to check the box to explicitly state this is not a support question.

PIPPIN: I did the same thing where I actually default my contact forms to have the subject be support. But then I hide the submit button with a big red error message that says, “I’m sorry. You cannot submit a support ticket through here.” So they have to explicitly change it to something other than a support ticket in order to submit a support ticket, and people still do it.

JAMES: That’s awesome. Yeah, and the only reason I made this change is so that I can at least not feel as bad when the email comes in, and I can say, “You explicitly chose to ignore the fact that we don’t use this for support.”

PIPPIN: Right.

JAMES: “We can’t help you here. Here’s the link,” you know.


BRAD: Yeah.

JAMES: Because, you know, the main thing, I don’t want to be rude to people. I understand. I understand the frustration when something doesn’t work or you have a question, and you just want to find answers. And we, more than anything, want to make sure that users get the answers that they need. But for our own sanity, they just have to go through the support system.

PIPPIN: Yeah, totally.

BRAD: Right. I have a similar system with my contact form because people were coming to my website and asking for support through my contact form on my website. And I clearly had a message that said, “I don’t do WordPress plugin support through here. Please use the .org forums.” And that didn’t work. People don’t read stuff.

JAMES: No, they don’t.

PIPPIN: That is why I used to only have a message on it. But then I changed it to be an explicit action that they have to take if they want to try and submit a support ticket.

BRAD: Exactly.

PIPPIN: And it definitely did cut down on the volume. But I am always still surprised when people submit support tickets through there.

BRAD: Yeah.

PIPPIN: On occasion, I’ll get a ticket where they’ll say something like, “Hey, I understand this is not for support, but I wasn’t sure how to ask this question in a public forum.” And I get that.

JAMES: Sure. Or they weren’t able to register an account for some reason.


JAMES: Or whatever, yeah.

PIPPIN: Yup, totally.

JAMES: And those things happen. Yeah.

BRAD: Yeah. I think, the action thing, I did the same thing. I’ve got like the radio buttons, and you have to choose. WordPress plugin support is one of them. And if you choose it, there’s no forum. It’s just information.

JAMES: Yeah. It just says, “Nope. You can’t do this.”

BRAD: Yeah, exactly, and it’s worked incredibly well. I barely get any requests through there. I think people are just happy to know that you’ve kind of considered that and pointed them in the right direction. That’s all they want.

JAMES: Yeah.

PIPPIN: Definitely. A lot of times people just don’t know where the proper channel is.

BRAD: Yeah.

PIPPIN: And there’s nothing wrong with that. That might be a failure in your site. It might just be because they didn’t look that hard. It might be they didn’t even come to your site, and they found you some other means. There’s tons of ways that people find to get in touch with you, and you have to do a little bit of handholding.

JAMES: Yeah.

PIPPIN: And that’s not an offense to anybody who needs that handholding. It’s just that’s how it is.

BRAD: Yeah.

JAMES: Absolutely. Even on our support page, we kind of set some expectations of what they can expect when they submit a support ticket. And we simply ask them, “Do you have an account? Do you not have an account? Or do you have an account and can’t log in for some reason?” So we gave them three different channels that they can try to access support to kind of walk them through. So if they have an account, we send them to the login page, and they’ll get presented with the support ticket system immediately.


JAMES: If they don’t have an account, we send them to a registration page. And if they can’t log in, we send them to our contact form explicitly with “I can’t log in” selected, and we ask them some questions.

KEVIN: I think, from my perspective as a developer, I’ve been really happy with the way we’ve done all those things that James just talked about because he does a lot more of that stuff than I do. I like the fact that we’re kind of eating our own dog food, so to speak. We’re using our own plugin.

JAMES: Yeah.

KEVIN: Everything on our site that we’re using to do that with and support forums and registration and log in, all that business is handled by our own plugin. And I think that has given me anyway, as a developer, it’s given me a lot of good things to fix.

JAMES: Yeah. The truth is, we could not do business if it weren’t for two plugins. Shout out to you, Pippin, Easy Digital Downloads. We couldn’t do business without it. And we couldn’t do business without Ninja Forms. Even on our site, we wouldn’t be able to handle support or any of the things that we do currently on our site without it.

PIPPIN: Sure. I use my own systems to power all of my sites.

JAMES: Yeah.

PIPPIN: And a lot of that is because I know that if I’m personally using something, I’m likely to find the flaws or the weaknesses in it, and then attack those and improve them because it’s scratching my own need.

JAMES: Yeah.

PIPPIN: Honestly, that’s where that blog post of a few weeks ago about writing plugins to scratch an itch came from.

JAMES: Yeah.

PIPPIN: Because if you write something that you need and you care about and that has a direct impact on what you’re doing or on your business, you’re far more likely to maintain it and improve it.

JAMES: Yeah, I totally agree.

BRAD: Yeah. I really like the proactive way of kind of — like the stuff that we were just talking about, about contact forms, about being kind of proactive and figuring out the problem before it’s a problem kind of thing.

JAMES: Yeah.

BRAD: Like it’s intelligently detecting the problem, for instance. I don’t know if you guys pay attention to SearchWP plugin by Jonathan Christopher.

PIPPIN: I do. Yeah.

BRAD: Yeah. He just put out, a couple weeks ago, version 1.8. And he’s now detecting theme conflicts, so he’s like proactively —

PIPPIN: I saw that.

BRAD: And so I just wanted — I thought that was super cool. I really like to see that kind of like proactive things.

PIPPIN: I was really impressed with that. James or Kevin, did you guys see that, what he did with that?

KEVIN: I did.

JAMES: I actually didn’t see the release. His is another one of those plugins that I just need to get over there and buy it just to support and probably just to use it because it looks great.

PIPPIN: It’s really great. I’m using it right now for the documentation search on the EDD site. I also use it on my Pippins Plugins site. In general, it just makes your search system better. But it’s also great if you want a search system that only searches your documentation or only searches your support forums, things like that.

JAMES: Yeah, yeah.

PIPPIN: But, man, his being proactive and he has this notice that says, “Hey, we detected that your theme is using pre Git post to modify the queries.” Well, since SearchWP relies on pre-Git post as the action, it says, “Look, there might be a conflict here. Just so that you’re aware of it if anything breaks.” Or you can just ignore because you know that everything is working fine.

JAMES: That’s awesome.

KEVIN: Right, that is cool. I like that.

BRAD: Yeah. I think that’s a lot better than just waiting until customers have problems with theme conflicts and then kind of going to Twitter and bitching about it.

KEVIN: Yeah.

BRAD: I think this is a better way. I don’t know.

PIPPIN: There’s one that I would love to figure out how to solve and be more practice about it for EDD. We use The Title filter in order to modify product titles and add schema.org markup form. And every now and then, at least actually a couple times a week, we have issues where somebody, a theme or a plugin is not escaping their titles correctly. And so all of a sudden we’ll end up with a bunch of raw HTML just like spewed out on the page near the post title or in the site title. And it’s really ugly, and people open tickets about it every week or so. We’ve now got two different tutorials and a couple blog posts about it that show how to fix the problem. There’s not really anything we can do to fix it.

JAMES: Right.

PIPPIN: But I would love to know, like find a way to detect when a theme is doing it incorrectly so that we can automatically add a notice or automatically disable our schema markup.

JAMES: Yeah, absolutely.

KEVIN: I think, for us, the biggest thing that I would like to be able to detect is when a theme includes an old version of jQuery because that’s the biggest theme conflict that we run into, especially on the front end.

PIPPIN: That one you probably could do.

KEVIN: Themes that include jQuery like 1.2 or, you know, jQuery beta 0.4.

PIPPIN: 1.4.2 is the bane of my existence.

KEVIN: Yeah, exactly. Exactly.

PIPPIN: Actually, I don’t think that one would be too hard to detect because you could actually look into the global WP-Scripts variable, which will have all of the scripts in there. And as long as you, say, run a check during WP enqueue scripts, and run it with a really, really high priority, something like 999,009 or something, and then just look through and locate jQuery in the WP-Scripts global, and look at the version number.

JAMES: Sure.

PIPPIN: One, if you detect that it’s anything other than what the default in WP Core is, either remove it or just immediately flag a notice that says, “Hey, if something is breaking, this is probably why.”

KEVIN: Right. That’s a great idea.


BRAD: You know what would be even better? Because the other problem is, like, oh, well, they’re not using the hooks to enqueue the JavaScript.

KEVIN: Right, they’re not enqueuing it.

JAMES: They’re not enqueuing it properly. Right.

BRAD: So do this: use a curl request to get like the source of your rendered page, and then run a reg ex. Just run a reg ex.

PIPPIN: It’s actually not a bad idea at all. It would work.

JAMES: I love it.

PIPPIN: It’d probably work more reliably.

JAMES: Yeah.

BRAD: Just strip it out completely.

JAMES: Yeah, totally, man. I love it. That’s brilliant.

PIPPIN: I like that one.

BRAD: Well, yeah. I guess I wouldn’t use it to strip anything out.

PIPPIN: No, just use it as a detection —

JAMES: As a detection, yeah.

PIPPIN: — to say oh, look; we found jQuery 1.4.2 in the source of your page. Now we don’t know where actually. Then you could also detect the path of where it came from to identify if it’s a plugin or a theme.

KEVIN: Right. Right.

BRAD: That’s true. Cool. I want to see it the next version.

PIPPIN: All right. I want to code snippet written up for this, and I’m going to take it.

KEVIN: I’ll get right on that.

BRAD: Cool.

PIPPIN: Go ahead, Brad.

BRAD: What’s been the biggest challenges that you guys have kind of encountered with Ninja Forms, like building maybe the core or maybe one of the extensions?

KEVIN: Do you want to go first on that, James, or do you want me to, because I think that we’ll have different challenges?

JAMES: You know, actually, I was going to kind of segue and hand it over to Kevin, but I think the biggest issue that we’ve had is, you know, you can never tell how somebody is going to use your plugin and what they’re going to develop with it. So when we started with Ninja Forms, and we wanted to add all these options and make it easy for them to set all these options, and I think it ended up biting us a little bit when you get forms that are adding like 500 fields to their form. And you laugh, but we have lots of users who do this.

BRAD: Wow.

JAMES: And they have 500 fields. I would never even bother filling this form out. I don’t know if they’re trying to let people file their taxes through Ninja Forms or what they’re trying to accomplish. It is insane some of the sizes of forms.

PIPPIN: I’ve seen that.

KEVIN: Yeah?

PIPPIN: I worked for a client one time that dealt with a lot of immigration from the U.S. into Canada, and so they had this crazy form that people had to fill out, and it was ten pages worth.

KEVIN: Yeah.

PIPPIN: And the whole form had to be paginated. And the original, when I took on the project, they sent me the current form, which was like an ask.net page or something and said, all right; we want to put this into WordPress. And my first instinct was just to groan because it was so huge and insane. The amount of time it took just to build the fields —

KEVIN: Right.

PIPPIN: — was ridiculous.

KEVIN: Yeah. I think, for me, the biggest challenge has been becoming comfortable with letting other people into your software, if that makes sense.

PIPPIN: Absolutely.

KEVIN: Becoming comfortable with letting people into your code because this is the first project that I’ve done that has been a product. I mean that’s scary enough. But also open source so that other people are looking at the code that I write. And as James said earlier, I’m very bad about hating my code. I hate the code I wrote a month ago. For me, the biggest challenge for me has been becoming okay with the fact that other people are looking at your code and realizing that people aren’t going to hate you and think that you’re the worst developer in the world because you did something wrong, or you did something not the best way to do it, if that makes sense.

PIPPIN: Definitely. I think every developer that moves from, not necessarily true closed source, but open source without actually sharing your code, but somebody who moves from kind of a closed source model to a truly open source model where you are encouraging other people to look at your code. You are encouraging patches and contributions. That, the first time you do that is really scary.

KEVIN: Yeah. I remember the first encounter that I had with that was when James sent a message out on Twitter that said, “Does anyone want to build a third party extension for Ninja Forms?” And you said, “Yeah, sure.” And then we had like a 45-minute Skype conversation. And I nearly crapped my pants whenever I realized that you were going to be going through lines of code because you were the first person to look at any lines of code. So that was a little daunting. I think I’ve moved beyond that a little bit.

PIPPIN: It takes time.

KEVIN: Yeah. But I think, for me, that’s the biggest challenge and biggest encouragement I could give to other developers who are thinking about putting their code out there is just to do it, that the WordPress community is pretty good about not yelling at you and calling you names or anything like that.

JAMES: I think, too —

PIPPIN: Go ahead.

JAMES: No, go ahead.

PIPPIN: I was just going to say, I had Mark Jaquith buy one of my plugins a year ago, and it was like the scariest moment of my life.

JAMES: I can see that.

PIPPIN: I was just waiting for that message on Skype or on GitHub from Mark being like this is crap.

JAMES: Did you have the instant impulse to like immediately refund his money?

PIPPIN: No. I had the impulse to go run away and close everything down and not connect to the Internet for two days.

JAMES: Yeah. Sorry, Pippins Plugins doesn’t exist anymore.

KEVIN: Yeah. I think, for me, that’s kind of been the biggest challenge. And we’re really building a plane in mid flight here because we’ve gone, and some of our customers have told us that it’s not the best idea for them. But we’ve gone with the iterate often, release often mentality. And if we find a bug or something that needs to be fixed, we generally do like an update every two weeks or something like that, or more frequently if we have to.


KEVIN: And I think adding features, we try to add features and things like that on a fairly regular basis instead of saving it all up for one big, monster release.

PIPPIN: There’s definitely advantages and disadvantages to both models.

BRAD: Are you still kind of afraid of releases?

KEVIN: Yes, I’m very afraid of every release. Every release, I am afraid.

BRAD: But you get over it.

JAMES: Yeah.

KEVIN: Exactly. I get over it. Exactly. Whenever I do a release, I come in to work the next morning and expect James to have like 15 or 20 support tickets for me for something that I’ve broken. But no, that’s gotten a lot better as the product has matured. One of the challenges, and I’m sure Pippin can relate to this, is when you have a core plugin and you have extensions, it’s really easy to break stuff. It’s really easy to change something and not know who else is relying on that thing that you changed.

JAMES: And to change something that seems seemingly innocuous.

PIPPIN: Yeah. Suddenly when you have extensions, backwards compatibility gains a whole new meaning.


BRAD: I think that’s why — I think WooCommerce no longer officially accepts third party extensions.

PIPPIN: I would not be surprised if that’s one of the big reasons.

BRAD: Yeah. I mean….

JAMES: Yeah.

PIPPIN: Especially because they’ve been changing so much of their code base. I mean, if we look back to their 2.0 release, they had major problems because there were so many gateways that had to be modified. Now I don’t know anything about why those changes were put in place, but I’m assuming for good reasons they made these changes. And it becomes much harder to make architectural changes to your code base if you have a lot of other people that are building on top of it.

JAMES: Absolutely.


PIPPIN: And it’s kind of the curse of success, I suppose.

BRAD: Yeah. I kind of like the challenge of making things backwards compatible though. It’s kind of —

PIPPIN: I enjoy the challenge if you can do it well. What I hate is when you suddenly find something that you literally cannot backwards — you can’t support.

BRAD: Yeah.

KEVIN: Brad, are you a masochist by any chance?

BRAD: I don’t know, man. I think I’ve just gotten — as I’ve gotten older, I appreciate the challenges more, I guess.

KEVIN: You appreciate old things.

BRAD: What’s that?

KEVIN: I said, you appreciate old things as you get older?

BRAD: I don’t know. No, I just appreciate the challenge more. When I was younger, I was just like, oh, I don’t really want to stop and have to think about this problem for too long. I just want to blow through and keep building features and more, more, more. But now I’m content to sit and ponder the problem. It’s just —

PIPPIN: Brad, I think I’m completely with you there. And I think I went through the same phase where, early on, I really hated the idea of backwards compatibility. Not backwards compatibility, but I didn’t like dealing with the problems that you encounter with it. Now I really like that challenge.

KEVIN: Right. That makes sense.

PIPPIN: We had an issue in EDD recently where we needed to change an architecture. I don’t remember what it was. I think it was with some payment meta. And it had the potential of breaking a lot of things for anybody who was using the old method. And so I took the time to really slowly and carefully think out the different ways that it could be used, and it worked flawlessly. And it’s that, the achievement of getting through that challenge successfully is fun.

KEVIN: No, I can agree with that. Yeah, I can agree with that. It’s good.

BRAD: Yeah. I mean, you’ve got a draw a line somewhere with the backwards compatibility too.

PIPPIN: Certainly.

BRAD: I remember seeing something recently where it was like someone was complaining about they had renamed a file in the software.

PIPPIN: Mm-hmm. I remember.

BRAD: And this person was including it, was including the file in their extension or whatever.

PIPPIN: Directly. Yeah.

BRAD: Directly.

PIPPIN: And so it broke.

BRAD: And it broke, and he was upset. And I’m like, well, I don’t know if that’s the right way to be doing things. Right? So you probably are asking for it.

PIPPIN: It’s an issue that I fully understand. As an extension developer, sometimes you want to do things that you just can’t do without, well, doing some things that are kind of shitty.

BRAD: Yeah. But you accept the risks when you do that, right?

PIPPIN: Right. And I think that’s where people who are building on top of other platforms need to acknowledge that risk and need to understand it. And the people that are building the platforms that are being built on top of need to make sure that that risk is something that they are adequately making clear to anybody who chooses to build on top of them.

KEVIN: Right. I think — go ahead.

JAMES: I was going to say, yeah. When you’re building on a platform or you’re building a platform that other people can build upon, you have to remember that you are entering into a partnership. And there has to be some kind of give and take there. You know, when you put out a release to that core product, you have to also keep in mind all the people that are using it and try to, you know, make sure your communication is clear. Give a timeline if it’s a major thing so that everybody can kind of get up to speed because it is; it’s a partnership.

PIPPIN: Definitely.

BRAD: So what’s next for you guys?

KEVIN: For me, it is working on Ninja Forms 3.0, which will have a completely reworked user interface. The user interface that Ninja Forms currently has hasn’t changed since version 1.0 in style. So the way that the admin for Ninja Forms looks now is the same as it looked in 1.0. And when we changed to 2.0, we changed kind of the engine of the car, so to speak, so we changed the motor, but we didn’t change the body.

JAMES: It’s still in a Pinto.

KEVIN: Right, so 3.0 will be a complete rewrite using Backbone so the admin will be completely driven by Backbone. And third party developers will be able to extend that and be able to use Backbone themselves without having to write the Backbone. So they can just register settings or options or whatever they want, and then Ninja Forms will handle all of the Backbone saving and that kind of jazz.

PIPPIN: Very nice.

KEVIN: So that’s what’s next for me.

JAMES: We’re very excited about it. I’d say that’s probably what’s next for me as well, just kind of pushing this project alone. We have a lot of new things we want to do. We want to change the way our fields are being registered to make those a little bit more in line with some of the other things that we’re doing.

KEVIN: And more extensible.

JAMES: More extensible. Pippin, you’re working on helping a little bit with how we’re handling submissions and storing the submission data.

PIPPIN: Trying to anyway.

JAMES: And I think that’s going to be a big part of where we’re headed because once these things are in place, I think we have a lot of room to grow rapidly, especially from an extension standpoint and really just from custom development. It’s really good.

KEVIN: Yeah. I think some time later this year we’d also like to release our support system as a separate paid product.

BRAD: Sounds nice.

PIPPIN: That’d be cool.

KEVIN: Yeah. So at some point later this year we’re hoping to be able to do that because we’ve had a lot of people use it, and we’ve had a lot of people ask what it is and how it works because I think, with some modifications and some additions, it could be a really sweet support system for lots of products.

JAMES: Yeah, we have to generalize it a little bit. It’s very specific to our use case, but I think all the stuff that we’re doing specifically could be generalized really well.

BRAD: So would that be an add-on for Ninja Forms?

JAMES: You know, we’ve gone back and forth. I think somebody had asked us if we would do it as an add-on. And I think it’s moving in the next direction that we see Ninja Forms going, whereas the support system will actually be its own system that will require Ninja Forms to run, but it won’t necessarily be an add-on. And the reason for that is, we really see the support system as an application unto itself that uses the framework of Ninja Forms to handle the data that’s being accepted from users. And that’s probably the direction I see of some other products and things that we have, you know, kind of in the wings to be worked on.

BRAD: Interesting.

PIPPIN: That’ll be cool.

BRAD: When can we expect 3.0?

JAMES: Yeah, Kevin. When can we expect 3.0?

BRAD: How about tomorrow? Tomorrow good?

KEVIN: He says, as he holds a knife and looks at me. We’re hoping to have it out by WordCamp in March.

JAMES: Atlanta.

KEVIN: WordCamp Atlanta. I’m sorry. I forgot.

BRAD: There are lots of them.

KEVIN: I forgot that not everyone lives in the southeast of the U.S. like our Canadian friends. So we’re hoping by WordCamp Atlanta, which is March the 14th. Is that right?

BRAD: I thought you were talking about Atlanta Saskatchewan for a minute there.

KEVIN: That’s what we’re hoping. That’s what we’re shooting for. I’ve already — I’m at the point now I’m cutting features because I’ve already cut lots of features that I didn’t want to cut, but, you know, you have to — it’s survival of the easiest and most likely to be complete instead of survival of the fittest when it comes to releasing. So we’re hoping to have it out by then. That’s the goal.

PIPPIN: Very cool. Well, I hope you guys succeed with that. I think we’ll go ahead and need to wrap up here. But if anybody has any questions for James or Kevin, how can they get in touch with you?

JAMES: You can definitely get in touch with us on Twitter at @WPNinjas, also myself @JamesLaws and Kevin @KStover. Or you can just come to NinjaForms.com and fill out our contact form. Just don’t use it for support requests.

PIPPIN: They will ignore you. Awesome. Thanks so much, guys.

JAMES: Thank you.

PIPPIN: And also, just want to give another shout out for sponsoring the show. We really appreciate your sponsorship. It helps us do some cool things. We get to get this episode fully transcribed for anybody who wants to read it as opposed to listening to it.

JAMES: We’re honored to be able to do that.

PIPPIN: Thanks so much for your continued sponsorship and for joining us.

KEVIN: No. It’s no problem. Thank you, guys.

  • I’m glad to know (in a strange way) that even the more experienced guys are just as nervous about other developers seeing their code. It freaks me out and it’s because I brand spankin’ new. I’m definitely learning to get over it because it’s my code and I can always “fix” it based on feedback.

    • Pippin Williamson

      It’s a tough hurdle to get over, but everyone becomes a better developer by listening to the feedback of others, so getting over it can be tremendously valuable.

  • Thanks for the episode guys. I would definitely be interested in checking out the support system if anyone decided to make a beta release.

    Question for all of you: has anyone considered making a “plugin retailer” package or even a marketplace? There are lots of people out there (myself included) that want to start selling plugins, but piecing together a retail site involves a ton of trial-and-error… I am forever trying new e-commerce plugins, subscription managers, ticket support systems, forums, and so on. Sometimes the plugins play nice, but often there’s tons of bugs and cross-compatibility issues, especially with multisite.

    Some days I just wish there was a nice article or two about a setup that actually works, and it seems like between the 3 products you guys manage that there is an opportunity to wrap up a nice bulk-purchase option.

    I’ve been looking for an excuse to build in Ninja Forms to a new site – maybe I’ll give that a shot today!

    • Pippin Williamson

      Have you considered using CodeCanyon.net? That’s where I got my start and it was an awesome experience.

      • Well, yeah… but don’t they take something like 75% of each sale? I know that having the visibility in a marketplace like that is great, but I don’t see why us developers can’t come up with an open-source packaged solution. Maybe it’s just too much effort for such a focused product.

        • Pippin Williamson

          Commission rates start at 50% and then go up as you sale more and more. Over time, you can get up to earning 70% (I did).

          It may seem like a lot, but to be honest, their HUGE traffic makes up for it, especially if you do not already have a site that has comparable traffic.

    • Brad

      If I was setting up deliciousbrains.com today, I’d go with Easy Digital Downloads + Software Licensing extension + a few other extensions.

      • EDD is definitely making some big ripples out there, and I had NO idea about the licensing extension! Wow is that ever cool…

        • Pippin Williamson

          Let me know if you have any questions about it, I’ll be happy to answer them!

  • I’m curious about something. After listening to this episode, I installed Ninja Forms to look at what I can do with it. I like it a lot. What puzzles me is why there is seemingly no means of connecting it to EDD. Have you guys considered that kind of bridge?

    • Pippin Williamson

      What kind of bridge are you looking / hoping for? We have discussed creating bridges before just have never come up with anything concrete.

  • Where do you get your transcripts done? That’s a wonderful addition for podcast show notes.


    • Pippin Williamson

      We hire an independent contractor to do it for us.

    • Brad

      I recommend looking for a transcriber on oDesk. We hired someone at 25 cents per minute and the quality and communication was poor. Then we hired someone at $1 per minute and as you can see, she has been excellent.