Daniel (00:00.942) And we're live, live from the United States, in fact. Hey, hey Dave, nice to see you. Dave (00:05.438) Nice to see you too. Wow, your background is different. You are currently in the US of A. Daniel (00:12.718) Yeah, as you see in my background, my background is a beige wall and beige walls are in fact only like legal in the US. I'm visiting my family in Virginia and yeah, just spending a week here. It's pretty nice. And so apologies if the recording doesn't sound as it normally does. I brought my microphone, but I'm using just my laptop camera and I'm kind of like sat on a Dave (00:16.54) at us. Dave (00:23.678) Yep. Dave (00:36.414) Yes, yes. Daniel (00:41.998) a rocking chair in the side of our guest room next to a window so I have a bit of light on me and yeah that's what goes. Dave (00:45.662) you Dave (00:50.622) Ah, well, it's good to see you, Daniel. And I'm glad your travels seem to have treated you well. For listeners of the show, Daniel is currently wearing a scarf as well. I think the temperature may be slightly low where you are right now. Daniel (01:08.974) Yeah, slightly lower than it usually is around these parts. And so yeah, I'm just like having, I just like pulled up my scarf and I got the telemetry deck sweater on as well. Dave (01:12.924) Mm -hmm. Dave (01:20.518) Hey, shout out nice. Daniel (01:23.15) So, yeah. How are you doing, Jeff? You also have a sweater, but it's black, right? Dave (01:25.758) Yeah Dave (01:30.27) It is, it is. It's just, it's, uh, I was going to make some joke about it just being printed in black as well, but no, no, no apparel for light beam apps for me, unfortunately yet, but I did buy a coffee cup and have it engraved with light beam apps .com on the side. Um, Daniel (01:47.054) That's pretty cool. Also, one thing that I do whenever I go to the US, I kind of interrupted you there, sorry, but I'm gonna continue now, is I order from Cotton Bureau, which is a t -shirt print shop that has like pretty large, like the cost for shipping stuff to Europe is pretty high. So whenever I'm here, which is not very often, I kind of order from Cotton Bureau. And so I have a few more, few new t -shirts. Dave (01:53.022) That's all right. Dave (01:58.78) Hmm. Dave (02:06.43) Mm -hmm. Daniel (02:13.678) I kind of tick the box that says yes, just like sent me a surprise gift mystery t -shirt and it turns out to be a t -shirt from Cortex the podcast with what are their names? But you know, you know the podcast I mean like they have the brain the brain logo you don't okay. So Cortex is I'm coldly blanking on the name of the guy who does this right now. So one of one of us Mike Hurley. Dave (02:20.638) Mm -hmm. Dave (02:30.43) I actually don't. Dave (02:41.564) All right, we'll link them all up. Daniel (02:43.47) One of them is Mike Hurley and the other one is a YouTuber by the name of, I don't know, I'm gonna look it up. Anyway, I usually very much enjoy listening to them. And so yeah, that's the T -shirt that came. I'm kinda happy that it wasn't something that I didn't know anything about. So I have a few more T -shirts and I'm gonna show them off on upcoming shows. Dave (02:45.086) Yep. Dave (02:53.918) Mm -hmm. Dave (03:05.758) Nice, nice well. I look forward to seeing that and certainly for people listening in on the pod, please do check out the YouTube. Check out the YouTube as well. Daniel (03:14.926) pod. Yes, yes, totally. Speaking of the pods, hey, welcome to Waiting for a Review, a show about the majestic indie developer lifestyle. This week with an added bonus, jet set bonus. Join our scintillating hosts, Dave and Daniel, and let's hear about a tiny slice of their thrilling lives. Join us while waiting for a review. How are you doing, Dave? Dave (03:32.4) Yes. Dave (03:43.71) I'm really good. I'm really good. It's currently the start of the Easter break here for me. So that means I've effectively, I've booked a couple of days off the end of the weekend. And so I've got a clear six days holiday as it were from, from my day job. And so I'm at the beginning of a holiday period and kind of settling into that, I guess, like we've got plans as a family to sort of just. hang out and do nice things and then guaranteed around that I'll do some of my indie development as is my want. And I'm sure I'm probably going to be almost unemployable in five days time as my body clock has shifted forwards through the day and I'm not getting up early anymore and all the rest of it. So that's fine. I'll be just about on to holiday time and then it will be back. back into work and the next week. But yeah. Daniel (04:45.068) Fantastic, I mean enjoy your Easter break, you kind of deserve it. And even if you decide to spend it on indie dev work, as long as it makes you happy and doesn't sap all your energy, I think that's completely fine. Dave (04:49.116) Thank you. Dave (04:57.15) That's right. And it does, it does make me happy, Daniel. Definitely. I, uh, yeah, I've got plenty, plenty to do, but we can talk about all that, all of that in a bit. Um, yeah. So where do we want to go with the show, Daniel? Cause I know we've had, we've had a couple of bits of, uh, listener feedback. Um, other bits are going on, but you're, you're currently in the U S of a, which we've. Daniel (05:08.974) Yeah. Daniel (05:19.98) Mm -hmm. Dave (05:26.718) We've definitely mentioned already. Daniel (05:29.038) And it also means that this today, Thursday, is the first time this week where I kind of picked up my laptop. Except for on the plane where I put some video and stuff on the laptop to watch, but I am but a poor boy who can't afford business class tickets. So it was absolutely impossible to do anything on the laptop other than watching video because there's just not enough space between me and the screen to actually fit my hands on the keyboard properly. Dave (05:33.182) Mm -hmm. Dave (05:47.55) Mm -hmm. Daniel (05:58.638) So yeah, I've been actually having some downtime from programming. It feels kind of good. But I don't have too much to tell about programming stuff, but I'd love to talk about the listener feedback that we got. Dave (06:11.518) Yeah, yeah, definitely. I'm just pulling that up on screen right now. We, for me, at least I'm not sharing the whole email with our show on the YouTubes. This email came from a listener called Joseph Hack. Joseph has messaged and emailed us, I think, before. And it's lovely to hear from him. He... contacted us with quite a bit here and we'll reply back to him properly in due course directly. So he's messaged a bit about how we can work with macros in CI builds and that side of things and some tips and tweaks there, which is awesome. That's actually gonna be quite helpful for me. So there's a thing you can do to turn the macro. fingerprint validation off and then that allows untrusted code effectively to run on CI, which could be useful in some ways. But the big part of his mail was directed more to you, Daniel, sort of talking about your use of Kubernetes. Daniel (07:25.152) Exactly. So a few episodes ago I spoke about how I've kind of been fighting Kubernetes in order to make it run through it in a way that is efficient. And I haven't really found a solution. Well, I kind of have, but like, I don't want to spoil the surprise. And so Joe, who apparently who it turns out is the author of a book called Kubernetes for developers. So everybody buy that please. Dave (07:36.252) Mm -hmm. Daniel (07:54.446) It turns out, I'm just going to read one paragraph because that's kind of the money quote from this email from Joe, which is, I suspect it's become clear from how you talked about it, but Kubernetes wants dedicated memory and CPU for anything it runs. That's great for small stateless services or jobs, but it's complete trash for running Druid, Snowflake, Cassandra, or related multi -node cluster scenarios. Kubernetes intentionally keeps you from over -provisioning a machine with small jobs, but doesn't really let you use multiple machines when the code's already handling the clustering for you. And so what he recommends is just pull the Kubernetes cluster out of, or the Druid cluster, out of Kubernetes, make it provisioned in some other way, and then use Kubernetes for the things that it can actually do properly and well. Dave (08:42.662) Mm -hmm. Daniel (08:48.462) And so that is actually exactly the same solution that I've arrived at, which is I'm actually writing a small Ansible script now, which is a language for provisioning basically cloud resources and servers and stuff like that. And that also builds me a Kubernetes cluster in just Azure VMs or any VMs actually. It's not... Dave (08:55.932) Mm -hmm. Daniel (09:16.918) restricted to Azure, it can also do AWS and other cloud providers because I want to stay agnostic a little bit. So yeah, thanks Joe so much for confirming what I've been suspecting, which is, yeah, this is probably not the way I want to go. And so this is not a production right now, but I'm hoping to be able to like somewhere in the month of April that I'm going to move the cluster out of Kubernetes. and run it more efficiently with the same hardware, or even you have to use less hardware for the same amount of performance. Dave (09:53.766) Right. Daniel (09:54.99) Which of course brings me to the question, what do I do with the rest of my stuff? Where's the connectivity and stuff like that? I've been also thinking about, do I want to run different workloads on different cloud providers? Which is actually something I don't really want to do, but for the free hosting that we got from Microsoft Azure is now kind of running out. So the question is, can we confirm? Dave (10:20.574) Mm -hmm. Daniel (10:23.15) convince any of the other cloud providers to kind of give us a startup discount or can we convince Microsoft? And if any of the other providers are kind of like giving us free or discounted machines, then the question is like, do I want to run that cluster on some other provider? There's like tunneling to think about and stuff like that. I'm going to have to run some experiments. But yeah, like things are still up in the air. There's a few other topics that I have to work on before. I'm going to... Dave (10:40.606) Mm -hmm. Daniel (10:53.07) at working that, but yeah. Dave (10:56.702) Ah, but it's sound. Daniel (10:57.454) I struck, by the way, road road map style, right? I taught you about the big piece of paper I put on my wall that was the telemetry like road map where I kinda had to promise myself not to deviate from. And so the first item on that road map was multi -user, multi -org and that is now struck out because it's done. Like there's still a few bugs trickling in, but mostly the system works and you can now have multiple organizations and stuff kind of works. Dave (11:18.076) Ayyyy Daniel (11:27.416) as intended. So I'm kind of happy with that. And so I'm going to, once I return, I'm going to have to work on a few of the bugs and then I can go on to the next thing. Dave (11:28.862) Mm -hmm. Dave (11:36.35) That's awesome though, it's very satisfying when you've planned out like that and then you're able to draw that big line. Yeah. Yeah, I'm in a similar place at the moment actually with, it's not quite a roadmap as much as I've got a, well, yeah, actually it is if I think about it. So if you don't mind me sort of veering into Govj here, but so. Daniel (11:39.574) Mm -hmm. Mm -hmm. Oh, yeah, totally. Daniel (11:48.716) Mm -hmm. Daniel (12:02.126) Peace. Dave (12:05.982) With my application and the ideas around it, one of the things I did before Christmas is I mapped out a bit of a plan for sort of the apps I want to release across this year. A lot of it's highly aspirational. So, you know, there's a good chance I won't hit some of these objectives, but it kind of looks like this. I've got the pro version I want to build of the app, which I've sort of put on the back burner for a the last three months in some ways. But that is a big sort of objective this year. If I end up next at sort of the end of this year, Christmas time and Govj Pro has launched, I'll be incredibly happy because that's a big milestone. And what the Pro app represents is an opportunity to expand the market that the app is in to better utilize the iPad screen. Daniel (12:48.83) Hmm. Dave (13:03.666) as well because at the moment the what's going to become the govj classic or just not pro i've still not fully figured out my terminology there yet. Daniel (13:13.198) Oh, Vijay amateur. Dave (13:17.482) Yeah, but So there'll be the two apps by that point and and the maps the Roadmap of the year sort of looks like this Update the existing app to using the the new video pipeline that's going to power both. So then I've tested the wheels on that There was a step there to rip out all of the old design pattern that go VJ original had, which was my router design pattern. Both of those things now have a big line through them on the list of tools. So that's good. We just spoke about this quite a bit at the beginning of the year. I was doing all of that weed whacking in the code base. So that's through now. The video pipeline is in now. And then roadmap wise, I'm now at the point where it's like, well, okay, you've done all of this. I've added camera input. I've added NDI input, which is what is enabling video streaming from one device to the other over the network. I've got a couple more things with the UI that I want to do. And this is very much a want to do. So I could actually draw a line under this and not do it. And I'm coming to the conclusion that maybe I should, but part of me worries that if so. So. This is the dilemma I've got. I want to update the section of the app where you can load your effects because I want to add more effects. And the way that screen works at the moment is you've got a dashboard of the effects and they're all there so you can trigger them immediately. But like I say, they are limited. So there's like 15, 16 effects there now. And what happens is you select one and you've got this control interface underneath it in the same screen to change the parameters. And so I've got to do something there. I kind of want to have something where you've got your favorites, which will be the ones you want loaded in some triggers on that screen as it were. And some other sort of UI to then go and search and add something that's not in your favorites. And there'll be a whole thing about long pressing on them and being able to set them. Daniel (15:14.35) Mm Dave (15:37.854) to whatever they want as well. So there'll naturally be another screen that's going to be this search screen, which will power both adding one that's not in your favorites and also loading it into your favorites. So I'm at the point where I am now into, am I adding features because I want to have something new? Am I adding it because it's adding value or not? And there's probably a decision there for me to kind of make about, well, maybe I should draw a line under this now because the rest of my roadmap. is calling. Yep. So, you know, is it vital to have an effect selection screen or could I just ship with the existing effects as they were, as they are? Does anybody, nobody is shouting at me for more effects right now. I want to add them because I think it's cool and it adds value to the users of the app to have more. But yeah, this brings me to... Daniel (16:09.644) Mm. Daniel (16:20.366) Mm Dave (16:35.518) The next item on my list, which I have been avoiding like the indie dev dev that I am right, which is all the non dev activities. I have a. Yep. I've got an updated version of the app. So this is go VJ three. The next things on my roadmap after this, after releasing it are, I've got a couple of things I want to do with this NDI video, the video streaming. There's a very small. Daniel (16:46.062) Hahaha! Daniel (16:54.19) Mm -hmm. Dave (17:04.358) utility app I want to kick out that'll be useful for everything I'm doing. And then I'm going to get into Govj Pro. So that's my roadmap through the year. I've got this like side quest that should take me somewhere between one to two months. And then the rest of the year is all about the Pro app. These tasks as they are, I'm not... really trying to avoid them, but it's sort of happening by default as I'm going down the features route now. But they are all the typical things. This is standing up, um, updated screenshots, pulling together a plan for how I'm going to market this and actually get the word out about 3 .0 to all the various places. Um, it's about how I talk to my mailing list and send some mail shots out ahead of this and all those sort of activities. None of it is hard. Daniel (17:32.006) Mm -hmm. Daniel (17:53.13) No, but it's not as fun, right? You kind of want to do the fun thing. Dave (17:58.718) Right, all of this is stuff that I have done before. Dave (18:05.374) I do, I really do. And that's the trouble. So this is a, like I say, we've took, this is a perennial indie dev problem. If you are a dev dev, right? You are in it because you started off coding something, um, pulling into product mode as it were can be quite, quite tricky. And that's kind of the lever I've got to pull now. Daniel (18:07.724) Mm -hmm. Daniel (18:15.566) Yeah. Daniel (18:28.386) The question is too like is this project the whole govj project including pro is that just for your personal amusement or do you want people to know about and use it and maybe even pay you for it because if it's just for your personal amusement then I mean of course develop the feature because that's what's giving you joy but I think a tiny bit of income and a tiny bit of Dave (18:35.518) Mm -hmm. Dave (18:43.902) It's the latter. Dave (18:51.228) Mm -hmm. Daniel (18:57.486) Yeah, I want people to use that. It's also what you want. So you kind of got to do the thing that gives you the thing. Dave (19:03.39) Yes. Exactly. And that's the lever I've got to pull. And it's kind of funny, actually, I can hear myself in real time on the show already convincing myself that I need to stop adding this feature now and get into release mode. So there we have it, Daniel. Accountability on this show. I am not going to add this effect selection screen to 3 .0. That can come later. Daniel (19:14.67) Hahaha Daniel (19:26.762) Fantastic. Dave (19:33.214) and I'm going to get myself into gear and get these screenshots together and all the rest of it. Daniel (19:39.79) I'm super proud of you. Fantastic. Also, I can totally offer to, I don't know, help proofread your communication because I think I want to ask you to do the same thing with the stuff I'm building because I, even though I have my roadmap and everything, I'm kind of in the same situation where a few things have come up that just made me realize again that there's so much more I can do for marketing. For example, Dave (19:41.758) Ha ha ha. Daniel (20:07.872) A buddy kind of looked over our telemetry .com homepage and structure. And he was like, yeah, you need about 10 more landing pages because you have 10 to 15 ish like target customers. Like one of them would be product owners of medium sized apps that actually make like proper money. Another would be developers, indie developers who actually also have like medium sized apps. Dave (20:27.262) Mm -hmm. Daniel (20:36.59) that actually pay their salary and those should be different landing pages because one of them is way more technical than the other. And so they need different language and different, like they have different goals and so with what they want to achieve. So you kind of need different landing pages, stuff like that. So I was like, ugh. And so actually I think I want to try building those and then ask you to have a look at them. If you can think of how to improve the language or anything, because you're like, you're just really good at like copy editing, I think. Dave (20:47.422) Yeah. Dave (21:06.59) Oh. Daniel (21:06.67) So I'm asking you this on the air so you're kind of unable to say no. You're welcome. Dave (21:14.654) Kind of pre -validated because we've had this conversation in different ways over the years, Daniel, you know, I'm going to say yes, because I'm quite happy to, uh, to help support in that way. And likewise, I appreciate the, the, the offer to do the same as I get there with, with this, uh, release of Govj. And I think this is something I want to kind of, um, direct to the audience of the show really, which is one of the, one of the best things you can do, I think, as an indie developer. Daniel (21:24.718) Fantastic. Dave (21:43.678) is to find your people, find your community. You know, if you're listening to this pod, you've probably, um, done an element of that to find the podcast in the first place, but it is hugely important, I think, to, to be able to, um, discuss this sort of stuff with like -minded people, um, and to be able to sort of bounce these ideas off others because you learn more, you know, you're kind of leveraging their knowledge, their, their, their bits, their, um, Daniel (21:43.766) Isn't it? Daniel (22:10.766) Mm -hmm. Dave (22:13.246) We don't have coworkers. You know, if you're a solo dev, you definitely don't. If you're a small startup, you've probably got, you know, your co -founder isn't necessarily in the dev in the same way as you are, right? Because that's part of the value that she gives to you as a team. So I think, you know, a little bit of time reaching out to folks on Mastodon, wherever you're social, you know, those sort of things is worthwhile. Daniel (22:38.606) Yeah. And it's also incredibly helpful to have friends who are technologically inclined, but with different focuses. Like, like I have server friends and front end friends and Android friends and iOS friends and stuff like that. And that is really helpful if I have a, that is really helpful if I have a problem with any, any of those. And yeah, so don't silo yourself in and only have. Dave (22:47.546) Yes. Dave (22:55.678) You've got Android friends? Daniel (23:07.766) I don't know, iOS developer friends. Dave (23:10.462) So this is a long segue into me saying there is a indie dev discord that I want to signal boost. Yep. I think the waiting for review Slack is probably migrating there over the next month or so. We'll see how that goes. But anyway, there is a indie dev discord group that I'm going to link on the show notes for the podcast. And if anybody listening is interested and wants to come and say hello. Daniel (23:19.564) Yes! Dave (23:38.928) You know it's lovely to get listener feedback. I'll create a channel over in there specifically for waiting for review and people can access over there if they want to. But yeah maybe that's a way for anybody listening to find community if they don't already have it. So... Daniel (24:00.046) That's an awesome idea. Community is important. And like, especially now with Twitter being completely splintered and everybody being on different social media, like we're more inclined to be on Macedon, but others are different. So like, yeah, it's nice to have like a diff, have different locations or virtual locations where people can congregate and find their community. And like that is, that is one place where you can find like minded people. Dave (24:07.324) Mm -hmm. Dave (24:26.878) Yeah, 100%. And I'm coming back to what we were talking about in terms of my roadmap, getting into that mode. You were also talking about these landing pages for telemetry deck. If I think about your landing pages actually, Daniel, you said there's maybe 10 sort of different personas that you could have landing pages for. Daniel (24:36.822) Mm -hmm. Dave (24:54.206) I'd love to challenge that and sort of say, well, that feels like a lot. And I feel like there's probably within that, that, that 10, there's probably maybe three that are sort of core and overlap with some of the others that you could perhaps zero in on those three first and see how it goes. Daniel (25:10.81) Oh yeah, and they're not absolutely 100 % distinct from each other. There's basically the developer landing page, the landing page for a product owner, and the landing page for someone who is at C level in a larger company. And those need to be very distinct. But then you kind of copy them and change them slightly. So we have like a Swift developer landing page. Dave (25:24.638) Yep. Awesome. Yes. Dave (25:34.494) Mm -hmm. Daniel (25:35.822) or C level for learning page for various company sizes, that kind of thing. So that amounts up to 10, but the content is not completely distinct. But apparently that's the kind of the thing you gotta do for SEO these days. And yeah. Dave (25:41.662) Okay. Dave (25:51.518) That makes sense. And I kind of think it gives you an opportunity to link those landing pages in different places as well. So if you're advertising anywhere or, you know, yeah, if you're, if you're doing reads on specific podcasts and you might want to put, yeah. Yeah. Daniel (26:09.806) Oh, of course, totally. For the recent ad we had in AppStories, sorry, the AppStories podcast, I also created a separate landing page for that, which is just a basically copy the entry in the CMS and then change a few things at the coupon code, stuff like that. But it's also really good to have a separate URL for that so I can count the amount of people who just land on that. Dave (26:17.148) Mm -hmm. Dave (26:32.126) Nice. Daniel (26:39.31) page. So that's really important. And one, like, excourse that we kind of also go on like is one thing that I'm really noticing with the things I've been doing is there's just too much work. So actually, this is not in the show notes, but I'm just like thinking about, I could totally tell you this, like, right? Dave (26:56.988) Mm -hmm. Dave (27:00.7) That's fine. Daniel (27:04.781) So there's too much work going around and there's development work, but also organization. There's like writing ad copy or just like content for the website, which Marina is mostly doing that and they're excellent and fantastic. But there's just like a lot of stuff. So I've been thinking, I think I'm gonna try and get one or two more interns on board and or one or two more freelancers. Dave (27:20.574) Mm -hmm. Daniel (27:32.59) or something of the sort. I've started reaching out to the local university to see if there's a student of data science who wants to do a part -time gig with us, that kind of thing. So I hope I can soon report if anything has shown up. Dave (27:45.458) Okay. That's cool. Dave (27:55.71) That's awesome. Are you going to have any specific sort of job listings or anything like that stood up for it or is this more? Daniel (28:01.582) Oh yeah, actually I put them up already on .com slash jobs. And the jobs I am hiring for right now are all working student kind of jobs. So that means at most 20 to 30 hours per month and not much payment because working student is actually a thing in Germany. I don't know if that's international. That kind of restricts the amount of... Dave (28:17.95) Mm -hmm. Daniel (28:27.726) uh, the amount of pay, but also the amount of hours to a below a certain thing. Um, I think we can do some more things where we can, for example, like gift our, um, possible working students a few things every now and then, or we can also help them with, uh, for example, if you are writing a thesis, bachelor's or master's, um, then we can kind of offer them to be able to, or use our data data set or stuff like that. Um, But yeah, so basically right now I'm looking for a data science person and a front end developer person. I think that's it. Oh no, we're also thinking about like, there's a, it turns out you can now study internet marketing. So if you find someone who is like, who is a student of internet marketing and who wants to, for example, write their bachelor's thesis about how to do successful internet marketing or a, company that kind of doesn't want to use privacy invasive tactics to do so, that would probably be a thing that could be accomplished. So yeah, we've been reaching out to the local universities, but we are not restricted to the local ones because we're all remote. So let's see where that goes. Dave (29:33.854) That that that Dave (29:44.99) That's really awesome, Daniel. There's an opportunity in there for somebody for sure. And I think that marketing student one could be a really interesting opportunity because there's very, very few places blazing the trail that you are with Telemetry Deck in terms of being privacy first and having that story with your users and their users' data as well. So. Daniel (30:10.638) Yeah, I think it could be really cool. Let's see what comes out. I have no clue really. It's just been like, I can talk to Lisa and we were like, yeah, we don't have a lot of money right now, but we think we need a bit more like work power, person power, you know? So let's see how that comes out. I really don't want it becoming exploitative in any way. Dave (30:29.246) Yep. Yep. Dave (30:36.476) Mm -hmm. Daniel (30:37.486) But I have been mentoring working students and interns and juniors in my previous jobs for at least 10 years. So I have some experience and so far I've heard very good things or I got good feedback. So let's hope that we can keep it that way. Dave (30:56.254) That's awesome. And I, the previous company I worked at day job here in New Zealand, I, um, we had a whole thing where we were connected to a, there's a scheme in New Zealand that runs every year called summer of tech. And the summer of tech is a means for, um, students and graduates to find internships in the tech industry really. And, um, that. Daniel (31:00.268) Mm -hmm. Daniel (31:20.398) Mm -hmm. Dave (31:25.406) That was pretty cool. That gave me a similar experience of training people up of, of mentoring and that side of things. I found that hugely rewarding. Uh, but the reason I mentioned this is because that also meant that they had, um, a lot of their, uh, permanent staff were summer of tech alumni who had succeeded in, in there and then then gone on to, to become, you know, permanent fixtures within that company. And. Daniel (31:45.774) Go ahead. Dave (31:53.502) I know that's not what you're offering, but I could see it definitely going that way is that if you've had people come through that door. Daniel (31:58.158) Yeah, there's a path towards that in any case. Like the company I was CTOing for a long time, we basically didn't need to put out job ads at all because we would just have these interns and then they kind of become junior developers and then they kind of become senior developers who would then coach and mentor the new interns. Dave (32:19.646) Yep. Yep. And that's exactly what the company I used to work for had had going on. And it was, it's pretty brilliant to see actually, because there's the investment in the community side of stuff as well, like the local community. Daniel (32:31.054) Yeah. Yeah. It's just, you just have to be a little bit careful, I think, to not, you don't want to have the same kind of person all the time. Like you don't want like all white men basically in your internship, hetero men even. So yeah, you've got to, you've got to be careful to have some diversity because then you, you kind of build a better company too and a better workplace. Dave (32:41.18) Mm -hmm. Dave (32:49.852) Oh, it's controversial. Dave (33:01.342) That's a very good point. And I think, um, without getting too much into the weeds on that side of things, Daniel, I would say that like, as somebody who is in that cohort, arguably, right. As a, you know, I definitely identify as a, a white male. Um, I feel like I've got to be extra deliberate to not just hire people who, who, you know, share a lot in common with me. Um, But it is from that perspective. It's very much about like that then helps you have a robust workforce, a robust team is a diverse team in my opinion, because of all the different viewpoints that then gets brought in. It means you can build a really rounded out product. Because yeah, I mean, everybody has their biases, right? So that's. Daniel (33:40.642) Mm -hmm. Dave (33:55.646) That's definitely a thing to be mindful of. I think, um, as you certainly as you're building a company, um, to be, be sort of looking out for that outside of stuff. But, uh, we're way in the weeds and I wanted to ran out just talking about, um, you've put me on the hook, I think in this show somewhere you may not have realized it, but you've put me on the hook, Daniel for, um, when we next speak, I need to show some accountability to not. Daniel (34:00.974) Mm -hmm. Daniel (34:10.19) Hehehehe Dave (34:25.822) just adding features, especially not with a week, nearly a week's worth of holiday ahead of me where I might just go and squirrel away for a day or two in that time and have at it with code. So my commitment here is that when we next speak, I will at least have either have my screenshots sorted out and a plan for my, how I'm going to launch all of this. Or I will have done them and have it all ready to go. Daniel (34:49.998) Mm -hmm. Daniel (34:57.294) hold you to that and good luck. You have a bit more time because we're not recording in exactly a week's time. I think we're recording in eight days -ish or so. Got to check my calendar. But yeah, I believe in you. I have one more thing that I wanted to talk about, which is we got another piece of listener feedback. I was so happy that people are beginning to write more and interact with us more. So Uli wrote us on Mastodon. Dave (35:07.102) Yep, we'll figure it. Yep. Yep. Thank you. Thank you. Dave (35:18.558) Oh yes. Daniel (35:28.076) Hey, Daniel, your mention of telemetry deck in the newest WFR episode really made me curious what your strategy was for adding the more granular access rights. So that's the multi -user thing that we did. My question is, did the language, in parentheses Python, question mark, and framework, in parentheses Django, question mark, help with that in any way? How did you locate the spots in your code that needed to be changed? Any tricks to guarantee users are isolated from each other? All right. Dave (35:39.966) Yes. Daniel (35:56.718) So thank you so much for your question. This is really cool. And I thought about this a lot, of course. But you have the wrong assumption because this code is not written in Python or Django, which is a web and server development framework for Python that I used a lot in my past. So the assumption is very easy to make. But the complete telemetry API is actually written in Swift with the Vapor framework. And I say the complete API, but there's like a small bit of Python there, but that only deals with accepting signals that are being sent. So it doesn't have anything to do with user management. It has nothing to do with multi -organization and the whole refactor. So the refactor didn't touch that part. So I only worked in Swift code, which is pretty cool actually. And so the language actually did help with the refactor a lot because you can just... change a function or a model or a class and stuff will just not compile. So you see big red indicators where you need to change your code. So that very much helped. And that's mostly how I located the jobs in my, the spots in my code that needed to be changed. And the other thing is I am using a controller model. Dave (37:05.022) Yeah. Daniel (37:24.91) or like the, you know, model view controller is like a thing that pattern, that's the word I'm looking for. So I'm not using a complete model view controller pattern because the API is just the models and the controllers. The views is kind of in the front end, right? But I have controllers and I have models. So of course, if I change the models, then the controllers will automatically not compile anymore. And that's the one thing. But the other thing is I don't have thousands of controllers. Dave (37:33.438) Yep. Daniel (37:54.862) I have tens of them, so I can just go through them and just mark every one of them as, I don't know, as to do with just a forward slash forward slash to do comment. And then I can just go through those and make sure I don't miss any of them. So that is kind of how I did that. Also, my controllers are sorted by version. So. Dave (38:14.942) variety. Daniel (38:21.326) I have API versions in the Telemetry Check API. We are up to version 3 now. And I actually deprecated a few V1 controllers. And that is actually one source of bugs that were basically an obscure part of the front end, would still try to call the V1 API. And that is just not there anymore. And so a few of the bugs that I need to fix is basically Dave (38:43.934) Yep. Daniel (38:50.094) tell the frontend to instead call the v3 API and make sure the v3 API returns the correct thing. But yeah, so basically the v2 and v3 APIs are, I wanna say 20 -ish controllers. Most of them didn't really need any changing. They just go through a middleware and that middleware, I just tell it, hey, in this function that I'm in right now, the current user needs to have... write access to the app, or they need to have administrative access to the organization. And then the middleware is kind of one part, like it's just the code that actually checks whether the person has that or the user has that is actually just in one place that is very well tested and also has a bit of caching because it turns out that if you need to load multiple models to make these checks, it kind of gets a bit performance intensive at some point. Dave (39:47.004) Mm -hmm. Daniel (39:48.142) Last question is, any tricks to guarantee users are isolated from each other? I think, well, the thing is kind of need to have these checks, right? So for example, if I have an API that says, give me the app information for an app with that ID. Of course, I need to then double check that the user has the right to access that. So what I would do is I would mark that function with, Dave (39:53.148) Yeah. Daniel (40:16.82) so that my middleware can double check. And the function would be marked with, hey, make sure that this user that is currently logged in has access to an app with the ID that is just being passed in. And so the trick is just to make sure that this happens in every single function. And for that, I made it so that the functions would actually not compile if the middleware is not annotated. And then you kind of have to add the thing in everywhere. And also in my unit tests, I will have like, even though the main functionality that makes sure that, that generally makes sure that the, that the GliSCO works, I will still have a unit test for each of the endpoints. They will kind of like just like very basically test that, oh yeah, you can't access this in an anonymous way and you kind of need at least X amount of privileges. So I. I think I'm pretty good with that. Yeah, that's kind of how I did it. Dave (41:20.702) That's cool. That's really cool. And I'd actually wondered about some of that myself, to be honest with you, in terms of how you sort of, how you do that bit. Because it's a type of programming that you just don't tend to normally do when you're just focused on the front end of building an app. You know, none of my apps have a server component that I'm programming. So I've been very curious about that. Daniel (41:26.764) Fantastic. Daniel (41:45.902) Yeah, I think I could have made it even more deeply ingrained into how Vapor does things because I'm kind of just like piggybacking on the user management system that Vapor already brings with and that's kind of extended with my code. But yeah, a lot of that stuff you would do exactly the same in Python and Django or Ruby on Rails or similar frameworks. It's just that. Dave (42:02.878) Mm -hmm. Daniel (42:13.07) I have a lot of experience with the other frameworks and I kind of brought that and just went looking for how does Vapor do this? Okay, they have kind of the same ways. It looks different, but it's kind of the same. So yeah. What you have in these frameworks is routing basically. So you have parts of your code that tell you or that tell incoming requests. All right. So if you are in slash v3 slash users, All right, you are in the user's v3 controller. So now you know the file that you're going to. Then inside that file that it would then route like, okay, if I get the next part in the path is an ID and the HTTP method is get, then it's obviously this function that returns a user information object or something like that. And if it's a POST request instead, then someone is actually creating a new user. So like go to that function. So that's kind of how you route to a different function. And in this routing process, that's where you also add the annotations for like which kinds of writes do you need? What kind of login or authentication do you need to presume before even routing to that function? And so it's actually very easy to look at those because they are very connected and there's not all distributed all over my code. And yeah. Dave (43:39.614) That's cool. Daniel (43:39.662) And because this whole routing function pattern is like, that's just how you do things in these frameworks. So yeah, that's kind of how it works. Dave (43:50.942) At some point if I ever build anything server wise Daniel I'm definitely going to want you to take a look at that with me to guide me through. Daniel (43:58.446) Hahaha. I'll just have a three part YouTube series about how to write stuff with paper or something like that. Dave (44:08.99) would subscribe, definitely. Daniel (44:11.63) Actually, I wanted to tell you about this or I wanted to tell you this on air in the next few episodes because I'll have more to share with that. But quick preview. With Telemetry Deck, we are starting to do a series of webinars on various interesting topics. Like we did one on user churn and how to retain your users for a longer time or how to find out why your users are leaving. That is already done on YouTube. But we would... Dave (44:35.966) Mm -hmm. Daniel (44:38.776) gonna do more and they're mostly gonna be like a series of conversations basically with experts on various topics. And maybe we can just have fun on how to write server code with Swift or something. And you'd be the interviewer, not the interviewee. Dave (44:55.774) I'm up for that. Yeah, sign me up. I'm coming out with. Daniel (45:01.358) Yeah, this is not this is not an announcement. This is just like a left field idea, right? But let's talk about this more. Let's keep it because keep this in mind. Dave (45:07.006) Yeah, no, that's fine. That's fine. This is the episode where I've come out with more commitments than I might have expected going in. But that's fine. It's... Daniel (45:15.282) No commitment yet. No commitment yet. Dave (45:20.286) Oh no, but I said sign me up and I mean it Daniel. So yeah, definitely, definitely here for that. But Daniel, I think it's time for us to wrap the show. Your... Daniel (45:25.326) Right. What's the space? Daniel (45:31.726) Yeah, totally. Before we commit to even more stuff. Dave (45:34.302) Yeah, yeah, exactly, exactly that. And you've got things to do on your side with your family there and everything. So, oh, sweet. Oh, that's cool. Well, you're definitely got to let you get back to being a good uncle and everything there. And I'm going to have a leisurely start to my holiday day here in New Zealand. Daniel (45:40.334) I got a nephew to read German books to. Hehehehehe Daniel (45:53.358) Thank you so much. Daniel (46:00.174) Yes, you deserve that. I'm gonna like read him the book about the, the German book about the unicorn that says no all the time. Dave (46:08.894) Okay, nine. Daniel (46:11.086) The Nine Horn. Dave (46:12.67) Ah, awesome. Well, on that note, Daniel, before you start reading about the nine horn, where can people find you online? Daniel (46:14.446) Hahaha Daniel (46:25.55) Right. Please follow me on at danielatsocial .telemetrydeck .com and go to telemetrydeck .com and subscribe to the newsletter if you want to find out more about our webinars in the future. Dave, where can people find you? Dave (46:41.886) You can find me on the Mastodons, the Fediverse, at Dave at social .lightbeamapps .com. And you can find out more about my apps just on lightbeamapps .com. But. Daniel (46:55.118) Yeah, and also you should you should go to the show notes and click the join link for the discord that Dave's gonna place there. Here's another commitment that I added for you. Yeah, other than that, thank you so much for listening. Please rate us on iTunes and YouTube, send us emails at contact at waiting for review .com" Dave (47:03.198) Yes. Thank you. Yep, catch you later, Daniel. Daniel: "and see you next week. Have a fantastic day. Byeeeee!"