Skip to main content
233

March 23rd, 2020 × #pricing#global#accessibility

Hasty Treat - Purchasing Power Parity

Wes talks about implementing purchasing power parity pricing in his store to make his courses more affordable globally based on the relative income levels in different countries.

or
Topic 0 00:00

Transcript

Announcer

Monday. Monday. Monday.

Announcer

Open wide dev fans. Get ready to stuff your face with JavaScript, CSS, Node modules, barbecue tips, get workflows, breakdancing, soft skill, web development, the hastiest, the craziest, the tastiest web development treats coming in hot. Here is Wes, barracuda, Bos, and Scott, el toroloco, Tolinski.

Scott Tolinski

Welcome to Syntax, and it's Monday.

Scott Tolinski

Hey, Stitrich. We're gonna be talking about something really interesting, a feature that Wes has, added to his own store. And because of that, I get a 1,000 Wes a day to add it to my own store, and that is purchasing power Sanity.

Scott Tolinski

The thought and idea that, you know, not every country is purchasing with the same amount of money per each cost. So charging everybody the exact same price isn't exactly the most fair way to go about it. So, my name is Scott Tolinski. I'm a developer from Denver, Colorado, and with me, as always, is Wes Bos.

Scott Tolinski

Hey, everybody. What's up? Hey, Wes, the PPP man himself.

Wes Bos

That's great.

Wes Bos

Speaking of peas, today, we are sponsored by Prismic.

Wes Bos

Prismic is a headless CMS with a GraphQL API on top of it. So the way that it works is you sign up for Prismic, you create your content types, you can relate them to each other, and that will spit out an API as either a Wes API or a GraphQL API.

Wes Bos

And then you can pull that data into wherever you want. You, the listener, probably wanna build a Vue or React or Angular or something some sort of single page app like that. So we want you to check out Prismic. Try it on your next project. Go to prismic.ioforward/ syntax.

Wes Bos

And even if you're not interested in it, go to this website and check out the, Prismic dot I o forward slash syntax because they've made this hilarious landing page. Like, they seriously put some effort into it. This website has got Scott versus me. They've put it us as view versus react.

Wes Bos

They've got a bunch of different features in there, and they have a bunch of different starters for react and for view with they call team Wes and team Scott. Really hilarious little website here, and definitely, you should check it out. Prismic.ioforward/ syntax. Thanks so much to Prismic for sponsoring.

Scott Tolinski

Nice. By the way, that was a low key awesome head transition with the 4th p thing. Yeah. Yeah. I'm I aspire to be like you, Scott.

Wes Bos

Alright. So let's get into it.

Topic 1 02:38

Implementing purchasing power parity pricing in my store to make courses more affordable globally

Wes Bos

Purchasing power parity Sanity purchasing power power purchasing Sanity, whatever you call it. I'm sure there's a proper way for it. This is something that I've implemented probably 3 years ago on my platform already, and it was done out of people emailing me nonstop saying, can I have a coupon? I am from this country.

Wes Bos

And, then I would have to go and say, okay, what is that country? Okay. How much do developers make in that country generally? Okay. Well, email them back. What would be a fair price for you? Okay. And now to make a custom coupon and send it back to them. And that was just such a time suck from me. And I was realizing, like, first, it's a really cool thing to be able to make your content available to absolutely everyone around the world. Like, there's there's something to be said for, Wes, I'm running a business, but I'm also it feels good to be empowering people to to up their job no matter where they live in the world. So that's the, like, touchy feely part of it. And then the, like, business west part of it is you can make more money by charging less in other countries.

Wes Bos

So this whole idea of people emailing from it primarily was India that got me started because there there's a lot of people in India, a lot of developers out there that take my content, and they just don't earn as much as they do JS, like, a North American or European developer might make.

Wes Bos

So, how how do you, like, accommodate for that Wes it's weird because it's the same product. It's generally the same price, although it JS a little bit more expensive to actually, it's funny. The most expensive place to stream video to is India. And so yeah. Then yeah. Yeah. Yeah. That is funny. And it's one of the cheapest countries to buy it from. So I I just thought, like, like, how can I automate this this type of thing? Right? So, over, like, probably 2 years, I've just been collecting data from people as to, like, how much they make, what is, like, what does a developer make in your country, and just information about what is fair and and things like that. And then I built this thing called parity purchasing power. It's an economics term,

Scott Tolinski

and I implemented it. I was gonna say, did you come up with this concept yourself?

Wes Bos

No. This is a Yeah. An economist type of term. I sort of just put it into my own thing and said I support it. So I did that, and then it's sort of, like, over the last couple Yarn, it's just blown up in terms of course creators

Scott Tolinski

are just pointing at me and other developers who now have implemented it. And it's sort of like everybody or not everybody, but a lot of people have implemented it in their product to a point where people who don't do it send me emails being like, that like, everybody is saying, why don't you do what Wes is doing? My so many people message me about that. And I'll I'll I'll even in later in this episode, I don't know if you wanna get into, like, why it's Node difficult for me to do that than it is for you. Yeah. Do you want me to do talk about that now, or do you wanna talk a little bit more about yours?

Topic 2 05:07

Many course creators implementing PPP after pointing to my implementation

Wes Bos

Yeah. Let's talk about, like, how you calculate it, and then we'll we'll talk about, like, the implementation details. Cool. So, the last thing I really wanted to become is sort of, like, the person on this thing because I'm not an economist, and I also don't wanna be put in the middle of what is fair and what is not fair. Yeah. So that is the reason why I do not make my rates public.

Wes Bos

I do not share them because that would be an endless Node of people emailing me about what is fair and what I already get enough of that. Mhmm. And, like, I I try my hardest to make sure it's fair across the world. So, like, where do the rates come from? Well, personally, I have got my rates just from asking developers from different countries. I see the traffic that comes to my website.

Topic 3 06:01

Determining PPP rates by surveying developers in each country

Wes Bos

I went into all of those countries, found somebody if if they had not already emailed me and said, like, what do you make? I want a Glassdoor, and I researched what developers make in those. And I sort of just came up with a percentage discount that everybody would get based on which country they are coming from.

Wes Bos

There are many other ways to calculate this. So, there is the somebody came out with, an entire package that just does it, and it's called just purchasing power parity. I think you could just npm install, purchase the power parity, and it will do all of that for you. I'm not sure where the rates come from.

Wes Bos

I'm not yeah. I'm not sure where the rates come from there. You can also generate it based on the Big Mac pnpm, which is how many hamburgers do you get for $50 US. So that's the other thing I should say JS I base my rates. Even though I'm Canadian, I pay everything on the US dollar, and then rates can they don't go up from there, but they go down from there. And they say, like, based on that, like, how many how many burgers can you how many Big Macs can you buy with your money in that country? Right? Because that's all around the world. I'm not sure how how much water that holds because of, like, supply chain as well. Like, how much does beef cost in different countries? But it's certainly, a sort of highly regarded way to figure out purchasing power parity. There's lots of other things you can dip ESLint.

Wes Bos

But what I found, what works well, both from being fair JS well as trying to sell as many courses as they possibly can, the rates that I've come up with work pretty well, and I'm constantly adjusting them. Things like Argentina's economy tank didn't have to adjust the rate based on that, But it's, it's pretty much just a done thing for me at this moment. Cool. Wow.

Topic 4 08:04

Using Cloudflare header to determine country and show banners with discount code

Wes Bos

So, implementation details, how do you do it? Once you have these rates? Like, how do you do it? Obviously, everyone's like, I can't do that because people will cheat it. Right? So first of all, how do you determine what country someone is visiting from is the most often question I get. And that question and that comes from Cloudflare header. So because I run Cloudflare on all my websites, one of the headers on every request that comes in is the the country that they're visiting from. You can actually if you pay for Cloudflare, they'll also give you the city and postal code as well, which is pretty cool. But I just need the country. That's good enough for me. So I pull that off of the Cloudflare header, and then I look that up in my database, and then I'll put a banner on the website based on which country they're visiting from, which is pretty cool.

Wes Bos

Then I just offer them up a a discount code. So I say if you need this, here's the code because there are lots of situations where developers say, like, hey. Like, I actually make good money. I'm I'm fine with paying full price on this thing. I wanna support you, which is really cool of them. So I don't make it an automatic thing. It's it's an opt in thing where people can put in the coupon code. Because I have my own platform, the coupon code then checks if the user who is buying it comes from that country.

Wes Bos

I'm not gonna tell you how I do that because I don't want more people to cheat it, but that just actually, Node. I'll I'll just tell you. There's 2 ways you can do it. You can you can match the Cloudflare head or header of what country they're coming from, and then you can also match that up with the billing address of the card or account that they are paying from. So you can make both sure both of those.

Wes Bos

The next thing everyone says JS, like, what about VPNs? So, generally, people are really cool about this. I'm doing a thing. I'm putting myself Yeah. My courses are cheaper in other countries. And I haven't wanted to do this podcast for a long time because I know now I'm gonna have to spend some of my time fending this off with people cheating the system.

Wes Bos

So, generally, most VPN a CloudFlare is good at figuring out VPNs. I'm not sure. Like, I tried it with a couple of VPNs, and only about half of them actually worked. Even then, you have to still have your your billing address match up with the the actual country, so that's a bit harder to actually fake, if you wanna do that. And then I I still do have people do it, but, like, I see the data coming in. And if somebody is clearly cheating it, I'll either email them and say, hey. What's up? Or I'll just revoke the account and wait for them to email me and be like, hey. Sorry. I was seeing if I could cheat it.

Wes Bos

But, generally, this is almost a nonissue for me.

Topic 5 10:45

Goodwill and extra sales outweigh people cheating the system with VPNs

Wes Bos

Certainly, people do cheat it, but the amount of goodwill and additional sales that it does bring in is well worth the headache of people abusing it and and whatnot.

Wes Bos

Interesting. Yeah. Does it work with sales? So I one thing I see that people do with purchasing power parity is that they don't apply it to sales. So if they're having, like, a Black Friday sale Mhmm. They, like, take the purchasing power off, which is kind of like a middle finger. So, if I'm having a Black Friday sale, you still can get an additional whatever percentage off based on your country because, like, sales happen in every country. Right? You should still be able to to get that.

Wes Bos

You can't stack them. So it is a coupon code, and I don't have the ability to do multiple coupon codes. So there is some weirdness there where people are students and want to do, the purchasing power coupon code. You can only you pick 1. I just say pick whatever is better. Mhmm. And that's kinda what you have. Other challenges is, people who buy from Iran, I talked about this on the last one, don't have credit cards or they sorry. They do have credit cards, but they don't have credit cards you can use outside of Iran. So if that's the case, they usually get a friend who lives in another country to buy it for them, but they still want the Iran coupon code discount. So I had to write a little bit of workarounds there so people could still use a coupon code when they're not technically in Iran, which is a whole another issue by itself. It's complex.

Wes Bos

Yeah. It is. It is complex.

Wes Bos

I'm glad I put it in. It definitely has helped sales, and it definitely has helped goodwill. And and that's pretty much that's pretty much it. Cool. Well, that's,

Scott Tolinski

so that's really I don't know. It's so fascinating for me to hear about this, especially because I I've floated around the idea of doing this for so long. In fact, it's been on our to dos forever.

Scott Tolinski

And for those of you who are wondering, well, why the heck don't you just implement this? It's a little bit more difficult when you're dealing with subscriptions.

Scott Tolinski

Anytime you're dealing with Everything is more difficult with subscriptions. Right? Right. Everything is sort of multiplied. Right? Because you have Node variable, which is a Stripe credit chart card charges. Right? It's Stripe and it's PayPal, but yeah. Well, you you do PayPal separately. But either way, you're still sending the coupon is is rooted in your own thing. Right? It's not, often Stripe system or whatever. No. It's not. Correct. So I have PayPal and credit card through chargers and through subscriptions, and it's all through Braintree. And they, like, really want you to do coupons in their system and add ons and all those things in their system.

Scott Tolinski

So it gets really, really complex really quickly when you're doing, discounts and add ons. You probably have a a few 100 add ons and discounts that exist within Braintree's own system.

Scott Tolinski

Oh, yeah. Because I can't especially with subscriptions, I I can't just send the longer price to them. I have to send the subscription that has a designated price and then with a coupon, and then that coupon has to already exist in their system or I have to create it in the process of the creation of the subscription.

Scott Tolinski

So it's a really complex problem and definitely not one that I can just stop everything and work on, especially when we have so many things other else to work on. But, yeah, if you if you do need some help, I'm, you know, more than willing to give out the educational discount for those of you who are in a a situation like that because the educational price is a set price. It's not designated by country or by purchasing power, but, at least, it is it is cheap. You know? Awesome. Yeah. It's much more difficult when you get into and then you gotta think about, like, renewals, And then you also gotta think about people who have bought it already and then wanna go back. And Yeah. Want it for, like, the only for 4 months of the 12 that they paid already. And, oh, yes. That can't be, can't be easy to do. So it's certainly something, at some point, I would probably recommend you do, but I I don't envy you having to Yeah. To do all of that. You know what? In in I would like to we have a lot of work to do on our subscription service anyways in various regards in terms of, like, hitting team and enterprise accounts, which is gonna require a lot of uprooting and rewriting a lot of things, and maybe it's something we can take a look at when we're heading into that code a little bit more. Maybe bring on a specialist or somebody who's totally pro with that.

Wes Bos

Totally. And this is just another perfect example of why we code our own systems because this is just a crazy idea I had 3 years ago, and I went ahead and implemented it. And it's awesome. Like, if you were to go with an existing solution for streaming courses, there's no way that they would have this. Maybe some of them do now because it's become such a thing. But, like, I wouldn't be able to write my own resolver code that validates a coupon code based on the request that's coming in and all this other sort of information.

Scott Tolinski

There's so many times where I really feel like having my own platform is the greatest thing possibly because you do get that those choices in control. You can add those nice little things that sets you apart, makes you totally different from other people.

Wes Bos

Yeah. Absolutely. I, big fan of that. It definitely gives you a bit of a competitive advantage to be able to implement like, I implemented this thing in probably a day or so, and it's it's paid itself back many, many times over based on just people from around the world. Mhmm. Mhmm. So I think that is it. Oh, one last thing is people ask me all the time. They say, like, how do you do that if you have a, like, a Gatsby website? Like, it's client side only. Right? The the Cloudflare header wouldn't necessarily work in that case. If that was the case, then you would need to load the page and then ping some sort of API that gets a country and then comes back with the country and then display some sort of banner on it. And that would cause a little bit of page jank if you're bumping down the page to show the banner on top of there, but certainly doable as well. I also use this package called Country Emoji, which will allow you to pass in a country code, and it returns the emoji of that country, which is pretty fun. So people, I found love to see their their country's flag on the banner. That's, like, a huge point of pride for them to see. Like, thank you so much for considering our country. Like, I I feel there's some countries out there I had never heard of before doing this, which is really cool to to see that there's developers all around the world being able to to build stuff. Yeah. Totally. Wow. Alright. Well, hopefully, you enjoyed that. This is gonna be my go to thing that I point people at because I get asked all the time how I did it, and there's, like, tweet threads here and there about how I've done it. But I've never just gone out and totally said how it all works. So Yeah. And if you, wanna email me about why haven't I done this yet, you I can point you to this episode as well.

Wes Bos

Please go ahead. Yeah. Right.

Wes Bos

Awesome. Alright. Well, thanks for tuning in. Catch you on Wednesday.

Wes Bos

Peace.

Wes Bos

Peace.

Scott Tolinski

Head on over to syntax.fm for a full archive of all of our shows, and don't forget to subscribe in your podcast player or drop a review if you like this show.

Share