James (00:10): Frank, James (00:11): what, what does an idea worth? Let's be honest, Frank (00:13): best you know, industry standard, what I used to hear a term 10%. I don't know if I like that though. That sounds awfully high one. It's an idea worth. James (00:23): It's a good question. I often, you know when you're, you may be are driving in our car, you know, you're in a Lyft or an Uber and you have some [inaudible] conversation. And I was like, Oh man, he's like this great idea and you'll never do it. That, that's the thing is like if you have the ideas you would have already done it or I'll say it wouldn't have been an idea and you would have done it already because I've always had all these great ideas and then I don't do them. Now. Some of those great ideas, I do them, but I don't tell anyone the great idea. Usually when I tell someone a great idea, I'm like, this would be cool if this existed. Hint, hint. And uh, so I think that at minimum a great idea is worth like one and a half beers maybe. Frank (01:03): Okay James (01:03): too. If it's unhappy hour, two on happy hour. Frank (01:07): I think you're getting off cheap. I mean the idea is worth something because it obviously sparked something. But yeah, I'm just sticking to, it's not a percentage cut. You have to get lawyers involved. If you want anything more. What are we talking about, James? This is so awkward. This is the weirdest conversation we've ever had. James (01:26): Well, you know it's episode one 90 which means it's lightning talk rounds. Except Frank (01:31): it's not Frank. It's not. It's not. It's not what, what are what 19 lightning rounds or I guess it'd be 18 God programmers always off by one 18 lightning rounds later. We're going to break with tradition. What? James (01:47): Yeah, I think so because here's what happened is last week we recorded the pod and I said, Frank, here's this awesome app and I found this awesome app that I thought it did one thing. So you, you, you bought it and you're like, this isn't what you told me it was going to do. And I was like, yeah, what if there was this app that did this amazing thing? And then one week later Frank (02:07): you wrote it and shipped it. And that happened. I did it, James. I wrote it out and I shipped an app. I'm so excited. I'm so proud of myself. You know, I was looking at my record and it's a little embarrassing how long it's been since I released a new app. I've been doing my app updates, I've been a good little app developer, but I haven't released that new app in a while. So it was kind of a big deal for me. And yes, uh, this is all your fault or slash all your idea and I guess it's worth at least two happy hour beers to tie a bow on that last conversation. James (02:45): Yeah, I mean, so here's the setup, everybody in case you are curious of what the heck these two knuckleheads are talking about. So I saw some tweets and some posts about this app that thought enabled me to log into my iTunes account and then get a bunch of information about my apps and, and this would be reminiscent to, uh, Google has like a Google app that you can download for the place store. You can get some information. And I never had anything like that on my Mac or windows machine for iOS and my Mac applications. I always thought it'd be really cool that, um, you could just have an app or some indication of like, Hey, here's all of your applications, here's like the money are making, here's the units, here's like all the information about it. Because going to the website is kind of the worst thing in the world. Any, any, any dashboard of, here are all your apps that you're selling and here's the money. You just can't figure out anything. Frank. And I said, what if that was an app? And you kind of agreed. Frank (03:48): Yeah, I totally agreed. I agreed with you so much that when you sent me that app, um, I just looked at the screenshot and I made so many assumptions because immediately my brain just filled in all these details of what I thought this Apple is showing me upon reflection. I went back to look at that screenshot and both of us just completely misread it. But yeah. Um, but it sparked the idea cause I realized we both were excited by this idea of a refined simple dashboard kind of app that just showed you all your apps in the app store and how the sales are going, how the downloads are going. Because all that information is presented very nicely by Apple, but it takes like 800 clicks to get through it all on that website and there's a progress bar after every click and it gets frustrating over time. Frustrating enough that I just never actually go and just casually browse and look at my stats now. James (04:48): Well, I sort of teed it up for you when it came to this app idea. I never in my mind would have thought that what would have been delivered to me by anybody was what you created because it's so much more than than what I originally thought. I thought that it would just be, here's a list of apps and here's a download count, but there's so much more in here. So you Frank, I'm going to tee it up and then I'm going to let you explain it. Talk about the process because it is unlike any other app that I've seen you ship because this app is called app stat one word app stat and it is an app about statistics and analytics and sales data for all of your iOS and Macko as and I guess other any app in the app store. And this thing is beautiful because it is the app in which we thought was that other app plus 500 other features. Frank, it is amazing. Please describe this amazing app and everything that it does. Uh, okay. Frank (05:44): Okay. Uh, I'm bad at elevator pitches so bear with me everyone. James (05:48): Well, I would say, I would say don't even describe it. I would say you want to go build it and you could, you can describe it, but you obviously had a set of requirements in, in, in hand. So like how did you get from me pitching an idea to now it's done. That's what I'm really curious about. Frank (06:03): Yeah. Okay. So let's go into story mode. I'm better at stories, so let's just go through that process. Yeah. Uh, so yeah, I think we both had a vague understanding of what we wanted out of this app. So the very first thing I went to look at was what libraries are out there to go scrape data off of Apple servers. Because the last time I looked into all this stuff that was the state of the hour, you know, there was no way to access this data any other way. But lo and behold, James Apple released an API to connect to app store connect data. This is all your iTunes stuff. Um, it's your builds in particular and it's your list of apps and it's your sales data. And they built a whole wonderful rest API around it and even talked about it at Debbie D C. so this was quite a revelation for me. Did you know the head API? James (06:58): I did not know. I, they did build a, I mean they had a new portal, they redid the entire portal and I didn't even know about the WWC, but it's as if they were egging us on to build something with set API. And that's what it seems like. Frank (07:15): Yeah, exactly. Well, you know, we kind of covered this in our dev ops episode when we're talking about you saying, um, um, app center to, um, deploy apps, um, uh, from all your Azure build stuff and all that. And yeah. And we're wondering, I was wondering at least how are they doing that? And it turns out you can actually work with all your builds and such, uh, through this API. So this is how it actually opens up wonderful opportunities for insane build scripts, doing insane interactions with Apple. Uh, there could be a fun little library to be written here. James (07:54): Yeah, I bet. Fast lane integrates with a bunch of these different API's to scrape the data and to do uploading and a bunch of shenanigans are in and around that. And, and I, and I, I have to imagine there's probably some of that data in there. And, and also that, you know, there are entire companies like app Annie and a bunch of other ones that do a bunch of scraping and you can register your apps and do all this stuff. But it's some of them you have to give them keys. Some of them you don't. It's a little bit, you know, little janky and in some ways, but it we're always like web based. And what you built was that a time? An app, what do you call this thing, Frank? Frank (08:33): I don't know a tool. Um, technically in um, Apple parlance, this is a status bar menu app. So your status bar are all those little icons in the upper right of your screen. That's like your Y Phi or volume control, your Dropbox icon if you have Dropbox, that area is called the status bar. I didn't know that until I started writing this app. But that's what it's called. And the app kind of lives up there and that's a total UI is based off of that one little icon that creates a dropdown menu. And it's kind of a menu based UI. I created my own paradigm here. James (09:16): Yeah, I do. I really like it and it, and it could be a desktop. I look at your bio like that is always just kind of up there staring at me. So you've got the API, you're like, there is an API then what happened? Continue to said story. Frank (09:28): So what do you do when you discover an API? You'd read the very first section called authentication and then then you move on with your life because, Oh my God. So Apple, uh, is using this authentication scheme called J WT. It's this weird Java script. Maybe it's like Java script web token or so I have no idea what it stands for. Um, it's insane what this little thing does. So I'm like, just out of morbid curiosity, because honestly I was about to give up at that point. I was like, Oh, I hate authentication. Um, um, I went and checked all the new guts and lo and behold, there are.net libraries that do this JWT shenanigans. And um, I got them all try them all and it didn't work in mono and it didn't work on Mac because there's parts of system doc cryptography system that's security, Docker photography, whatever, uh, that do not work on mono because they're crazy. And I should say this is all because Apple chose this elliptical key in cryption shot two 56 thing that like, yeah, a lot of security encryption works in mono, but that one in particular did not. Of course James (10:50): I was curious when I saw those tweets, I'm like, what is Frank doing? Cause I saw some tweets about some crypto stuff and I just thought you're doing some crazy AI machine learning thing. Uh, but now this is not all starting to make sense. Frank (11:03): Yeah. Uh, this is going to be a log episode. If we keep going this story about, I'll keep trying to make it interesting. Uh, so I go on Twitter to complain because I don't know what to do here. I have a vague understanding of cryptography and how signing works, but it's vague, James. It's very vague. And so I'm just like, Hey, does anyone know of any cross-platform libraries that just work? And our good friend Kush, a friend of the show, Kush, he writes back to me, he's like, just use this library. And I'm like, I can't just use that library cause that's hard. It's complicated. James (11:41): Oh, how cryptography works. [inaudible] Frank (11:45): and I don't, I don't James, uh, what would you do at this point? James (11:52): Oh geez. Um, Frank (11:54): yeah, I mean, well it depends on how bad I wanted it at this point. So if, if you really want to go for it, I guess you're gonna have to either learn that library, outsource it, hire somebody or pray that there's another way to authenticate. So, um, so I've gone through like three different dotnet JWT libraries at this point. So just from their different API surfaces, I was starting to understand what the signing thing was. And I was reading webpage after webpage. So I decided, you know, just for my own education, I'm going to learn how this stupid authentication system works. So I sat down, I said, if this takes a day, it takes a day, I'm going to learn how to do this nice. And it ended up taking a few hours and I had signed requests going out to Apple and I have not been so proud of myself in a very long time. So James (12:51): does that mean that we have a new library called proclaim Arum JWU token like handles it all for us? Frank (13:00): No. See the problem with JWT is it's, I'm super configurable and so these libraries, you know, some things work, some things don't. And so I would never ever release a JWT library. What I would say is I would release a library that says this is JWT with electrical key encryption using shot two 56, you know, like that very specific scenario. And I don't think that library would be useful to anyone except people accessing this API. I like it though. So you got to work in everything is the hardest part. The whole thing to some degree, yes. But now you get into the like, um, I, I've got data so I just started working in F sharp because I like I've sharp interactive for just playing around with these ideas. Uh, this is where you can just select a little bit of code in the edit editor, execute it for around with an API. Frank (13:55): It's just a good way of fooling around with code. So that code just started to grow and grow and I'm just like, I'm just going to build the app. I've got, I've come this far. I had low expectations cause like you, I'm just like, uh, I, I had a list of apps coming pretty quickly so I'm like okay, I got a list of apps, I had a list of builds coming. Cause oddly that data was really easy to get to. Um, and I figured, you know what, slap a UI on top of that. Maybe throw in some like a setting here or there, one or two settings and call that an app. And I figured one day app James, one day I can do it. It's our, it's our famous one day app, James (14:37): one day app. I mean, to be honest with you, it's, it's, it's a truly holiday hack in February. Frank (14:45): It is in fact, um, my actual goal, I realized once I decided put a UI on it, I knew I wouldn't be able to finish in a day, but, um, I decided that I wanted to finish it by the time you got back from your trip because you are off on a trip and I wanted to surprise you with the app and be like, look, I wrote an app. And so with the light I gave myself, um, much more time than just one day to, um, make a nice polished app. And what happened was I just kept finding more and more data to throw into it. You know, it's the classic, uh, feature creep app, but I decided to just embrace it and make it like one of those like crazy data dashboard things where it's just like if there's data, I'm going to show it to you. Like, here's some data, here's some more data you want to know about your app. Here's everything about your app. James (15:35): It's truly, if I was to summarize an elevator pitch, like what is app stat, it is the, it is the ultimate developer app statistic and sales data on your Mac. Like that's what it is. Like it is every everything you could possibly want to know about your apps with one click, two clicks, well actually one click and a hover, one click yeah. And one offer in one click. It is technology every, Oh gosh, it is every single, every single thing about your app that you could possibly want to know with one click. And, and it's not even an app running on your desktop. So it's always available. It's one click away from all of your data. And, and what's neat about it is you say it's a lot of data, but the funny part is it didn't, I wanted more data. I came, I came, I want this and I want this because it is a lot of data, but it's very elegantly laid out. And uh, and it, and to be honest, if you go into the portal, you're going to have to go to a bunch of different pages. Like, how do I see my reviews? How do I see my, my, my units and my dollars and my builds. Those are this one sheet, if I was to call it, here's a sheet of data is probably six different parts of the Apple website all put together in one place that I can look and see everything right away. Frank (16:58): Yeah. I was actually going to try to get that count once of how many yeah. Different pages you'd have to go to for just that one screen. Uh, cause I throw ratings in there too and that's usually hard to get to. Yeah. Wow. Yeah, I want to know. Um, so I, it's fun because I would say Paul, to obsess over the UI quite a bit because it, it was a fundamentally basic app, especially in the beginning. It grew. Um, but you know, it's going to be a menu. I knew the main menu would be the list of all your apps on you when you hovered over the app. It would show you details. I knew what data I had and it was just a matter of presenting it nicely. So it was that wonderful case of I have all this data, well not perfect, there's always more data you want, but I have all this data and spend a day making as of a UI as you can. And uh, and I appreciate you saying it's good looking cause I spent time on it in a nice, I'm happy it has charts, James (18:00): uh, on it and it was not expected that it has little star icon. It's color coded. There's um, pluses for like money and uh, if, if you don't have a positive, it's, it's not. Um, which I think is really delightful. There's icons in it. The layout is very well done as far as the data goes. Um, there's of course stuff that I would change, but even the preferences, it's am in dark, dark mode right now. I, how do I change my color? Is there like a mode Frank (18:29): dark? No. You have to, you go to Apple menu, uh, preferences general and you can choose light mode. James (18:38): [inaudible] I'm going to see what it looks like in there. Uh, yes, there we go. Light mode Frank (18:43): and James (18:45): Tada. And it's beautiful. Of course. It's beautiful. Frank made it. That makes so much sense. Uh, yeah cause I started, I started, I started right away and I was like, Oh, this looks really nice and different accent colors and all the things inside of it. And of course it, it is a very good looking. And to me what's cool about this is that it's this API of all this data that's there and like why not give it to people on demand. And honestly, when I pitched you the idea, here's the funny part of it is you told me this is the app that I always wanted. Yeah. You already knew. You already knew that in your mind it was the idea. It was, it was the extra oomph of, all right, fine, I'm going to do it right and that the API is available. Frank (19:27): Yeah, it definitely would. That API from day one that I was an iOS developer come back to like 2008 or whatever. Um, I used to use a Mac app that did pretty much this. It was, but it would just sit in a window. You would hit a button. It was a little bit ugly and a little bit sloppy, but it could get the job done and it showed you a bar graph. And that's, I live my life out of that app, especially in the early days when I wasn't making much money. You know, my day to day sales were bread and butter. They were important to me. Um, with success comes complacency. So I wasn't checking my grass all the time and that app actually became very expensive. It became a service. They wanted subscription fees. I don't even know what status it's in today, so I just kinda gave up on it. But um, so from the beginning I wanted to write my own, but then I use someone else's, then it went away and I just never did it. You know, cause Apple's websites would improve and I would tolerate the progress bars. All that's a long way of saying, yeah, this is 12 years of pent up. I should have written this app 12 years ago basically. James (20:39): And it's really cool cause the application could, I've already thought of a 5 billion different things that I could want in that little app bar area that's top and it's super duper neat. So you have the data, you, you started writing stuff enough. Shar started going to town on it and um, then you just built it. I mean, how did it come together? But the weekends I was literally gone and then I, I did go into work this morning and all of a sudden it was, here's how, here's this new app I just made. Here's a blog post of me announcing it. Please, please, please test this for me. And I was like, I F I freaked out. I was like, Oh my gosh. I was like, how, how, Frank (21:15): how, how has it, does this human being did not sleep at all in the last eight days? I haven't really, my stomach's a little upset. I should, I should do some of that. Um, yeah. Uh, the app actually went through, um, a little bit of two phases because I had that API and I had the app doing I think what both you and I both imagined that the one would do, but there was data not there that I was kind of missing. So I found, um, kept digging around, digging around and that's when I was able to finally find the store data where you could get the ratings, the prices and things like that. So this isn't your sales report, this is more like the metadata about your app on the store. And that's when I decided, Oh, I have two data sources. Now I have to do a little bit of rearchitecting and turn this into a really for real CS app. Because up to that point, you know, I was doing all the web requests on the UI thread, you know, like it was fine, but it wasn't how you ship or for real sees real app. And so I said, uh, Oh, I gotta do that nasty step of refactoring to a tolerable architecture. I hate that step. Yeah. James (22:30): That's the, that's the, Oh, Oh, this was something that I thought I was just going to have fun with and throw it all away. And then, Oh, I guess I'm actually going to ship this to the app store soon. Frank (22:40): Yeah. I can't just like, it's fine. Honestly, if it's blocking the UI thread for me, I'll wait. I know what the app is doing, but I can't, you know, I can't have a public app doing that. I have a reputation to maintain. I have a podcast where I get in front of people and talk about asynchronous programming and how easy it is. And so I should be doing it myself. Uh, what was fun was I've used, because I had already started an F sharp, I'm like, well, I'm just all in now and just write the whole thing in F sharp. And, um, I used an architecture that I talk about in conferences all the time, which is this funny kind of hybrid kind of reactive architecture, which is very few lines of code but basically gives you, um, I notify property change without all the overhead of actually sending events and all that stuff. It's just doing computations. Immutability is used, all the big fancy features of F sharp are used to make it run very smoothly. So I had that, I threw that architecture in everything started updating off the UI thread exactly like it was supposed to be. And I was like, Oh, thank goodness all the, all those conference talks I've given or an all just BS. James (23:52): Yeah. And, and what I thought was neat about this too is, um, is as you're, as I could probably see some of your development parts, I started to see that just displaying the data wasn't good enough for Frank and uh, there needed to be some, uh, some sort of machine learning AI S part of this application. Frank (24:12): Okay. I wish it were, but it's not, I think you're referring to the projected data. Is that what you mean? Yeah, yeah, yeah. Okay. A few notes here, a few notes. Um, the main number that I personally care about in my career is income per day, per month, per year. That's how, you know, I want to know my yearly, a rough estimate of what my year we income as then. I know, you know, it's just a projection. It's so you can plan things out. And I like my daily because that's just how my brain thinks, I think in daily numbers. Question is um, Oh gosh, am I showing historical data or should I show projected data? And you know, a part of me said, don't live in the past, James, don't do it. Kill the past. Isn't that from the, the Wars of stars and all that stuff. Frank (25:05): We're supposed to kill the past. And so I said, Nope, we're going to look to the future projected data and it's nothing fancy. I wish it were. Maybe I should. Um, certainly there is a lot of data here for it to train on. Um, but projecting the future is a fool's errand. But in this case, um, I did some rough checks. Uh, I'm just doing a very basic, um, I calculate the average, I calculate a standard deviation, so the, you know, error margins and then just do a bunch of multiplications. The error margin is very important to me. Um, I had a professors says, um, any average without a standard deviation is a lie. Cause you, yeah, you don't know. Um, the average number five could be a zero and a 10, a zero and a 10, or it could be a bunch of fives. They both, they all average to five. It's kind of information lists by itself. You need to know what the error margin is, what the standard deviation is. So for every number, um, where I'm using lots of data to calculate that number, I show an error margin just so that, you know, Hey, that's apps showing you a number. But when you're doing your accounting, it could be plus or minus this quantity in for real. See real life. James (26:24): Yeah. And, and, and it's hard for, for me, when I look at the sales data, because my apps, I don't have very many of them where I even sell anything. And like my stream timer is just a completely free application. So it's zero. The deviation here is zero because it doesn't make any money, which is good. Uh, but it's also fascinating because you, you are able to specify different amounts of data and how many days of data and that's of course going to adjust it. So the more data you have, you know, is good unless that half of that data was in a law, right? So, uh, that day you can kind of play around with that and, and, and sort of, if you are making estimates over a base of data, it was very good. And for me, what's, what's nice is, yeah, I can look at this and say, Oh, I, I, I'm may bring in 20 bucks this year or 100 bucks or $5,000, right? James (27:08): Whatever is, I don't make a lot of money on the app store, but to me, I can see my units. I can see the percentages and I can see what I like about it is big green numbers that show that Hey, I actually am making some money off of this, which I think is really cool. Like that's actually a nice thing to to open and see and say, Oh well this thing actually made some money today. And then pop it open and see a graph. Like, Oh look at that. Someone bought something and I didn't have to leave. I didn't even have to open a browser. Frank. I didn't even have to open a browser, Frank (27:37): not one progress bar. I refuse to put a progress bar in the app. Um, I found throughout the development of this app that every feature I added was painful, caused me physical discomfort because it was, uh, it was putting right in my face, a number that I thought I knew. If you had asked me, I'd say, I'm pretty sure it's this number. But then when it's just like right in your face and it's just staring at you, you can't avoid it. And it's just when you hover over something so you can't Dodge it, there is one good thing. This whole app lives behind a menu that doesn't show you any numbers, so if you want to live in denial you can ignore it and it won't bother you. You should buy it even if you're just going to ignore it for sure. James (28:22): Yeah, I mean it's cool. Like I open it up and I have, I have meetup manager, which I desperately need to update because it's been seven months, but that literally just blew my mind because it says that 70% of my users use an iPad 70% and I look at scoreboard, 80% use an iPhone, only 18 or 20% use an iPad. It just even that like not having to do the calculations or anything like that is like so helpful. It's crazy. Like when it's painful it's like, Oh, it's painful for me because I know that I have done absolutely zero work to make this be compatible or a better experience on the iPad at all and no wonder I'm not making a lot of money off of it. Frank (29:06): How long since the last update number, that was shocking. I was just like, okay, I got to finish this app and I know what I'm doing for the rest of the month. James (29:16): No, what's, what's worse? What's worse is this? Okay. Is that scoreboard, which is a great application that I hope please, I cross my fingers. Still works was last updated 2.7 years ago, but there is a build from 2.3 years ago that just sitting there totally valid and just sitting there. Frank, why is this, why is this, why is it there? I don't know if reminds, Frank (29:37): there's a whole feature set of like triggers I want put in. I, I had to stop myself and not do this, but I want to put in a million triggers for those like crazy scenarios like that. Like, Hey, you have a bill just waiting to be released, dummy. Go release that bill. You know, just some obvious, you know, red note, things like that. Um, the stars, the stars are just right there in your face. You can't run away from them. They're just, and I also put, um, the number of ratings you get at what rate. So do you get a rating a day, two ratings a month, one rating a year, you know, whatever rate you get ratings. So, you know, cause I find that that ties to popularity to apps with more ratings that get more ratings do better. So you gotta you know, kinda, we've talked about this before, but bug your users a tiny bit because those ratings do help. James (30:30): Yeah. It's, it's also like you have in here, it's like meet up manager the applications and really six years old. Like it just says it right there. And I, I wouldn't even be able to tell you that off the top of my head. You know, and now this seems like it's a, it's a gloating type of like look at this amazing app that Frank built. But I think what's fascinating here is that all of this data is out there. But, but, and as an app developer, like I, we are app developers speaking to developers and app developers and desktop developers. And like, hopefully all of you are nerding out as much as I am just looking at my own app and being mesmerized by this data that I knew to be true but didn't want to know what was true. But now it's staring in my face and I can't stop looking at it and being ashamed. Frank (31:19): Okay. But there's a flip side to the shame and the pain because I think you nailed it. We all love our own apps and our own creations and all I'm doing here is just showing you lots of data about your app. You know, I was always told, um, if you're trying to like strike up a conversation with somebody you don't know when you realize they have kids ask about their kids, like ask someone about something they love and that they love talking about it. So it's kind of the same thing with an app. Here's an app that's just going to tell you all about your own apps and you better love your own apps. It's your app, James (31:53): it's an app for apps and, and, and so you built it and you got it. Now, this is not on the app store, but it's on something called gumshoe. I wanted to talk about the distribution cause this is a Mac application and the cool part about Mac apps as they can be deployed in many, many ways. And the other app facet lighting fascinatingly enough was also on gumshoe. So what was your motivation here for releasing the application in the way that you did? Frank (32:21): Yeah. Um, well number one, I actually hadn't heard of gumshoe before, so we're going to talk a bit about that because I had a crazy experience learning that puppy. Um, but to rewind back into story mode, um, I had thought about trying to get this thing approved by Apple, but I knew the chances were a little bit slim. They don't really like dev tools of, excuse me, of this kind of nature. I've known that ever since I'm that old Mac app that I've used. And so I always had this plan B of learning how to use gumshoe and getting things set up on there. And, uh, it's been quite a learning curve for me, James, to be honest. Um, I generally don't like the idea of, um, having my own of selling apps directly. We did a whole episode. I was so proud when I got Calca, uh, into the Microsoft store because I was so happy to get it off my servers. Frank (33:20): I didn't want to have to deal with its actual distribution. Uh, but here I am again doing manual distribution and I'm a little scared honestly. Um, because I generally live on the app stores, but I'm also excited because I'm growing. You, you have to learn how to do stuff every year, you know, do something that scares you a little bit every year. But I'm also excited because it means I'm not in a sandbox. James, I can actually do any feature I want, but, um, it's a small enough app where it could actually live in a sandbox just fine. But tons of pros and cons. Where do I even begin there? James (33:57): Yeah, it's, it's, it's tricky because if your app is not the traditional app, but also it's an app for developers and I feel like that makes it okay not to be on the app store and not that average and non-developers can't do that. I just feel like that's a better experience than anything, especially on windows. Even. I firmly believe that putting your app into the app store, it's just a better experience. The updates are better, the installation is smoother, just it feels better to be honest with you. Um, but I also believe that in, when you think about the app in which you are creating, who is your consumer, and this application could be very fascinating to marketing people. But I feel as though you had a very specific target market in mind, which was app developers probably in the indie to small business scenario, right? James (34:55): Because once you're over a certain, once you're in a large enterprise or you're in a mid enterprise or you're a developer on a team, you're not going to have access to the sales data anyways. So this really is for someone that is a, a one or two person operation, uh, an in, you could go beyond that, like if you're in marketing, but I feel like those developers are going to totally be very comfortable downloading it. And it also feels sort of like indie in a way. I want to say like that's the other part. It feels as though distributing something yourself as like this indie thing. I don't know that that's sort of how I see it. Yeah, Frank (35:32): it kind of grows on you a little bit. Um, I think, yeah, gosh, yeah. I had a friend say something somewhere. I they had a funny phrase, I was trying to remember it. Totally forgot it. But yeah, it's totally an indie move to use something called gum road. What am I using Gumroad and uh, to release the apps that way. But it's, it's exciting to, um, it's, it's a little scary too. I think you were a beta tester and you had to deal with some problems. Thank you, James, for being a beta tester for me. You've, you're solving a lot of problems that other people won't have to face, but in general, uh, having, uh, yeah. Do you want to address that? Thank you, Jane. James (36:10): Thank you for being a beta tester. You're welcome. Gumroad. Oh, why did I call it gumshoe? I kept calling it gumshoe gumroad.com. Frank (36:17): Yeah, I will say gumshoe too. And you're getting me confused anyway. I'm running to have a, I'm going to have a blog entry. Click the link. You don't have to worry about it. Yeah. Um, um, um, where was I going, James? I totally forgot. Um, James (36:31): well I think the cool part of gum road is that it's not just for selling applications, but it's also for, you know, people that are creating other things, not just applications, but almost anything. And, and there's also that, it's almost like that Patrion model in a way. There's the ability to do, pay what you want. Like this is a easy way of doing, you know, a, a free app where people can donate. Like how much is this app worth to you? Like, maybe it's not worth anything, but maybe it's worth 50 bucks or maybe later on you want to give some more money to it. I thought that's also very neat. But it seems as though you're going to use it as a main distribution portal and and more. Are there other features of this thing? Frank (37:15): Yeah. Um, like you said, they, they cater to a lot of different industries. You can sell pretty much anything on there I think. Um, but they have a few features that are nice in particular for app developers and they have a V uh, the number one, uh, when you're selling an app is licensed keys. It's the most painful part of any of this stuff cause you need a server to maintain them. You need, you know, you need to be able to do charge backs and those access to that license key, you know, stuff like that. It's all nasty. I've written that code a couple of times in my life and I never want to write it ever again. And so, uh, Gumroad, uh, supports all that for you. Uh, it's as simple as a checkbox you click. So every order that comes in and gets a license key, you can do a simple, um, API hit against their servers to validate that key and life is good. Uh, if you upload an additional build, um, like you, you update the app, it'll recognize that and say, Hey, do you want to send an email to everyone who's purchased that app notifying them of the update. So there you have a very simple system for updates. I really like that simplicity of all that. James (38:30): Yeah, that's a way nicer than one having to roll anything yourself and also having to collect people's data. Frank (38:38): Yeah. Don't want to do that. Don't want it. I remember when I bought, uh, Calca uh, for windows held you money and I got a Dropbox link. It was Stripe. It, it was a proper payment processor but um, it wasn't as nicely integrated as all this, um, with the license keys. Honestly those are, that's such a huge feature that really just makes app development possible. And then notifying those users. Um, I hate writing email software cause everyone blocks everything. I'd much rather a service have to deal with that. And people unsubscribing and all that kind of stuff, all of that. Um, but you know, developers are good for something else too. Um, if you sell in Apple's app store, you have kind of a little bit of a baked in audience of people just browsing around and buying your apps. If you release an app and your app is at all any good or serves a purpose and a good market, or at least a big market, you'll start just getting downloads immediately, right? Frank (39:50): You experienced that all the time, right? Tons of doubt. Pretty much immediately just make tons of money. Just basically rich. Yeah. Day one, you're like retired one app and I'm out. Um, but uh, you're not gonna get that when you do an, uh, an app off onto a different store. You don't have that builtin group. And so James, the honors is on me to actually promote this app. I have to do proper marketing. The thing that I hate to do the most in the world, I would much rather write help documentation. I'd much rather fix the, get branching issues and promote my apps. But here it is. I have to do it. But the good thing about developers, I'm finally getting to my point is that they all hang out on Twitter and Reddit. So at least I only have to advertise there. James (40:42): Well I think that's the funny part is how I found the other app and was intrigued by this was from Twitter. Like I literally saw it on Twitter and my imagination here is you can, you can easily enable people to share a link, right? Imagine in the application, you just have a share button here. I'm giving you free app ideas, right? You're like share with a friend, right? You like someone else has like put that window in there that just literally opens the app store and then creates a little message for them or tweets it out or does something, you know? And if people are liking it there, they're going to, they're going to share it. I think that's the cool part is Frank (41:17): that this [inaudible] James (41:19): this application or the type of application that you built resignates with developers. And in fact, I would almost be scared to put it into the app store. And I'll tell you why Frank (41:29): is because I'm just looking at app stat and James (41:34): my apps that are in there, there's a big, um, star rating there and if people were to give you money and then it's not what they think they're are, they're going to return it or give you a one star rating. So that's almost like a positive in a way. You know what I mean? Frank (41:47): Yeah. Uh, I think unfortunately there is a star rating on Gumroad, I think, unfortunately. Yeah. Yeah. So, but uh, everyone give me five stars. Everyone, if you're an app developer, you can uh, please perhaps consider buying this app. And if you do, no matter what, give me five stars no matter what you actually think about it. I'm not playing games here, not missing her. James (42:14): Yeah. Uh, that's pretty cool. So it's out there. People can go to what apps, that.dev that make you buy that. Did you buy that? I hope you bought it. Frank (42:22): Yes, he did. James. I, so I, I had the audacity, everyone to release an app without a custom domain name. And James is like, Oh heck no. You aren't getting a domain name and you came up with the one on the spot and we bought it. So yeah. App stat, not Bev. So I'm up to four beers. Is that, that's what I'm hearing here. Boy. I don't know. Get the lawyers involved. I don't, I don't want to see these negotiations. James (42:49): Let's see if this thing makes any money. And I'll take, I'll take the first two sales. In fact, wait, I already gave you $10. That's two beers right there. You are Frank (42:57): bad at business. I hope this app shows you how bad you are at business. James (43:02): Did I just pay you to, did I just pay you, uh, to, to implement this app idea? Like that just happened Frank (43:09): clinically. I have a refund button so we can, we can negotiate. I could get myself out of this quandary quite quickly, but yeah, I think you did just pay me and that's a terrible salary because yes, I did work a lot of hours on this thing, so I hope you can pay me better next time, buddy. James (43:27): Wow. One day. Maybe I'm, I'm excited. Uh, and again, this is a very atypical one, just cause it's so timely and uh, yeah, definitely read Frank's blog all about it. Uh, gives you back a give gift on me. I don't care. It's on my app. Get Frank feedback. I want you want to see, I already gave him my feedback and I'm back. I've been using the app the entire time that we've been talking about it and there's a bunch of features I want him to go implement right now, uh, in the application. I'm very excited about it. Uh, but I hope this is very atypical. I remember when, um, uh, it wasn't Marco do, I think David was releasing, uh, his new watch application. They did an entire podcast on the, basically this, which was, um, how the app came to be, how the development process went, how it was marketing it, uh, how all the features that were inside of it. And to me it was very fascinating as an app developer to listen to another app developer or talk about their app. It's because it's so personal in a way. Frank (44:27): Yeah. I say you're not supposed to release an app until you hate it. I haven't gotten actually to that hate point yet, so I'm still kind of in love with it. But yeah, it's very personal. Uh, speaking of, uh, accidental tech podcast, I was actually slightly inspired by John Siracusa, who, um, has been a longtime programmer, but he was never an app developer and he just started releasing some Mac apps and I'm like, you know what, John Syracuse is writing some apps. I, I'm ostensibly an app developer chains, you know, you are what you do every day, but I haven't been writing apps, so it's time to write an app. And so I was really inspired by John Syracuse. So, uh, please go buy my app and then go by his apps. Spend a lot of money after this episode. I'm sorry everyone. It's, it's the price of admission. James (45:16): Go buy the apps, go, go give it a local. Thank you Frank for one, building this application and also talking about it for 45 minutes. I, I, I enjoyed it. Frank (45:25): Uh, thanks for putting off the lightning talks too. I feel terrible that I, I bumped the lightning talks, but I promise we'll get back to them. They won't disappear from us. James (45:35): And in fact, tell us what topics you want to have covered. Tweeted us at James Monson Magno at proclaim them at merge conflict FM. Go ahead and ping us in the discord on merge conflict RFM. Basically, there's a billions of ways to get access to us. Let us know what do you want to see on the next lightning talks next week. But that's going to do it for this week's merge conflict. So until next time, I'm James Monson mag now James (45:57): and I'm Frank Krueger. Thanks for this piece.