Episode Number 66

Platform Agnostic Add-on Dev with Eric Lamb

Apr 21, 2016 @ 11AM MT

An add-on with a single code base that supports five different CMSs? That’s the unicorn of platform-agnostic add-on dev, and it is just as illusive. Special guest Eric Lamb shares how he developed an efficient, smart approach to porting his popular ExpressionEngine add-on, Backup Pro, to four other content management systems (with more planned). The key? Abstraction. He also details the nuances of working with different communities and submitting add-ons to different marketplaces, as well as the challenges of support and how he keeps it manageable.

Tags:
expressionengine
eecms
craft
craft cms
wordpress
eric lamb
concrete5 cms
prestashop
add-on development
add-ons
backup
backups
cms
development
automation

Episode Transcript

Download Transcript

CTRL+CLICK CAST is proud to provide transcripts for our audience members who prefer text-based content. However, our episodes are designed for an audio experience, which includes emotion and emphasis that don't always translate to our transcripts. Additionally, our transcripts are generated by human transcribers and may contain errors. If you require clarification, please listen to the audio.

[Music]

Lea Alcantara:  From Bright Umbrella, this is CTRL+CLICK CAST!  We inspect the web for you!  Today our friend Eric Lamb joins the show again, but this time to talk about platform-agnostic add-on development.  I’m your host, Lea Alcantara, and I’m joined by my fab co-host:

Emily Lewis:  Emily Lewis! 

Lea Alcantara:  Today’s episode is sponsored by Visual Chefs, a versatile web development agency with expertise in content management system and custom web application development through partnerships with designers, agencies and organizations, Visual Chefs propels the web forward.  Visit visualchefs.com to learn more. 

[Music ends]

Emily Lewis:  Today we’re talking about building an add-on that isn’t just for ExpressionEngine or Craft or any specific CMS, but all of them.  This idea of platform-agnostic add-on dev has been on our minds since we started working with more CMSs.  Our guest for this topic is Eric Lamb of mithra62.  Our EE listeners are probably quite familiar with him not only for his great ExpressionEngine add-ons, but also for his active involvement in the EE community. 

For our listeners who don’t know Eric, he started doing web development for the fitness industry in 2002, eventually ending up working for a marketing company in LA before going into contract work full time in 2010.  Eric has done work for Warner Brothers, Activision, Nokia and a bunch of other fancy-schmancy companies.  Welcome back to the show, Eric! 

Eric Lamb:  Hi, thanks for having me!

Lea Alcantara:  Thanks for being here.  Can you tell our listeners a bit more about yourself?

Eric Lamb:  Well, yeah, as you said, I’ve been doing web development since about 2002.  Recently, I moved to San Diego to live closer to the beach and do basically all my development down here on the shoreline. 

Lea Alcantara:  Nice.

Eric Lamb:  Yeah, that’s pretty awesome actually.  [Laughs]  Most of my clients and my day-to-day work is done at Los Angeles, but I’m fortunate enough to have clients who allow me to do my work at my home down here, so it allowed me quite a bit of flexibility. And then as you had mentioned, we’re also doing platform-agnostic development with Backup Pro.

Lea Alcantara:  Right.

Emily Lewis:  So let’s do a little bit of more background.  We’ve known you for a long time because of the add-ons you’ve done for ExpressionEngine, but how long have you been doing add-ons?  When did you get into it?

Eric Lamb:  Well, I guess that kind of depends on how we define add-ons.  For ExpressionEngine, oh boy, I’d say maybe five years, since about 2011.  But really, I started doing WordPress plug-ins was really I dipped my toe into that world.

Lea Alcantara:  [Agrees]

Eric Lamb:  And with that, I think it was about 2007 when I released my first WordPress plug-in and I kind of stayed in that ecosystem for quite a few years, and then eventually ended up morphing away, but probably about 2007.

Emily Lewis:  And why did you get into that?  It sounded like you’ve been doing client work all along so why go in that direction for add-ons or plug-ins?

Eric Lamb:  Well, generally, that’s what most programmers do when they work with a CMS.  I just write plug-ins or add-ons.  In fact, even with my current day job with my clients, that’s 99% of what I do, is centered writing an add-on.  Now, it’s a custom add-on specific to that client and it solves their specific need.

Emily Lewis:  [Agrees]

Eric Lamb:  But it still standalone, compartmentalized piece of code.  Hence an add-on or a plug-in, if you will.

Emily Lewis:  That makes sense.  Why did you start releasing them to the public though?

Eric Lamb:  It seemed like the right thing to do to solve a problem this open source technology, something that I benefitted greatly from.

Lea Alcantara:  [Agrees]

Eric Lamb:  And put it back out there into the community so that others could kind of get the same benefits.  It’s one of those giving back things that we programmers tend to do from time to time.

Lea Alcantara:  For sure.  So when you were considering what to release, which ones did you release?

Eric Lamb:  Well, initially with WordPress — we’re going back quite a few years — but my very first plug-ins, in fact, probably still to this day, my most successful one, was a plug-in called WP Click-Track. 

Lea Alcantara:  Oh.

Eric Lamb:  And all that did was every single link in a WordPress site, it would add in tracking code, so essentially you would have your own little mini bit.ly for WordPress, except…

Lea Alcantara:  [Agrees]

Emily Lewis:  [Agrees]

Eric Lamb:  Yeah, it worked primarily on just your links on it — and you could obviously create your own — but if you wrote a blog, and this is why I wrote it, was I wanted to know what links people are actually clicking on, and so I wrote up a little plug-in just for my own personal edification, that parsed out the HTML, added in or well, it essentially replaced out the links with something that I could track and then it worked great for me for a little while, and I thought, “Well, why not?  WordPress has this great ecosystem.  Go ahead and just publish it and let people start using it and get feedback.”  That was really kind of the beginning of it.  WP Click-Track was only released on a whim of just, “Why not?  It might as well, it was useful,” I thought, “and maybe other people will get some enjoyment and some use out of it as well.”

Emily Lewis:  So what was your process of moving from something that sounds like a relatively simple plug-in for WordPress to something much more robust like Backup Pro for EE?

Eric Lamb:  Well, that was more of an editor thing.  Once I got into the WordPress development, we don’t really talk about this much, but there’s kind of a dark side to open source.

Lea Alcantara:  [Laughs]

Eric Lamb:  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  I love it.  Love it. 

Emily Lewis:  We talk about it with our clients.  I mean, that’s something we talk about a lot with our clients when we’re trying to help them choose solutions.  [Laughs]

Lea Alcantara:  So why don’t you tell our listeners what this dark side is?

Eric Lamb:  [Laughs]

Emily Lewis:  [Laughs]

Eric Lamb:  Well, some users develop a sense of entitlement and with WordPress, specifically, it was a free plug-in.  It was something that, just by their very rules, if you want to release a plug-in for WordPress, you have to make it free. And in fact, it’s even more insidious than that, you have to make it free and you have to adopt their licensing, which is GPL, and that’s a whole other argument and discussion.  But in order to do that, you have to make it available for free.  So everybody is able to just one-click install and use it and set it up and go about their day, but whenever there are issues, they come to you.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  And with a free plug-in, it’s really tough to reconcile the amount of effort and work that goes into maintaining it for free.  With WordPress, that quickly became apparent. 

Emily Lewis:  [Agrees]

Eric Lamb:  So I don’t know.  I started kind of moving away from it.  I was getting a little sick of open source as an ecosystem.  I guess it didn’t suit in my mindset so well, and when I discovered ExpressionEngine through client work — clients hired me to solve their problems and they used ExpressionEngine.  I said, “Okay, well, let me start using ExpressionEngine then,” and I saw what a treat it was to develop with and how much fun it was to do things and how easy, and obviously, that’s very big.  It was easy to do things. 

Lea Alcantara:  Right.

Eric Lamb:  And the big reason why I released Backup Pro was Devot-ee.  Devot-ee right away, here is this community that wasn’t based on free, that wasn’t based on entitlement or at least, if there was an entitlement, well, somebody gave me some money for it.

Emily Lewis:  Right.  [Laughs]

Lea Alcantara:  Right.

Eric Lamb:  Well, that’s not exactly entitlement.  So for me, it just made a lot more sense, “Well, okay, well, let me see if I can turn that into an actual business.”  Because, I mean, obviously, the last thing we want to do is go get jobs or work for a living, and I thought, “Well, if I can release this software and people will buy it, then maybe that’s how I can kind of make my living.” 

Lea Alcantara:  [Laughs]

Eric Lamb:  Here we are five years later and it’s working out pretty well.  Yeah, it was Devot-ee.  I would have to put full credit on Devot-ee for making this a reality.  If it wasn’t for how simple they made it and how quickly the community rallied behind certain products.

Emily Lewis:  [Agrees]

Eric Lamb:  And just being a part of it, ExpressionEngine and Devot-ee, that was an ecosystem that I’m really happy I went down.

Emily Lewis:  And so what was your thinking process for taking that bit of success that you had with Backup Pro for EE and thinking to apply it to other content management systems?

Eric Lamb:  Oh wow, it was requested.

Emily Lewis:  [Agrees]

Lea Alcantara:  [Agrees]

Eric Lamb:  I should probably start there.  I had customers who used ExpressionEngine and they would use Craft and they wanted a good backup solution for Craft. And there didn’t really seem to be one that fit all of their needs in the ways that Backup Pro does. Craft obviously has its own backup system built in.  But it’s tomatoes and apples and oranges and all of that good stuff.

Lea Alcantara:  Right.

Emily Lewis:  [Laughs]

Eric Lamb:  So a lot of people have requested it though, and initially, I was really reluctant because, generally, it’s just a bad idea.

Lea Alcantara:  Why?

Eric Lamb:  Well, it depends on how you go about doing it, and thankfully, I was able to come upon a solution where it made it all possible. But before I figured it out, it was just a big job.  It was, “Okay, I’m going to have essentially two products now. Two big, big products.” And backup software, it’s a very complicated problem to solve, and to think of myself as having two individual code bases that’s unique specifically for its own CMS that does essentially the same thing was just a bad feeling.  It was one of those like projects you start thinking about it like, “There’s no way that this is going to end in joy for me. Like this is going to be my life, it’s just maintaining these products.”  But people kept asking for it.

Emily Lewis:  [Agrees]

Eric Lamb:  And it just became one of those things where it’s like the more people were asking for it, the more I was thinking about, and I’d even made some promises about it, which certainly shouldn’t have done it at the time. [Laughs]

Emily Lewis:  [Laughs]

Eric Lamb:  But some people would ask for it, and I’m like, “Oh yeah, yeah, I’m working on it.”  Meanwhile, I’m totally not working on it.  [Laughs]

Emily Lewis:  [Laughs]

Eric Lamb:  I ended up working on a project that — and I don’t know how you guys work, but generally, a lot of projects bleed into the other, I found in my career.  What I do today is going to help me out tomorrow.  I’m going to learn something.

Emily Lewis:  [Agrees]

Lea Alcantara:  Oh, yeah.

Timestamp:  00:09:57

Eric Lamb:  So I ended up having one of those projects where it was crucifying in its own way and for reasons that aren’t really important, but one of the big things I learned from it was how to abstract out the code and the logic in such a way that I can do what I’m doing now.  It was like I kind of, while trying to solve this other problem, I came upon this solution that didn’t fit that project, but it was one of those like, “Okay, let me just put a bookmark in this and come back to it later.” 

Emily Lewis:  [Agrees]

Eric Lamb:  And then when that project ended, I started kind of tinkering with the code and realized I could actually do this.  I could actually have one code base that services all the CMSs or as many CMSs as I can. And I’ve done it on five so far and I’ve yet to run into a problem, or at least, an unsolvable problem.  There have been problems along the way, but nothing that totally kept me from being able to do it. 

Emily Lewis:  Can you talk about that in a little more detail how you defined what the base was, and if there’s like a need to have — I’m not sure the right language to use — but like a fork that’s special for one content management system and it’s different with another fork for another?

Eric Lamb:  Yeah.  Interestingly, that was what I was trying to avoid actually, and this is what I have now.  I wanted to have a single code base that everything else ran on.  So essentially, how can I put this … with ExpressionEngine, Backup Pro was a backup tool written into ExpressionEngine.  So basically, just like every other add-on or module, it’s a thing that was built into it. And what I realized was that that’s an absolutely wrong approach.  What I need to do is make a backup tool that I can then build into the CMSs, if that makes sense.  So essentially what I ended up building was a headless backup tool.

Emily Lewis:  [Agrees]

Lea Alcantara:  [Agrees]

Eric Lamb:  It doesn’t have any views, any scripts, nothing to click on. But the actual body of it, the logic of it, is all behind the scenes and it’s all compartmentalized and it’s one code base.

Emily Lewis:  [Agrees]

Lea Alcantara:  [Agrees]

Eric Lamb:  In fact, a good analog for this would be video games.

Emily Lewis:  Oh.

Eric Lamb:  I’m sure you guys are familiar with Xbox and a PS3 and a PlayStation 4 and a PC.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right, yes.

Eric Lamb:  Whenever they write a game for all of those platforms, they’re not writing four individual games, they’re writing the game once and then they abstract out the pieces that they need.

Lea Alcantara:  Yes.

Eric Lamb:  And that’s essentially what Backup Pro does now where I looked at what pieces I needed from the CMS.  So just as an example, like every CMS no matter what CMS I’m building into, I’m always going to need to know the database credentials. 

Emily Lewis:  [Agrees]

Eric Lamb:  I’m always going to need to know the site name, the site URL, how Cron is activated.

Lea Alcantara:  Right.

Eric Lamb:  In all of those, once I realized that, I abstracted that.  So instead of saying building out something where it’s explicitly this is how I get just ExpressionEngine’s database credentials, I abstracted all of that where I don’t care where I’m getting it from, I just did it from one place based off of what’s installed, if that makes sense.

Lea Alcantara:  Right.

Emily Lewis:  It does. 

Lea Alcantara:  Yeah.

Eric Lamb:  Yeah, video games are the best analog. 

Emily Lewis:  It sounds clear and simple.  Was the process getting there, clear and simple, or did you try different ways before reaching this approach?

Eric Lamb:  It wasn’t simple.  Certainly not, especially because it was headless. So for the longest time, it was doing things that I couldn’t essentially execute code, you know?

Emily Lewis:  Right.

Eric Lamb:  It’s like I’m writing it and it’s all logical and I could execute bite-sized pieces, but the product as a whole, I couldn’t really get anywhere until I started getting about two or three out of the way.

Emily Lewis:  [Agrees]

Eric Lamb:  Once I got that done, essentially once I got the WordPress version done because I did Craft first, ironically enough, I did Craft first. And then ExpressionEngine 2 about a week after that. And then WordPress about a month after that, but once I got WordPress done, that really kind of solidified the paradigm and the model and now it’s just accelerated extremely fast, where I think I did concrete5 in two weeks.

Lea Alcantara:  Wow!

Eric Lamb:  And this is neither here nor there, but I did ExpressionEngine 3 in a day and a half.

Emily Lewis:  Wow!

Lea Alcantara:  Wow!

Eric Lamb:  So it’s extremely fast now. 

Lea Alcantara:  I feel like that is kind of development in a nutshell sometimes, like the lead up and the thinking and the planning is really heavy at the beginning. But once you’ve set up the process and the standards you want to develop with, then the rest just kind of falls into place.

Eric Lamb:  Oh, certainly, absolutely. 

Lea Alcantara:  So I’m just a little bit curious now then because you’re mentioning how you kind of tackled this with the first three CMSs you wanted to play around with, and then that kind of set the standard.  So what was the process like to develop for EE compared to Craft, compared to WordPress and then branching out to these other CMSs? Like did you really have to switch your brain?  What was similar?  What was vastly different?

Eric Lamb:  Oh, wow, that’s a great question.  Because coming from EE and then working on Craft immediately thereafter, both of them have very clearly defined paradigms.

Lea Alcantara:  Right.

Eric Lamb:  A MVC, model-view-controller, very standard, and both adhere to it in a very traditional way.  WordPress has none of that.

Lea Alcantara:  Interesting.  [Laughs]

Eric Lamb:  It doesn’t even know what MVC means. 

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  It’s just it’s bad. 

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  [Laughs]

Lea Alcantara:  I love it.  Love it. 

Eric Lamb:  One of the things too, like they totally know, like the WordPress guys. So I don’t think I’m talking out of school or anything.  It’s just it doesn’t have any of that paradigm, and when I hit that, that was like … what’s a good analogy for this ...  It was quite possibly the worst thing I could have done, I mean, in terms of, if you’re triaging problems, WordPress is the one where it’s just like you’re going to run into the worst problems, I mean, the most pain, and I certainly did.  But by going through that one first, let’s say it’s like when you’re a kid and you’re having dinner, it’s like, yeah, it’s lima beans, but if you eat those first, well, then everything else comes a lot easier, but if you put that off, then you’re just sitting there looking at your lima beans like, “Oh man, lima beans.”  [Laughs]

Emily Lewis:  WordPress is lima beans.  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  WordPress is lima beans, yeah.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  I love it.  [Laughs]

Eric Lamb:  Yeah.  I agree, or canned green beans, which are just squishy and gross. 

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  [Laughs]

Lea Alcantara:  I love your analogies Eric, they’re the best. 

Eric Lamb:  Because I had to go after WordPress, WordPress was so abstract and followed absolutely no best practices or paradigms, it really kind of forced me to laser in and really make the core of what Backup Pro is, and at least in so far as what it needs from the host CMSs as simple as possible.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  And thankfully, because I’ve done that, it made certain things, especially going to concrete5 and PrestaShop — those have been very different compared to ExpressionEngine and Craft as well, but nowhere near as bad as WordPress.  So it’s funny, it’s like every time I do one, I’m still like, “Well, it’s not like WordPress though.” 

Emily Lewis:  Right.  [Laughs]

Lea Alcantara:  Right. 

Eric Lamb:  It’s my one go-to.

Emily Lewis:  So Backup Pro is currently available for EE, Craft, WordPress, concrete5 and PrestaShop.  Listener Pat Pohler asked, “What criteria goes into selecting a platform for you to target?”  I know you said in the beginning, people were just asking for it, but since then do you consider the marketplace, the percent of market share, whether it’s easy to integrate into?

Eric Lamb:  As it stands right now, my main criteria is if there was a marketplace. 

Lea Alcantara:  [Agrees]

Eric Lamb:  But to be 100% honest, I am currently rethinking that approach.

Emily Lewis:  [Agrees]

Eric Lamb:  Because each one of the marketplaces have their own criteria and Devot-ee kind of spoiled me.  It really did.

Emily Lewis:  [Laughs]

Lea Alcantara:  Right.

Eric Lamb:  Where within like two days I submitted it and Devot-ee was like, “Cool, you’re up.  People can buy it.  Here’s some money.”  I’m still pending on concrete5 after … I’m going on nine weeks now.

Emily Lewis:  Wow.

Eric Lamb:  And PrestaShop took about eight weeks. And all of this is good because like they’re going through it.  I certainly don’t want to sound like they’re not good for doing it.  What they do, I’ve come to find out, is they go through your code and they’re going through it line by line, making sure everything is good and you’re not doing any hackey stuff and essentially protecting their users, which is an admirable goal.  But damn, does that process just get in the way of trying to release products.

Emily Lewis:  Right.

Lea Alcantara:  Right, right.  Very like Apple-like. 

Eric Lamb:  Yeah, very much, very much so.  So it started with marketplaces, so I started with PrestaShop, and the big irony there is my only experience with PrestaShop before I wrote Backup Pro for it was evaluating it for a site I ended up choosing to use CartThrob on. And I wrote kind of a snarky blog post that pounded PrestaShop.  [Laughs]

Emily Lewis:  [Laughs]

Eric Lamb:  So like when I was submitting it, yeah, they called me out on that. 

Lea Alcantara:  Oh, that’s awesome.

Eric Lamb:  Yeah, yeah.

Emily Lewis:  [Laughs]

Eric Lamb:  It was kind of thought, I was like, “Right on” … kinda made me like them.  But yeah, with that taking so much time, I’m not so sure that’s the best way to go about doing it anymore.  But right now, like I’m so kind of bogged down trying to get concrete5 in. And then I have other plans; like all of this has been leading up to a grand master plan, which I’m almost about to have finished. But I’m not really planning on doing another platform for at least a few more months, and even then I’m not sure which one I’m going to go with.  I’ve tried a few, and I’ve looked into a few, but it’s problematic for a variety of reasons.  [Laughs]

Emily Lewis:  So you mentioned a master plan.  Are you able to share what that might be?

Eric Lamb:  Oh sure, sure, yeah.  Now, there’s nothing secret about it.  Well, because Backup Pro is an installed software, I’ve kind of created a problem for my users or customers, I guess, not users. But managing their backup, especially for agencies, is now a process of going to every single site and making sure that it’s working and that it’s there.

Timestamp:  00:20:03

Emily Lewis:  [Agrees]

Eric Lamb:  And so what I’ve done is I’ve built out a centralized — well, it will be backuppro.com.  When you go to backuppro.com, you’ll be able to buy it, and all of this is still in the works, but I’ve built the core software, which is basically a server management system where from one place, you can manage all of your Backup Pro installation. 

Emily Lewis:  Ooh.

Lea Alcantara:  Ah.

Eric Lamb:  And we don’t actually store any data, so it’s incredibly secure because we store nothing, except for an API key, and that’s it. And then it just talks to your site in real time and lets you know right away if anything is wrong and what to do about it.  It’s basically like instead of going to each site, you just go to backuppro.com and then just choose which site you want to manage. 

Emily Lewis:  That sounds pretty awesome, especially because we like Backup Pro and use it ourselves as well as for some of our client projects.  That would just another way to be a little more efficient with what we’re doing.

Eric Lamb:  Well, yeah, it’s funny, you start doing these things because, well, it just seemed like a thing to do, “Let me just put it up on Devot-ee and see what happens.” And then all of a sudden you start thinking about like solving universal problems, and taking backup sucks.  Well, how can I make that better?” 

Emily Lewis:  [Laughs]

Lea Alcantara:  Right.

Eric Lamb:  And this was kind of where I thought I should put my flag, it’s where having installed software I feel is the secure way to go about doing it.  I never really understood the pay-as-you-go backup systems, like what happens if you don’t continue paying? You lose your backups.  That’s just bizarre to me.  So having installed software is absolutely the way to do it, but the downside is I’ve kind of created this problem for my customers of, well, they have to hit up like 30 sites.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  And that’s a bummer.  Even I know that’s a bummer.

Lea Alcantara:  Right.

Eric Lamb:  So yeah, I plan on making it free.  It’s not anything that that’s going to cost any customers or anything.  You just have to be a customer and then you can use it.

Emily Lewis:  [Agrees]

Eric Lamb:  But yeah, so essentially once I start releasing other versions like the Drupal one or the Magento, if I ever get around to doing Magento, they’ll all be able to be hooked into there.

Emily Lewis:  That’s awesome.

Lea Alcantara:  Well, the other thing that I want to know in terms of your criteria and things like that, you mentioned you’re still thinking about them.  Do you have like a checklist of like, “Okay, if it has this, then that puts in the pros pile, and then if it has this, then that’s the cons pile.”  What’s kind of like your thought process over, because you said, originally it was like, “Okay, availability of marketplace.”  So if that’s not going to be the criteria, what’s the next thing that you think is most important?

Eric Lamb:  User base.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  Because really, I think the big catalyst for this too was a realization that EE has a cap.  I would be the happiest guy in the world if all I had to do was just write it for ExpressionEngine, just one version and one set of customers. 

Emily Lewis:  Right.

Lea Alcantara:  Sure.

Eric Lamb:  Oh man, that would be great.  But that’s just not how the world works.  So if I’m going to start doing this as a means of revenue, well, if it’s not going to be based off of marketplace and it’s going to have to be based off of user base and some sort of corollary on paying for add-ons.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  So something like OpenCart, I would imagine probably not just because that’s open source all the way and it probably doesn’t have the user base. But Magento, definitely. Drupal, certainly.

Emily Lewis:  [Agrees]

Eric Lamb:  But even Drupal and Joomla have their issues because those are not purely MySQL solutions.  There are different database engines that you can have. And I kind of feel like Backup Pro needed a support entirely if it’s going to be released as a product for another CMS.  I’ve actually been talking to people and they’ve told me that’s probably not the case, so I’m confused.  [Laughs]

Emily Lewis:  Well, I think that leads into another question that we got from Pat Pohler.  He’s asking, “How do you market to the users of each platform?  Do you have methods that work better than others on some platforms?”

Eric Lamb:  Again, this kind of goes back to the marketplace thing, but with that being in the marketplace, I was really hoping that that would give me a leg up because that’s a huge problem.  In fact, right now, I definitely have marketing issues, at least in so far as I have these great products that solve wonderful problems, but nobody really knows about it.  Yeah, like with ExpressionEngine, certainly I’m able to make progress there, and a lot of that is transferred over to Craft.  In fact, I can say this with confidence that I sell more versions of the Craft Backup Pro than I do in any other.

Emily Lewis:  [Agrees]

Lea Alcantara:  Oh, interesting.

Eric Lamb:  Yeah, and I don’t advertise with Craft either, so I imagine it’s a lot of ExpressionEngine people who are just like, “Cool, it’s for Craft.  Right on.”  You know?

Emily Lewis:  They already know your reputation.  They have an expectation for what they’ll get with the add-on because they worked with it with another CMS.

Eric Lamb:  I believe so, yeah.  I honestly haven’t gone into my sales reports and actually looked and see if there’s a corollary between EE versus Craft. But just going off of the fact of I never advertise and there is a lot of carry over with the Craft and EE communities. 

Emily Lewis:  [Agrees]

Eric Lamb:  But yeah, I’ve never verified it.  But yeah, with marketplaces, that was really my big thing.  It was like I’m going to be in the marketplaces so I’m going to be in front of the customers and when they’re looking for the solution, well I’ll all be there so people will be able to see it. But in terms of advertising and marketing, I haven’t even begun that fight yet, and it’s certainly going to be a big fight.  I don’t know how best to go about it just yet, but I’m still in the development phase too, so it will be a good while until that’s actually a problem that I can tackle.

Emily Lewis:  Do you have any plans to take any of your other add-ons in this direction to start building them out for other CMSs?

Eric Lamb:  You know, probably not.  One of the nice things about Backup Pro is it’s a universal tool. 

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  And especially with what a backup of a website is, like there is no second guessing.  I take a zip file of files and then I take a copy of your database. Like that no matter what platform you use, that’s going to be whatever your backup is.  But with some of my other products like Exporter was one that I would love to port that over.  That is just a very, very good product in ExpressionEngine for me.  But the thought of I’m not going to be able to do what I’m doing with Backup Pro with that essentially.

Emily Lewis:  [Agrees]

Eric Lamb:  Like the data model between ExpressionEngine and Craft and WordPress, I mean, they’re all so universally dramatically different, you know?

Emily Lewis:  [Agrees]

Eric Lamb:  It would just be a very, very tough job, not even like it or even if there was like money in it, it’s a big job. Where I can kind of rest on my laurels a little bit with Backup Pro, but again, because of the backup is the same thing across all of them.

Emily Lewis:  Right, right.

Lea Alcantara:  Right.

Eric Lamb:  So yeah, probably not, probably not, and in fact, what was the other one, like I might not even be able to port a lot of my existing products to ExpressionEngine 3.  I’ve come to found out.

Emily Lewis:  Oh wow!

Eric Lamb:  Yeah, yeah.  The technology and the hooks and the methods that I used to be able to do a lot of that functionality are not in ExpressionEngine 3. 

Emily Lewis:  [Agrees]

Eric Lamb:  So it’s just not possible to do what I’m doing.

Emily Lewis:  So let’s talk a little bit about, I guess, maybe the business side of things in the sense of if you’re developing something for ExpressionEngine and Craft and WordPress, et cetera, do you have to have any sort of permission to build something that works for a competing CMS with the host CMS? Any special licenses or legal contract issues that have come up because you are developing for other platforms?

Eric Lamb:  Not legal stuff.  I’ve certainly ran into some cultural issues.

Emily Lewis:  [Agrees]

Lea Alcantara:  Oh.

Eric Lamb:  Yeah, it’s…

Lea Alcantara:  How so?

Eric Lamb:  Well, people have their favorites. And I don’t want to mention which CMS because it’s petty.  I mean, it just doesn’t really matter, but like I’ve gotten flak from people — and it’s actually kind of funny, it cracked me up when I read it — but for developing for lesser CMSs.

Emily Lewis:  [Laughs]

Lea Alcantara:  Oh, right, right.

Eric Lamb:  I was like, “Right on, okay.”

Lea Alcantara:  Right.

Eric Lamb:  So, it’s…

Emily Lewis:  Oh, people are such snobs. 

Lea Alcantara:  [Laughs]

Eric Lamb:  Right, yeah.  Okay, you know, that’s where you’re putting your flag in.  I get it.  We all have our thing. 

Emily Lewis:  [Laughs]

Lea Alcantara:  That’s funny.

Eric Lamb:  But yeah, small things like that kind of crack me up.  Legally, no, no.  I mean, there’s really no permission.  It is open to each person whether they want to allow me to sell for them or at least through them, I should say, in their marketplace. And with those times I’ve done it, with PrestaShop, I was absolutely worried about it because it was my first time.  With concrete5, I’m still on the hook, so I’m not really sure, but there’s a very real possibility that they could deny me.  It’s well within their right to do so.  It’s their playground.  I’m just happy to be invited. But they could absolutely just say, “No, sorry, we’re not going to let you sell it.  We don’t like what you’re doing.  We don’t like how you’re doing it.” 

In fact, while working with PrestaShop, this is a good example, they had actually seen how I was doing certain things, and in no uncertain terms they told me that I needed to not do that and I needed to do something else or else I couldn’t be in their marketplace, so I did.

Emily Lewis:  [Agrees]

Eric Lamb:  I was like, “Okay, well, let me just go ahead and do this other thing then and make sure that you guys are cool.”  You know?

Emily Lewis:  [Agrees]

Eric Lamb:  I try and be as amenable as I can, but sometimes there are some things that you’re just like, well, one thing with concrete5, and this is a good example, concrete5 has what’s called a linter.  Linters are great, but essentially all it is, is it looks at your code and says, “Your code is doing these things, and we don’t like these things, or we do like these things.” 

Emily Lewis:  [Agrees]

Eric Lamb:  But it looks over your code. And one of the things that they don’t like is using your own database connection stuff.  Well, that’s Backup Pro all over because it has to connect to your database.

Emily Lewis:  [Agrees]

Eric Lamb:  So if they were to come back to me and be like, “Well, you can’t do this,” that one would be kind of, “Okay, well, then I guess I just won’t be selling with you guys.”  Right?  [Laughs]

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  But I’ll still sell it on my own site.

Emily Lewis:  Right.

Eric Lamb:  And as far as I’m concerned, that’s not a deal breaker.  It would be ideal.  It would be nice to get that stamp of quality.

Emily Lewis:  I’m glad you mentioned that because honestly, until you said that, I wasn’t really thinking.  I kind of thought, “Well, if they said no, that’s just it for you, and well, how much that must suck that you’ve put in all that effort.”  [Laughs]

Timestamp:  00:30:05

Eric Lamb:  [Laughs]

Emily Lewis:  But you can still sell on your own.

Eric Lamb:  Oh, certainly, certainly. 

Emily Lewis:  Okay.

Eric Lamb:  It’s a capitalist society we live in.

Emily Lewis:  [Laughs]

Eric Lamb:  So realistically, especially with some of the licensing, like I don’t want to speak to the commercial things like ExpressionEngine or Craft because those I think are their own specific license and maybe you’d have to have a lawyer look at it. But any of the open source ones, those are all very, very standard.  There’s nothing keeping me from writing or keeping anybody from writing anything, any piece of software for any other piece of software.  [Laughs]

Emily Lewis:  When you’re submitting something to a marketplace, do you mention the success that your add-on has had for other platforms?  I mean, is that a “selling tool?”

Eric Lamb:  No, actually, not so much as a selling point.  I’ve certainly referenced it, but more as a virtue. 

Emily Lewis:  That you have an established reputation.

Eric Lamb:  Exactly.  It’s not a fly-by-night thing, that I’m not just some random “Here’s a thing I put together and let me try and, you know.” 

Emily Lewis:  [Agrees]

Eric Lamb:  Just to kind of breathe some confidence as well. But no, I’ve never really tried to do any weight stuff like that or even really mention sales or anything like that.  I’ve really do have this, it’s almost like an ideal vision of how this works, which is clear fantasy at this point.  You want it to be chosen based off of its own merits and instead of “Let me just try and throw some weight around and drop names and stuff.”  Yeah, that doesn’t sit well with me. 

Emily Lewis:  [Agrees]

Eric Lamb:  So I certainly do let them know like it’s available for all of these and you can check it out, and by the way, here’s a download so you can go ahead and look at it right now for whatever.  Yeah, mostly, it’s just to let them know that it’s a solid piece of technology and it’s certainly not something that they need to be afraid of.

Lea Alcantara:  So we’ve been talking about the development of these various platforms for this add-on, but the biggest, I feel, like elephant in the room whenever I talk to any add-on developer is about the support requests.  How are you dealing with different support requests from different CMS communities?  Are the patterns similar?  Are there issues similar?  What’s the biggest difference?

Eric Lamb:  Now, that’s a good question too.  Yeah, they’re different.  They’re dramatically different.  I had to explain to a customer what FTP was, which was…

Lea Alcantara:  Was this a WordPress customer?  [Laughs]

Eric Lamb:  No, it wasn’t.  It was PrestaShop customer.  [Laughs]

Lea Alcantara:  Oh, interesting, okay.

Eric Lamb:  But yeah, I did not expect that to ever come up in a support conversation.

Emily Lewis:  [Laughs]

Eric Lamb:  But yeah, and in fact, it really started because PrestaShop has the one-click install. And so this specific customer, a very, very sweet lady who had a quilting store and had just put up her own little site and was trying to do her own thing and found out about backups and needed it and bought it.  But when it installed it for her, she did the one-click install thing, but then she didn’t quite know how to make permissions proper for the storage of them, and so I needed to explain about 777, and that blew her mind.

Lea Alcantara:  Right.

Eric Lamb:  And then she started telling me that she didn’t even know how to connect because I kept saying, “Just connect to it and right-click.  Usually it’s a right-click thing.”  “Okay.”  Then, yeah, she said, “Wait, do you know what FTP is?”  Like, “Oh, okay.  Let’s start at the beginning then.” 

Emily Lewis:  Wow, so you’re going to have a user from that level, that more simple level of technical understanding to someone who’s a straight-up developer who knows exactly how to do the most basic stuff and probably builds their own add-ons.

Eric Lamb:  Oh, certainly, yeah.  I am running the gamut.  In fact, the majority of customers don’t ask me for anything.  They buy it, they install it.  I assume it works, I hope it works, and it would be devastating if they’re like, “No, it never worked, but I didn’t want to let you know.”  But sometimes, they’re beginners.  They just are.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  And I don’t know, it used to kind of annoy me, especially during the WordPress days, but with a lot of this, it’s like I’m just happy that they know backups are important, you know?

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  Like right away they’re learning, they’re trying to improve, and that’s a tough to kind of get down on is kind of the attitude I’m trying to keep with my support. 

Emily Lewis:  I mean, that’s probably the best way to stay sane.

Eric Lamb:  Oh, definitely.  Yeah, it’s part of the job and one of the best lessons I’ve learned about support — and actually, it wasn’t even from add-on developers — was every time you get a customer issue, write a unit test for that issue every time. And I’ve taken that to heart, and that has been huge for me in terms of stability and making sure that issues don’t reappear, you know?

Emily Lewis:  [Agrees]

Eric Lamb:  So sometimes a customer will have issues with just figuring up the exact paradigm of it, like the permission lady, and sometimes it will be bug. But by having individual unit test for all of my bugs and all of those issues that are confusing or whatever, it’s really kind of cutting down on the repeats, which is definitely big.

Emily Lewis:  [Agrees]

Eric Lamb:  So that’s kind of my strategy actually.  I’m not so concerned with support in the dramatic sense.  I’m more concerned with it as an individual case by case.

Emily Lewis:  [Agrees]

Eric Lamb:  But so long as the software is solid, then I don’t really have much to worry about it.  It’s just individually helping out people, and I can get behind helping out people. 

Lea Alcantara:  But how do you scale that? You’re one guy?

Eric Lamb:  Well, yeah, right now that’s a problem that doesn’t exist.  I mean, if it does, it’s one of those good problems.  I honestly don’t know how I will scale it, if and when it does happen. But the nice thing, the really, really nice thing, is that when my support goes up, it is 100% going to include an increase in sales.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  So it’s not like my support will ever go up and my sales won’t happen.  Especially I have a support policy, and I try to limit certain things. But for the most part, if somebody is asking for help, well, they’ve given me money so I’ve been paid.  I mean, if it ever gets to the point where it’s like too much for me to do, well, chances are really, really good I’ll be able to hire help.

Emily Lewis:  I think that leads nicely into another listener question.  Jae Barclay asked, “How do you balance the wider platform support with profit margins?”  And you were sort of just talking about if you have an increase in support you have an increase in sales.  So haven’t you been in a situation where you’re giving more support and then seeing that increase in profit?

Eric Lamb:  Oh, no.  I’ve certainly been on that side, absolutely. 

Emily Lewis:  Oh.  [Laughs]

Eric Lamb:  I don’t tend to dwell on it though.  What I’ve had more than anything else or at least what’s more noticeable are individual customers who are more of a drain than others.  I’m going to phrase it like that.

Emily Lewis:  I think we all know what that’s like.  [Laughs]

Eric Lamb:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  And I’ve only had to do this twice, but I’ve actually fired customers before.  As much as I would love to continue working with you, as much as I love your money, their needs cannot match what I can offer.  It just can’t.  It’s more about being practical with it. 

Emily Lewis:  [Agrees]

Eric Lamb:  Well, not as soon as, like there are tons of leeway.  As an example, I’ve had one customer where every time they bought, I was guaranteed three or four hours of helping them to set it up and helping them to figure out what’s wrong. And they just weren’t at the level to do what they were trying to do basically without help.  Like I’m sure you guys remember this from back in the day, but there was a discussion about some ExpressionEngine customers, and this was a few years ago, but using add-ons as their technical support. 

Emily Lewis:  [Agrees]

Eric Lamb:  They would buy an add-on and then expect help in every step along the way of their project.  I mean, the best way to deal with that is just apologize, thank them, give them a refund and move on with your day. 

Emily Lewis:  [Agrees]

Eric Lamb:  But try not to let that bog you down. 

Emily Lewis:  So do you feel like the bottom line of your decision to port Backup Pro to multiple systems, has it been a good business decision? A profitable one?

Eric Lamb:  Has it been a good business decision?  Certainly, absolutely, sky is the limit. And when I was just on ExpressionEngine, I was limited by the amount of users of ExpressionEngine.  In fact, actually, it’s worse than that because I was limited by the amount of users on ExpressionEngine who were open to doing third-party add-ons, which it turns out is miniscule.

Emily Lewis:  [Agrees]

Eric Lamb:  I mean, just percentage, maybe 2 or 3.  It’s tiny, tiny, tiny. 

Emily Lewis:  [Agrees]

Eric Lamb:  Whereas now, every time, like if I ever run out of customers, I’ll just create out a new version.  If there’s a ceiling on PrestaShop and WordPress, and in fact, actually, if there’s a ceiling on WordPress, yikes.

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  But with the others, I’ll just move on.  I’ll create out a new one, a Drupal one, a Joomla one.  I’ll just create a new one. 

Emily Lewis:  So it does make sense, I mean, especially because as you described, with Backup Pro, you could abstract it out so completely so that you’re not having to do from-scratch development each time.

Eric Lamb:  In fact, that’s essentially what it is now.  In fact, I just had a great moment when I was doing the concrete5 one, because 90% of the code for Backup Pro, it’s the same.  When you download the Craft version, 90% of what’s there is included in all of them. But that 10%, it’s most of the view scripts and the HTML and the layout stuff, and I was just kind of consigning myself that those were always going to be unique.  But then when I was doing the concrete5 version, I discovered to my great surprise that both of them use Bootstrap for their HTML rendering. 

Emily Lewis:  [Agrees]

Eric Lamb:  So I was able to use both of those, you know?

Emily Lewis:  [Laughs]

Lea Alcantara:  [Agrees]

Eric Lamb:  It was copy paste and modify it, but I was able to save quite a bit of time doing that. 

Lea Alcantara:  Are there any particular CMSs you’d never developed for and wouldn’t port Backup Pro to?

Eric Lamb:  Well, as it stands today, that would be Magento.

Emily Lewis:  [Agrees]

Timestamp:  00:39:59

Eric Lamb:  But that’s because I failed miserably twice attempting it, and it’s just painful.  It is a painful CMS to work with.

Lea Alcantara:  Interesting, and all these systems that you’re mentioning, they tend to be PHP-based.  Is that going to remain the same for the near and far future?

Eric Lamb:  Oh, absolutely, yeah.  At the very least, where I intend on taking it, yeah.  In fact, if I was to port to a different language, it would be 100% different. 

Emily Lewis:  [Agrees]

Eric Lamb:  We would be back to that problem from before about two separate code bases.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  Except, it’s way worse with two separate programming languages too.  Like I’m pretty good at Java, but man, I don’t think I want to maintain a backup program written in Java.

Emily Lewis:  Yeah.  I mean, it sounds to me like if you’re going to go in this direction, there are a couple of things and they have everything to do with what the add-on itself does.  Can it be abstracted out so that you are maintaining a single code base so that it is a good business decision, so it isn’t a huge time suck each time?

Eric Lamb:  Oh no, certainly not.  It’s more of a long game or long con, if you will.  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  It’s certainly not profitable though.  If I was to add up all of my hours, I am dramatically in the hole, six figures in the hole.  This has been a time suck and a half, but it’s also been an investment.

Lea Alcantara:  [Agrees]

Eric Lamb:  So it hasn’t paid off yet, but I am fully confident that it will at some point.

Emily Lewis:  [Agrees]

Eric Lamb:  I just don’t know when. But in the meantime, it’s making money and it’s growing.  That’s the encouraging part.  The revenue I made last month beat what I made the month before and bean the month before that. And as long as I keep getting that growth going, it feels worthwhile to keep trying.  But when it was just ExpressionEngine, it was a plateau.  In fact, one of the more sad parts and commiserating with a lot of other developers, it was no matter how much effort I put into it and no matter how many new features I added, no matter how great a particular product was, the growth was never really there. 

Lea Alcantara:  Right.

Eric Lamb:  It was like a constant battle to just maintain the status quo, whereas with now, there is a definite potential for growth.

Emily Lewis:  [Agrees]

Eric Lamb:  And that is huge to me.

Lea Alcantara:  So in regards to all that potential for growth, one of the things that we talked to a lot of CMS and add-on developers about and they have to deal with that’s an issue is documentation.  How do you maintain different sets of documentation for each CMS? Even though the concept of backing up is the same for all of them, setting them all up must be different?

Eric Lamb:  Yeah, yeah, and in fact, realistically though, in fact, how I have it currently set up on my site is there are really only two places of differentiation in the documentation based off of what CMS you’re using and that’s system requirements and installation. But everything else is identical.

Lea Alcantara:  Oh.

Eric Lamb:  There isn’t a feature in one that you can’t do on the other.  How it works in ExpressionEngine is identical 100% to how it works in Craft, to how it works in PrestaShop. So the only difference is if you’re in installing from PrestaShop, I need to tell you what version it works in and the steps you have to go through to install it.

Emily Lewis:  [Agrees]

Lea Alcantara:  Right.

Eric Lamb:  But those two things, that’s the only difference.  So on my site, there’s area for system requirements and then each platform has its own little sub-page.  So if you want to see system requirements for Backup Pro by itself, that’s the top level, and underneath that, there are just children of, “Here are the WordPress system requirements, and here is the ExpressionEngine.”

Emily Lewis:  Just as an outside observer — I don’t know add-on development — but it just seems to me that you’ve been methodical and really smart about defining the scope and setting boundaries and approaching this in a way where it really makes a lot of sense the way you’re describing it.  Even down to the documentation, it’s not this massive beast and it sounds like that’s because of the approach you took in building it in the first place. 

Eric Lamb:  I like to think so.  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  It was a trial certainly and it’s something that like thank god I went through that nightmare project that kind of set me on this path, because if I didn’t go through that pain, it definitely wouldn’t have happened. And if it did, I’m worried about what it would have looked like.  I truly believe this was the only way that it could have been done and still maintain sanity and still make it a one-person job.  If I had a staff, maybe I would have gone about it differently.  But the process I have, you’re dead on.  I mean, everything is so streamlined, and … like have you guys seen the video I put up of my build process for Backup Pro?

Emily Lewis:  No.

Lea Alcantara:  No.

Eric Lamb:  I’ll send you guys the link, but very, very cool, if I do say so myself.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  But essentially what it does, because Backup Pro, for each version of it, so for the ExpressionEngine version, it’s not actually even one code base or two code bases, it’s four.  So on my computer, I have for each platform, two different code bases and it shares two. So there’s about a dozen different pieces of code lying around that all collectively make up Backup Pro.  So in order to build it out, I was stuck with a process of either copying and pasting manually every time I’m going to ahead and put this together. Or I have a build process. And so I put together a really, really cool build process. 

The build process, basically it inspects everything, checks out the latest version from Git, compiles each individual CMS’ platform by itself, copies it over into a fresh installation of whatever CMS it goes through, runs through over a thousand unit tests, opens up a web browser using Mink and Selenium and runs through browser tests, clicking on everything. All of this automatic, all of this programmatic, without me having to do anything; I just execute a command and then I just walk away.

Emily Lewis:  Wow!

Eric Lamb:  And it takes about 20 minutes to do each one, but it runs through all of these tests, and if it finds anything that’s wrong, if something doesn’t work right, look, I have tests that say, “Install the add-on and then go to the settings page and make sure it displays up this error, and then go to the setting page and fill out this one field and make sure that this error goes away.”  It runs through about a thousand of those.

Emily Lewis:  Wow!

Eric Lamb:  And then it does the ExpressionEngine one and then the Craft one and then the PrestaShop one, and just all of them. And all told, the entire process for all of them takes about 2-1/2 hours because each one takes anywhere from 20 to 40 minutes, but it’s all automated.  I don’t have to do much of anything, but make my changes, check it in and then just execute a little shell script and it just builds it all for me perfect. So I know that when everything is done, that all of my tests have passed and that I have a solid piece of software. 

So to go back to where we’re talking about the support stuff, when I do get a support thing from a bug or an issue or something, I’ll write a new unit test and make sure that every time that that product gets built, that bug never comes back.  So I’m able to get a level of stability that I was never able to do before, but ironically enough, now I can. 

Lea Alcantara:  How long did it take you to put together this build process?

Eric Lamb:  Oh gosh, about two weeks.  Two weeks of that was my life was just building that, but it’s just so worth it.  I mean, seriously, it should have been.  In fact, I was talking to some clients about letting us build those out for their client sites, because when they make a change, how great would that be to have it open.  Are you guys familiar with Selenium?

Emily Lewis:  No.

Lea Alcantara:  No.

Eric Lamb:  Oh, Google it, it’s amazing.  It’s basically a headless browser.  It will open up Firefox and you program it and say, “Click on this link and do this thing and assert that this doesn’t happen or that just did happen.”

Emily Lewis:  Oh.

Eric Lamb:  And if anything doesn’t go right, if there’s something that doesn’t match what you said, it lets you know and it tells you where, and you know.  So when we push a change to our clients, how great would that be to have all these tests run where we know that what we just did didn’t break anything?

Emily Lewis:  Oh yeah.

Lea Alcantara:  Right.

Eric Lamb:  Nobody’s really bought though.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Emily Lewis:  Yeah, definitely send that video and we’ll include it in the show notes. 

Eric Lamb:  Yeah, that will be great. 

Emily Lewis:  So before we wrap up, do you have any just general tips for someone who might be considering porting an add-on to another CMS; some of your top three suggestions, before making that investment or when they’re making that investment?

Eric Lamb:  I would say abstraction.

Emily Lewis:  [Agrees]

Eric Lamb:  Abstraction, abstraction, abstraction.  You’ve got to take your requirements and pare it down to the lowest common denominators.

Lea Alcantara:  Right.

Eric Lamb:  And figure out how you’re going to get those individual pieces from each individual CMS.  That was a big problem for me.  Well, not so much anymore now that I figured that one out.  Patience, certainly.

Emily Lewis:  [Laughs]

Eric Lamb:  You’re going to need a lot of patience, especially if you’re trying to submit to the marketplaces because, again, almost nine weeks and I’m still waiting on one of them, and eight weeks on another. So yeah, you’ve got to have a lot of patience.  You’ve got to play nice.  [Laughs]  You’ve got to be good to, especially the people in the community, because as we discussed, some of them, like they have their favorites. 

Emily Lewis:  [Agrees]

Eric Lamb:  It’s just bizarre, like you’ll get people who are just really mad at you because you don’t like their thing, but like you don’t dislike it, you just don’t like it as much as they like it.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  Right, right.

Eric Lamb:  Yeah, abstraction and patience, oh, and planning.  Okay, yeah, that’s actually perfect, abstraction, patience and planning. 

Emily Lewis:  [Agrees]

Eric Lamb:  You’ll never have enough planning with these things, ever, ever, ever. 

Timestamp:  00:49:56

Emily Lewis:  Yeah, your process just sounds really well thought out and smart and with boundaries to it and some expectations.  Just fundamentally aside from the fact that you’re developing something that’s a technical solution, it sounds like your approach has been very business forward and smart in terms of what you know you can handle and what you want to support down the road and how you want this to be an investment for your business that gives you that sort of unlimited ceiling of potential to sell. 

Eric Lamb:  Yeah, well said.  Yeah, that pretty much sums it up.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  I don’t’ want to leave this podcast without asking this particular question because we have so many CMS developers listening to this show.  If you could speak to the actual devs of EllisLab and Craft and PrestaShop and concrete5 as a third-party developer, what should they be doing to their base product that would make it easier for you to do your job?

Eric Lamb:  Oh man, the big one, please for the love of god, adhere to best practices. 

Emily Lewis:  [Agrees]

Eric Lamb:  Like there are certain paradigms that are well established like MVC, you don’t have to reinvent your own special idea of it. 

Emily Lewis:  [Laughs]

Lea Alcantara:  Right.

Eric Lamb:  You really don’t, so please stop doing that. 

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  That would be great.  Let’s see, oh yeah, the other one too, security paradigms. And this one I’m going to pick on PrestaShop just a little bit, but they have got the silliest CSRF protection I’ve ever encountered.  It is just heavy handed and brutal, and it works, like I’m not implying that they’re insecure, but they invented their whole solution, it’s silly. And it just goes completely contrary to what one would expect for that specific problem.

Emily Lewis:  [Agrees]

Eric Lamb:  It’s like changing a tire, but instead of using a jack, we’re just going to go ahead and grab a bunch of rocks.

Emily Lewis:  [Laughs]

Eric Lamb:  Like it will work, but are you sure?

Emily Lewis:  Right.

Eric Lamb:  Yeah, so consistent paradigms. 

Emily Lewis:  Good.  Who knows if they’re listening, but those are the kind of things that I think, if they want to be engaged with their community, they do want you feedback like that. 

Eric Lamb:  Well, I’ve tried to tell them.  [Laughs]

Lea Alcantara:  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  Well, I feel like that’s a great place to end our show, but before we finish up, we’ve got our Rapid Fire Ten Questions so our listeners can get to know you a bit better.

Eric Lamb:  Excellent.

Lea Alcantara:  Are you ready?

Eric Lamb:  Oh, absolutely.

Lea Alcantara:  Okay, first question, morning person or night owl?

Eric Lamb:  Oh, night owl.

Emily Lewis:  What’s one of your guilty pleasures?

Eric Lamb:  Oh, this would seem sound kind of weird …

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  But every Monday through Friday, religiously for the past 2-1/2 years, I’ve drank two ounces of wheatgrass. 

Emily Lewis:  Is that what you get at JambaJuice when you ...

Eric Lamb:  That is what I get at JambaJuice.

Emily Lewis:  Because I see you posting at JambaJuice.  I’m like, “Damn, he must be really in juice.”  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  No, no, no.  In fact, I despise it.  It is horrifyingly bad. 

Lea Alcantara:  [Laughs]

Eric Lamb:  But it’s incredibly good for you. 

Emily Lewis:  [Laughs]

Eric Lamb:  I mean, it’s just very, very good for you, but oh man, it’s just nasty. 

Lea Alcantara:  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  What software could you not live without?

Eric Lamb:  Oh, Zoo Studio.

Emily Lewis:  [Agrees]

Eric Lamb:  It’s my IDE.

Emily Lewis:  What profession other than your own would you like to try?

Eric Lamb:  A ninja. 

Lea Alcantara:  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  What profession would you not like to try?

Eric Lamb:  A pirate.

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Emily Lewis:  If you could take us to one restaurant in your town, where would we go?

Eric Lamb:  Oh, Fat Fish. 

Emily Lewis:  A seafood restaurant?

Eric Lamb:  No.  Well, yeah, it’s a Mexican seafood place. 

Emily Lewis:  Oh.

Lea Alcantara:  Oh.

Eric Lamb:  Yeah.  In fact, I took Anna Brown there once, MediaGirl. 

Emily Lewis:  [Agrees]

Lea Alcantara:  Yeah.

Eric Lamb:  She just popped up in San Diego one day randomly. And we went there, and I loved it ever since.  It’s a great place, Fat Fish.

Lea Alcantara:  If you can meet someone famous, living or dead, who would it be?

Eric Lamb:  Oh.  I’m going to go with JFK.

Emily Lewis:  If you could have a super power, what would it be?

Eric Lamb:  Teleportation.

Emily Lewis:  You and me both.  I’m there with you.  [Laughs]

Eric Lamb:  Right, wouldn’t that be perfect?

Emily Lewis:  I know, exactly.  I can’t think of why you’d pick anything else.  [Laughs]

Eric Lamb:  Seriously. 

Lea Alcantara:  What is your favorite band or musician?

Eric Lamb:  Trivium is my favorite band. 

Emily Lewis:  All right, last question, pancakes or waffles?

Eric Lamb:  Oh, waffles.  I feel like I let you down there.  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  [Laughs]

Emily Lewis:  I’m not a waffle fan, so I’m just like, “Huh.”  [Laughs]

Lea Alcantara:  [Laughs]

Eric Lamb:  [Laughs]

Lea Alcantara:  Well, we had someone from Amsterdam a few weeks ago and she was definitely Team Waffles.

Eric Lamb:  [Agrees]

Lea Alcantara:  So don’t feel bad.  [Laughs]

Emily Lewis:  [Laughs]

Eric Lamb:  All right.  Well, there’s something, because it’s got little cups for your syrup like naturally. 

Lea Alcantara:  [Laughs]

Emily Lewis:  [Laughs]

Lea Alcantara:  I love it.  So that’s all the time we have for today.  Thanks for joining us, Eric! 

Eric Lamb:  Thank you very much for having me!

Emily Lewis:  In case our listeners want to follow up with you, where can they find you online?

Eric Lamb:  I am @mithra62 on Twitter and mithra62.com and Facebook.com/mithra62.

[Music starts]

Emily Lewis:  Awesome.  It was so great to talk to you again, Eric.  Thank you for joining us today.

Eric Lamb:  Thank you very much for having me.

Lea Alcantara: CTRL+CLICK is produced by Bright Umbrella, a web services agency obsessed with happy clients.  Today’s podcast would not be possible without the support of this episode’s sponsor!  Thank you, Visual Chefs.

Emily Lewis:  We’d also like to thank our partners: Arcustech and Devot:ee.

Lea Alcantara:  And thanks to our listeners for tuning in!  If you want to know more about CTRL+CLICK, make sure you follow us on Twitter @ctrlclickcast or visit our website, ctrlclickcast.com.  And if you liked this episode, please give us a review on iTunes, Stitcher or both!  And if you really liked this episode, consider donating to the show.  Links are in our show notes and on our site.

Emily Lewis:  Don’t forget to tune in to our next episode.  We’ve rescheduled with Aaron Gustafson who will be joining us to talk about progressive enhancement and the second edition of his book, Adaptive Web Design.  Be sure to check out our schedule on our site, ctrlclickcast.com/schedule for more upcoming topics.

Lea Alcantara:  This is Lea Alcantara …

Emily Lewis:  And Emily Lewis …

Lea Alcantara:  Signing off for CTRL+CLICK CAST.  See you next time!

Emily Lewis:  Cheers! 

[Music stops]

Timestamp: 00:55:44