Speaker 1: How'd you like to listen to dot net rocks with
Speaker 1: no ads? Easy? Become a patron for just five dollars
Speaker 1: a month. You get access to a private RSS feed
Speaker 1: where all the shows have no ads. Twenty dollars a month,
Speaker 1: we'll get you that and a special dot net Rocks
Speaker 1: patron mug. Sign up now at patreon dot dot NetRocks
Speaker 1: dot com. Hey guess what it's dot net Rocks twenty
Speaker 1: twenty five edition. I'm Carl Franklin, I'm Richard Campbell. Happy
Speaker 1: New Year everybody, and what's how did you? How'd you
Speaker 1: do your New Year's?
Speaker 2: We did New Year's up on the coast because we
Speaker 2: went down to the city for Christmas, right, spend time
Speaker 2: with the girls. The youngest is pregnant, so called the
Speaker 2: baby bump. Christmas very nice and uh, and then New
Speaker 2: Year's we came back up. I had a party in
Speaker 2: the boathouse with a little mixing of the worlds. You know,
Speaker 2: we're building friendship groups up on the coast, so a
Speaker 2: few of those couples showed up and a few from
Speaker 2: back on the mainland.
Speaker 1: And yeah, I saw the pictures on Facebook. Looked a
Speaker 1: lot of fun. Yeah, you know, the best thing you
Speaker 1: can hope for in the new year. Belly laughs, like
Speaker 1: laughing so hard you're crying. That's what we did overde
Speaker 1: That's great. Yeah, awesome. Well we just had a quiet
Speaker 1: New Year's here. It was nice, you know, just the fam.
Speaker 1: It's always good. Yeah. So let's start this show with
Speaker 1: a better know of framework, which is interestingly about last year.
Speaker 2: Roll the music. Interesting, man, what do you got?
Speaker 1: It's a video by the Visual Studio team our favorite
Speaker 1: new visual studio features of twenty twenty four. So they
Speaker 1: took a look at all the things that were added
Speaker 1: a visual studio in twenty twenty a lot.
Speaker 2: Yeah, right, Like it's constant.
Speaker 1: Yeah, And you know, if you're like most of us,
Speaker 1: you don't know about these new features until somebody says, hey,
Speaker 1: you know Scott Hanselman says, hey, do.
Speaker 2: You know this?
Speaker 1: Yeah, and then you look it up.
Speaker 2: People make whole talks about this, just showing features in
Speaker 2: studio you didn't know about because it's just so darn
Speaker 2: many of them. Right.
Speaker 1: Yeah. It's because the word of coding, hasn't it the
Speaker 1: Microsoft word?
Speaker 2: Yeah?
Speaker 1: Yeah, Well, anyway, it's a good video and if you
Speaker 1: have how long is it? Well, Anyway, it's a good
Speaker 1: video and if you got about twenty minutes to kill
Speaker 1: check it out. It's good stuff. So that's what I got.
Speaker 1: Know it, learn it, love it. Who's talking to is?
Speaker 2: Richard grabbed a comment of a show nineteen sixteen then
Speaker 2: when we recorded with our friend Rendel called how simple
Speaker 2: is as simple as possible? Yeah? And another friend of ours,
Speaker 2: Richard ra Chima, also known as codeputer, had a good
Speaker 2: comment here, mostly about Blazer, where he said simplicity and
Speaker 2: web application development it's not a simple conversation Blazer server
Speaker 2: and transitioning to WASM is also not simple. So why
Speaker 2: are we doing web app development anyway? App distribution to
Speaker 2: maintenance is why we wanted it. Web apps over the
Speaker 2: client side app installs. Yeah, definitely always running the current version,
Speaker 2: don't need to deploy running in a sandbox like there's
Speaker 2: good things makes sense. Yeah, So we leveraged the distribution
Speaker 2: model of the browser and then got busy building apps,
Speaker 2: this time without easy acts to what we had before
Speaker 2: the mistley client side resources. Nothing that fifteen megs of
Speaker 2: JavaScript can't fix with a sprinkless CSS to really challenge
Speaker 2: that street.
Speaker 1: He's our age too, so he's talking experience here.
Speaker 2: Chris Love would have words with you. Oh yes, So
Speaker 2: let's take application development, make the super puke it all
Speaker 2: into a browser box and give it a solid stir
Speaker 2: for fun, while dumping in new app features or ingredients,
Speaker 2: more JavaScript frameworks and such as the goodness and all
Speaker 2: the joy of distribution. HTML was never supposed to be
Speaker 2: used as a U as a user experience interface for
Speaker 2: application development amidst the formatting and presentation of electronic documents.
Speaker 2: It was about scientific papers with iperlinking.
Speaker 1: Right.
Speaker 2: Then there's Blazer server. Let's not worry about WASM for
Speaker 2: a now, just about using the server environment to create
Speaker 2: HTML documents that are rented. A browser does not even
Speaker 2: need a page refresh, It builds the page. Choosing marshal
Speaker 2: or components. Click in the browser is meaning less without
Speaker 2: the context of where it happened. A keystroke has the
Speaker 2: same requirements in both cases. The event requires context. That
Speaker 2: is simple. HTML is simple, but stupid. Why are we
Speaker 2: making it more complicated? Somebody says server overload. Server load
Speaker 2: for service side rendering using cloud resources not the same
Speaker 2: as a web farmer's service. True applications never used servers
Speaker 2: that use service is provided by servers. Your application needs
Speaker 2: hosting resources from the cloud. Why are we thinking about servers?
Speaker 2: And once again, Blazer server framework is nothing more than
Speaker 2: moving the context of the client side event and exposing
Speaker 2: that in the context of the application. Mix it an
Speaker 2: application code, update the component of the dock, and render
Speaker 2: just tailored bytes back to the document being viewed in
Speaker 2: the client. It's nice, simple and with a minimal byte
Speaker 2: count to transport. And that's my definition of web simplicity. Yeah,
Speaker 2: I can't argue that. Shame we make such a messment.
Speaker 1: I've seen the light.
Speaker 2: Yeah, he's trying to anyway. Yeah, i'd rich thanks so
Speaker 2: much for your comment. I'd send you a copy of
Speaker 2: music Code by but you got one. Yeah.
Speaker 1: He's going to be a guest in a couple of
Speaker 1: weeks at fall as well.
Speaker 2: And he's going to be a guest to shortly too,
Speaker 2: so we'll be here from anyway. I'll tease them the more.
Speaker 1: Yeah, very good.
Speaker 2: And if you'd like a copy of music Code, I
Speaker 2: write a comment on the website at dot NetRocks dot
Speaker 2: com or on the facebooks. We publish every show there, and
Speaker 2: if you comment there and I read it on the show,
Speaker 2: we'll send your copy. Music code by.
Speaker 1: And music to code by, of course, is a series
Speaker 1: of twenty four minute twenty five minute music pieces that
Speaker 1: you can listen to while you code that helps you
Speaker 1: focus and keep you from getting distracted. And if you
Speaker 1: want to pay for it, it's at music tocode by
Speaker 1: dot net. Also, you could get a copy by sending
Speaker 1: us a message on the social media's other than facebooks.
Speaker 1: We've been on ex Twitter for the longest time. We're
Speaker 1: also on masted On and Blue Sky and some variation
Speaker 1: at Carl Franklin and at rich Campbell.
Speaker 2: Right right, yeah, blue Sky seems to have all the
Speaker 2: action these days. Man, Like I realized I was. I
Speaker 2: was scrolling through Blue Sky today and it looks so
Speaker 2: much like the old Twitter. I forgot I was on
Speaker 2: blues guy.
Speaker 1: Yeah, except it's not dumb.
Speaker 2: Well, it's kind of the like the old Twitter.
Speaker 1: Yeah yeah, all right, let's bring on our guests. Nathan Westfall.
Speaker 1: He is a senior no history. Oh you know what
Speaker 1: I so, here's the thing I looked at nineteen thirty
Speaker 1: five in the history and it's so jam packed, like
Speaker 1: we can't even cover it all. But maybe I'll ask
Speaker 1: you Richard what is your.
Speaker 2: I only pick one thing, you know me, I'm gonna
Speaker 2: pick one thing. Yeah, and the one thing is James
Speaker 2: Chadwick's proof that the neutron exists.
Speaker 1: How amazing.
Speaker 2: Yeah, well think about this. That's nineteen thirty five and
Speaker 2: within ten years the first atomic bomb would go off. Yeah,
Speaker 2: and you need neutrons like that's how fast?
Speaker 1: Yeah, So it's amazing the things that happened in this
Speaker 1: relatively short time period. It was just explosive.
Speaker 2: Yeah, literally in so many different ways, right like between
Speaker 2: between the Great Depression, the rise of fascism, the explosion
Speaker 2: into World War two, like that was a tumultuous ten
Speaker 2: plus years and it just happened to be doing shows
Speaker 2: in those show numbers right now.
Speaker 1: And a byproduct was a lot of innovation, a by
Speaker 1: product of the war and all of that stuff.
Speaker 2: Yeah. Well, for better or worse, the military spends a
Speaker 2: lot and a lot of that funding was military.
Speaker 1: Highway system because of the military fifties in America.
Speaker 2: We got a little time yet for that. Yeah, it'll
Speaker 2: be later this year.
Speaker 3: Yeah, yeah.
Speaker 2: Yeah.
Speaker 1: Still, it was Eisenhower's idea because he wanted mobility. Yeah,
Speaker 1: all right, enough of that. Yeah, that's coming, Let's bring
Speaker 1: on Nathan Westfall. As I started to say before, he
Speaker 1: is a senior software engineering manager at Tyler Technologies, leading
Speaker 1: the Cloud operations and mobile development team for student transportation.
Speaker 1: He started development journey with Php and Ruby on rails,
Speaker 1: but fell in love with the dot net ecosystem once
Speaker 1: leaving college early for his first job outside development. You
Speaker 1: can find him mixing audio at your local bar or
Speaker 1: fishing on a frozen lake. One of those things.
Speaker 2: I do all the time.
Speaker 1: I wonder which one it's not fishing.
Speaker 4: Welcome, Yeah, thanks for having me.
Speaker 1: So you've been listening to the show for a while,
Speaker 1: you said.
Speaker 4: I have been. Yeah. Yeah, kind of the way I
Speaker 4: learn is podcast everything else, and you guys are fun
Speaker 4: to listen to, So that's good. It's kind of as
Speaker 4: Richard was saying earlier. It's nice to now see how
Speaker 4: the sausage is made.
Speaker 1: So yeah, well it's good to have you at the table.
Speaker 1: Nice past the sausage.
Speaker 2: So what have you been working on, Nathan.
Speaker 4: Yeah, so Tyler Technologies. What I work on in student
Speaker 4: transportation is you know a yellow school bus you see
Speaker 4: on the road in the US and Canada. You know,
Speaker 4: we interact with so we're in one of every four
Speaker 4: school districts uses Tyler system. And the app that I
Speaker 4: here to talk about is the public facing app, so
Speaker 4: the one that any parent who has a kid on
Speaker 4: the bus that we integrate with can use called myrid
Speaker 4: K twelve And it's an app that we rewrote earlier
Speaker 4: last year, so in the beginning of twenty twenty four
Speaker 4: it started to roll out, and it is a Blazer
Speaker 4: Maui hybrid application works on web iOS, Android, and it
Speaker 4: is much Blazer as you could possibly imagine shoved into
Speaker 4: this app to have it run at scale and everything else.
Speaker 1: I've already got a man crush on you. Man that
Speaker 1: is that is you're speaking my language here.
Speaker 2: What was it before it was Blazer?
Speaker 4: Yeah, good question. So it was examinant Forms. The original
Speaker 4: version of this app actually came out a couple months
Speaker 4: after dot net one, so dot net Core one was released.
Speaker 4: That's how early we were to dot net core and
Speaker 4: everything else. And what we learned early on was I
Speaker 4: can do examer reforms pretty well. But then when I
Speaker 4: have to make those same features on web in dot
Speaker 4: net core and Angular JS at the time, my feature
Speaker 4: drift became insane, right. It kind of became worse and
Speaker 4: worse over time to try to do something in forms
Speaker 4: for iOS, maybe something a little different for Android, and
Speaker 4: then also then change languages entirely for Web. So we
Speaker 4: got the opportunity to rewrite it in twenty twenty three,
Speaker 4: released in twenty twenty four, and went full blazer, so
Speaker 4: we could share about ninety five percent of our code
Speaker 4: between iOS, Android, Web is all the same.
Speaker 1: That's fantastic.
Speaker 2: Yeah. What also means you battle through the tough times
Speaker 2: at zamorin too, right, because that was oh yeah, those
Speaker 2: were early bits.
Speaker 4: Yeah, correct, Yeah, when I even used examined it before
Speaker 4: I joined Tyler, when Microsoft had only had acquired it,
Speaker 4: like very very recently. So I mean I've been using
Speaker 4: examined for almost as long as it's been help.
Speaker 2: Yeah.
Speaker 1: We I thought it was going to be a lot
Speaker 1: smoother ride than it actually turned out to be. I
Speaker 1: was so excited when when Zamoran you know, came on
Speaker 1: the scene. Yeah, and the promise of jam forms and
Speaker 1: all that stuff was just amazing and then just just
Speaker 1: warm me down.
Speaker 2: Sorry, yeah, Well, and I wrestle with is it the
Speaker 2: problem with the tool learning? Is it just a problem
Speaker 2: with building mobile apps like this separation between working on
Speaker 2: a machine different from the day app with the app
Speaker 2: environment like that, cycle's just hard and it's diverse like that,
Speaker 2: that combination just doesn't matter what the tools are. It's
Speaker 2: a battle compared to any other.
Speaker 1: It is, and whether the tools keep you up to
Speaker 1: date or you have to keep up to date, you're
Speaker 1: always going to end up doing some kind of tweaking
Speaker 1: on one platform you're not doing on the other. And
Speaker 1: that's why I think the road that you took, which
Speaker 1: is Blazer Hybrid, gets rid of all that because the
Speaker 1: cross platform this is done in the browser, which is
Speaker 1: had many many years to go to get its cross
Speaker 1: platform story done, and it's there.
Speaker 4: No, I'm with you. I think the biggest part of
Speaker 4: Exhibit Forms that was tough is even that you had
Speaker 4: all this shared code and c sharp code at the time.
Speaker 4: I'm fighting iOS at the time, you know, releases were
Speaker 4: in June. Android was later in the year. I'd have
Speaker 4: to update all my Android dependencies just so forms would
Speaker 4: work right. And to your point, Karl, if I'm just
Speaker 4: using a browser which I know will render my CSS
Speaker 4: the same way, my dependency is just shrunk. And you know,
Speaker 4: so small.
Speaker 1: So yeah, so if you can do a web app
Speaker 1: in Blazer, you can do a mobile app in Blazer, right, yep,
Speaker 1: that's what it comes down to.
Speaker 4: And we're testing it both because we even went the
Speaker 4: whole route. We're not using Blazer server at all. We
Speaker 4: went full web assembly. Yeah, I went the full If
Speaker 4: I don't have to host the server, why would I? So, yeah,
Speaker 4: sure that's what we're doing. Yeah.
Speaker 2: Well, and you've got a I mean, it's not really
Speaker 2: public facing app in the sense that it is a
Speaker 2: known set of users. It's parents of students, but it's
Speaker 2: still a lot like the server load on that. I
Speaker 2: think Blazer server makes a lot of sense with an
Speaker 2: internal app with a certain number of employees done. Yeah,
Speaker 2: to make that public facing it's really hazardous.
Speaker 4: Yeah, yeah, And our traffic's really predictable, right, Like we
Speaker 4: can see different time zones come online because buses normally
Speaker 4: roll in the same morning the same time East Coast
Speaker 4: and then Central and then west.
Speaker 2: Right, right, you know when it's going to be busy. Right.
Speaker 4: Parents are going to check the f twice a day,
Speaker 4: when their kids going to school and when their kids
Speaker 4: coming home, and everyone's doing it at the same time.
Speaker 2: Almost, so aren't you then making an argument in favor
Speaker 2: of server sign.
Speaker 4: Ah kind of you know, but the costs at the
Speaker 4: end of the day for web assembly to support all
Speaker 4: of this is I have we're partnered with AWS here
Speaker 4: at Tyler, so we're using dot net on AWS. But
Speaker 4: the whole web server for hundreds of thousands of parents
Speaker 4: is an S three bucket and then a CDN and
Speaker 4: I'm done.
Speaker 2: That's it.
Speaker 4: That's all I got.
Speaker 1: Yeah, that's great.
Speaker 2: Nice.
Speaker 1: So I got to ask, what are you using for authentication?
Speaker 4: Cognito Actually, huh, tell.
Speaker 1: Me about Cognito.
Speaker 4: Yeah, so Cognito. We we're going back and forth what
Speaker 4: we should use. There's a whole bunch of obviously authentication
Speaker 4: providers you can use Cognito. We just wanted to stay
Speaker 4: within the Amazon ecosystem because we don't have huge requirements
Speaker 4: for authentication. They have a nice portal for users self registering,
Speaker 4: which is our big use case. It's not like we
Speaker 4: create these accounts for parents. They can self register and
Speaker 4: give us the option to do social logins down the road. So,
Speaker 4: you know, we're over six hundred and fifty thousand users
Speaker 4: that have been created in Cognito, and then even so
Speaker 4: Cognitio create a nice pipeline because we were not in
Speaker 4: cognito common examinineforms and they let you actually in real time,
Speaker 4: So once a user tries to log in for the
Speaker 4: first time, we can migrate those users in real time.
Speaker 4: So no password change, no nothing.
Speaker 2: If you're going to run on AWS, you should use
Speaker 2: AWS as authenticator, just the same way that if you're
Speaker 2: going to run on Azure you should be using Azure AD, right.
Speaker 4: Like, yeah, I'm a big fan of peeping it together.
Speaker 2: Yeah yeah, yeah, it's just not worth the pain. Yeah, Like,
Speaker 2: it's very challenging to build a unified authentication strategy across clouds,
Speaker 2: fighting that a lot, right.
Speaker 1: And so I imagine that all the credentials are kept
Speaker 1: out of your reach, Yeah, so that you don't you're
Speaker 1: not liable for you know, break ins or anything like that.
Speaker 4: Correct, which is another big benefit. We used to host
Speaker 4: it ourselves with dot Net's identity server and handled all
Speaker 4: that and that's all gone now and all everyone got
Speaker 4: migrated over and again that real time is nice because
Speaker 4: you can use landa when they log in, Oh, this
Speaker 4: user doesn't exist, let me check your existing user store
Speaker 4: and the user never had to change their password. It
Speaker 4: just moves right over and that's great. Nice starts working.
Speaker 2: So you did that, very nice migration. They never knew
Speaker 2: you changed authentication strategies. Doesn't matter.
Speaker 4: Yeah, no idea.
Speaker 2: Then and then one day nobody's hitting that identity server anymore.
Speaker 2: You can turn it off one day.
Speaker 4: Correct, Well that was I had the pleasure of a
Speaker 4: couple of months ago finally turning everything off, and it
Speaker 4: felt so nice to go through and web servers off,
Speaker 4: APIs off, everything got shut down.
Speaker 2: Why do we feel good when we turn stuff off?
Speaker 4: It's like calming, right, Yeah, No, it's.
Speaker 1: The money goes back into your wallet, reversing the flow
Speaker 1: of money.
Speaker 2: It's also it's also an end of pain, right, Like,
Speaker 2: that's weary. It's not going to hurt you anymore because
Speaker 2: it's the stuff.
Speaker 4: I know. There was a there's a brief period where
Speaker 4: we were rewriting it, and I always hated getting a
Speaker 4: you know, an issue come through and I'm like, I
Speaker 4: got to open examin forms again and I got to
Speaker 4: go through and fix this. And after using Blazer for
Speaker 4: so long, rewriting it's it was hard to go back.
Speaker 2: Oh yeah, wandering back in his zamm reforms like walking
Speaker 2: into a dark forest. Yeah, I remember why I left
Speaker 2: this place. I appreciate that.
Speaker 1: I it's on my list of things to do to
Speaker 1: open up uh MAUI in dot net nine and take
Speaker 1: a good hard look at it.
Speaker 2: Again.
Speaker 1: I don't because ever since I found you know, the
Speaker 1: Blazer hybrid MEI hybrid stuff, I'm I just don't. I
Speaker 1: haven't gone back.
Speaker 4: Yeah, basically, so yeah, we've done. We've done a few
Speaker 4: to play around with it, but I every time I
Speaker 4: do it field and need of like I could just
Speaker 4: do this and blaze and I'm used to it and
Speaker 4: it's works just as good.
Speaker 2: Right yeah, yeah, well yeah, if you're getting the results,
Speaker 2: if the customer is happy, which is parents, which are
Speaker 2: who are never happy, then you're doing all right right right.
Speaker 4: Yeah, you can definitely say that again.
Speaker 2: So yes, yeah, yeah, don't mess with it.
Speaker 1: And how many users did you say you had?
Speaker 4: We currently have over six hundred and fifty thousand uh
Speaker 4: registered in our active counts daily active counts prett high
Speaker 4: on the top of that.
Speaker 2: So wow, you do not want to do tech support
Speaker 2: for six hundred fifty thousand people. That's not good. No,
Speaker 2: they got to be all self service, They got it,
Speaker 2: but also they don't care. They just want to know
Speaker 2: where the kid is.
Speaker 4: Correct, which is a whole other set of problems that
Speaker 4: we had to do in a way that's helping both
Speaker 4: the district, who is really our customer, right, The school
Speaker 4: district is the one that uses our technology.
Speaker 2: Those the ones you're paying you, right, But.
Speaker 4: They're servicing the parents, and we also have to serve
Speaker 4: the parents and the district. So how do I explain
Speaker 4: to the parent, hey, this bus is out of commission, right,
Speaker 4: and this is why you can't see where your kid is, right,
Speaker 4: and solving all these problems to someone who's not in
Speaker 4: the operation of school busing, right, making them not come
Speaker 4: back at us. Obviously, we want to protect our operatings
Speaker 4: as much as possible and be like, hey, your app's
Speaker 4: not working, But at the end of the day, it's
Speaker 4: you know, your bus didn't drive today because it's a holiday.
Speaker 4: True story, right.
Speaker 1: So is that what your app does primarily as track buses?
Speaker 4: Yeah, so it does two different things. So you can
Speaker 4: find your kids' schedule all through self registration. So if
Speaker 4: I had my kid was in elementary school, I could
Speaker 4: register them to the app and see, hey, the bus
Speaker 4: is going to pick them up at this corner every
Speaker 4: Monday through Friday at eight twenty in the morning. This
Speaker 4: is my driver's name and what bus is coming. And
Speaker 4: then if the district allows it and has the capability,
Speaker 4: you can actually see when your bus is coming in
Speaker 4: your real time. You get notifications kind of like Huber
Speaker 4: if your bus is about to arrive, it's five minutes away,
Speaker 4: it's running late, and kind of provides that experience. So
Speaker 4: parents can just really quickly say, I mean, it was
Speaker 4: a cold day up here in New York. I was
Speaker 4: outside and realize how windy it was. I would hate
Speaker 4: if I had to go stand at the bus stop
Speaker 4: for twenty minutes hoping the bus would show up. No,
Speaker 4: it's nice if I can get that notification just walk outside.
Speaker 1: What about kids fourteen and older, Let's say, can they
Speaker 1: use the app as well?
Speaker 4: They technically can. We obviously try to restrict it as
Speaker 4: much as possible as it's meant for the parent, But
Speaker 4: there's parents have the ability to share that information with
Speaker 4: any other account, right, so they can even say, hey,
Speaker 4: for the day, the babysitter can have it to make
Speaker 4: sure that my kid gets off the bus.
Speaker 1: Nice the kid wouldn't necessarily be waiting at the bus
Speaker 1: and it's late and be able to flip up the
Speaker 1: app and say, oh, yeah it's ten minutes late.
Speaker 4: Yeah, we have some kids that do it, but primarily
Speaker 4: it's the older kids are kind of left on their own.
Speaker 4: As you know as a parent, they kind of you're
Speaker 4: becoming more of an adult. It's a lot of kids
Speaker 4: in elementary school, right, because even in some states, depending
Speaker 4: on your age, you have to be at the stop
Speaker 4: for the kids to get dropped off. True, so I
Speaker 4: don't want to wait outside.
Speaker 1: Plus there's the Kappa thing, right, Yes, the Kapa against
Speaker 1: kids using software. If you were going to allow kids
Speaker 1: I think it's fourteen and younger or under fourteen.
Speaker 4: Yeah, it's somewhere like that. Thirteen fourteen, Yeah.
Speaker 1: Thirteen and under, if you're going to allow them to
Speaker 1: use it.
Speaker 2: Not that there's any sensitive information here, it's the location
Speaker 2: of a bus.
Speaker 1: Yeah, you'd have to go through hoops yet that Yeah, And.
Speaker 2: We happen to be recording this when there was a
Speaker 2: pretty big snowfall through central US. So I got to
Speaker 2: think that impacts bus as a whole bunch. And that's
Speaker 2: when everybody's going to be hammering on the app, like,
Speaker 2: have we seen the maps?
Speaker 4: Correct?
Speaker 2: He's the bus running?
Speaker 4: Is it?
Speaker 2: Is it moving?
Speaker 1: Have you seen the maps? Like this white band all
Speaker 1: the way through the Midwest from the from the west
Speaker 1: coast to the east coast. Unbelievable. Yeah, quite a piece
Speaker 1: of weather anyway.
Speaker 2: So do you present it as a map or is
Speaker 2: it just a table of this is the bus, this
Speaker 2: is where it'll be?
Speaker 1: Yeah?
Speaker 4: No, good question time. So it's it's all configured by
Speaker 4: the district because different districts have different policies. And you know,
Speaker 4: some districts have a policy where they don't want to
Speaker 4: show the parents the bus just don't it's about to
Speaker 4: arrive soon because they don't want angry parents getting in
Speaker 4: their car and chasing the bus down because they miss
Speaker 4: their kid and so on and so forth. Right, But
Speaker 4: if they allow everything, Yeah, you can see your bus
Speaker 4: on a map. We use signal R to broadcast that
Speaker 4: information and then show it live within the app. You
Speaker 4: can interact with it, follow it in three D all
Speaker 4: this other fun stuff.
Speaker 2: Yeah. I like that. Yeah, I know that's yeah, so
Speaker 2: you can go but very that's very like uber esque
Speaker 2: in that sense. You can literally watch the vehicle emotion.
Speaker 2: But I can also see why certain districts would say,
Speaker 2: you know, that's probably a little too much information, that's
Speaker 2: a creepy Yes, exactly.
Speaker 4: You get both extremes. I want to see everything and
Speaker 4: I want to see nothing, right.
Speaker 2: Yeah.
Speaker 4: The Uber thing is is when we've been trying to
Speaker 4: deal with for a while. Because Uber is obviously great, right.
Speaker 4: I mean I've gone to the airport so many times
Speaker 4: and I go to a conference, I'll pull up Uber
Speaker 4: get where I need to go. But people don't quite
Speaker 4: understand all the time, is that Uber is nice because
Speaker 4: you as a driver, except that I'm carrying my one
Speaker 4: passenger somewhere else. While a school bus is if it's
Speaker 4: all configured properly, because the driver can't do any interaction
Speaker 4: while they're driving. They can't have a screen up, they
Speaker 4: can't have all this other technology that a taxi driver
Speaker 4: UBI driver can have. I can't just notify one parent.
Speaker 4: I have to notify sixty kids maybe and their families,
Speaker 4: and not also share where those fifty nine other kids
Speaker 4: also live, right? And how do I do that in
Speaker 4: a different way?
Speaker 1: Challenge?
Speaker 2: Yeah, No, it's great, and it's great. Question. It's like
Speaker 2: what's the right thing to do there?
Speaker 1: So you have let's count the clients. You have a
Speaker 1: web obviously and mobile. Do you also have Windows and
Speaker 1: Mac clients.
Speaker 4: We don't have Windows because actually all of the development team,
Speaker 4: including myself, we only run max. I do have it
Speaker 4: running on a Mac locally, though, because that's how I
Speaker 4: do development is mostly in the Mac.
Speaker 1: Right okay, because you're using the Mali hybrid model.
Speaker 4: Right, correct, there's nothing stopping us.
Speaker 1: It's more uh, nothing stopping you.
Speaker 4: Yeah, it's more because of you know, got to go
Speaker 4: through enterprise hoops. I don't want to fight that, yeah, exactly.
Speaker 1: I mean that comes back to Richard Rukima's point is
Speaker 1: that we love these mobile things because you can just
Speaker 1: pull them up, you get the latest version, you don't
Speaker 1: have to install them and ye WPF who needs it?
Speaker 1: For this guy?
Speaker 2: Apps that? Yeah? Yeah, that's you don't want to run
Speaker 2: WPF on now? That would be gosh.
Speaker 1: Did you also take a look at some of the
Speaker 1: other sort of you know, multi client frameworks out there
Speaker 1: before you decided on this or was it a natural
Speaker 1: progression because you were always using zamor and already.
Speaker 4: Yeah, it was obviously we were leaning this way. We
Speaker 4: were using Blazer already, Uh since what was it done
Speaker 4: in a core three three one depending on whethery're using
Speaker 4: web assembly or not, so we kind of were already
Speaker 4: familiar with Blazer. Tyler also has a internal UI library
Speaker 4: that we use, and of course it's web components only,
Speaker 4: so it's do I want to port that something else
Speaker 4: or keep using web We did look at things like
Speaker 4: Flutter and Ionic for a little while, but really we're
Speaker 4: a dot net shop through and through, even outside of
Speaker 4: mobile development, so it kind of just made sense for
Speaker 4: us to stick with dot net. And I've never had
Speaker 4: any issues with Blazer, which I know people have their
Speaker 4: opinions on necessarily using web assembly and all this other stuff,
Speaker 4: but it's at least I know what can be wrong,
Speaker 4: so it's familiar.
Speaker 2: Yeah, But I mean, MAUI was supposed to be the
Speaker 2: logical successor to zamorin forms like you are making a
Speaker 2: bigger leap here to jump over to Blazer.
Speaker 4: We are, and we definitely walked through that. So we've
Speaker 4: actually had two apps and we did them differently. So
Speaker 4: ride through sixty now known my ride K twelve, we
Speaker 4: did that whole Blazer rewrite, right, We took things in
Speaker 4: and forms through the way it did everything a blazer.
Speaker 4: We have another application called my Stuff, which is for
Speaker 4: a different application that we support kind of same functionality,
Speaker 4: but for a different on prem solution basically uh bus srouting.
Speaker 4: That one went from examer Informs to Maui. There was
Speaker 4: no blaze or anything we write. That one went through
Speaker 4: what Microsoft wants you to do with progressing straight over
Speaker 4: to Maui and it because of how that app operated.
Speaker 4: It didn't have anything overly complex. It wasn't difficult, but
Speaker 4: it definitely was not as easy as it is made
Speaker 4: out to be.
Speaker 2: Well, both products had their challenges, right, Yes, Yeah, and
Speaker 2: I would argue if you still had a Zamora Informs
Speaker 2: app today moving to Maui on done at nine, he's
Speaker 2: a heck how a lot less painful? Totally agree. Yeah,
Speaker 2: definitely if you jump when they wanted you to jump,
Speaker 2: you jumped into a pifle of glass like.
Speaker 4: Correct, correct? Yeah, we only did that migration from Forms
Speaker 4: to Maui within the past six months, right, so when
Speaker 4: all that stuff got worked out and learning curves and
Speaker 4: all that.
Speaker 2: Yeah, if you can wait, wait you it will. Yeah,
Speaker 2: it's a benefit without it's like, if your app's not
Speaker 2: currently on fire and people aren't going to kill you,
Speaker 2: you know, stay with what you got and let the
Speaker 2: bugs be worked up by somebody else.
Speaker 4: Yep.
Speaker 1: Well, and also you know, you don't really he's not
Speaker 1: really going from Maui to Blazer. He's using Blazer inside
Speaker 1: a Maui app, So so it is Maui Blazer essentially.
Speaker 1: But I was thinking of something like Avalonia. I mean,
Speaker 1: do you look at that?
Speaker 4: Oh yeah, yeah, and that we did look at too,
Speaker 4: So I think some confusion has a couple of libraries
Speaker 4: that we were looking at, and you know all those
Speaker 4: cross platform cross uh you know, whether it's Web or
Speaker 4: Maui UI frameworks, and again, what it what it came
Speaker 4: down to us was we wanted to stick with the
Speaker 4: UI components that here at Tyler Tech someone has built
Speaker 4: and they were all web components. So we were kind of, yeah,
Speaker 4: do we want to take that and replicate it somewhere
Speaker 4: else or do we just want to keep using web components.
Speaker 1: And it totally makes sense, as you said, because you know,
Speaker 1: the cross platform part is already done. Yeah, yeah, you're
Speaker 1: not worrying about this platform that.
Speaker 2: Plus you've got six hundred thousand users that are used
Speaker 2: to a look and feel correct. Don't mess with that.
Speaker 2: That's just cost for you. The more you mess with that,
Speaker 2: the more trouble you're going to get.
Speaker 4: Yeah, and we want to be good partners at Tyler. Right.
Speaker 4: So Tyler does everything public sector right, whether it be
Speaker 4: courts injustice or public safety or healthcare to student transportation.
Speaker 4: You know, there's bunches of apps that Tyler reproduces, and
Speaker 4: we want to make sure that if a parent happens
Speaker 4: to also be in a district where I can pay
Speaker 4: my electric bill through Tyler Tech, right, that that look
Speaker 4: and feels kind of the same.
Speaker 2: Oh interesting, Right, So literally you can have multiple products
Speaker 2: in this space and they're like, oh I know this already.
Speaker 4: Yep, Yeah, that's cool.
Speaker 2: That makes sense.
Speaker 1: All right, that sounds like a good place to take
Speaker 1: a break. We'll be right back after these very important messages.
Speaker 1: Did you know you can lift and shift your dot
Speaker 1: net framework apps to virtual machines in the cloud. Use
Speaker 1: the elastic beanstalk service to easily migrate to Amazon EC
Speaker 1: too with little or no changes. Find out more at
Speaker 1: aws dot Amazon dot com slash elastic beanstock and we're back.
Speaker 1: It's at Rocks. I'm Carl Franklin, It's Richard Campbell, hey,
Speaker 1: and that's Nathan Westfall and we're talking about his application
Speaker 1: hosting six hundred and fifty thousand plus users with an
Speaker 1: S three bucket and a CDN all in Blazer for
Speaker 1: mobile clients and for web and not looking back.
Speaker 4: Not at all, not at all, not at all.
Speaker 1: So no web forms here, no Windows forms, no WPF,
Speaker 1: no native client code for iOS or Andrew, you don't have.
Speaker 2: To deal with that.
Speaker 4: Yeah, definitely not UI native code. Right. So, I think
Speaker 4: the only things that we got stuck with, and I
Speaker 4: say stuck with, they were not major to begin with
Speaker 4: at all. But in terms of either you know, browser specific,
Speaker 4: iOS Android specific, you got push notifications.
Speaker 1: Yeah that's a problem, right, always.
Speaker 4: Right, push notifications and authentication actually had to have a
Speaker 4: nice little hack to get to work in all of
Speaker 4: them because we wanted to use what Blazer does for authentication.
Speaker 4: But how I log in auto mobile device is not
Speaker 4: going to be the same on the web. So how
Speaker 4: do I make sure I can still use Access Token Provider?
Speaker 4: How do I still use that on MAUI?
Speaker 1: So let's talk about push notifications. Yeah, so I'm not
Speaker 1: talking about signal ar can send you a message and say, hey,
Speaker 1: how you doing. We're talking about when your app is
Speaker 1: minimized and you're getting messages in the background and you
Speaker 1: want that number with a red circle with that number
Speaker 1: to increment that. That is not trivial to do and
Speaker 1: an Android. I figured out how to do it by
Speaker 1: doing an actual fore ground service that works as a
Speaker 1: background service. Yep, but that adds another service, and on
Speaker 1: iOS forget about it, like you have to, you know,
Speaker 1: draw three courts of blood and sign over your firstborn
Speaker 1: and right, and then they don't even have it for
Speaker 1: Blazer as far as I'm concerned. They didn't last time
Speaker 1: I checked. So how how on earth did you solve
Speaker 1: that problem?
Speaker 4: Yeah? So we this is I guess saying outside of
Speaker 4: the ecosystem. I know we talked about being inside of it,
Speaker 4: but we use ad your notification hub for push notifications.
Speaker 4: Part of the reason was because the older application Examined
Speaker 4: Forms already had it because it was Adure first, and
Speaker 4: we wanted to just keep the same system in case
Speaker 4: parents had both apps. Right, So it was a decision
Speaker 4: we made to just just keep it around.
Speaker 1: But how does that notification service interact with your dormant
Speaker 1: yes app.
Speaker 4: So we had to write code specific for Android and
Speaker 4: iOS to tie into both push notifications. So on Android
Speaker 4: it's firebased FCM now right, they officially retired GCM unfortunately,
Speaker 4: and then iOS is always messing with delegates and all
Speaker 4: this fun stuff that if it doesn't work how as
Speaker 4: you said, it doesn't work how the docs work, I'm
Speaker 4: kind of out of luck because it's not like I'm
Speaker 4: getting an help from Apple Lane time soon. So tie
Speaker 4: into both and just kind of have the native push
Speaker 4: unification system work. And then if they happen to click
Speaker 4: the application, you know, we're doing some things with session
Speaker 4: state too, kind of if Blazer then wants to detect
Speaker 4: that I have a message safe, then I can prompt
Speaker 4: that in a totally different way or manage it totally separate.
Speaker 2: Yeah. Wow, but now you're using notification AUPs like you
Speaker 2: now describing a cloud hybrid app too, because you're also
Speaker 2: using is three.
Speaker 4: Yes, yeah, a little bit of both on that one.
Speaker 2: Not complicated at all their data Imagine you have any problems? No, no,
Speaker 2: but no, I see how you got there. Totally makes sense, right,
Speaker 2: and there's nothing bad about notification apps they were.
Speaker 4: Yeah, I've honestly out of alved the Azure services. I've
Speaker 4: used them. We used to do Azure probably at this
Speaker 4: point seven years ago or so, right from everything that
Speaker 4: they have to offer, and I've never had any complaints
Speaker 4: iuthentification of it. It's honestly nice how easy it works
Speaker 4: from an API perspective. If I have to generate a notification,
Speaker 4: how to send it to them, and then how to
Speaker 4: managing devices, which I've had to do before in terms
Speaker 4: of my you know, P and S token on Apple
Speaker 4: and my fire based token on Android and which messages
Speaker 4: can you get and can't you get. I've written that
Speaker 4: code before to manage it, and I'd rather never do
Speaker 4: it again.
Speaker 3: So you also hint did a thing that I've talked
Speaker 3: to a bunch of mobile devs about, which is making
Speaker 3: sure the Android and iPhone versions are utterly in sync.
Speaker 2: Like if you had a parent's one with an iPhone
Speaker 2: more than an Android and the app was much different. Yeah,
Speaker 2: like that that, I'm surprised how upset people get. Yeah,
Speaker 2: why does iPhone have this and I don't have it
Speaker 2: on Android?
Speaker 4: Yeah, And for us, before Blazer was the web was
Speaker 4: incredibly honesting like, I can't emphasize how bad you could
Speaker 4: see your live busting on web because it was just
Speaker 4: it was never built, that never had priority of what
Speaker 4: was there. And now what's nice is because we have
Speaker 4: all of our shared code and a shared class library.
Speaker 4: If I have to add a new button, I'm putting
Speaker 4: it in one spot, I'm quickly testing all three devices
Speaker 4: and it's out to production right after that. You know,
Speaker 4: it's it's quick.
Speaker 2: And what are the three devices? iPhone, Android and browser browser? Okay, yeah, yeah?
Speaker 2: Do you do you much phone specific testing? Like do
Speaker 2: you care which iPhone or which Android device?
Speaker 4: We more sot Android because of the possibilities almost being endless, right.
Speaker 2: Yes, we recall it the drawer broken dreams for a reason.
Speaker 4: For for iOS, we only care really about the version
Speaker 4: of iOS that we support. I don't know if you know,
Speaker 4: but iOS had a breaking change between iOS seventeen and
Speaker 4: eighteen that impacted Mali Hybrid because of that IP address
Speaker 4: zero do zero do zero dot zero bug and they
Speaker 4: took that away, but Maui was using that to spin
Speaker 4: everything up, and you know that encouraged us to do
Speaker 4: more testing around that. But yeah, really, just always changes at.
Speaker 2: That point, well, and Apple is so insisted on getting
Speaker 2: into the latest version of iOS all the time, which
Speaker 2: is I think a little annoying for consumers but pretty
Speaker 2: good for devs.
Speaker 1: And it's good. It's good for consumers because security, you know,
Speaker 1: and fewer problems. Apple is still the most secure mobile
Speaker 1: platform there is because they own it top to bottom,
Speaker 1: and it's.
Speaker 2: Part of that. Part of that is enforcing homogeity. It's
Speaker 2: always the latest version. Yeah, yeah, and with you and
Speaker 2: it's certainly from a dev perspective if you're willing to
Speaker 2: jump through iOS hoops because they are iOS hoops, at
Speaker 2: least it's one os you more or less have to
Speaker 2: care about, correct. Yeah. But I've definitely talked to folks
Speaker 2: who they have to have a Pixel device, they have
Speaker 2: to have a Samsung device, yeah, you know, and then
Speaker 2: it gets questionable after that, like those are those are
Speaker 2: the two? And it's at that point you're like at
Speaker 2: seventy percent.
Speaker 4: Yeah, and foldables whole other.
Speaker 2: Yeah, you do you do foldable testing? Good? Lord? Really,
Speaker 2: I just held up a foldable nice.
Speaker 4: Yeah, only because our product owner has one, so he'll
Speaker 4: tell me immediately if something doesn't work.
Speaker 2: Because that's what he's testing on, so he cares about Yeah,
Speaker 2: well that's all that changes your media queries completely, right, Yeah,
Speaker 2: you have to change the rendering.
Speaker 4: Yeah, and some of it's nice in terms of most
Speaker 4: of the mobile devices kind of work immediately on tablets
Speaker 4: and larger screens because I'm writing the same code for
Speaker 4: web anyway. Right, we kind of have that mindset as
Speaker 4: a developer from dam one because all of my code
Speaker 4: for IYO with Sandre and the browser are coming from
Speaker 4: one spot. I'm already thinking about twenty device screen sizes
Speaker 4: as I'm going here, right, so you know, making sure
Speaker 4: that works, localization works, all this stuff is now up
Speaker 4: in the forefront of a developer instead of kind of sure.
Speaker 2: And they're absolutely iPad fanatics. Yes, if it's not perfect
Speaker 2: on the iPad, they lose their minds.
Speaker 4: Yes, yep.
Speaker 2: Yeah. So it's just that that issue continues to exist
Speaker 2: and it's not simple, like you really do think about
Speaker 2: how you make your UI in the different board screen
Speaker 2: constrained correct, much less tested.
Speaker 4: Yeah. No, we even on some of our differences between
Speaker 4: like mobile and web. Right, we might write a component
Speaker 4: that renders some UI content, but then we have other
Speaker 4: logic that's Hey, if you're in a browser over this size,
Speaker 4: I'm prompting it in a dialogue, as opposed to if
Speaker 4: it's on iOS, it's just a full screen new page
Speaker 4: and blazer for it to work. Right, And yeah, yeah,
Speaker 4: gets complicated, But.
Speaker 2: It sounds like you have a tooling team because you
Speaker 2: guys have multiple products, so it makes sense to have
Speaker 2: a tooling team that just worries about Okay, I'm going
Speaker 2: to make this new collecting text from the user interface.
Speaker 2: Here's how we'll render on an iPhone. Here's how it'll
Speaker 2: render on an iPad. Here's how it'll render on on
Speaker 2: pixel and so forth, like it's and how render on
Speaker 2: web like. You are making different versions and still make
Speaker 2: it look close to the same.
Speaker 4: Yeah, yeah, a lot of that's still on us in
Speaker 4: terms of how we want it to look. But the
Speaker 4: components are nice and effective. They all have accessibility in mind, right,
Speaker 4: they all have different screen sizes in mind and all
Speaker 4: that stuff, So how we use them. It's kind of
Speaker 4: hard to mess up, I'll put it that way, right,
Speaker 4: we can, but it is harder to mess up.
Speaker 1: Yeah, And you can test, right, you can test the
Speaker 1: mobile device just by shrinking the browser, right, right, and
Speaker 1: it's essentially what you do, you test the reactivity of it. Yep, Richard,
Speaker 1: do you remember when we used to do shows on
Speaker 1: mobile and the Tablet Show and all that stuff. Yeah,
Speaker 1: and we would always say, you know, what is the
Speaker 1: trade off between making your UI look like the platform UI,
Speaker 1: like iOS Android and looking like your branded thing? And
Speaker 1: it seems like people were more concerned back then about
Speaker 1: making an iOS app look like an iOS app and
Speaker 1: making an Android app look like an Android app. No,
Speaker 1: I just don't think that's such an issue, do you.
Speaker 2: I don't think I think you're right. I think Jobs
Speaker 2: was big on skemorphic design, and he wanted you know,
Speaker 2: there was always a threat they wouldn't let it go
Speaker 2: through the store if you didn't make it look like
Speaker 2: an iPhone app. Yeah, And so there was a time
Speaker 2: when that mattered. And then Facebook came along and said nope,
Speaker 2: Facebook looks like Facebook. Yeah, and some and then corporate
Speaker 2: internal You're like, no, it looks like corporate internal. Yeah.
Speaker 2: And I mean, and I do think Tyler falls into
Speaker 2: this category. You have a bunch of different apps and
Speaker 2: you see an advantage to a common look and feel. Absolutely,
Speaker 2: But I'm not going to let you go, Nathan on
Speaker 2: the whole accessibility thing. So do you spend some time
Speaker 2: on visually impaired or audible player, like how different folks
Speaker 2: can use this app?
Speaker 4: Yeah, we do. We Again, what's nice is a lot
Speaker 4: of the components kind of have support for that already, right,
Speaker 4: all the area labels and what's there the other pieces.
Speaker 4: Because we're on a whole bunch of buses across the
Speaker 4: US of Canada, we see laws coming out all the
Speaker 4: time that kind of require this, right Colorado, if you've
Speaker 4: worked with something in that state recently, you kind of
Speaker 4: know that they have this initiative right now that on
Speaker 4: June of this year, people are starting getting fined if
Speaker 4: it's not accessibility out of the box. Right, So we
Speaker 4: kind of have that in mind, knowing how public facing
Speaker 4: it can be and all that sort of stuff.
Speaker 2: And often public sector expected to be the forefront of that.
Speaker 4: You need to sell it first, yeah, correct, Right, the
Speaker 4: law comes from the government, the better the government better
Speaker 4: be compliant, right, So.
Speaker 2: Totally yeah, So and yeah, when you think about phones, like,
Speaker 2: there's a lot of different ways to do that. You
Speaker 2: could you could provide this whole interface as audio only,
Speaker 2: correct theory if you think it through properly.
Speaker 4: Yeah, And we've talked about that before. We're we were
Speaker 4: going through the app a couple months ago. We're like, yeah,
Speaker 4: you know, we can improve a few areas and really
Speaker 4: start and dial in some things in. What gets complicated
Speaker 4: is the map, Right, how do I open gl screen
Speaker 4: kind of explain what's going on? So we've talked about
Speaker 4: how we can kind of accomplish that.
Speaker 2: Yeah, I think you would. I mean in the end,
Speaker 2: if somebody else was operating that app on behalf of
Speaker 2: somebody and describing what was going on, they don't be
Speaker 2: that precise. It's like, yeah, the bus is in motion,
Speaker 2: it is this far away from the stop is expected
Speaker 2: at this time? Correct?
Speaker 4: Yeah, And it's it's kind of how we want to
Speaker 4: see how far we can go with. It's kind of
Speaker 4: what we're starting to play around with, right, because I
Speaker 4: might have a kid in sixth grade and a kid
Speaker 4: in tenth grade, and one's going to the middle school,
Speaker 4: one's going to the high school. How do I explain
Speaker 4: now both buses and the relationship to where I am
Speaker 4: and where they're going.
Speaker 2: Yeah, that's actually I think it'd be a really cool project.
Speaker 2: That'd be really fun. It's like, how do I do
Speaker 2: this well where people are wowed? Yeah? Yeah, I kind
Speaker 2: of like the idea of using that interface because the
Speaker 2: parent is driving and does want to know where their
Speaker 2: kid is and you don't want to take their eyes right, Like,
Speaker 2: can I pump this through bluetooth and tell you safely? Yep? Yeah,
Speaker 2: the bus is fine, Yep, it's good.
Speaker 4: Yeah. We have some experience in this already because another app,
Speaker 4: this one's examined because it's only for Indurid, but we
Speaker 4: actually put tablets on school buses, and once the tablet
Speaker 4: goes on a school bus, a lot of them, I say,
Speaker 4: a fair amount of states have the rule where the
Speaker 4: screen just has to be black when the bus is
Speaker 4: in motion, So we are almost audio only from this
Speaker 4: point on right, how far away am I from my stop?
Speaker 4: Where am I taking my directions? So we basically a
Speaker 4: lot of our testing is done with just the screen
Speaker 4: off and how well can you understand what's going on
Speaker 4: with it being completely blocked out?
Speaker 1: That's really cool?
Speaker 2: Yeah, and have some great user acceptions testing to just
Speaker 2: watch what does a driver need in motion from my app?
Speaker 2: What will make them the most benefit?
Speaker 1: Did you actually go around with drivers, not you personally,
Speaker 1: but somebody in the company go around with drivers and
Speaker 1: get their feedback.
Speaker 4: I actually did, and there's some people in the DEB
Speaker 4: team that did so. I before I was a manager.
Speaker 4: I was actually one of the lead devs on that project,
Speaker 4: and I went across the US riding buses with you know,
Speaker 4: all sorts of kids on different districts, and you know,
Speaker 4: got to see it firsthand and how it can both impact.
Speaker 4: But how my mind is, I don't know. I think
Speaker 4: did the right thing putting a developer on a bus,
Speaker 4: because now all of a sudden, I think of twenty
Speaker 4: more problems I have to fix, seeing like what can happen.
Speaker 2: Right, I've always been a big fan of this putting
Speaker 2: putting the developer into the position of the user. Yeah,
Speaker 2: because they do come away with exactly that. Oh I've
Speaker 2: seen how they actually use this, and we've been thinking
Speaker 2: about this entirely wrong.
Speaker 4: Yep, yep.
Speaker 2: It's powerful and it also connects up like we can
Speaker 2: get really abstracted from our software. Yes, like when you
Speaker 2: see it in the field helping people, it's pretty powerful.
Speaker 4: Yeah. No, it's great to see the kind of the
Speaker 4: impact you can make, right, I mean I did not realize.
Speaker 4: I you tell people, before I worked at Tyler, I
Speaker 4: did not think this much about school buses. I started
Speaker 4: working at Tyler when I was when I was twenty,
Speaker 4: so I was only in a school bus two years
Speaker 4: before this, and I still did not think of a
Speaker 4: school bus as much as I do.
Speaker 2: That you were more school bus savvy than most. Yeah, right,
Speaker 2: that's really funny. That's cool. Yeah, it's one of those truths.
Speaker 2: Like the great thing is when we do this kind
Speaker 2: of tech, right, it's it's almost invisible. Yeah. Yeah, you
Speaker 2: know the fact that they know you have to sort
Speaker 2: of have a moment ago. Wow, I whipped out my
Speaker 2: phone and it told me where my kid was. Yes,
Speaker 2: you know, it's seconds, including dealing with all you know,
Speaker 2: it's a it's a heavy snow day, but no, the
Speaker 2: bus is in motion and fine, yep, that's what you
Speaker 2: wanted to know, right, And that's really thinking about all
Speaker 2: the pieces that had to work together to make to
Speaker 2: give you a good answer. It just was impossible that going.
Speaker 1: Back to the notifications thing, if what kind of notifications
Speaker 1: do you have? Obviously, like if the bus breaks down,
Speaker 1: side of the road, accident, whatever.
Speaker 4: Yeah, so we support a whole bunch. So there's a
Speaker 4: couple of them are actually integrated directly with the tablet, which,
Speaker 4: again talking about saving computing resources, it's the tablet on
Speaker 4: the bus with the district's local map and where the
Speaker 4: bus currently is, where they're going next. Is the one
Speaker 4: doing all those ETA calculations. Right, here's the ten parents.
Speaker 4: I need to notify that I'm about to be at
Speaker 4: their stop, because I, as a driver, said it's my
Speaker 4: next one, and I got three more turns to make.
Speaker 4: So that's awesome, right, the tablets doing all the work
Speaker 4: for the mobile device.
Speaker 2: Yeah, the nice little localized service there, it's the best
Speaker 2: position to know. The workload's not more than a tablet
Speaker 2: can handle.
Speaker 1: It's well, I imagineflove bus breaks down. There's could be a
Speaker 1: there could be a marriad of reasons that you won't know.
Speaker 1: So the driver can type into the tablet. I'm sure
Speaker 1: ran out of gas in a tree, dog, you know,
Speaker 1: hit a deer or whatever.
Speaker 2: Yeah.
Speaker 4: Yeah, now they can let dispatch. No dispatch can let
Speaker 4: x number of parents know whether they based off the
Speaker 4: bus or even you know, we track how far along
Speaker 4: the buses and the route, so I only need to
Speaker 4: notify parents after said stuff. Right, I've made it halfway
Speaker 4: through and now I can tell the other half. We're
Speaker 4: working on next, and I'm interested to see how we
Speaker 4: can do this with Maui. But we're working on doing
Speaker 4: those live activities. Right. So if you've ever done an
Speaker 4: uber and you can kind of see live update, it's
Speaker 4: not quite a push notification, right, it's one of those
Speaker 4: live tracker ones. We're trying to play around with that
Speaker 4: to see how far we can take it. Where if
Speaker 4: you don't even have to open the app and now
Speaker 4: you're fully functioning off push notifications, that's kind of awesome, right,
Speaker 4: I kind of have less resources on my side and
Speaker 4: you're getting this up to date information without even opening
Speaker 4: the app.
Speaker 2: Right.
Speaker 1: You takes coordinates and stream them to a service somewhere
Speaker 1: and pick them up on the client, yeah.
Speaker 2: Yep, just to be able to say, tell me when
Speaker 2: they're ten minutes out, yep, I can get there on time.
Speaker 2: That's clever. And again that would actually save resources and
Speaker 2: not leading on the app all the time. You're wasting
Speaker 2: anybody's time that way.
Speaker 4: Correct. If I can get everything from that live activity,
Speaker 4: it's all technically feeding from that tablet device and then
Speaker 4: they never open the app. I mean, I'm like, we're
Speaker 4: not checking anything, right, it's all coming directly from the
Speaker 4: bus YEP.
Speaker 2: All right, what have we talked about on this app?
Speaker 2: What is your testing strategy? Like? What tools are you
Speaker 2: using when you when you do a bill?
Speaker 4: Yeah? Good question. So we do fare money unit testing.
Speaker 4: Our API is also in dot net, So that's all
Speaker 4: unit tested with X unit because all of our UI
Speaker 4: could have shared. We're using b unit to test as
Speaker 4: much as we can, right, So as much as I
Speaker 4: can test in terms of rendering or business logic I
Speaker 4: might have on the client side, testing that kind of
Speaker 4: like I would an API, right, And then we also
Speaker 4: use browser stack to kind of run into end tests
Speaker 4: on here, right, So launching a couple of devices, making
Speaker 4: sure they can do X number of user functions? Right?
Speaker 4: Can I add my student? Can I load the bus?
Speaker 4: Can I create a new account? All that sort of
Speaker 4: stuff on number of devices and let us know. So
Speaker 4: we don't have obviously coverage everywhere. I don't think anyone
Speaker 4: ever does anymore. Just development moves so quick it's hard.
Speaker 4: But those unit tests, especially the unit knowing that I
Speaker 4: can kind of have the same rendering and the same
Speaker 4: functionality really quickly. Is good to see.
Speaker 2: Absolutely, it's great. Anything you don't mean the same mistake
Speaker 2: again and again make new mistakes correct. It's enough testing
Speaker 2: in place to capture the last mistake so it doesn't
Speaker 2: happen again.
Speaker 4: Correct. Yeah, we tried to raise many tests upfront, but
Speaker 4: we have a policy here where if you get a
Speaker 4: bug or something client reported, it has to get fixed
Speaker 4: with the unit test. Right, It's always that regression case.
Speaker 2: Yeah, first make a test that fails, then fix it
Speaker 2: and the test doesn't fail. Now it's actually fixed exactly.
Speaker 1: Yeah, we love the unit, love the gal Yep, just
Speaker 1: good stuff.
Speaker 4: It's a great product. Yeah.
Speaker 2: Well, and also I try I appreciate you not fixating
Speaker 2: on test coverage. Is that it is its own kind
Speaker 2: of crazy.
Speaker 4: Yeah. If you were trying to shoot fround percent test
Speaker 4: coverage and it's kind of you're never going to get
Speaker 4: it right. Yeah. So the nice thing that developers can
Speaker 4: understand is we give them all the tools and they're
Speaker 4: able to do it upfront, because sometimes it is faster.
Speaker 4: If I'm building an API service and I don't want
Speaker 4: to keep trying to mock all this data from the tablet. Yes,
Speaker 4: I'm going to write a unit test because I can
Speaker 4: grab something that's usable and keep integrating over it. And
Speaker 4: then the simple requirement of just if you're fixing a bug,
Speaker 4: you have to write a test to something that people
Speaker 4: can kind of swallow.
Speaker 2: And those auld end up being the best tests anyway. Yeah,
Speaker 2: they were ones with a bug that made it to
Speaker 2: the field and you wrote and the testing for it
Speaker 2: is more complicated than you think. You would never write
Speaker 2: that test out of your head just considering it. So
Speaker 2: you write this better test and then you know, go
Speaker 2: through that process and fix it and maybe it never
Speaker 2: ever hits it again, but at least you won't have
Speaker 2: that problem.
Speaker 4: You do mocking, We do, yes, well, we do mocking
Speaker 4: because a lot of this data comes from our main application,
Speaker 4: student transportation, right, and I don't want to have that
Speaker 4: running for this, so we mock a lot of the
Speaker 4: database and kind of just core data.
Speaker 2: Right.
Speaker 4: So the way this app works is a lot of
Speaker 4: it's read only anyway, parents not really obviously updating their
Speaker 4: location for the bus and all that. So we kind
Speaker 4: of can get away with a little more mocking than
Speaker 4: you might be able to.
Speaker 1: So you have like bogus services that run and send
Speaker 1: mock data that kind of thing.
Speaker 4: Yeah, yeah, bogus services we use. I forget that. I
Speaker 4: think it's called test containers. So even some of our
Speaker 4: implementations with redtis and how we you know, not kill
Speaker 4: our services by having one hundred thousand parents watch buses? Right,
Speaker 4: how do we kind of scale that efficiently? We can
Speaker 4: kind to do that cool mocking it, Yeah.
Speaker 2: And a lot of it, I think a lot of
Speaker 2: Just because you've got a dozen parents want one bus
Speaker 2: doesn't meaning you can catch that once. It's also correct,
Speaker 2: very granular.
Speaker 1: Yea, sounds like a fantastic, very successful product.
Speaker 4: I appreciate it's It's been a fun one to work on.
Speaker 4: I I selfishly like, uh like being involved in this project.
Speaker 4: It was a really fun one for me to work
Speaker 4: on the team, to work on you know, kind of
Speaker 4: even development kind of picking this up from what we
Speaker 4: do day on to work on this. Everyone's kind of
Speaker 4: enjoyed the dev life cycle more than anything else. Right,
Speaker 4: It's kind of easy to get going. We had someone
Speaker 4: start a month ago and they were making fixes in
Speaker 4: the app a couple of days later. Right, it was
Speaker 4: just easy to pick up.
Speaker 2: That's a great metric. How many days to productivity for
Speaker 2: a new worker. Yeah, great metric.
Speaker 1: Well, Nathan, what's next for you? What's in your inbox?
Speaker 4: More Blazer? So this has been this has been a
Speaker 4: little test for us, and it's been successful enough where
Speaker 4: we've got a few more around the corner that we're
Speaker 4: working on. And I hope that, you know, dot net
Speaker 4: kind of sees the benefit of Blazer as we get
Speaker 4: more and more to this space and keeps dumping time
Speaker 4: and energy into it, so hopefully I'll keep using as
Speaker 4: long as I keep working here.
Speaker 2: So that's great.
Speaker 1: Well, thanks for sharing the story with us, and congratulations.
Speaker 4: Yeah, thanks for having me. It was fun being able
Speaker 4: to talk to you guys and kind of share what
Speaker 4: we did right here. You talk about Blazer all the
Speaker 4: time at dot net rocks, so I wanted to be like, oh,
Speaker 4: I got a story for that.
Speaker 1: He'll love you certainly, all right, Thanks again, and we'll
Speaker 1: see you next time on dot net rocks. Dot net
Speaker 1: Rocks is brought to you by Franklin's Net and produced
Speaker 1: by Pop Studios, a full service audio, video and post
Speaker 1: production facility located physically in New London, Connecticut, and of
Speaker 1: course in the cloud online at pwop dot com.
Speaker 5: Visit our website at d O T N E t
Speaker 5: R O c k S dot com for RSS feeds, downloads,
Speaker 5: mobile apps, comments, and access to the full archives going
Speaker 5: back to show number one, recorded in September two.
Speaker 2: Thousand and two.
Speaker 5: And make sure you check out our sponsors. They keep
Speaker 5: us in business. Now, go write some code, See you
Speaker 5: next time.
Speaker 4: You got jam Vans
Speaker 2: And