Dave (00:00.275) Thank you. Dave (00:05.601) Good morning, good evening. Daniel (00:09.742) every time I am thinking about different strategies to make you do a YouTuber face. And then I take a quick screenshot and then that's going to be the thumbnail for the next episode, for this episode. Dave (00:21.985) Yeah, so for listeners, Daniel was pulling a face, which inspired me to pull a face. If you're curious, you can check out the YouTube. It really does. Pulling silly faces is clearly contagious. Daniel (00:24.224) It works! It works every time! Daniel (00:35.694) I am feeling silly. So, welcome to Waiting for Review. It's all about the majestic indie developer lifestyle. Join our silly and scintillating hosts, Dave and Daniel, that's me. And let's hear about a tiny slice of their thrilling lives. Join us while waiting for review. How's it going, Dave? Dave (01:01.089) Yeah, not too bad. Thank you, Daniel. Sorry, I was pulling yet another shocked YouTuber face for a second there. Yeah, anybody who's literally gone to the YouTube to check it out, I'm sorry you have to look at my mug to achieve that. But no, I'm good. I'm good, Daniel. I'm actually really good. I think last week I was in the middle of some pretty deep issues within the code base of the app that I'm rebuilding. And that didn't feel so good. I think we didn't speak about any of my stuff at all last week. That was partly because I was sort of three levels down in the middle of trying to fix stuff. I was. Yes, indeed. And actually that's a pretty relevant reference. Balrog being the big fiery baddie that Gandalf fights in Lord of the Rings. But yeah, so. Daniel (01:31.278) Mm -hmm. Daniel (01:41.934) You were deep in the mines, encountering Balrog code. Daniel (01:53.55) Okay. Dave (02:01.377) One of the ways I attacked this set of issues was to start setting up some automated tests. So the reference being relevant, yeah, yeah, yeah, yeah, about time. But the reference connects in terms of you will not pass. Daniel (02:10.99) Very good, Dave. Fantastic. Well done. Daniel (02:18.702) Oh Dave (02:23.617) And that was worth it just to see you cringe. Dave (02:30.369) But yeah, so hang on I'm gonna get into the weeds very quickly so let me set the scene. Daniel (02:30.83) You Daniel (02:38.414) Hang on, before you go into the weeds, which app are you talking about? So this is Govj Non -Pro version three. Dave (02:46.273) Govj non -pro original version 3. Yeah. Yeah. So the app that I've got in the store at the moment, I've been spending quite a bit of time gutting it out using all of my Swift packages, my Lego block quote unquote code. And one of the last pieces of doing that was to bring in the new video engine. And yeah, largely I've done that. I've achieved that. It's using it. It's all hooked up. Daniel (02:50.638) Right, okay, cool. Dave (03:16.001) great. And then I get into some issues with camera input that wasn't displaying properly. So the camera wasn't properly centered, which made the zoom almost useless, right? You had to zoom in and it sort of went off up to the top left or top right or wherever it was. In the process of fixing that, I introduced some other regression or bug into the code. And what I discovered is that I've got, there's a piece of code. Daniel (03:30.158) Hmm. That sucks. Dave (03:46.305) that runs in the middle of all this that says, OK, if the video image I'm receiving doesn't fit the dimensions of the composition that's running effectively, then we need to transform it. So it needs to effectively scale it with either Aspect Fit or Aspect Fill as the options. And any iOS developers are pretty used to that sort of scenario of Aspect Fit or Aspect Fill for images. Daniel (04:06.222) Mm -hmm. Dave (04:15.809) That's the thing. It needs to fill the space appropriately. That was the code that was broken. So yeah. And it was causing some issues in terms of some core image stuff underneath the hood. And effectively what was happening is that it was working, but it was translating things way away from the origin. And then it was displaying nothing by the time it processed it, because really the image was like below the screen effectively. Daniel (04:22.51) Okay. Dave (04:46.465) Um, so figuring out where this was getting into the depths of the pipeline and that side of stuff, you end up with this really long development cycle, right? When you're testing on a device, cause the simulator doesn't always give you, um, you know, accurate reproduction of what the stack does at times. There are some edges with core image here and there, fewer these days. Um, but it's Daniel (05:07.886) Mm -hmm. Dave (05:13.537) always better to test this stuff on device than just rely on the simulator. And so you've got the build cycle of, you know, edit, compile, run. And then because it's inside of a Swift package, it wasn't always giving me the debug symbols for inside the packages code. And that was a bit of a fight. And so I was getting into this scenario of like, I'm putting print statements all over the place and I'm trying to... debug whether the image looks correct, like what's going taking GPU snapshots, because you can set up a GPU trace and see what's going on there. It was frustrating. So I took a step back. I went back to the Swift package with the pipeline in, went into the blank folder, absent of tests. It was barren, no tests. And we've spoken about this before, Daniel, right, in terms of... waiting until it's really, really, uh, you know, the last mile of ideation, if you like, before you add tests so that you've got some fluidity around what you're building and all of that. And I've definitely needed that. But given that I was, you know, a few, a few evenings down of time, my spare time, which is when I make these apps, um, a few evenings down of time, and it was just getting more and more frustrating. Once I hit last weekend, I started creating tests. at long last. And as is almost always the case, it's a mindset shift, a gear shift rather than really difficult, right? It's a case of going, well, okay, how do I wrap something around this and then start meaningfully prodding and poking and trying to, you know, set up, set up a load of tests around its functionality. Um, so once I got started, it wasn't really as big a deal as it was in my head in terms of, uh, the effort, the time, all the rest of it. And lo and behold, I started to flatten bugs as I did this as well. So I found not just one, but a couple and you know. But anyway, I mean, like talking about tests isn't necessarily that interesting for what we're talking about here. But I think what might be interesting is that I've got a scenario where what it does is very visual. Daniel (07:17.486) Fantastic. Ha ha. Dave (07:37.921) And unit test is not, you know, right? It's testing code. Daniel (07:41.39) Yeah. I was just wondering, like, how does that actually work? But yeah. Dave (07:46.625) Yeah, yeah, yeah. So I can get into that. I've got some reference images that I've now got in like a resources folder available to the tests. I've got another piece of code that builds a URL to import them based on where the tests are. So I don't need to map anything too far. It just goes, okay, what's my file location effectively and works from there. And then I have a folder that starts off empty when none of the tests have run, right? Ever. So I've created an empty folder for my baseline images. And effectively what I've then done is each test, it will, it will submit an image to a function that says, okay, test this still map matches the baseline. And, you know, either passes or fails. based on whether the image produced in the test matches the baseline file on disk. Now, when you start, there's no baseline file. So I've got another little thing wrapped up in this where I check the environment and I go, okay, are we in baseline making mode? And then if it is, instead of comparing and reading, it writes it out, then reads that back through and the test will pass first time regardless. Right? So you need to manually go and check. the images produced and say, okay, is this actually the baseline that I want to lock in? And then after that, I can turn that flag back off. I've got a different configuration in the scheme for that. Yes. Yeah. Yeah. Yeah. I want to lock those in and go, okay, that is the known state at this time. Um, but then switch in the configuration, the baseline making mode off. Cause I've got, I duplicated the, the configuration and the build scheme. Um, Daniel (09:24.302) Do you commit those? Like do you commit the baseline images? Yeah. Okay. Dave (09:43.699) and one has the environment variable, the other doesn't. So I switch that back off and then the test will then load those baseline images and compare them. And that lets me go, okay, this is locked in, this is the known state, this is testing this, this and this. And then of course, if I then, yeah, yeah. Daniel (09:59.982) Yeah, that's really cool. Does it use the built -in Xcode image screenshot thing that can compare the images, or is it like self -made? Dave (10:08.385) No, self -made. Yeah. It kind of has to be because the, the, um, the image that it produces is not, uh, UI. It's just as a core image image. So it can run absence of all of that is running headless effectively to, to export the image and then compare it. Uh, so no, it doesn't need that. And that's, that's okay. Um, but the, the interesting thing for me was going, okay, well, how do I compare to, Daniel (10:20.878) Mm -hmm. Dave (10:38.145) two images, you know, like there's, you could try and read all the pixels in right and compare them pixel by pixel. You could average them and then try and compare that average color produced very, very quickly. I ran into, um, you know, the edge edges of this, which is the, if you compress an image, the average colors created will be different when you read them back in because Daniel (11:07.822) Of course. Yeah. Dave (11:07.841) minute changes and yeah and so I thought well okay maybe I can just round it off to a decimal point and call it job done right yeah maybe that will work. Daniel (11:19.31) No, what you need you need to use the the best pixel image format that is known to man, which is BMP. Dave (11:26.049) No, no, no. Honestly, Daniel, I swear, mate. No, no, not at all. No, no BMPs. But so what I did do in the end is that if I export the image to PNG data, then I can compare the PNG data that's being read in versus the current one. that's been converted to PNG data as well. And that lets me compare, does this blob of data exactly match this other blob of data? Because it should. Yeah. And so that helps. And so that gave me a function that goes, OK, these images the same, and then everything kind of started to hang together from there. Yeah. Daniel (12:03.47) Awesome. Yeah. Daniel (12:18.574) I like that. Very cool. How long did you spend on that whole test harness? Dave (12:23.809) The harness itself was probably a couple of hours over an afternoon and then the rest of the time was building out the tests. Daniel (12:28.974) Because if I try to do that, I would spend a week or two. But I guess you have to just have lots of experience with these image manipulation pipelines by now. Dave (12:38.817) Yeah. Yeah. And the other thing is, is I've been thinking about this for years, you know, like if I was going to test this, what would I do? And then, you know, after a few rounds of things, not working in regressions last week, it was like, right, it's finally time. I don't really care if this takes me a month a day, two hours, you know, I'm going to sit down and put tests in here. Um, yeah. So. That's nice. That's working very quickly. I squashed some bugs and suffice to say, I now have a updated, um, an updated beta, uh, that's in test flights and people are giving me feedback on it. Uh, so yeah, shout out to Leon. If you're listening, kind of doubted. He's not, not an iOS dev. Um, Leon is, yes, he is. He's a professional, professional visualist musician, uh, VJ person. Daniel (13:23.79) Is Leon a professional? No. Dave (13:33.025) So very much a target user of the app. He's also a friend. So that's very nice to get good direct feedback. But yeah, and so I now have camera input in the app because that was the new thing in the video engine the app didn't have before. So I've spent some time wiring up a bit of UI to that and making that work as well. So yeah. Daniel (13:38.286) fantastic. Daniel (13:59.022) Awesome, congrats. And so is it still the case that the test flight basically except for the video input looks exactly like the existing app, but it has the completely the new hotness under the hood? Dave (14:11.905) It's a bit above. So UI -wise, no major, major shifts, except that you can now change the theme of the app. So if you prefer, I don't know, hot pink on dark black as your control interface, or even bright, gaudy yellow with a pink color is one of them. Daniel (14:13.55) Uh huh. Daniel (14:32.686) amber colored like you know old school monitors. Dave (14:35.585) Uh, it's literally like full yellow. Sorry. Um, there is a telemetry deck mode. I've got an orange color in there. That's yeah. Um, that was based literally off the hex values of your website or your image that you sent me. Um, yeah. Um, there's a couple of other bits, like I've, I've updated the sliders so they're not default iOS sliders anymore. They're, they're something a bit. Daniel (14:38.638) David, I was hoping for amber mode. Daniel (14:45.518) Oh yeah, nice. Daniel (14:54.766) Yeah, fantastic. Dave (15:06.881) bit more pretty in some ways that suits the rest of the app. But yeah, other than that it looks the same, behaves the same, it's just had a lot of under the hood changes. Camera input is the only new feature really to hit with this update. Daniel (15:22.19) very cool. But that that's like a really good baseline to be in, right, where you can then build on top of that new foundation. Dave (15:29.857) Absolutely. And, and, and, you know, I definitely asked myself the question, do I really need to do all of this? Can I not just use the video pipeline, get on with making the next step that I've got planned and do all of that. But ultimately by going this route, I've now got a test harness. I've kicked a bunch of bugs out of the door in the pipeline, like actually having something real to use it with sooner rather than getting bogged down in the UI of a new app or any of that. Um, It's been the ideal thing to then bring the video pipeline to a good baseline level of functionality, right? This is tested. It works in a way that I want it to. And it's working with a real app. So therefore all the hooks and things I need to put into it to wire up, say, sliders, parameters, that sort of thing, that that's all tested, working, doing its thing. And I think it was probably better for me to do it this way. because now the video pipeline is definitely ready for me to start using as a Lego block for the new app. And it also then means as I update the pipeline for the new app, I can bring functionality into the old app if I want to. So that then becomes a sort of force multiplier if you like, because there are a few things that would work that way as well. So, you know, it means I can... get two for one as I start adding new things into the video pipeline. Daniel (17:04.27) I like that. Yeah, awesome. Congratulations on like on that milestone. I think it feels like it feels like really a thing that you've been working towards for a long time and it's really cool that that you can now have that you have a tested you have the new video engine you have the features that you give to you you have even tests. So yeah, congrats. Dave (17:05.345) Yeah. Dave (17:15.169) Yes. Dave (17:25.569) Thank you. And another time if I do it, I'm planning on setting up a Mac mini at home that is working as a test runner effectively. So every time I commit up or every time I merge into the main branch of my repo, it will kick off run these tests and potentially annotate something or message me or do something if things fail. But that's... Daniel (17:52.078) Awesome. Yeah, that's really important. I have the same thing actually. My code is on GitHub and my old Mac Mini is sitting in the closet and is just running the GitHub runner application and a Plex server actually. Dave (18:02.849) Nice. Ah, awesome. Yeah, no Ozzy's running Jellyfin, but same deal. Yeah, it's a... Daniel (18:10.03) Jellyfin and you're not on GitHub, you're on GitLab, right? Dave (18:13.665) No, no, no, I'm self hosted on for Joe. Yeah. Daniel (18:18.19) Yeah, oh, okay, yeah. GitHub is also self -hosted though, right? So what I meant was to say, I meant to say, yes, you're not on GitHub, you're a self -hosted, but Forgeo, is that how you pronounce it? I was wondering. Dave (18:26.465) Yep. I don't know. So it's forge and then yo, J -O. So I think. Daniel (18:32.398) It's like Forge Joe? Forge Yo? For -go? I saw that. I saw that. I was like, OK, actually so many people are now posting about this. It must be good, but the name is just horrible. Dave (18:35.745) Yeah. Yeah, I don't know. I don't know. I just read. I just see it. Yeah. For Joe. Yeah. Dave (18:49.089) It is isn't it? But I mean, it's something that's related to the open source GitHub projects, GitHub like project Codeberg. So codeberg .org I think uses for Joe. Yeah, that's going to keep tripping me up. Regardless, I'm self -hosting. I'll run a self -hosted runner. Daniel (19:01.326) Mm -hmm. Mm -hmm. Dave (19:18.561) on this MacMoney, link it all together and then who knows, I could even wire it up to something where it toots at me on Mastodon. If I think that's the best way for me to get my attention then I could use that. Daniel (19:28.238) Hehehehehe Daniel (19:33.646) that. Yeah, it should totally toot at you. Telemetry actually toot at people. Like every now and then someone will ask for notification capabilities, where the app will send you a notification when something happens. And I'm like, A, I don't want to write the code that monitors the changes, because that means I have to rerun stuff on my poor data set that is already like having a lot of performance issues these days. And B, like I don't want to pay the Dave (19:35.617) Yes. Dave (19:44.065) Mm -hmm. Dave (19:58.305) Hehehehe Daniel (20:01.742) the data and the work to send out notifications like you probably that's actually not super costly, but it does incur costs. But like if I just send it to master. Dave (20:10.753) That does, yeah. Ooh, it's yeah, you've just got the network traffic then, which is probably negligible. Daniel (20:16.398) Hahaha. Yeah, I'll write it down on the roadmap at the very bottom. Dave (20:22.817) Well, Daniel, you're using VAPOR, which is Swift for a lot of the server side for telemetry deck. And lo and behold, I know somebody who may have built a Swift based SDK for Mastodon. Daniel (20:33.806) Yeah, I actually even built a Vapor -based thing with 2D SDK at the beginning when it came out because I wanted to try and explore if it's possible to automatically follow certain people or make the network a bit bigger and then follow people from the telemetry data account automatically. It went badly because the code wasn't good and it asked people to follow them or asked to follow people that were in private mode, which is very rude. So after just a very short time, I disabled the thing again. And it ran for, I don't know, a day maybe, but it was a cool experience. It was not, I don't know, it was not a good Fediverse citizen and it was probably a bad idea to do it in the beginning. Dave (21:14.273) Ha ha! Dave (21:19.681) Oof. Daniel (21:29.774) but it was really fun to play around with 2DSTK. Dave (21:32.961) Oh well, I'm glad it was easy for you to do even if it was one of those should versus could kind of moments. Daniel (21:38.606) That was so nice. Daniel (21:42.99) Yeah, no, it was a really well done project. It just made sense in a lot of way. I needed to extend the API in one point. I forgot which. And it was so easy to just add another API endpoint function. It was like, fantastic. Dave (21:52.257) Yep. Yep. Dave (21:57.793) Yeah. Yeah. That's been one of the things when, when, uh, myself and, uh, Constantine, uh, Constantine Kostov first started getting into building 2DestDK the other year. Um, we spent a fair bit of time sort of going, okay, can we lay this out in a way that is, is, you know, as easy to get into as possible, but also easy for people to contribute to the code base as well. Cause we didn't want to do all the work. So you, you certainly saw the benefit. Daniel (22:24.974) Oh yeah. Dave (22:27.681) of that, I think. Daniel (22:29.742) It was fantastic. And I'm a contributor now. I think I pushed that. Ha, fantastic. Dave (22:32.929) Hey, yeah, you are pretty sure you are. But Daniel, yeah, speaking of telemetry deck, how are things going in telemetry deckland? What are the, what's the big stuff going on? Daniel (22:45.582) Speaking of tests, I had to, like remember last time I told you about my parameterized tests using a macro and it was really cool. Turns out my build server doesn't like it. And I spent like two hours debugging it. It runs when I log into the build server and just run the Swift build command manually, then it works. But if it's run by GitHub or other CI runners, it just totally chokes on the macro for some. Dave (22:52.609) Yes. Dave (22:57.857) Oof. Daniel (23:14.094) reason where it's like, ah, I don't have permission to run this macro, whatever, where I'm like, but this is just a Swift package. Like, why is it different than other Swift packages? It's just Swift code that's being executed on my Swift. I don't know. So in the end, I haven't been able to fix it. I just commented out the test, removed the macro. The test has been super helpful in development. And I can just uncomment it every now and then and run it manually on my computer for now. Because I've been... Dave (23:18.817) Oh, yeah. Dave (23:26.945) Yeah. Dave (23:40.001) Yeah, you could maybe put it in a separate target ultimately, right? So, yeah. Daniel (23:45.23) Yeah, something like that. Yeah, that's probably a good idea because I have I have reached a milestone as well and it's really good. So yes, no two days ago. I was super down three days ago. Actually, I was super down because there was just too much to do and I couldn't keep track of stuff anymore and I have a huge like get up like a project where I track all my to -dos and issues and whatever but I just try to do too many things at once like I try to fix. I or improve server performance while also trying to fiddle around with the ingest API, while also trying to build a bit to work on the front end a little bit, while also thinking about, should I move servers to different cloud hosting and a few other upcoming features and stuff like that? And in the end, I was like, OK, no. I got to write down. I'm going to call Lisa. Dave (24:33.665) Mm -hmm. Daniel (24:43.502) We're going to agree on a roadmap, like the next five things I'm going to do. And then I'm only allowing myself, like I printed it out. It's on my wall right now. I'm only allowing myself to write, to work on these five things and all only in the, in the order of, of operations. Like I can, like if I'm waiting for thing A, I can go to thing B, but not to thing D or E. Yeah. And. Dave (24:58.977) Mm -hmm. Dave (25:09.761) Wow, okay, so you put some structure on yourself. Daniel (25:14.382) Using that trick where I used a printer to print out a thing and put it on my wall, high tech and stuff, I actually managed to finish the work on the first item off on this roadmap, which I've been working on for literally months. I started working on this in December, I think, which is the multi -organization mode. Dave (25:20.065) Mm -hmm. Daniel (25:38.958) Um, so it is a huge change in the way that database is structured and the way the APIs are structured, where you can now belong to multiple organizations and have different roles in those organizations and have different permissions for those roles and even have different permissions per app on top of that. Um, yeah. And that has been, has now entered a testing phase on my computer. And now I wanted to actually start a beta beta. Dave (25:39.489) Ah. Daniel (26:08.334) beta phase where I would push it to, I don't know, some URL and then ask people, like our followers basically, hey, if you have a Telemetry Tech account, log in here and then try out if this works for you. Because I don't want to push it online and then 1 ,000 or 3 ,000 people will play around with it and find out that something's just not working with them. Dave (26:09.953) You better. Dave (26:35.201) Mm -hmm. Daniel (26:37.998) So I think I'm going to have a beta endpoint of some sort and then just ask a few nerdy people to play around with it first and see if 10 people use it for half a day and find out, yeah, this is fine, then I can probably push it. But yeah, this is really nice. And that clarity of mind also gave me a few insights into how to improve server performance. And I've started working on most of those. But I found I had a thought. I had a thought, and that thought hasn't left me since then. Just a tiny thing in my mind that I just can't get rid of, which is for technical reasons, like how Apache drew it, my backend database works, I would save so much performance if I did two things. Dave (27:12.929) Mm -hmm. Dave (27:19.009) Uh -oh. Daniel (27:37.55) a, not calculate any data that is older than 6 months and b, not calculate any data that is newer than 24 hours. Dave (27:48.001) OK, yeah. Daniel (27:49.326) Because the newer data, if data is newer than that, it hasn't been compacted, which is kind of a defragmentation process that makes querying the data way quicker. But you kind of have to wait for the day to be over to do that. And just the older data just has to be present on all the calculation servers for the minute chance that someone will actually need it. So I've been thinking. Tell me if this is a stupid idea. But I've been thinking I might have to make those two things paid features, like where only if you pay, you get to access real -time data and get to access old historical data. Or I don't know if you, or it's a paid extra for some reason or whatever. Because I could shut down right now. I could shut down two or three servers right now if I did that. Dave (28:46.017) Yeah. Okay. Lots of thoughts on that. Do I think it's a terrible idea? Not entirely. Like I can, I can certainly see some of the points on your side. Do I think customers will think it's a good idea or not? That's, that's the biggie. And, and so I think this is the sort of thing where, um, it's got to make sense on the customer side. know what, what I'm paying for. And I think if, if I'm following what you're saying correctly here, Daniel, you're sort of saying, okay, you want to know anything in sort of almost real time, nearly like as close to real time as it can get. That's a paid feature. Right. So, okay. You either wait a day effectively for stuff to clock in, or if you want to see, want to work with things, you know, up to the second, up to the minute you pay more. Um, or it's over and in the next year. Daniel (29:27.566) Mm -hmm. Dave (29:45.153) Yeah, that makes sense. That does make sense as a gated thing. And then of course, you've aligned that with some of the internal costs and performance side of things and everything else in your stack and structure and everything. Yeah, that makes sense. Older than six months. Yeah, maybe. Doesn't resonate quite as hard for me, but like, if I think about, if I think about the value that telemetry deck gives to me, personally as a user. If I want to know how my app has launched, like a brand new app, I would lean on telemetry deck in that first 24 hours to see stuff coming through. And I use it in a similar way for when I'm making a major update and I want to see whether that update has taken over and how it's tracking in terms of percentage of users, that sort of stuff, right? Because App Store Connect, you can use that in the same sort of fashion, but you've got to wait. You know, so immediately that is one of the values I get out of telemetry deck, right? Is those sort of moments. Yeah, yeah, yeah. And also sort of being able to look for indications of any issues as well to some degree or whether there are new things being used or whatever. You know, I want to know in those first few days, that's the bit where I'm really monitoring it and really sort of going, oh, has it gone? How's it going? So I think there's a... Daniel (30:47.694) Yeah. Yeah. It's the whole instant gratification thing. Dave (31:12.513) there's an alignment there with stuff that some people will definitely want and will find the value in. And those are the sort of things that, you know, can belong behind a paid flag, an X tier or whatever. Because those are the, yeah, that's where there's some, some immediate value to people. And so that, yeah, I feel like this is something you could do, you could go for, and it would make sense to people. I think it's when it doesn't make sense at all. you know, why are you charging me extra for this? Daniel (31:43.278) It's also aligned with things that create costs on our side. You know what I mean? Like it's not just a. Yeah. Dave (31:48.033) Yes, yes, which means it scales with your users who want it as well, right? The more people want it, the more server costs you've got to have. So if you gate it with your tier, then that means you've got a positive flow of cash to support the use as it were. Daniel (32:04.718) Yeah. The question is also like, if I remove that for free users or something like that, the question is like, if you've never known real time data, you don't know how fantastic it feels to see everything trickle in live, you know? So, hmm. Dave (32:11.027) Mm -hmm. Dave (32:17.313) Yep. Yes. Yeah. But there's a couple of things you can do for that. You could potentially offer a trial of the tier or something like that or... Daniel (32:36.27) Oh yeah. So hi, thanks. Like, especially if you're setting up something, you know, like you want to see the test signals coming in immediately and stuff like that. Dave (32:42.721) Yeah. Yeah. You know, or you can, I mean, you've got to build the structure, obviously, and I'm suggesting stuff that I don't know how long it would take to develop or how meaningful it would be, you know? Yeah. Yeah. Yeah. Yeah. But, uh, Daniel (32:51.726) We're just spitballing. Last time we changed anything about the pricing model was over a year ago now. Back then, I was like, I need to think about experiment with pricing every three months or so. It's been a year. I'm just thinking about what is something where I don't actually make people mad, but still is a good way to... Dave (33:00.417) Mm -hmm. Dave (33:08.353) Yeah. Dave (33:16.577) Mm -hmm. Daniel (33:21.198) carefully try out pricing things. Dave (33:24.193) Well, if you're somebody who's just checking it periodically, right? You know, sort of set and forget, I check in every now and again or whatever. Um, you know, real time won't necessarily shift the needle for you, right? You'd be like, Oh, whatever. I check it every week. It doesn't matter if it's, if I've lost that day or not. Um, if you're somebody who's. Dave (33:56.449) Right. You know, they're using it all the time, et cetera. It's providing some meaning. Dave (34:03.329) is a feature for that sort of user. So it feels like it would align well, I think is what I'm saying. Daniel (34:13.358) Alright. Dave (34:13.473) in a sense. And I know, you know, you can see some people that will go, well, I'm not winning anything because you're now charging me for the fact is those people are costing you. So, you know, it's sort of, yeah. Daniel (34:22.478) Yeah, that's fine. I mean, especially people have been so nice about everything so far. It feels like we really try to be very respectful to both the larger players and the indie developers. And in return, both groups have been really respectful towards us as well. And I mean, of course, we already have a thing. Dave (34:29.057) Mm -hmm. Daniel (34:47.822) Like for example, we have the restrictions, right? So if you have a free account for telemetry deck and you go above the amount of signals that you're allowed to use in the free amount, then those signals are just not shown to you because that time range is just excluded from any calculations. And because we're not running calculations on that, it doesn't cost us anything, or almost, of course, storage. And I've seen a few users where I'm like, oh, this would be so annoying to me. But what they do is they have, like, Dave (35:08.097) Yeah. Yeah, yeah. Daniel (35:17.838) like well sized apps and they so they burn through their through their 100k signals like they burn through that in the first few days of the month and then for the rest of the month they just see a gray chart but it still gives them enough data obviously to feel like oh they like they will actually use telemetry deck and they they see they still still see like how many users ish they have for the time of for the first few days of the month at least and that gives you like a good Dave (35:33.473) Yes. Daniel (35:47.79) order of magnitude, they see what operating systems they use and so on. And so yeah, they can still use it. It's just, yeah. Dave (35:54.689) or some value. And I think that's again, I've said this a few times, I think on this show already, but it's that it's looking for the things that scale with how people are using it as well. You know, if that person is happy just checking it in the first few days of the month or as and when, you know, they're not your target customer for the full paid tier, but they are probably going to give something back to you for that in terms of it's still something they're using. Daniel (36:19.406) Yeah. Dave (36:24.801) they're still likely to advocate for what telemetry deck does give them. And at the point in time where they do need to see, unlock that gray chart and get into it, they'll convert to a pay customer when that value is there for them. So it's a. Daniel (36:27.822) Yeah, exactly. Daniel (36:38.734) Yeah, I mean people are hobbyists, people are students, so they might feel like the money that they have they want to spend in other ways. But other people are making actual money with their apps and then they're like, oh yeah, I'm going to pay 20 bucks or whatever a month and just actually do that. So yeah, I feel like that's actually pretty cool to have that free tier. Dave (36:42.561) Mm -hmm. Yeah. Dave (37:01.217) Yeah. Yeah, I think so. And you don't want to gate everything away. So somebody has to be paid to use anything at all either. Like this provides a very good sort of balance of that. I guess that lets, like you say, lets you provide something back to the community for those freebies and those people just trying stuff out. And then yes, as something succeeds and it becomes more viable. Oh, listeners, we have a cat. We have a cat on our. Daniel (37:08.494) No. No. Daniel (37:23.758) All right, we have a guest on the show. Momo say hi. Say hi Momo. Daniel (37:31.182) I'm sorry. Dave (37:31.905) Oh, that's brilliant. Actually meowed straight into the mic. Yep. Awesome. Well, cat cat on the video is definitely derailed by trying to fool Daniel. Daniel (37:37.774) Yeah, I've been training her well. Daniel (37:43.822) Okay, now sit down, sit down, sit down. Okay, sit down. Daniel (37:49.614) Yeah, I'll be thinking about this a bit more, I think. Like, what can I do without pissing off people, but still just like trying to see if there's more value to be had. At one point, we're going to have to actually be... Dave (38:00.481) Mm -hmm. Dave (38:12.353) Yeah. Yeah. Um, and, and that's, you know, that's what you want. You want it to be in that, that flywheel profitable zone and everything else. And then that's what your users want because you love a service. You want it to stay and to still exist. And so, no, it's good. It's good. And I'm glad you're looking at pricing, even if it has taken more than three months for you to get to look at it. I think it's a positive thing. Daniel (38:42.51) Yeah, and like the whole, how do I say, like the whole process of working on the multi -organization and preferences, permissions, features and everything, like just like made me look at a lot of the APIs and everything again anyway. So like, yeah, probably have to touch the user interface a lot in the next few months. Dave (39:03.073) Yeah, yeah. And, you know, again, none of it is wasted in that sense, right? It's all positive development, positive steps for everything as well. So, that's awesome. Daniel (39:10.72) Yeah. Fantastic. What else is new? I have another thing that I want to tell you about, but I'm going to tell you that next week. There's too much, but I'm excited to tell you that I have now joined the Professional Podcasters Club. And you're never going to guess what that means. Dave (39:27.745) Oh, tea! Dave (39:34.689) I don't know whether to feel slighted by that, Daniel. Okay, you've joined the Professional Forecasters Club. You've been moonlighting on another show. Daniel (39:39.726) You Daniel (39:48.494) No, no, no. I own a thing now that only professional podcasters are allowed to have. Dave (39:51.809) Mm -hmm. Dave (39:57.345) Are you going to reveal this on the next show or are we going to talk? Daniel (39:59.342) I am going to review something next. I'm going to make you I'm going to make you wait a whole week until I tell you what that is. Dave (40:04.577) Damn it. Okay, well, on that note, Daniel, where can people find you online in the intervening week as everybody is? Yeah. Daniel (40:12.59) Right. In the intervening week, please write me messages at @daniel@social.telemetrydeck.com. Visit telemetrydeck.com for all your telemetry deck related needs and pricing information, I guess. Yeah, Dave, where can people find you? Dave (40:33.441) You can find me on the mastodons at @dave@social.lightbeamapps.com and you can find out more about my apps over at lightbeamapps.com as well. Daniel (40:46.958) Fantastic. Also, if you're listening to this, please rate us on iTunes and or YouTube. Please send us emails at contact at waitingforreview .com and have a great week, Dave. Dave (40:55.873) Mm -hmm. You too, Daniel. Take care. Daniel (41:00.622) Bye!