00:00:15 Matt Welcome everyone to the.net Maui podcast. We're here. 00:00:18 Matt To keep you. 00:00:19 Matt Up to date with the latest and greatest in.net client development. We'll talk about some Azure, some Visual Studio, some blazer and ofcourse.net. 00:00:27 Matt Howie, I'm Matt Soucoup. And today we have a special episode. We're gonna talk with Polaris, a company who is upgrading their app from Xamarin to dot net Maui. And we're gonna talk about their. 00:00:37 Matt Experience doing that. 00:00:38 Matt And of course, we have two guests to take us through that whole process. So swiggy, let's start with you. 00:00:46 Sweeky Awesome. Thanks for having us, Matt. Hi everyone. I'm Sweeky and I'm partofthe.net customer advisory team. 00:00:54 Sweeky And I work on helping folks who are working on net Maui apps and specifically with Polaris has been helping folks who are migrating their Xamarin apps to net, Maui and I'm going to hand it over to Tom from the Polaris. 00:01:08 Tom Hey, thanks for having. 00:01:08 Tom Me back again, guys. It's great to be back on. I'm Tom. I work at Polaris for probably the last six or seven years or so I'm. 00:01:16 Tom One of the. 00:01:16 Tom Lead mobile app. 00:01:17 Tom Developers on our team. 00:01:19 Tom We've had Xamarin forms app for many years. 00:01:22 Tom The process of migrating that over so. 00:01:25 Tom Really excited to talk about our experience. 00:01:26 Tom And and how? 00:01:27 Things have been going. 00:01:29 Matt Cool. Now, Tom, you mentioned a while back that we are a while back we did have you on the show to talk about Polaris and your app. So Polaris itself is a company that does like snowmobiles and all terrain vehicles and such. 00:01:46 Matt Let's explain to our listeners one what Polaris is and two, why in the world does somebody like Polaris, who creates a vehicles need a xamarin or now a.net Maui application? 00:02:01 Tom Yeah, great question. Right, you you hit the nail on the head. We produce vehicles. So we like to think of Polaris as Santa's workshop for for grown-ups. 00:02:10 Tom We make snowmobiles, we make ATV's side by sides. We're now into the boats and pontoon arena too, I mean. 00:02:17 Tom Anything you can do outdoors that involves an engine. 00:02:21 Tom We're there, you know? So that's a big part of what we. 00:02:24 Tom Do so at. 00:02:24 Tom The core of it, Polaris, is a. 00:02:26 Tom Manufacturing organization manufacturing team. 00:02:29 Tom But the reason we needed it is we found that people were buying snowmobiles or ATV's and not knowing where they could ride safely or legally. So that's a big area as far as like these, you know, state departments. 00:02:43 Tom And other trail organizations who who would get grants to create trails. They get access from land owners, you. 00:02:49 Tom Know if you ride in the. 00:02:50 Tom Wrong spot. The entire section of. 00:02:52 Tom Trail could be removed, you know impacting this trail network. So that's why we wanted to produce a free app for anyone, whether you're players, rider or any competitor rider. 00:03:03 Tom To open the app, go to your state and see all the legal and safe riding opportunities in your state. 00:03:09 Tom So that's been a huge hit. The app has always been free, still is today and we have a huge growing group of people that use it from trails. We added other features like hey, where did I ride, you know, let me track my ride. 00:03:22 Tom Kind of like. 00:03:22 Tom Straw and show a a line on the. 00:03:24 Tom Map where I went. Let me share that. 00:03:26 Tom With my friends or to the community so people can find. 00:03:29 Tom Cool riding opportunities in their local area, so it just spiraled from there. Now we're working on all kinds of cool like connected vehicle features too. Like hey, you know what's my battery health? You know? Do I need gas? No. What's my tire pressure? That kind of stuff? 00:03:44 Tom So it's been really exciting. 00:03:47 Matt Oh, that's so super cool. You have an app that's kind of like, like you said, or Strava. 00:03:54 Matt And like something like all trails. So you can kind of find the trails and and and make sure you're not crossing over private land. And there there's some kind of comment like Tom, you're from Minnesota if I remember correctly. I'm originally from Wisconsin and there's the old joke from way back in the day from like the early 90s that anybody who rides. 00:04:12 Matt A snowmobile or an ATV? 00:04:13 Matt He doesn't follow the rules. You do whatever you want as soon as you can do that now, Tom, you're making them follow the rules. Good for you. That's exactly what we want. You're. 00:04:17 Speaker 3 Yeah, but. 00:04:25 Matt Making everybody do the right thing. 00:04:25 Tom Hey, someone's got to do it. You know, in Minnesota, the the, the trail groups that always make these signs that are very poignant, they say right on the trails or we'll lose it. So that's the whole idea here. Like, let's let's make this good for everyone in the future. 00:04:36 Speaker 3 Exactly. Yeah, exactly. 00:04:41 Tom You can all enjoy it more. 00:04:42 Matt Exactly. I mean, it's both for private land owners and wildlife too. And I suppose that you want to have these trails going through. And so everything is. 00:04:50 Matt I think it's cool. 00:04:52 Matt Why did you start migrating? Why did you choose to go from Xamarin forms over to dot net Maui? 00:04:57 Tom Well, I I think. 00:04:59 Tom Because the technology change, you know, once Microsoft made the the announcement that they were investing in this in the. 00:05:06 Tom Next evolution of it that really. 00:05:07 Tom Piqued our interest. You know we've been using Xamarin forms since I think version one point. 00:05:12 Tom Four, probably so. 00:05:14 Tom You've been a fan of it for. 00:05:15 Tom A long time you've gone through some of. 00:05:17 Tom The growing pains too. 00:05:19 Tom You know, really love someone from spa. 00:05:21 Tom That was a great upgrade for us, probably one of the smoothest we've ever done, so we're always just looking for the future. You know, players is definitely an innovator in all the markets that they play, so. 00:05:32 Tom We're looking to innovate too, so we're interested in that. We're interested in performance improvements for sure. The idea of having a single project where you could have all of your image. 00:05:41 Tom Assets in one place is really appealing to us because we we skin this salmon forms same code base three different ways for three different brands. So we've got just a ton of image assets. So things like that are really appealing to us that that really. 00:05:55 Tom Made it something that. 00:05:56 Tom We want to go for. 00:05:59 Sweeky Ohh man, that sounds super awesome. Makes. 00:06:01 Sweeky Me feel really. 00:06:01 Sweeky Happy. I'm also curious when you first heard the announcement and we've had a couple of other conversations around this too, but was there any like what were you thinking like there's net six, there's next 6 previews and there's net seven. And then coming from net, you know? 00:06:19 Sweeky Shop like you guys are. Was there like any excitement about? Like ohh yeah, it's all gonna be just tied in with the net 8 release. Sitelikethe.net release cycles. Now that's gonna be great. But did that also sort of help push this decision? 00:06:33 Tom Yeah, I think so too. You know, I I. 00:06:35 Tom Saw that as. 00:06:36 Tom More of Microsoft's investment in the Xamarin technology that they're rolling it into bepartof.net no longer a stand alone thing too, so that gives us confidence that there's gonna be regular releases every year that we can, you know, we can depend on too similar like we're we're updating each you know. 00:06:54 Tom IOS and Android platform. Every year too, you can expect new versions of net and keep moving things forward at that. That cadence that's really appealing to me to have a regular cadence that we can depend on to do our updates cause it's something we need to plan for. 00:07:06 Tom Each year, you know we're. 00:07:07 Tom Busy building so. 00:07:09 Tom Many features that we. 00:07:10 Tom Need to plan for these next next releases of next upgrades. 00:07:15 Matt Cool. So when you're going through this, Tom, what we and and the team and and the and your team, what? 00:07:19 Matt Were some of the the. 00:07:22 Matt The cost benefit analysis, what were some of the risks that you took on when you went from Xamarin over to Maui? 00:07:30 Matt What held you back? What could have? 00:07:32 Matt Held you back. 00:07:33 Matt But what's in it hold you back? 00:07:33 Tom I think you know, I think we're kind of all watching the timeline too. Initially they thought now we'd be released a little bit earlier. So we're kind of like trying to pick our moment to jump in. 00:07:44 Tom You know we're. 00:07:45 Tom Heavily focused on future work, but kind of got my eye on the pulse of where Maui was. And so after I think maybe like the third preview dropped or something, I I downloaded it and started playing around with it, went to a couple of meetups where they, you know, showed people building Hello World Maui apps, you know, so that's kind of when we we first started. 00:08:03 Tom Thing to it and I. 00:08:04 Tom I think I think the biggest risk for us is we had no idea how long it would take. 00:08:10 Tom So we're trying to cut the balance between. 00:08:12 Tom Don't start too early when things are really green, but don't start too late because you're gonna bump into this no hard deadline next year in April too, so that's kind of a balance of when to get started. And also you know how to allocate the correct resources to this too. You know, so far it's mostly been me and squeaky working on it as well too. So it's kind of a ramp up phase of of when to get started and then when to add more. 00:08:35 Tom Versus to get the to get. 00:08:38 Tom A lot of traction. 00:08:39 Sweeky Nice. Nice. That's that's great to hear. Sorry, Matt. I just had a follow-up question to ask there to when you were looking. And of course it's been great collaborating with you guys. It's been a lot of learning for our team as well watching you migrate such a big app just to give everyone who's listening. 00:08:59 Sweeky An idea. Can we? Can you just give us like a high level overview of like the app and like why these like the considerations that went in because of like it's like it's a big app, how is it architected. So we have a bit of context as we start discussing the meeting or things about the. 00:09:16 Tom Yeah. Yeah, it's, it's. 00:09:17 Tom A huge app, you know, we've been working on. 00:09:19 Tom It for I. 00:09:20 Tom Think eight years in the Xamarin forms version. I think before that it was a different cross-platform framework too, so we've been adding a lot of stuff. You know we have 12 developers that are working full time on this, adding features. So as you can imagine the code base changes quite a bit. So when I started this migration. 00:09:36 Tom Project we are about. 00:09:37 Tom 450,000 lines of code. 00:09:39 Tom About 88% of that was shared code, so that made it a really great great value for for using Xamarin forms on iOS and Android we also have a ton of third party dependencies, partially because of how much the app does, but also because I think the age we added a lot of those. You know, Nugent packages. 00:09:59 Tom Really, on to kind of get us to. 00:10:00 Tom The next level. 00:10:02 Tom So you know, one of the biggest third party libraries we use is Mapbox. The the map is the app is primarily a mapping app to show your trails and your content and stuff on the. 00:10:13 Tom Surface. So that's really a big, big library for. 00:10:17 Tom Us too. 00:10:18 Matt Cool. So you mentioned Mapbox, so that's that's going to be one of your dependencies there. So how did you deal with that from Xamarin to Molly with did you run into anything or did it just work? 00:10:28 Tom It did not just work as you can imagine it. 00:10:32 Tom Took a little. 00:10:32 Tom Took a little finesse, you know, between Mapbox and all the other other dependencies we probably have. 00:10:38 Tom 30 to 40 different libraries that we keep up to date. You know we we do quarterly analysis of them to see if we want to update them. So when we first started this, that was the first step that that sweeping team advised us to to get a good handle on our dependencies and understand those path forward. Can those work with that net Maui are they? 00:10:58 Tom Compatible with that net six or do you need to retarget them? So we identified about four or five kind of packages we thought would be tricky and Mapbox is definitely one of those. So we went through the process of retargeting those binding projects to support.net six and be compatible with our net Maui. 00:11:18 Sweeky Yeah, that is correct. There's also if. 00:11:22 Sweeky If anyone listening is considering migrating their app like the steps that we recommend is first and foremost, make sure your Xamarin app is on the latest greatest Xamarin forms version which the Polaris team was completely on top of. So that was awesome. They were already using the most recent version of Xamarin. 00:11:39 Sweeky And using all the newest APIs which made the migration like Super Easy because they were already using all the new stuff and then yes, the second step was now go through your depends. 00:11:49 Sweeky And check what has support and I was just looking at some nugget packages yesterday. There's actually a lot of third party packages that have added at Maui support now which is awesome. So you should definitely just have a look at their GitHub pages. Have a look at their nugget. 00:12:09 Sweeky The actual nugget postings and check a lot of. 00:12:12 Sweeky Which is are adding support like as recent as last week, so it's it's looking much much better out there. And as Tom mentioned, there were a few that we found out and like they did not have support yet and I have to say Tom was very enthusiastic about joining the mad journey which is let's update binding projects with me. 00:12:32 Sweeky And yeah, so we split up the work and. 00:12:36 Sweeky It was really great because we this is the first few times we didn't even have docs for that yet, so it. 00:12:42 Sweeky Was like let's. 00:12:42 Sweeky See if we can get this project to migrate. So that was really awesome. We were actually did not really like Tom did what I think you did like three or four of them yourself. And I just, I was focused on map box but yeah. 00:12:56 Sweeky Went ahead and, like brave Frontier's leader, and went ahead and did a few of the upgrades himself. And yeah, Tom, would you wanna share a little bit about how it was migrating those binding projects? 00:13:08 Tom Yeah, it's funny to think about them now in. 00:13:10 Tom The past because. 00:13:11 Tom Before, we had kind of this idea that that sweet you told me. It's like, oh, yeah, you can just, you know. 00:13:16 Tom Fork the GitHub. 00:13:17 Tom Project since it's open source and retarget it and it should work and that was just seemed like this black magic kind of thing to me. Looking back on it but but in reality it it actually turned out to be pretty straightforward. 00:13:29 Tom You know we have. 00:13:30 Tom One of the third. 00:13:31 Tom Party packages we use is really popular called Branch IO, so you can send someone a link a deep link into your app to to show content or whatever. So that was one of those third party libraries that didn't have any planned Maui support.net. 00:13:46 Tom 6 support when? 00:13:46 Tom We reached out to them last year last fall, so that might have even changed now. 00:13:51 Tom That was one of the examples that we. 00:13:53 Tom We took on so. 00:13:54 Tom Since all the code was open source it. 00:13:55 Tom Was a matter of forking it. 00:13:57 Tom Converting the project to an SDK style project which most people are probably already using. If you have made any new.net projects in the last couple of years, and then you select which target framework you want. In our case it was going to be both for iOS and Android, so usually there was, you know, two binding projects, one for each platform. 00:14:18 Tom And then it was a process of just fixing the build errors that came through, you know, so that. 00:14:23 Tom That ended up being. 00:14:25 Tom Pretty straightforward for the most part. We had a couple tricky ones that speaking and I worked on some tricky go. There's or things that were just a little bit different in.net 6 compared to, you know, the previous target framework they were using. 00:14:36 Tom But it ended. 00:14:37 Tom Up being pretty smooth, one of the. 00:14:40 Tom Things we did. 00:14:40 Tom Too that really. 00:14:41 Tom Helped was in the solution that held our binding. 00:14:44 Tom Projects is to add a really simple, straightforward net Maui app that exercised our binding project. 00:14:52 Tom So that consumed the the retargeted binding project or deal out and allowed us to fully exercise that binding right there in that solution. And if we had issues, we could just really easily step through the binding code and see what was up. So that was pretty great. It helped us work out kinks ahead of time because, you know, if you start the app. 00:15:12 Tom Integration process your app's not going to build for a while, so you don't really know if the binding the migrated. 00:15:17 Tom Or retargeted bindings are working for you so. 00:15:20 Tom Having that in a demo or a test bed. 00:15:23 Tom App was really crucial to have. 00:15:25 Matt Classic squeaky always thinking about. 00:15:28 Matt So let let me let me let me get my mind around this. 00:15:33 Matt So you're still using the binding as it was before, but you're just upgrading the binding project to net 6. 00:15:42 Tom Yeah, that's right. Yeah, we're retargeting it. 00:15:44 OK. 00:15:45 Tom So in the project file you specify which target frameworks you're interested in. So as a matter of retargeting it retargeting it to dot net sixor.net 7 is what we ended up going with and then fixing build errors and namespace or whatever changes. 00:15:45 OK. 00:16:00 Tom Came from that. 00:16:02 Matt Gotcha. OK. So that's that's, that's nice. So you didn't really have to break? 00:16:05 Matt Out objective Sharpie at all. 00:16:07 Sweeky Ohh yeah. See that's what I was afraid of, right? Because you also had a few API changes that came in and I was like, no, we might have to rewrite some of this actual binding code. So the way this worked out was. 00:16:22 Sweeky The binding that so the project that Tom forked was a working Xamarin binding project, so that was working. It built and it ran against a Xamarin app that's like the first thing you wanna make sure. So if that binding project is working then you just do all the steps that Tom just talked about, you know fork it. 00:16:41 Sweeky Retargeted, put the new project Style SDK. If it doesn't have it, and then add the TFMS so net seven iOS and now soon net eight iOS net 8 Android whatever you need and rebuild that project. If it's a very simple and basic binding 90% of the time it should just build. 00:17:00 Sweeky Exists cuz the actual binding code itself, like your API bindings and everything stays the same. You shouldn't really have to mess around with anything cuz you're using the base, the base native framework that you're using stays the same, so none of that changes. All you're doing is just like retargeting and just building. 00:17:14 Sweeky OK, newer you know version of that nugget or DLL that you want to use against your Maui app. So it's it was literally that much yeah. And Tom any other learnings you can forget like you know forgetting over here that we had. 00:17:27 Sweeky To like do here. 00:17:29 Tom Do you remember what our big breakthrough was for a while like I targeted? 00:17:33 Tom The bindings and. 00:17:34 Tom Then it built just fine, but the DLL. 00:17:36 Tom Was really small. 00:17:37 Tom Like only a couple kilobytes and we. 00:17:39 Tom Thought that doesn't seem right. 00:17:41 Tom So we added this test bed project and sure enough it didn't work do. 00:17:44 Tom You remember what the breakthrough was? Sneaky. 00:17:47 Sweeky Oh my God, I hope you do cause I am blanking here as I do with most binding projects, yeah. 00:17:49 Speaker 3 This is. 00:17:52 Tom Listeners, if you're this is the most important, valuable piece of advice I have for you. We found out that we have to add this is binding project node to our CS project file and set that to. 00:18:02 Tom True to true. 00:18:04 Tom And someday this will be part of a template and you won't even think about it. But if you're in that binding world, right? 00:18:09 Tom Now and your deals are tiny. 00:18:11 Tom Look at that is binding project node. 00:18:14 Tom Remember that. 00:18:14 Sweeky That's correct. I remember now it is a property you add to your project file exactly. You set that to true and then it builds your full usable DLL which you can then go ahead and put into a Nugent package if that's how you're distributing it. But that is correct, yes, that was the kicker. Yeah. So like I said. 00:18:19 Oh yeah. 00:18:34 Sweeky Tom was super helpful. He was very patient and all of the learnings that we have from this, we're actually putting together into a a official doc. So you will be seeing those. 00:18:44 Sweeky Soon and. 00:18:46 Tom Yeah, there's also a meet up here locally in the Twin Cities and I presented how to retarget these binding projects or third party libraries that works for those libraries too. So there's a YouTube recording that's posted on my YouTube channel if anyone wants to take a look at that, there's some some good tips and we kind of walk through just doing a basic binding project and retargeting. 00:19:06 Tom It and and what can go wrong? 00:19:08 Tom How to fix those kind of things? 00:19:11 Matt Nice. We'll link to that. We'll link to your YouTube channel, Tom. And of course, we'll link to the documentation so we can as soon as you get that done and you read my mind, I was going to say that the docs are open sourced. So anybody could put a pull request into them. And thank you for updating them, sweetie. Love it. So. 00:19:30 Matt Log as we're talking about tweaking, we're talking about migration overall, but along with we're deep down deep into it and talking about updating the TFMS. 00:19:43 Matt What did you run into time when you changed to the I OS TF? 00:19:48 Matt Them specifically. 00:19:51 Tom I think I think it's, yeah, I think this. 00:19:52 Matt In your project files. 00:19:54 Tom Came up in the the the the meet. 00:19:56 Tom Up talk I did to is some. 00:19:58 Tom Of the attributes in the. 00:20:00 Tom I can't remember what type of file it was. Some of the attributes in the actual binding project files themselves were no longer available. 00:20:08 Tom So we had to kind of rework. 00:20:10 Tom That a little bit. 00:20:10 Tom It's almost like some apichangedin.net six and the attributes were slightly different, so that was one of the things we ran into small deal, Els was the second one. 00:20:21 Tom Trying to think what else we ran into. 00:20:24 Tom I think. 00:20:25 Sweeky That was about it and I think we just like the initialization code for your binding. Yeah, so now we have this wonderful thing called the Maui program file, which is the initial starting point for your, for your apps, right? So everything now starts via the Maui. 00:20:31 Speaker 3 Oh yeah. 00:20:44 Sweeky Program dot CS file and then inside of that you'll see the Maui app builder. So I think the small other change that we had to like look into was again this is completely dependent on what the project like the the library does. But if there's any sort of initialization code that has to be done. 00:21:02 Sweeky For that library you you want to look into seeing if there was something that was happening previously in your app delegate or in your in your main application or something that now has to happen in the Maui App Builder code. So and honestly, as of today, there's. 00:21:22 Sweeky A bunch of like open source ones, you can look at. You can eye look at that's Zebra Crossing library and I saw how he did those initializations and that's how we use that as our reference point. And then we figured out how to do it for the libraries that Tom was binding. So. 00:21:37 Sweeky Yeah, it's like all the resources are out there. And like I said, we are putting. 00:21:40 Sweeky It also into a doc so. 00:21:43 Sweeky But if you are at the moment struggling, have a look at other libraries that have already like done, they're migrated, migrated libraries for net 678 support. 00:21:56 Sweeky Have a look at their GitHub you know and see how they're doing it and you should if there's something you're stuck in. I'm pretty sure if you just look at what they're doing and yeah, that's how you have to do it. So yeah, if there's initialization stuff you want to make sure you're doing it now in the Maui app Builder is another thing we learn. 00:22:11 Tom Right. Yeah. Good call. 00:22:12 Tom I think apart from that, the only thing that tripped us up is, you know, a lot of these old libraries. 00:22:16 Tom Have assembly info like assembly info file. All that stuff goes in the the CS SDK style project now. So just kind of small things like that for the most part it was actually surprisingly smooth. I hate to say once we got all the small pieces in place. 00:22:31 Tom There weren't a lot of issues that we. 00:22:33 Matt And as like you did mention, Red Zebra Crossing Library which is John ***** barcode scanner library. So Yep, and it's always good that just to go in and yeah check out what other people are doing and. 00:22:45 Matt It's a lot of times it's just oh. 00:22:47 Matt Yeah, it's just that. 00:22:48 Matt That's easy. Why didn't I think about that? And it kind of standing on the shoulders. 00:22:52 Matt Of somebody else so. 00:22:53 Tom Right. A lot of people are. 00:22:54 Tom Along those same lines. 00:22:55 Tom Too a lot of people are making compatibility packages. 00:22:58 Tom Do like one of the difficult third party libraries we thought would be tricky was FF image loading that was old, didn't have a path to dot net six but Jonathan **** made it compatibility version of it too, so that's out there as well. If you want a stepping stone, you know a lot. 00:23:14 Tom Of what you need. 00:23:15 Tom Out of FF image loading you can probably get in the builtin.net. 00:23:18 Tom How the image control now? Because that does image caching, so you could probably switch over to that eventually, but could be a good stepping stone as you. 00:23:26 Tom Go through your migration. 00:23:28 Matt Nice. So let's talk about the upgrade assistant. 00:23:31 Matt And did you use that? 00:23:32 Matt For any part of the. 00:23:33 Sweeky Yes, I understand. 00:23:36 Speaker 3 I actually I. 00:23:37 Tom Did you know? I think I tried. 00:23:39 Tom It early on and then there was a big update back in probably. 00:23:44 Tom Know that I'm. 00:23:44 Tom Trying to think when. 00:23:45 Tom We did this maybe earlier this year. We're. 00:23:46 Sweeky Early this year. 00:23:47 Working on it. 00:23:47 Tom Yeah, we're working on dependencies first. 00:23:50 Tom And then probably January or? 00:23:51 Tom February we started on iOS. 00:23:53 Tom So I have the Mac CLI tool installed and I I ran the portable project which is mostly the Xamarin forms stuff and also our iOS project through the Migration assistant and that did quite a a number of things we I think we kind of went through and category categorized things that it could do better. 00:24:13 Tom But for the most part, it was a pretty good experience. It took a while to go. 00:24:17 Tom Through all the prompts you know. 00:24:18 Tom You're typing. Yes, yes, yes, yes. I think I did it while I was using. 00:24:21 Tom Dinner. But at the end you have this, you know semi migrated app which is kind of cool. It did a lot of stuff in the project structure I think. 00:24:30 Tom Which was nice. 00:24:30 Tom For us and then you kind of go on to the the build onion, which is next to the aired onion. 00:24:37 Sweeky Ohh man. Yeah, before before we do go into that just about upgrade assistant. Yeah. Like this is Tom's experience like earlier this year. But if you download it now, tons of new performance improvements made to this. First of all, like what Tom just mentioned, it does run on your Mac now. So you can use it on Windows as well as Mac the CLI. 00:24:58 Sweeky Version it does do your XAML namespace changes. Do your basic namespace changes and it's pretty thorough in the steps that it does now and and David just informed me the other day was David actually ran the upgrade assistance against like a very basic, very simple binding project that he had. 00:25:18 Sweeky And he said a great assistant actually did the job for. 00:25:21 Sweeky It made all the. Yeah, it did. Like the project changes and he didn't have too many big. Like I said it was a very basic binding projects or not too many like API things to mess around with. And yeah, he was like a good assistant. Just did the job for him. So good news all around when it comes to a great assistant. And there's also the there is a VS like a Visual Studio for Windows Extension. 00:25:21 Tom Ohh nice. 00:25:42 Sweeky That is being worked on to make. If you're not comfortable with the CLI, or you're not. If you don't like using the terminal, the Visual Studio extension allows you to just do these same upgrade steps inside of Visual Studio so you don't have to leave our wonderful favorite IDE. 00:25:57 Sweeky So the my support for that is ongoing. So you see more features light up as they keep working on it. So yeah, definitely definitely give a great assistance a shot if you have a very basic app, I imagine it should do 90% of the heavy lifting for you and for app like Doms, we've had a few other customers also run. 00:26:17 Sweeky Their apps to upgrade assistant. It does do a lot of the boring find and replace kind of work for you, so you can literally just focus on getting all the different features back into. 00:26:25 Sweeky Your apps so. 00:26:27 Sweeky I shamelessly recommend it and I believe. 00:26:32 Sweeky Maddie David also had a talk around the whole assistant and how it works in build. So and Matt, have you guys done a build recap already? If not, we should definitely link that in the show notes. 00:26:43 Matt We have done a build recap sweetie and I'm a little bit offended that you haven't listened to. 00:26:48 Matt It yet? 00:26:48 Sweeky Oh my God. I have so many podcasts to catch up on. Oh, my God. Yeah. Yes, I have guilty as charged. But yes, I am catching up. I have also not watched those full build things. You know, I was on vacation then in India. So I will blame it on jet lag and time zone. 00:27:04 Sweeky Differences, but yes. 00:27:04 Matt Yeah, perfectly acceptable perfectly. 00:27:08 Speaker 3 Yeah, yeah, I. 00:27:08 Matt So let's talk does does or go ahead, Tom? 00:27:10 Tom Ohh just one other thing about the upgrade is you know there's. 00:27:13 Tom A couple other. 00:27:13 Tom Groups here at Polaris that in the same boat they've got a Xamarin forms app and I've advised them just like squeak, squeak. You said, you know, give it a try and see what happens. You know, it's pretty low, low risk to to give it a a run and it creates a backup of your project for you. So give it a try and see what you. 00:27:28 Matt Nice. And I think the upgrade assistant, you can either do it side by side or have it make a copy of your project. And David and I were talking about it just or side by side, have it make a copy or project or do it in line, just write everything right over. And so David and I were talking about it and we're like, you know what, take your project out of source control forever and just right over everything and like you're only living. 00:27:49 Matt Once and just who cares what happens anyways? Yeah. So anyways, so let's talk about does the upgrade assistant work on custom renderers? Have you tried on that? Or if not, tell me about that one. Do you have custom renderers in there because the custom renderers are always. 00:28:05 Matt Fun and how did? How did what did you? 00:28:08 Matt Do what did you do with. 00:28:08 Matt Your custom renders if you did have them. 00:28:10 Tom Oh, baby, do we ever I. 00:28:13 Tom Can't remember if the upgrade assistant. 00:28:15 Tom Did much with them, apart from maybe some namespace changes. Do you remember this? 00:28:17 I need. 00:28:19 Sweeky Yeah, probably just no, probably just namespace changes, not nothing, nothing else, nothing else. 00:28:24 Tom Yeah. Our initial plan was to just use the compatibility renders out of Maui and see how it, how it worked. And I think for the most part, they worked pretty well. One that didn't work at all was just the content page renders, those compatibility ones didn't work for us. 00:28:42 Tom So we had to convert those to page handlers and add a little block of code so those are specific, you know, not maybe not apps. All apps have them, but we had like six of them. So that migration to to page handlers was really super easy to do. 00:28:59 Tom But that causes some kind of like weirdness because we weren't sure why the UI wasn't, you know, rendering correctly when we finally got there. 00:29:07 Tom So. So that's kind of the the first hiccup. We also have plans to to change to migrate all of our renderers to handlers because they're going to be more performance and you know you just don't know when the compatibility renderers will, will, will go out of Maui will be deprecated. So we definitely want to do that work too. 00:29:27 Tom But so far it. 00:29:28 Tom Hasn't been too difficult to do that migration. We've we've done a couple of them so far. You know some of the overridden methods have changed. 00:29:36 Tom You have to find the compatible ones for that. 00:29:39 Tom We had some crazy. 00:29:40 Tom Renderers too that we're doing all kinds of. 00:29:42 Tom Their stuff that we're able to delete like sneaky. 00:29:45 Tom Fired members we had. 00:29:45 Tom One for these top tabs. We've got top tabs in our app in a couple of different places, and of course there are different implementations and we were doing like crazy like reflection. 00:29:56 Tom Things down into the Xamarin. 00:29:57 Tom Forms code base and we ripped. 00:29:59 Tom Off a Xamarin forms renderer so we have. 00:30:01 Tom To just delete all that crap. 00:30:03 Tom Which was just thrilling because I've never been a big fan of these custom renderers. You know they worked. 00:30:08 Tom There's always kind of this, like, looming wonder. Like, what if something changes and we have to go back and touch these? 00:30:15 Tom And and not not all the code that we wrote is very performant and good, I'd rather use out-of-the-box stuff, so it's been really great to delete a lot of those. And just in this case we just use the sharp. 00:30:25 Tom NATO top tabs. 00:30:27 Tom Which are perfectly great. Everything we need. So. So that's always a joy to delete those those code that code, yeah. 00:30:34 Tom Couple of years we've been we've been. 00:30:36 Tom Using effects. 00:30:37 Tom Behaviors primarily. So these are mostly renderers that have been around for you know, 5-6, seven plus years. 00:30:44 Sweeky Yep, Yep. And the effects if you follow like the migration guide that we have, the doc that is available right now, Tom, you just use the docs like the steps in the docs, right? 00:30:54 Sweeky For the effects. 00:30:54 Tom Yep, that's right. Yeah, that was quite straightforward. You register them now and your Maui program file too. I'm just like you register the compatibility handlers or or compatibility renderers and handler. 00:31:07 Sweeky Yep, Yep. Yeah, I I like probably jumping the gun a little bit, but I do. Also, I did enjoy watching Tom delete a bunch of those files like he has down with these weird files. We don't know. 00:31:19 Sweeky What's going on? And. 00:31:20 Sweeky If anything, if anybody wants to do a bit of clean up, wants to do a little bit. 00:31:25 Sweeky Of tech debt. 00:31:28 Sweeky Auditing of your projects. I will say this migration process is definitely a good time to do it. 00:31:36 Sweeky Like Tom discovered so much of this legacy code that was like work around for Xamarin forms 2.0 and was like not even used anymore, but it was still hanging around in a large code base. It happens. It's not anyone's fault, but this is definitely a good chance to just stop, do some spring cleaning, get rid of some stuff, see any of these workarounds are still needed in your code. 00:31:42 Speaker 3 Right. 00:31:57 Sweeky This anymore. So I think overall I think it's a very healthy thing to do any in general for your code bases and if you want to use the migration process to do this as well, all the power to you friends, you should definitely do it. 00:32:10 Tom Yeah, I think once we got the iOS app running, I would say 90% of the things the UI rendering issues we've seen so far are because of a custom renderer. So after the first couple, you know, every time I go to a new page and see a problem and UI issue in the app, I think OK, there's gotta be custom renderer for. 00:32:10 Matt Right. 00:32:27 Tom This and sure enough there is, so we gotta. 00:32:30 Tom You know, tweak. 00:32:30 Tom That or, you know, migrate it to a handler, so that's it's definitely a good thing to clean up if you're thinking about migration in the future. 00:32:38 Tom You have some time. 00:32:39 Matt Nice. So now gonna bring that up squeaky too. It's. I mean, it sounded like Tommy, you were able to clean a bunch of stuff up, you know? Get rid of your tech debt. And usually I take all the chances I can get introduced. 00:32:49 Speaker 3 Yeah. Yeah. Well, we. 00:32:50 Matt Tech debt but. 00:32:51 Matt You went the other way. So good for. 00:32:53 Matt You for you. 00:32:54 Matt So let's talk about the first time you're actually to get it up and run. What do you think about it? I mean, any major UI changes that were there or? 00:33:00 Matt Just how did you feel when? 00:33:03 Matt It was there when it you. You mean you got that first migration done and you F5 that and it ran. 00:33:07 Tom Ohh man, I was thrilled. 00:33:10 Tom Yeah, I think I was on the. 00:33:12 Tom Call with sweetie at the time when it finally built. 00:33:16 Tom And we're both like, Oh my goodness. 00:33:18 Tom We're through the. 00:33:18 Tom Build air on you now. It built and it ran and. 00:33:22 Tom Apart from like the. 00:33:23 Tom Weird, you know, render issues with pages you. 00:33:27 Tom Know we were. 00:33:28 Tom We were using page renders for all kinds. 00:33:30 Tom Of crazy stuff that we didn't need. 00:33:31 Tom To but apart from that. 00:33:32 Tom It ran very. 00:33:33 Tom Well, I mean, we were kind of curious how the. 00:33:36 Tom Retargeted bindings from Mapbox worked because we didn't have a lot of time to to test that too extensively. So far the map has been really performance we're going through right now and cleaning up some of the UI things, but I was very pleased as far as just seeing it run. You know, being able to access other parts. 00:33:55 Tom Of the app. 00:33:56 Tom One thing that's also a hurdle when you're you. 00:33:58 Tom Think about third party. 00:33:59 Tom Dependencies is some of these libraries have reimplemented things now that they support.net six, so one of a big example was our OPS zero library we're using for login. That was completely implemented from the ground up, so we had to reimplement that first in order for us to get the login. So we. 00:34:15 Tom Could see the. 00:34:16 Tom You know most of the app you like too. 00:34:18 Tom So those are the things that that happen that. 00:34:20 Tom You don't expect extra work. 00:34:22 Tom That you don't realize at the front. 00:34:25 Matt It's really interesting that you didn't reimplement it using as your B to C and you kept it with US 0. 00:34:30 Tom Yeah, that's just. 00:34:31 Tom Well, we've got a very. 00:34:32 Tom Deep Polaris authentication that we. 00:34:34 Tom Share with other teams so. 00:34:37 Matt I'm just joking. 00:34:38 Matt Yeah, yeah, I mean authentication is a whole can of worms and it would have introduced a bunch of other stuff, but. 00:34:39 Tom I like it. 00:34:46 Sweeky But no, no, no. Matt, don't forget, Emsal does have Maui support. Now go check out their docs and they have updated bit of samples. I just record showed that stuff to the customer last week. So yeah. 00:34:51 Tom That's true. That's. 00:34:57 Tom Yep. I especially like mcell when I could use it in app Center. That was pretty sweet. 00:35:05 Matt Let's moment of silence for app center. 00:35:10 Ohh boy. 00:35:11 Matt Which is that portion of App Center that portion. 00:35:15 Sweeky What was I gonna say? I was gonna say that. 00:35:18 Sweeky So we talked a lot. 00:35:20 Sweeky Before we quickly move to maybe just like I want to give Tom like a chance to just give everyone like a high level now that his iOS app is done, what learnings would he share? But just before you go into that, Tom, 10 second quick, what is the build onion and how did we have lots of like? 00:35:39 Sweeky Pulling experiences with that and it, yes, how how? Just quick review on that experience on the build onion. 00:35:47 Tom Yeah, maybe this is obvious to some, but you know the build is a process, so you don't get all the build errors at once. So it ended up being like this, this Union where you would fix a section of of errors and and usually they kind of came in like clumps like the first set of errors you would get would be. 00:36:04 Tom Namespace changes that you had. 00:36:06 Tom To do and you can do those. 00:36:07 Tom Pretty quickly and you know VS code. 00:36:10 Tom Doing a find replace. 00:36:11 Tom And then you would get like you know, maybe you'd start with 150 errors and you would fix all those and then you would think you're done. But then you would build and the build would get to the next section and you'd get like 300 more errors in the works too. So it was just like a little bit at a time and it it, it can be kind of demoralizing. 00:36:29 Tom But there is a light. 00:36:30 Tom At the end of the tunnel. So if. 00:36:32 Tom You're in the middle. 00:36:32 Tom Of the build on the. 00:36:33 Tom Right now it will get better, and someday it'll just work and it will build and run and it'll be amazing. But be prepared for that, that. 00:36:44 Matt Nice. I never heard a call. The bill bunion or the air onion before it? Totally. 00:36:47 Matt Makes sense then. 00:36:47 Sweeky Yeah, Tom said that and I loved it. I. 00:36:50 Sweeky Was like Yep hi. 00:36:50 Speaker 3 Layer by layer, yeah. 00:36:52 Tom Yeah, and it gets easier to I think, you know, you start to see patterns and familiar errors or maybe just a different API used in a different way. So you get good at recognizing those and fixing those problems too. So I would recommend writing those down when you fix them, because you're gonna come back to it, you know, a couple layers later. 00:37:10 Tom I think the worst, I think maybe five was the deepest we. 00:37:12 Tom Got from the Portable Project 5 layers of. 00:37:15 Speaker 3 There's, I think total. 00:37:16 Sweeky I believe, Sir. Yeah. Yeah. And then one was, like, so if anyone comes across this storm, hit this too, and it's a file. If you search on the Maui GitHub, you see. So if you get a bunch of XAML C 00000 errors, that's probably because there is a dependency package or you have like a Xamarin forms reference nugget package somewhere in your project. 00:37:37 Sweeky So you want to go through and just check? Maybe there's no transitive package that's pulling in Xamarin forms. 00:37:42 Sweeky But that's probably it. So if once you. 00:37:45 Sweeky Get rid of. 00:37:45 Sweeky Those all the different examine forms packages in your project. That error goes away. So Tom had like a hundred of those, which we turns out there was like a package that was pulling in Damon forms and the transitive dependency. We deleted that nugget package and all the errors were done and the app. 00:38:00 Tom Started building, yeah. 00:38:02 Tom And we kind of carried those through the layers and even though we deleted the the Nugent. 00:38:06 Tom You know in the solution explorer there's still a reference for it in the project files, so it's always good to look through these those project files. 00:38:13 Tom And and see if you got. 00:38:14 Tom Something hanging out that was kind of obnoxious for a while. 00:38:18 Matt If you could give any tips for people Tom other than our bill bunion writing. 00:38:21 Matt Get down so you can go back through and, you know, fix the other things when they come pop. 00:38:25 Matt Back up. 00:38:27 Matt What else? Any advice that you give folks when they're starting their migration journey, small apps, big apps, any type of apps? 00:38:33 Tom Yeah, I would say start early. You know initially we were looking at the Xamarin forms obsolescent state, which is may next year 2024. 00:38:45 Tom And we thought. 00:38:46 Tom Well, maybe it's not so bad to be obsolete for a little bit. Maybe we. 00:38:49 Tom Could make this a 2024 project, you know, and and now in hindsight, we know. 00:38:53 Tom If we had started in 20. 00:38:54 Tom 24 we would. 00:38:55 Tom Have hit the April deadline already. You know we would be out of. 00:38:58 Tom The App Store or wouldn't be able. 00:39:00 Tom To submit to the App Store so. 00:39:02 Tom I think that's my best advice is is get started because you don't know how long the process is going to be. So get started early. I think now is a great time to get started. 00:39:12 Tom Initially we we ran into some Visual Studio tooling issues and stuff that we had to work around, but all. 00:39:17 Tom That stuff has. 00:39:17 Tom Gotten much better through this process too, so that's. 00:39:21 Tom My first tip. 00:39:22 Tom I guess start early. 00:39:25 Matt Obviously, yeah, that's always a good tip because you never know what you're going to run the two. 00:39:29 Matt Plus, there's always the and. 00:39:31 Matt There's always something else where people are on vacation or something else comes. 00:39:34 Speaker 3 OK. 00:39:35 Matt Up where you have. 00:39:36 Matt To you know. 00:39:37 Matt Priorities switch around, so that's always. That's a really good tip. And so let me ask you this time and Sweety, maybe you might have a little more experience with this. 00:39:45 Matt Do you think GitHub copilot would have helped at all? Cause I'm interested to see how copilot would have would work with Maui, right? Because yeah, how much data does copilot have to train with on Maui? So I'll leave this to both of you. 00:40:02 Matt What do you think copilot help with Maui? 00:40:06 Tom I haven't used it. 00:40:07 Tom Yet I've only. 00:40:08 Tom Used I've only used ChatGPT, but someone mentioned that to me the other. 00:40:12 Tom Day like could it? You know, if you could give it all the files in your solution? Could it maybe weed out the wrong name spaces for you instead of doing a find replace? I guess it depends on how many tokens. 00:40:25 Tom You can submit, but that's kind of what. 00:40:27 Tom The upgrade assistant did for us though. 00:40:29 Tom On a project. 00:40:30 Tom Structure basis another area too is. 00:40:33 Tom Sometimes we had to. 00:40:34 Tom Reimplement some code like. 00:40:36 Tom Trying to think of a simple example is like maybe device unnamed thread that class. 00:40:40 Tom And that API. 00:40:41 Tom Had changed slightly, so maybe you could have plugged that in and found a a different implementation, but usually I think we did Googling. 00:40:48 Tom For that stuff. 00:40:50 Sweeky I mean allthe.net API browser which saved us a bunch of searching. 00:40:56 Sweeky Yeah. And I mean I. 00:40:58 Sweeky Kind of treat upgrade assistant as a cop, I let you know. You know, it kind of does a lot of the work, but I think it would be awesome if we could figure out a way for co-pilot to actually do a little bit more. 00:41:10 Sweeky The heavy lifting. 00:41:12 Sweeky Like I'm sure like some of the rewriting, of course. Like, honestly, my dream situation is like co-pilot, like it a poor pilot. Just rewrites all the custom renderers. Oh man, that would be ideal. But yeah, I think there is potential. I have actually used copilot to just write like blank Maui apps and like do just basic stuff for me. 00:41:32 Sweeky And it's pretty good. It is like it implements HTTP clients better than I do. So now I just like let go pilot. Just write all that stuff for me. I don't even. 00:41:40 Sweeky Think anymore so. 00:41:42 Sweeky It's it's. I think it's got a lot of potential and it'll be exciting to see what we. 00:41:46 Sweeky Can do in. 00:41:46 Sweeky The future with it, like right now though. 00:41:50 Sweeky At least for me, I'm more focused on getting our documentation. You know, up to date, making sure everything that used to have Xamarin Doc has like a Maui version of the doc. So people are not getting freaked out when they're trying to upgrade. I want to make this process as easy and as smooth for everyone as possible. Like all the customers like Tom, and we're working with a bunch of other customers and everyone. 00:42:11 Sweeky Using the upgrade assistant. Please please, please keep giving us your feedback letting us know what works, what doesn't work, so we can keep improving the tool. We do want to make upgrades as easy as possible for everyone, so that's where I'm focused. So yeah, if GitHub co-pilot is something we can leverage to make this experience better, I. 00:42:27 Sweeky Am all for it. 00:42:29 Tom Yeah, I I'm going to. 00:42:30 Tom Give that a try. I'm. 00:42:31 Tom Really interested in that renders to handlers. 00:42:34 Tom Idea because we. 00:42:35 Tom Have some that are pretty simple. The simple ones we've been trying to delete all together, but it might be really interesting to see what happens when you try and convert one of those to handle. 00:42:45 Tom That'd be cool. 00:42:46 Sweeky For sure. 00:42:48 Matt Good. I'm see. Tom. And This is why you got to start early on your project, because now I just sent you down this total tangent that. 00:42:54 Matt Doesn't do you? 00:42:57 Tom Well, I know you have. 00:42:57 Tom To sprinkle in some AI problem with every podcast that's probably on the podcast or checklist. So I. 00:43:02 Tom Understand why you. 00:43:03 Tom Don't you need that? 00:43:07 Matt Oh my goodness. You've been listening and I'm meeting. 00:43:07 Tom Yeah, sweet. You mentioned it too. 00:43:12 Tom You mentioned this too, you know, but the net API browser became an awesome tool for just understanding the API changes you know. 00:43:18 Tom Like so many things, just small things changed between how you were using.net and Xamarin. 00:43:25 Tom And how are you? 00:43:25 Tom Rightnow.net six or seven, so just understanding that documentation at that level was was really key. There were probably, you know, several dozen areas of code that we just had to rewrite slightly. So. So that's a good advice to to get that. 00:43:40 Tom Another tip too is I'm kind of a jump in and see what happens person, but there's. 00:43:45 Tom A lot of good. 00:43:46 Tom Docs like like so he's been mentioning. So I would say if you're going to start read through all the Microsoft docs you can 1st and get a good handle on on the steps because they've done a pretty good job of outlining. 00:43:56 Tom The major things you need to watch. 00:43:57 Tom Out for and that will. 00:43:59 Tom Save you a little hardship, you know, we mentioned that once we ran the app, 90% of it was custom render stuff that we ran into the other 10% or maybe 20% was code. 00:44:09 Tom That I might. 00:44:10 Tom Created while I was doing the the app migration that didn't. 00:44:14 Tom Quite work correctly. 00:44:15 Tom Where we had one where the timers implementation was different and you can't stop a timer. So we had this timer that was running every millisecond forever and just killing our app. So stuff like that. Like if you're making changes before the app builds right, you're migrating code, making code changes, put a comment in there, or give yourself A to do somewhere. 00:44:36 Tom To look at that again because a lot of those didn't quite work the same as we thought because you couldn't really test it in that moment, right. You're you're going to be in this position where you don't have an app that builds for for several weeks potentially at a time, so. 00:44:48 Tom Depending on the size, so give yourself a note because chances are you might want to rethink that implementation later. 00:44:55 Matt Cool. And so, as we were talking, so iOS is done. And so I'd imagine Android is up next. And so how are you feeling about that time? 00:45:03 Tom Yeah, I'm pretty good. I'm. I'm interested to try the upgrade assistant again. Run that through the Android project. I think we've learned so much going to the iOS one that I am hoping it'll be a little more straightforward. 00:45:17 Tom You know the bulk of our code too is shared in that shared project. You know 8090% of it. So we've already got that migrated too. So I think the platform code on the Android side is is much smaller in comparison to. So I'm optimistic. I'm an, I'm an optimistic person though too. So that can sometimes be a problem. Don't ask me for time. 00:45:39 Matt Another reason to start early only take 5 days. 00:45:41 Tom Yeah, totally. I mean. 00:45:43 Tom Yeah, but it's been a great learning experience too. You know, sometimes people are worried about, well, when when's the right time to jump in? 00:45:48 Tom Here and I would say I would say go for it. 00:45:50 Matt Sweetie, how are you feeling about the Android migration? 00:45:54 Sweeky Ohh in my head it's done so I think I'm just waiting on Tom to just be like, yeah, look, this is the app running but no like like Tom like Tom mentioned the portable code was like the biggest the portable project was the biggest step. That's how something works and that's how he works so. 00:46:10 Sweeky With that out of the way, honestly, I don't think he's going to have as bad of a time as it was with iOS and like he said, the platform code is. 00:46:18 Sweeky That much, and now we know exactly what to look for. The build onion to expect, which renderers he may have to look look out for. So I think it's going to be a much, much smoother process and the documentation like has been improving, the tooling has been improving in this whole process. So it's just been easier and easier through the process. So yeah, I think it's going to be a great experience for. 00:46:40 Tom Yeah. One thing that's been really delightful too is just to to see some of the multi controls come a little bit further like I cannot tell you how much custom renderer and effect code we have written over the last six years to put a drop shadow exactly where we want and to follow around the corner. It is unbelievable and I just deleted all that stuff. 00:47:00 Tom A couple weeks ago, because now we can add a drop shadow to any visual element, I mean ohh. Amazing. Like don't tell our designers cause they're gonna jump all over this but but like that isn't really cool to find too. 00:47:11 Matt That's great. So Tom or sweetie, anything more to add before we wrap? 00:47:14 Speaker 3 What's up? 00:47:15 Sweeky No, I'm. I think this whole, I think I hope everyone's got to learn as much as Tom and I did in this. 00:47:21 Sweeky Process. Yeah, just keep a lookout for the docs and let us know how our great assistant is doing for you. And Yep, start early. I agree with Tom and Yep, look out. Look and look in GitHub. 00:47:35 Sweeky Look for docs, there's plenty of resources now. You should be able to like get started, get 90 or even 100% of the way. I think today with your migrations. 00:47:46 Tom Yeah, I think just you know. 00:47:48 Tom The only advice I. 00:47:49 Tom Can give are our logistics, you know the technology piece of it is is really not that that too difficult once you once you figure out a couple of solutions for. 00:47:57 Tom Some tricky problems. 00:47:57 Tom But I would say, you know, once you go through the migration, you're gonna have lots of to do items that that pop up. I would say make sure you have a good list or put those in, you know your. 00:48:07 Tom Card system or whatever to go back to later and that can help other people. 00:48:12 Tom On the project, get involved to. 00:48:13 Tom Jump in on those two items because you will definitely forget about them. And then the last thing too is there are certain areas that you will change or maybe you'll reimplement something like for instance. 00:48:24 Tom Make sure and write down areas that QA needs to test. Specifically, we're pretty close to having a build for our QA team and they need to test certain areas. 00:48:33 Tom That we have. 00:48:33 Tom Changed. So we want to make sure that. 00:48:35 Tom They know what to test, so they can. 00:48:36 Tom Accurately, you know, give us. 00:48:38 Tom Reports and great bugs on other items. We want to clean. 00:48:41 Tom Up before, after lease. 00:48:43 Matt Right on. Well, sweetie and Tom, thank you so much for showing or telling us all about the upgrade that you went through. I mean, it's really great for all our listeners and know about this too. And and this invaluable, invaluable knowledge. So. And with that said, I'd love for everybody to subscribe to the.net Maui podcast. 00:49:03 Matt Did you guys know that we are on Spotify? You do now. So Spotify, iTunes, wherever you can get your podcast subscribe, listen. And with that said, this is the. 00:49:14 Matt Net Maui podcast.