DEV Community

FounderQuest

Ruby Is The Animal Crossing Of Frameworks

Show Notes:
Links:

VoltronTransformersGobotsThundercatsAnimal CrossingStardw ValleyFactorioDependabotGumroadShopifyStripePinky and the Brain
Full Transcript:
Starr:
Did you prefer Voltron over Transformers? Which team were you on?

Ben:
I guess I did, because I don't remember watching much in the way of Transformers, but I did watch a lot of Voltron, so.

Starr:
Oh really? That's a shame. Transformers were great.

Ben:
I'll take your word for...

Josh:
I like the name Voltron better. Voltron's a pretty good name.

Starr:
Well, can we all just agree the Gobots just suck? Let's just all agree to hate the Gobots.

Ben:
But I think perhaps Thundercats were better than both Voltron and...

Starr:
Oh, a hundred percent, a hundred percent. Thundercats for life.

Josh:
Are we the Thundercats of air trackers?

Ben:
Honey badgers go.

Starr:
I don't think a honey badger is technically a cat.

Ben:
I decided to try out Animal Crossing this morning.

Josh:
Oh really?

Starr:
Oh good. How do you like it? I've been playing in too.

Ben:
Well, it's not very exciting. It's a very slow pace kind of thing.

Starr:
Oh, yeah.

Ben:
That's the goal. That's the point, right? And I was like, "Yah, I'll check this out. Maybe it'll help me relax." And I'm like, "Now what do I do? Now what do I do? Now what do I do?" This is not helping me relax.

Starr:
Oh yeah. It is kind of a bunch of tasks.

Josh:
That's maybe not for everyone.

Starr:
But you do get to a point where you can kind of just goof around. I got it and then I played 20 minutes every three days or something for a couple of weeks just because I was like, "I don't know if I want to go gather this wood right now." But then you get over a hump and then it's more of an open world and you can kind of just sort of make it your own.

Ben:
I think part of my problem was my son's been playing it for a while now and he's got this nice house with all this cool stuff in it and I show up and I got a tent. I'm like, "Oh. I want a nice house."

Josh:
You've got to put the work in. Got to put the time in. He plays Minecraft too, doesn't he? Or did?

Ben:
He used to. Yeah.

Josh:
Okay. Do you ever play that with him?

Ben:
Yep. Yep. Yeah. And they totally eclipsed me. It was no contest. I had, "Hey, I got two blocks together", and they've got the Taj Mahal. I'm like, "Oh, all right."

Starr:
Yeah. Everybody's gives Tom Nook such a hard time for being such a capitalist, but you know, I'm just saying, I want, I want a house loan with no interest and no payback schedule and I can pay it off reasonably with, with a couple hours work gathering nuts and berries.

Ben:
So I started playing this morning because I read an article in the Atlantic about the game and I really enjoyed one of the angles. The article was like, "Maybe this is an indication of where we can take our society, where people are doing things they want to do but not under the pressure of having to pay back a serious mortgage", and all this kind of stuff.

Ben:
And I was like, "Hmm."

Josh:
Everyone has their own island where they live with a bunch of artificially intelligent NPCs and we can occasionally visit but it's rare.

Starr:
There you go. And if you save up your Nook Miles, you can buy a ticket to an island that's covered in spiders.

Ben:
Ooh.

Ben:
Well yeah I read that those spiders are actually, that's the way you make the real bucks. You collect those tarantulas, right?

Starr:
Well I mean there's the real spider island. So I looked into this. There's the real spider island, which is just a thing in the game and then for a while there was a bug in the game. Where you could force tarantulas to spawn infinitely. But they kind of did a patch that didn't get rid of it entirely, but it kind of made it less game-breaking.

Josh:
That's cool.

Ben:
Fun.

Josh:
So.

Ben:
So maybe I'll report back in a week or so and be like, "I love this game", and I won't be able to work for a month cause I'll be playing Animal Crossing. We'll see.

Starr:
Well I hope you. We all need some relaxation these days.

Josh:
Maybe Animal Crossing is really a metaphor for reality.

Ben:
It's the world they wish we lived in.

Starr:
Yeah, definitely.

Josh:
I wish I could spawn tarantulas at will. That would be a pretty cool defense mechanism.

Ben:
That would be pretty cool.

Starr:
Yeah. If that one doesn't work for you, I'm telling you Stardew Valley might be more your jam too.

Josh:
I've heard that one's really good. Yeah,

Ben:
I heard that I'm supposed to avoid Factorio at all costs.

Starr:
I don't even know what that is.

Ben:
Apparently it's a really addictive game. I don't know much about it because I've avoided it.

Josh:
My problem with these games is just...

Starr:
It's the one where you take one number and you multiply it by itself minus one and then you just keep doing that?

Ben:
The game goes really quickly.

Josh:
It's a pen and paper. Yeah. I don't have the attention span for, for these games anymore. That's why I just play first person shooters, just mayhem for 30 minutes to an hour and then I'm done.

Ben:
You want to get your Twitch on and then get back to real life?

Josh:
Yeah. It's rare that I get immersed in, in a game like that. Occasionally I guess one will come along, but it hasn't happened for awhile. Except for Ruby programming. I think that's really what ruined. Developing kind of ruined everything for me because that's...

Starr:
You know what? When you said that, I just realized Ruby is the Animal Crossing of the programming world.

Josh:
Is it?

Starr:
Yeah. Yeah. If Ruby was a game it would be Animal Crossing, which is kind of nice. So what are we talking about today?

Ben:
Talking about Animal Crossing.

Ben:
You know, since you talked about Heya in our last episode, but we didn't get around and talking about the backend of how we're actually doing Heya, I thought that'd be kind of fun to talk about because it's kind of fun to build.

Starr:
Wait, what do you mean how we're doing the back end? I thought it was an open source project that you installed in your own app and everything. So what sort of back end would that be?

Ben:
Well, we have to have a website to tell people about it and then we have to have a way to take people's money because we're actually selling licenses.

Starr:
I mean, technically they give us their money. We don't take it. They give it to us.

Ben:
You know it's kind of like Tom Nook. Yeah.

Starr:
We make them an offer they can't refuse.

Ben:
We're not going to force you to pay us, but...

Josh:
Full transparency, we haven't taken anyone's money yet.

Ben:
That's true.

Josh:
We're hoping to. This is all very much an experiment but I think we have some cool infrastructure.

Ben:
But there is the final part after the money part, which sometimes the money is zero. Then we generate a license because we want to try out this prosperity license approach where we send out this open source into the world, but we also want to see if it's sustainable by selling licenses to it. For people who are just starting out, we do that zero dollar price where they can enter a coupon code and get a license for free. There's the website, there's the selling the thing, and then there's the delivering the thing, the license.

Josh:
We have had a few people request the small business license, which is what has so far been exercising the system. 

Josh:
We're using kind of a newer, it's a commercial open-source license called the prosperity public license. And what it is, is it's free license for open-source or for nonprofit use, non-commercial use with a 30-day trial for all other commercial use. So the source is completely open, which is where the open-source comes from. But if you want to use it commercially, you can use it for 30 days after which you need to buy a license for it, a commercial license.

Ben:
So optimistically speaking, we are still in the 30 day license trial period, since we only launched a week ago.

Josh:
Yes.

Ben:
Right, so who knows, three weeks from now we could have a bunch of people throwing a bunch of money at us because they love it so much.

Josh:
I you might be a little bit more optimistic than I am on that one. But that said, we have had some pretty good interest. We've had some pretty good interest and feedback in it and people seem to like it. This is our first time ever doing an open source commercial thing and it's very much like we're throwing it out there, see what happens and see what we can learn.

Starr:
Have we learned anything from the feedback that was interesting or surprising or anything like that?

Josh:
Not so far. The feedback so far is kind of like, "That's really cool. I'm going to try it out." It's been out a week or so.

Starr:
Oh okay, that's a first step.

Josh:
Yeah. But anyone who wants to can go and try it. There's no limits or anything in it without a license. It's basically just it'll put out a warning that says it's not licensed.

Ben:
I've had a few people on Twitter say, "Oh, this is the same thing I was going to do, or the same thing I did", so they're pretty excited about not having to do that work. I'm saving measure for sure.

Josh:
Yeah. You mean the actual, the sending email sequence in Rails thing?

Ben:
Right.

Josh:
Yeah.

Ben:
Yep.

Josh:
Yep. I think it'll definitely get some users. I don't know how many. Of course for an open-source library like this to actually make any money, it has to have a large enough base of people trying it out and then a certain percentage of those people are going to actually pay for it. The other model we were considering was the open core Sidekiq type model, which is where are you would have a true free open-source core version of it that anyone can use (commercial or non) and then have a pro or an advanced version that you sell a license for that you have to buy.

Josh:
And the benefit of that is just that you get a much larger user base, in the beginning because a lot more people are probably willing to deploy it to their apps or production or whatever if there's no commitment or if it's true open-source in the beginning. You have to actually sell this because you only have 30 days to use it if you're a company or whatever.

Starr:
Was that intentional? I imagine that if you did an open core there might be a burst of work in the beginning because all these people who are free open-source users were like, "Hey, you should do this, you should do that whenever." Was it intentional to not do it open core so you could sort of rate limit the amount of work you have to do?

Josh:
That wasn't the primary thing but that plays into it a little bit. Ben and I definitely had conversations about even doing this at all because I didn't want to create a bunch of work for myself right now. So this very much is a side project. I've been doing this in my spare time.

Josh:
We talked about both models. I'm really interested in this model because I like the idea of not having to put a bunch of work into the open core version. If I could focus all my work on stuff that is actually paying, I like the idea of that. We talked about how we could easily go from this model to an open core model in the future, but it would have been much harder to go from an open core or even just an open-source model and go back to a paid model. Basically if we'd released this code under a more permissive open-source license, people probably would complain a lot more about it if we then walked it back to some sort of more restrictive license.

Josh:
So we figured there's not much harm in trying out this new license and just see how it works. But that said, this license, there's not that many people using this approach. For instance, Dependabot, which was recently acquired by GitHub, uses this license. But there's not a lot of data out there on how this works, how this business model with this license works. I think there's a lot to learn and I suspect that this might be more of a longer play. This might be the kind of thing that we need to keep building on it over time and give it a chance for people to see it mature a little bit before it might have any kind of major adoption.

Starr:
Yeah, that makes sense. Can I ask you a technical question?

Josh:
Sure.

Starr:
Which is, I've always wondered about this. When people do libraries that are this sort of open-source, you have to have a license key, how does that work? How does the license key thing work?

Josh:
We a sub-licensed some code that we got from a GitLab, which is an open core model, but they use this licensing code that they wrote. They use it, I believe, to handle the license for their...What do they call it, Ben? It's the paid version.

Ben:
Yeah. Their self-hosted version has four different levels I think. You unlock different features based on which level you get. They delivered you a license file that once you add it to the GitLab installation then unlocks those features based on whatever the license gives you permission to use.

Josh:
Right. Yeah. This license is based on a public key generation. We generate a private, a private key and we sign this license file and give it to the person. Then the public key is basically embedded in the gem itself, which is how the gem knows that a license is valid.

Starr:
Okay. That makes sense. So to some degree though, it's sort of based on the honor system though, because since it's open-source you can go in and remove the license check or whatever.

Josh:
Open-source and Ruby. Yeah. It's very much the honor system. Pretty much one monkey patch would turn the entire thing off at this point. So yeah, it's, yep.

Starr:
It would be a funny smart ass thing to do. It's probably not a good business decision, but I'd be very tempted to ship it where your license key is a YAML file or something that just has one field that's like, "Has a license? True."

Josh:
Yeah.

Ben:
It's not far from the truth of what it actually is. The license file has your company name and it has the limit of users you can have since we decided to tier on that. It's a very simple YAML file that's just signed with the private key.

Starr:
Yeah, that makes sense. Probably down the line though there'd be a little bit more sophistication. It doesn't make sense to be super protective of this new thing. We don't really even know if people want to steal it yet.

Josh:
Yeah.

Ben:
I'm a big fan of the honor system. It worked well when I did the Rails kits because people would buy a license and they would get all the code and there was nothing really stopping them from reusing it as much as they wanted or even distributing it.

Starr:
Yeah. What did you have? I know you had a help desk because I helped work on that a long time ago and other, an eCommerce storefront written in rails and stuff like that and people just modified them.

Ben:
Yeah. That worked out and people would come back and buy additional licenses when they wanted to deploy it on additional sites. I'm sure there was some cheating. I mean I'm not that naive but it worked out.

Josh:
It seems like you're always going to have cheaters. Unless you're distributing some sort of binary or something that people can't crack, which there's always going to be someone who can figure out a crack it no matter what it is it seems, but Sidekick or GitLab or anything else that is closed source but you still have to pay for it to get the pro version, you're still getting that code, aren't you? I mean, that's how that works. There's no way to hide what Ruby is once you have it.

Ben:
Right.

Josh:
Yeah.

Ben:
Yeah. The whole idea that we had while working on this project was to do the minimal amount of effort to get something out the door where we could test the market and see if it would be successful at all. The license generation was one of those things. It was like, "Oh yeah, we know that GitLab does something like that, let see what they do. Oh, okay. They had this little gem", and then, "Let's use that."

Josh:
Yeah. It's just what's a little roadblock we can put in to prompt people to respect the license. Really the license itself is the thing. We could say, "You don't need a license. It's just completely honor system. If you use this for longer than 30 days, we won't know, but you will and you'll feel really bad about it."

Josh:
We're not quite that optimistic. I don't think we believe in humanity quite that much. But you know, there's a lot of people who probably would still pay under that model, but there's a good chance that they would just forget if you drop it into your app and figure I'll try this for 30 days. If it's working, hopefully you're not going to have to think about it as much.

Josh:
I probably would forget in a lot of cases to go back and be like, "Oh I need to get a license and then I need to remember to renew that license in some way."

Starr:
Yeah. I guess the renewal is probably a big reason to have an actual sort of licensing system because you need to spit out those warnings.

Josh:
Yeah. So these warnings, it prints them out and then when the license expires it prompts you, it reminds you and gives you the link again. It's very simple.

Starr:
So when this thing takes off and we really need to lock it down because we're losing tons of money through piracy, I've got this really good idea for how we could do that, which is instead of distributing this code, we could have a computer and we can run the code on our computer and then people could access it through the internet.

Josh:
I see where you're going with this.

Ben:
Yeah, that's a pretty good idea.

Starr:
That was a terrible joke. I'm sorry.

Ben:
I'll look into that. See how that works. So part of what we decided to do to get this out the door as quickly as possible was we decided that as much as we like building things, we just didn't want to build a storefront. Josh decided to go with Gumroad to actually sell this. What do you think? You'd recommend that?

Josh:
It's awesome. I set it up in three minutes or something and very simple and they actually have software licensing built into Gumroad now, which is kind of cool. I didn't know about that. You were sending me some documentation and stuff. We ultimately decided to use our approach because their approach is you have to reuse their API to verify the license remotely and we didn't really want to be pinging Gumroad every time you boot your app or something. First time cases, it seems like you get pretty far with Gumroad, which gives someone a link to buy and then it handles the checkout process and everything.

Ben:
One thing we didn't do initially, since we're not using Gumroad's licensing stuff, we were using our own, we do have to generate a license when a purchase comes through. At first we just got Gumroad's email and then we went to our console and generated it. We got tired of that. After the first person we were like, "Oh, you know, we should probably do something about this." So I threw together a quick little Lambda function.

Starr:
I love it. I'm sorry, this is the most programmery thing ever, "I got tired of it after the first one. I made a Lambda function." That's great.

Ben:
Yeah. So a Gumroad thankfully has what they call pings their web hooks that sends you a payload when a sale happens. It was pretty easy to throw together a quick little Lambda function that has a web endpoint that uses our licensing code, generates a license and sends an email to the persons with the license file.

Josh:
Yeah. Yeah. I think the key thing there though is that we didn't build the Lambda function first because that would've been insane. We're not getting many sales now, but I think this is something we talked about. It's a little bit of code and it was fine, I assume, for you to build it.

Ben:
Yeah.

Josh:
But yeah, we started out we use a Help Scout for our support at Honeybadger, so we created a separate, just another mailbox called Heya and had the Gumroad emails go there basically so that we could just generate one if there was a sale. So we did that and then we automated it. I think we're probably going to be releasing this Lambda and licensing code in some fashion open-source as well because it's really cool. I don't know how many lines of code between the Ruby licensing code and the Lambda code, but put Gumroad in the middle of that and anyone could recreate this with their library, which is pretty cool I think.

Ben:
Yeah. We've had a few people mentioned that they were interested in trying out a similar kind of thing where they want to sell their gem or sell their code. I think it would be fun to put out this thing that people could use and maybe if there's enough interest we can have other entryways into it. We could have a Shopify hook or maybe a Stripe hook as well.

Josh:
Mm-hmm (affirmative).

Ben:
I guess people should ping us on Twitter if you're interested in having some sort of thing that can do licensing generation for you.

Josh:
Yeah. I'm thinking whenever I get around to it. It's been on, my long term to-do list to extract the licensing code to some gem or something that other people could use basically. We should probably do the same thing, throw that Lambda code on a repo at the very least.

Starr:
Is that the real product here, are we going to end up launching a licensing service?

Josh:
You know it could be. It could be. It seems like that's how this kind of thing could work because these are much smaller plays. We're not building a SaaS for six months and just have to make that go. I kind of like this model of we can build basically just open sourcing the tools that you regularly use that you've built, even the small ones, and then just see what sticks basically. That's kind of the way I'm looking at it.

Ben:
So I was impressed, Josh, when you set up the sales site, instead of just doing a plain old webpage, you actually put it up on a Heroku dyno so that you could actually demo Heya with people coming in. People can literally subscribe to your thing.

Josh:
Yeah, that's the other insanity of this project. It was probably a little overkill. Instead of doing a static site or something, the sales site is a fairly boilerplate just Rails app that I generated that has Heya built into it.

Starr:
Where can people find that?

Josh:
You can find on our GitHub repo. Actually if you go to Heya.email, that is the sales site. There's a link to it and you can sign up for a real time demo of Heya, because the site is running, Heya to basically send a drip email campaign that you can sign up for. It's a little meta.

Starr:
Wait, is it a drip email campaign for Heya, why people should buy it?

Josh:
Yes.

Starr:
Ah, that's genius.

Josh:
Yeah. I think if you go there, there's a link to the repo that generates the campaign. So you can go and look at the Ruby code that basically sends the campaign that you're getting. Yeah.

Ben:
Shout out to MVP.css.

Starr:
Yeah, what's going on with that? Y'all have been talking about how you really have been enjoying that. What's with that?

Josh:
Initially the site, I basically generated this Rails app, generated this little campaign. It's this a very simple app. It's got one controller scaffold or something basically. The homepage is actually just the new action of a user so when you sign up, you're basically creating a user in a Rails app.

Josh:
But I wrote some content for the site, one weekend or something and just threw it in there. Basically just raw HTML, no styling. And actually my plan was basically just to leave it like that. I was just going to launch it just basically completely unstyled. You can go check, go read it. It's different. It's got some gifs and stuff. Yeah. I was going to be super web 1.0 hipster and just not style it at all, but Ben found this new CSS framework called MVP CSS, which basically it runs completely off of HTML elements. Basically you just write HTML in a certain way and it styles your page to look like a landing page basically. Is that the gist of it?

Ben:
Yep.

Starr:
Oh, okay. It's not necessarily even a general purpose CSS reset. It's specifically for making things that look like product pages.

Ben:
Mm-hmm (affirmative).

Starr:
Oh cool.

Josh:
Yeah.

Ben:
Yeah. It's so that if you're like us, you're trying out this little thing and you don't want to put a lot of work into it, you can have something that doesn't look like just a plain old webpage in 1994.

Josh:
There'll be two people that actually get it.

Ben:
Right, right.

Josh:
They're like, "This is awesome." Everyone's else like, "Where the hell is the...Is the style sheet not loading?"

Starr:
So I've got a question for y'all. So MVP, does that stand for minimum viable product or most valuable player?

Ben:
We know the NFL draft was yesterday, so I guess it could be either today.

Starr:
There you go. I just think MVP should steal that for their tagline.

Ben:
Meaning that the CSS is the most valuable player on your team.

Starr:
Yeah, yeah.

Ben:
Totally. Yeah. I agree. So it's been a fun project.

Starr:
So where do we go from here?

Ben:
Wow. Immediately I thought of Pinky and The Brain, "What are we doing tonight, Brain", when you said that. I don't know why I thought that when you said that.

Josh:
I think we're always doing...

Ben:
"Same thing we do every night, Pinky. Try to take over the world." I guess that's the next thing we're doing. Try to take over the world.

Starr:
Do we have to leave our houses for that, because that's a big no-no right now.

Ben:
I suppose not. We can do it from the comfort of our couch.

Starr:
Okay. We can hack the planet.

Josh:
Ben's talking about taking over the world of an Animal Crossing. I'm pretty sure. Right? He's going to, he's going to unseat Tom Nook.

Ben:
I think the next thing for us for Heya is see if there's actual interest. See if people want to use it and come up with any feature requests and also see if we have any things that we want to do to it.

Josh:
Yeah. That's my plan. There's a number of things, ideas I have for it. It's still a hobby project for me so I have some things that I'll get to eventually. Even if no one uses it, we're, we're still using it. I think it's gotten a pretty good response and longterm, the plan for Heya always was to pretty much replace Intercom for us that's still my plan. I think there's a lot more Intercom things that we could, that I could add to it for it to do more. There's things that we are still working on.

Starr:
Well, awesome. I'm sure as this progresses and we learn more we'll sort of keep people up to date as people follow along at home. All right. Is there anything else that we'd like to mention about Heya?

Josh:
No.

Starr:
No? Yeah, I'm sick of talking about that.

Josh:
No. It's back to error tracking.

Starr:
Back to the old diamond mine.

Josh:
Yeah.

Starr:
All right. Well, I guess we'll wrap it up then. This has been FounderQuest. If you enjoyed this episode, please rate us on Apple podcasts. If you want to write for us. We're hiring people to write blog posts for Ruby and Elixir and stuff like that. Just take a look at our blog at honeybadger.io and look for the link, write for us, in the header and do that. See y'all later.

Episode source