Elm Town

Elm Town 60 – Productivity and the culture of moving a little bit slower

Episode Summary

Wolfgang Schuster shares his journey with Elm, describes writing & deleting Elm code at Vendr, and explains the productivity gains in an ecosystem that values building things for the end user.

Episode Notes

Wolfgang Schuster shares his journey with Elm, describes writing & deleting Elm code at Vendr, and explains the productivity gains in an ecosystem that values building things for the end user.

Thanks to our sponsor, Logistically. Email: elmtown@logisticallyinc.com.

Music by Jesse Moore.

Recording date: 2023.05.02


Show notes

[00:00:22] Sponsored by Logistically

[00:01:02] Introducing Wolfgang Schuster

[00:02:55] Seeing Elm everywhere

[00:04:45] Going all-in on programming

[00:10:23] "Just make it work"

[00:13:18] Discovering Elm

[00:25:27] Helping to build stuff with Elm while at Square

[00:28:39] Strategies for introducing Elm

[00:35:09] Productivity & "the culture of moving a little bit slower"

[00:41:09] Introducing elm-review rules

[00:54:20] Elm at Vendr

[00:58:09] Using Elm at scale

[01:03:43] Strategies for adding web components

[01:07:29] Roc

[01:10:49] Picks

Wolfgang's picks

Jared's picks

Episode Transcription

[00:00:00] Wolfgang: Working in Elm, I'm just like heads down on features the entire time. I look up and I'm like, oh, four hours have passed and all I've done is feature work. Well, I guess that's a successful day. Like

[00:00:11] Jared: Hey folks. Welcome back to Elm Town. I'm your host, Jared M Smith. We'll be visiting with Wolfgang Schuster today talking about working at Vendr, his journey to Elm...

[00:00:22] Sponsored by Logistically

[00:00:22] Jared: But first, let's talk about our sponsor, Logistically. At Logistically, we make intuitive software for the logistics industry to help logistics professionals make better decisions and spend less time on manual tasks from quoting to tracking. Our transportation management system helps squeeze every drop of efficiency from logistics teams of all sizes.

[00:00:44] Logistically pays me to record Elm Town episodes, as well as pays for our production and hosting costs. We build the front end for all new features in Elm. If you're interested in our mission and enjoy writing Elm, please drop us a line, elmtown@logisticallyinc.com. I'll put a link in the show notes.

[00:01:02] Introducing Wolfgang Schuster

[00:01:02] Jared: Now, Wolfgang. He's a Senior Software Engineer at Vendr. You may recognize him as @wolfadex on Elm Slack, where he regularly helps folks. Some of his Elm contributions include being the author and curator of the Elm Weekly newsletter. He has published three game related packages, elm-ecs, elm-text-adventure, and tiler. He's also published elm-open-api. These are all under the wolfadex prefix, and some more. He occasionally talks about Elm on his blog, Wolfgang's Musings. Wolfgang, welcome to Elm. Town.

[00:01:42] Wolfgang: Thank you for having me, Jared.

[00:01:45] Jared: Yeah thanks for coming. So tell me, how did you get started in computing?

[00:01:51] Wolfgang: Uh, computing, kind of by accident actually. In high school, my senior year I had an open slot for a class. I was gonna take work study cuz I was working a full-time restaurant job at, around then. And I couldn't because I was also driving my brother to and from school, so I had to fill it with something.

[00:02:16] I knew this teacher, uh, Mr. O, awesome guy, really liked sitting around in his classes. He taught like this AP Java class and I would sit in, during homeroom, I'd go down to the computer lab and do, uh, CAD stuff. Uh, make chessboards, make mes, whatever I could in CAD. And I just like hanging out around his classes.

[00:02:40] I'm like, oh, I'll take a class with him. What's this VB 6 class thing? What's this program you think I'll take that? And, uh, kind of just happened from there. Kind of got obsessed.

[00:02:54] Jared: Okay. Yeah.

[00:02:55] Seeing Elm everywhere

[00:02:55] Jared: And so I was looking back at your LinkedIn history and you mentioned working at a restaurant. Was this the one, what was it? I feel like Elm was in the name.

[00:03:04] Wolfgang: Uh, coincidentally, yes, a complete with, uh, El Elm Grove Inn, no longer exists. Uh, little like family owned restaurant, uh near where I grew up, so, yeah. good times though.

[00:03:20] Jared: Well, you know how it is with Elm, we, uh, can't help but notice it in everything. Right. So,

[00:03:29] Wolfgang: It happens more often than you would imagine for me.

[00:03:32] Jared: yeah. Well, I remember also there was the, uh, corner of Elm. Was it Elm Street and Haskell? Uh, there's a picture of it.

[00:03:41] Uh,

[00:03:42] Wolfgang: I live in Chicago and we were, my wife and I were walking and she goes, oh, Elm Street, we should move to the street. And I'm like, I don't know if I can do like all, like my entire life be surrounded by Elm. I didn't say that out loud.

[00:03:56] I'm just like, oh, I don't know if I can take any more Elm. And she's like, what, what's wrong with that? And going on and came to realize that she was thinking Freddie Krueger from the horror movies. Cause she loves horror movies and I was thinking Elm the language. And so we were on just totally different trajectories there.

[00:04:16] Jared: Oh, that's hilarious. Yeah. Yeah, so the, uh, the photo that I'm talking about is the intersection of Elm and Haskell, and it was posted by heyakyra. So I think you can now, uh, get that via Wikimedia Commons. So I'll put a link in that to that in the show notes.

[00:04:36] Wolfgang: Yeah.

[00:04:37] Jared: yeah. Okay. So you found this teacher who inspired you and, and you were sitting in learning, uh, Java.

[00:04:45] Going all-in on programming

[00:04:45] Jared: At what point were you like, okay, this is what I want to do with the rest of my life versus this is just something I'm playing around with?

[00:04:53] Wolfgang: That took me a while longer. So that was, I was senior of high school, graduated high school, kind of knew I wanted to do something engineering, um, I would say through most high school. I didn't know what, uh, exactly, but I j I knew I liked putting things together. Um, I liked building things so I, I kind of, I, I went to community college for programming related things for about a year, then took some time off, then, uh, made some friends who were still in college and hanging out with them.

[00:05:31] I was like, oh, I really want to get back into college. Like, I think I, like, I want to do more than what I'm doing right now. One of my friends was trying to get into games journalism at the time, and I was still really obsessed with this idea of making games. I just liked playing games. I liked making them like, I want to do more of this.

[00:05:52] And through him, I met some game developers at a couple studios and they were like, go get your four year computer science degree. And I was like, okay, I'm gonna go do that. Um, so that was, I think I was around like 21, 22 at that time then. So I'd been, I'd been out of college for a couple ish years at that point.

[00:06:16] Yeah. I was like, yeah, I'm, I'm gonna go programming. Like this is what I need to do to make games.

[00:06:22] Jared: Okay. So you went all in at that point.

[00:06:25] Wolfgang: Yeah. I, uh, dropped out of my job. I had no job for a couple of months. Went back to college full-time. Coincidentally, met my wife that way. She helped me. Uh, yeah. Yeah. Uh, it was, it was a quick, like it was a wild like three, four years I want to say something like that. Yeah,

[00:06:47] Jared: Wow.

[00:06:47] Okay.

[00:06:48] Wolfgang: yeah.

[00:06:50] I could talk forever about just that even too,

[00:06:53] Jared: yeah. So I wanna talk a little bit more about. That about your education and what you learned at the university. I know your intention was to go into building games, right? But you are now not building games. So, you know, was it something that you learned where you thought, okay, I can do anything with programming and I'll be happy?

[00:07:18] Or was it just this is where you found work?

[00:07:22] Wolfgang: Initially, it was where I found work. I think it was the second year back in college I got an internship for coincidentally, a logistics company. So that is where I got my, like start in software was logistics. That was a company that no longer exists. They've gotten, bought out two or three times since then.

[00:07:43] And, uh, so I was working there, kind of enjoyed it. It was a little bit more, uh, formal of a place, a little bit more old school-ish compared to say, a startup. And I was like, okay, I'm doing this thing. I was still, at that time, I was still very much into games. I, uh, was also kind of spending my spare time, I won't say working necessarily, but spending a lot of time with this startup indie games studio, uh, called Digital Iris based outta Milwaukee and they ended up getting a contract with Oculus. This was like shortly after Oculus got bought by Facebook and through the owner of the studio, like he had some connections. So he got this contract and he is like, Hey, you want to come do this contract for a couple months? My wife was like, Wolfgang, you, you love games?

[00:08:36] Like this could be your in. I'm like, I don't know. It's really risky to like quit my job right now, like, do I do it? And we're like, no, we're just gonna go for it. Like, we're gonna make it work. I quit my internship. I did the contract work for like a month or two and I mean, it was a ton of fun.

[00:08:54] Came out of that and I was like, okay, now I need to find a job. Like I have a couple months saved up now, need to find a job. And that was when I ended up at Corvisa basically. And I was there for a few months or so, and then school was about to start back up and I, I went and talked to him like. You know, I'm working here full time, but I don't have a degree.

[00:09:15] You know, should I be going back to school? What are you expecting of me? And they're like, no, we don't care. I'm like, like, really? They're like, yeah, yeah, you're doing a good job. I'm like, okay, I guess this is what I'm doing now. Um, yeah. And it just kind of happened from there. I think, I think I realized after a while that like, I just enjoy building things.

[00:09:37] Games are fun, but really it's the building things for other people is what kind of drives me.

[00:09:44] Jared: Excellent. Yeah. And so to go back to Digital Iris, when you were making this Oculus, uh, or doing this Oculus-related contract, what technologies did you use for that project?

[00:09:57] Wolfgang: Uh, that was all Unity. I think they've had C and uh, JavaScript, like scripting language as well. Um, I think that was post Boo script, which was their, like, I wanna say their PHP-like scripting language that they had for a while. Yeah, so C#, a lot of C#, a lot of Unity. I was writing a lot of Unity around that time.

[00:10:21] Uh, yeah.

[00:10:23] "Just make it work"

[00:10:23] Jared: So yeah, that seems like an interesting place to cut your teeth from the, the things that I've heard about, uh, that environment, it's, it's really scrappy. It's really, you know, just get things done any way you can. Did you feel like there was a difference in that culture versus coming then to a, you know, I guess I, I don't know about Corvisa.

[00:10:45] Maybe we should talk about that a little bit, but, um, maybe a difference from there in other places you've worked.

[00:10:51] Wolfgang: Uh, no, no. I mean, growing up like my, both my parents were, my dad was very much in into engineering type things like. Uh, so he was building his, he been working on and off on his own house for a couple decades now, but at one time he built a crane inside of his house to lift the logs up because it's a log cabin.

[00:11:14] So that's like, that's what I grew up with. Was that type of engineering mentality of just make it work. Um, I would say my mom instilled a lot of the same, like just make it work type mentality in me. And so like restaurant shops, same thing. It's get the work done, get the plates out, get the food out, get the people served.

[00:11:36] Going into software, it was, for me, it was very much the same, like figure out how to make it work. Pre-college, like post high school a little bit in there, I was learning like C, C++ through a friend and through videos I could find online and anything I could grab, um, So then yeah, that's, that's how I got into Unity then.

[00:11:59] And like C# was like, I don't know what it is, but I'm gonna learn it cuz that's how I use Unity and that's how I make a game and that's what I want to do. Corvisa, same thing. Startups. Like, I kind of knew JavaScript from, from my logistics company internship, but I didn't like, that was the first time I learned Node was that interview process.

[00:12:20] I'm like, they want me to write an app in Node. Okay, what's this time to learn it?

[00:12:27] Jared: Right on. Yeah. Well, that's really interesting. And yeah, having a, a crane in the house, that sounds like an engineering, uh, challenge in itself. Uh, so

[00:12:41] Wolfgang: Yeah.

[00:12:41] Jared: uh, what was that like having that there? I mean, were you around that? I mean, obviously you, you

[00:12:49] Wolfgang: Not too much. No. Uh, I, I'd come and visit on, on weekends sometimes and living in one house, and then while he's building the cabin, seeing the crane sticking up. And as logs were going up, every time I'd come visit, it was, you know, another, like two or four feet of logs that he had placed. So eventually the trusses and everything.

[00:13:11] So it was more, it was more like step-by-step for me at that time. But,

[00:13:15] Jared: Yeah. That's really cool.

[00:13:18] Discovering Elm

[00:13:18] Jared: Okay, so this what we're talking about, Digital Iris and then Corvisa. At this point, you had not discovered Elm yet. I take it.

[00:13:29] Wolfgang: Uh, so Corvisa is actually where I learned about Elm. I had a, a friend from there, Sean, who was really big into functional programming, and he introduced me to Haskell and to Elm. And, uh, so every, every day I remember for a while cuz we sat right next to each other and every day for a while it'd be him sending me this, oh, check out this cool thing in Haskell, or, oh, check out this cool functional programming thing.

[00:13:56] Um, and so I tried, I like, I really tried learning Haskell for a long time. I think it ended up taking me a good four years to finally grasp what I was doing in Haskell. But Elm, like, I tried it a little bit at the time. I was like, oh, this is interesting. I don't know what to do with it right now. Cause I'm still, I I was, that was still at the point where I was like, okay, I've just dropped out of college, what am I doing?

[00:14:21] Jared: Sure.

[00:14:22] Wolfgang: So Elm was still just kind of this weird other front endy thing and I was like, okay, cool. So that was where I was introduced to it. I didn't end up coming back to it until 2018. So that was, I think around. 2015, I want to say, was when I was first introduced to it, and I ended up coming back to it about three-ish years later when I was like, Hey, I need some frontend thing.

[00:14:49] What's out there? What's, what's going on right now in the front end world?

[00:14:53] Jared: Right on. Okay. And so you had remembered Elm and, and kinda came back to it. Where were you at at this point? Were you still at Corvisa?

[00:15:02] Wolfgang: Uh, no. So after Corvisa, I went to, uh, Northwestern Mutual. I was there for about a year doing React with them. Uh, and then I made my way out to Denver. We were, we were trying to move and found a job out there at a company called Four Winds Interactive. That is where I, I kind of started to get back into Elm again.

[00:15:26] Um, I'd been doing React for a few years at that point, and I'm like, okay, this is cool. What else? You know, what else, where did this inspiration come from? I like learning about things that are adjacent to whatever I'm doing. So Elm kind of came back in again and it was like, it shared a lot of things with, with React, with, like, Redux for example, was slightly based off of Elm.

[00:15:49] I'm like, okay, why? Why is it based off of Elm? What is Elm doing? And, uh, yeah, just kind of went from there.

[00:15:57] Jared: Oh, cool. So yeah, do you mind to explain how Redux is inspired by Elm?

[00:16:03] Wolfgang: Sure. Redux is kind of like the update portion of Elm. So when you're writing your mo, your, your model, your view, your update, your init, all that in Elm, Redux is basically the update portion. Takes your state, your model, uh, some action as it would've been called in, in Redux or Msg in Elm and you compute a new, a new state, um, possibly side effects or whatever else is going on there as well.

[00:16:33] Jared: Okay. And I don't know much about it, but, so then I'll just ask some questions.

[00:16:38] A question about Redux. What would be , the similarity in regards to, like you said, there could be side effects. So was there an intention to try to reduce those side effects? I feel like I remember hearing something about that.

[00:16:54] Wolfgang: There have been, I know there are like Elm styled Redux packages or Redux implementations or layers, to give you that like managed effect type of experience that Elm provides.

[00:17:11] That's not the core part of Redux, though. Redux is really more about that unit directional data flow. So in Elm how you have, you have your update and your view. And your view fires a message off or relays a message to update. Update computes a new state, gives it to view and that cycle just repeats over and over again.

[00:17:34] Redux is that component to a React app say, or whatever. It gives you your new state. Your state generates a new view in React, React fires off in action, goes back into Redux, and you get that unidirectional flow.

[00:17:51] Jared: Okay, so at this point you had sort of rediscovered Elm through Redux, and then what did you do then? I mean, did you have something that you felt like Elm was solving a problem for you, or was it more of just, oh, this is really interesting. I'm just gonna kind of keep pulling at that and see what that thread, unfurls.

[00:18:16] Wolfgang: Yeah, I, I very much started as my hobby projects. I'm always starting and very rarely finishing hobby projects and for, for a long time it was React, for me, React. I had been writing it at work, so it was very easy for me to pick up at home. And as I was learning Elm, it just was so much easier for me to go in and get something spun up and working the first time.

[00:18:46] And so I just all, it slowly transitioned of like a hundred percent react at home to 90 to 80. Before you knew it, I wasn't writing any React at home anymore. And so at work I was like, this is really weird that like, I've been so into this tool and I, when I have a choice, I don't use it. That I don't pick up this tool anymore.

[00:19:12] Why is that? And seeing, trying to figure out like, okay, can I use Elm at work? Would it make sense at work? So I did kind of use it at work, uh, at Four Winds. I never got to finish that project, unfortunately. I did. I ended up leaving Four Winds, uh, before the project was finished. Slight tangent.

[00:19:33] They had, they do digital signage. Uh, so if you're at like a fast food place in the menu boards or you fly through an airport and you see some sign those types of digital signage, and they had one version of that that ran on TVs, that was web apps distributed all over the world. Doesn't matter where you live, there's a chance you've run into their, their signage and it was all jQuery and CSS and HTML and state, like stored in CSS

[00:20:08] styles or CSS class names. It was quite a project to work on.

[00:20:12] Jared: Interesting.

[00:20:13] Wolfgang: okay, we need to, we need to do something to, to make this more manageable. It's, it's very challenging for one to two people to manage and that just shouldn't happen.

[00:20:22] Jared: Yeah. That's not going to scale well if it, you're already facing those challenges.

[00:20:27] Wolfgang: Yeah, it was, I mean, it was an amazing project and at the same time it was so frustrating some days. But yeah, so we started a rewrite in Elm. Yeah, that's, that's, that was the first time I got to experience Elm, like production wise at a, at a company. And then that kind of led into my next job, which was Square.

[00:20:48] I was there for two and a half years. Uh, I did not get to write, I was not on a team writing Elm there, but I did help a team who was writing Elm for a little bit. I kind of like consulted with them, I guess you could say here and there. Uh, over those two and a half years?

[00:21:03] Jared: okay.

[00:21:05] Wolfgang: Yeah.

[00:21:06] Jared: So I wanna go back to something I want. I'm gonna ask you about that again. So let's keep that square

[00:21:11] uh, in mind. But I wanna go back because you said that Elm. Was something that you felt like was helping you to solve this challenge of kinda maintaining and, and kind of wrangling, uh, this, this project at Four Winds, right.

[00:21:27] Um, or at least that was the, the intention. You didn't get to finish that. You also said something that I thought was interesting. You said Elm was easier for me, or something along those lines. What exactly was it that you felt like made it easier?

[00:21:43] Wolfgang: I think it's two things. Uh, one is definitely the error messages. I struggle a lot reading dense pieces of text. Logs is a great example. I hate reading logs. I absolutely despise reading logs in any programming environment whatsoever. To me it's like, it's just a giant wall of text and my, my eyes struggle to sift through the text for the important parts.

[00:22:09] So Elm's error messages was a breath of fresh air, I guess, in terms of like, oh, it's well spaced. It's highlighting exactly what's important, so it's telling me what's important, not me having to figure out what's important. And then the other part was that having spent so many years in JavaScript, like I started, went back at the logistics company.

[00:22:32] I started with ExtJS, which most people at this point don't remember or have never even heard of. Uh, and after that I was doing some jQuery, I was doing, what else was there? There was React. I did a little bit of Ember at that time. I, I think I had tried out Angular on my own quite a bit back, like AngularJS, I think it's called now, Angular 1.

[00:22:56] Basically. Uh, I was there around when Angular 2 was coming out and I noticed this reoccurring pattern of just how challenging it is to maintain Java large code basis of JavaScript, like. 300, 400,000 line plus code bases of JavaScript. No company I've worked at has been able to do it well. They always end up falling behind always.

[00:23:22] There's always like 20 packages that are, you know, at least a minor version behind another five that are a couple major versions behind. And I tried to keep up with it, but I never could. And so coming to Elm, I was like, oh, cool. It's easy to keep things updated. That's one thing I just never have to worry about.

[00:23:46] Now, my code base is how challenging that is in JavaScript. I'm like, cool. I don't want to have to think about that ever.

[00:23:55] Jared: Yeah.

[00:23:56] Wolfgang: yeah. Yeah.

[00:23:57] Jared: Yeah. That was one of the things that when I first discovered Elm that I honed in on, it was enforced semantic versioning. I was like, oh, okay. I have had some serious challenges trying to enforce that, not with just with front end projects, but also with Node JS projects. I remember one time I was working on a project where it was, uh, deployed to production and we, we had some issue and we couldn't figure out what it was.

[00:24:28] You know, we ran through testing, no issues. I think this was before there was a package lock, so it had bumped like a, a, you know, just a, maybe a minor version. I don't know, maybe it's just a patch version. And we ended up going through, it's like, okay, you take these 150,000, you know, packages, I'll the next 150,000, that's an exaggeration.

[00:24:52] But it was a lot of packages we were going through trying to figure out, okay, where, where has this changed and, you know, how do we get back to it? And we were on a crunch because now it was deployed to production and we needed

[00:25:04] to, to get back to working. So yeah, that was something that definitely, helped me understand one of the benefits of Elm.

[00:25:12] And then later on I didn't realize just how powerful that was when you combine it with the type system and the compiler and you know, all the guarantees that, that come with that. So, yeah, that, that makes a lot of sense. So, so you feel like Elm was easier and.

[00:25:27] Helping to build stuff with Elm while at Square

[00:25:27] Jared: Then you helped a team at Square that was building something with Elm, but you were not on that team.

[00:25:36] Were you still doing a lot of side projects with Elm at that point, or,

[00:25:41] Wolfgang: Yeah, pretty much always. I always have. I always have some, I always, I would say I probably have three or four that I'm working on at once usually. Um, yeah. So yeah. Yeah, I was still writing a lot of Elm on the side. Trying to think of what, anything in particular, that was, that was around the time. I helped Dillon pair on a web component thing to wrap the Square payment system, so they could be used in an Elm app cuz this was like right at the beginning of the pandemic.

[00:26:20] I was new at Square, I had no clue what I was doing there yet cuz I'd only been there for like a month. And Dillon was talking about, Dillon Kearns, um, was talking about, uh, building this, this payment thing to help out far a farmer's market in his area. And so I was like, yeah, I mean, I know Elm and I have resources at Square.

[00:26:40] I'll see what I can figure out.

[00:26:43] Jared: Oh yeah, that's right. I remember seeing that, that project. Okay, so you helped him with that, and you were also helping folks at Square. What, what do you feel like was your role in helping them on their project?

[00:26:59] Wolfgang: I was kind of like a, "Hey, we have a question and we're not quite comfortable going to the Elm Slack to ask it" type stuff. So a little bit of that. I introduced, uh, elm-review for them. There was also coincidentally, yes, yes. Always more, always need more elm-review, always need more.

[00:27:24] Jared: love elm-review.

[00:27:26] Shout out to Jeroen.

[00:27:27] Wolfgang: oh, yes, yes.

[00:27:29] And so at Four Winds and at Square, uh, coincidentally, both were trying to, or both were using AWS, the AWS SDK and JavaScript, and then needed to somehow combine that with Elm. That is challenging. Uh, the, the SDK has gotten a lot better in the years, but at that time it did a lot of, uh, this based stuff.

[00:28:01] Um, uh, a lot of references to this within the SDK. So if you, if you're familiar with this in JavaScript, it's the, the way it was wrapping in functions, it expected everything to exist in JavaScript. In the SDK itself, you are not supposed to unwrap anything really. And it was, it was challenging. It was challenging to make requests.

[00:28:25] So I, I kind of helped them with a couple hacky things, hacky non port Elm to JavaScript communication things to, to make it work easy for them.

[00:28:37] Jared: Okay. Interesting.

[00:28:39] Strategies for introducing Elm

[00:28:39] Jared: And so you had sent me a contact to ask a question about, uh, your, your experience, your journey to Elm, if you will,

[00:28:48] uh, from Will Thomas. Did you, where did you work with Will?

[00:28:52] Wolfgang: Uh, Four Winds.

[00:28:53] Jared: Okay. Alright. So I want to go back to that then. Uh, before we move on too far, the question, and I've kind of paraphrased it, "tell us how you went about convincing our dev management to choose Elm for a major product.

[00:29:08] He had to win over engineers talk," he being you, "had to win over engineers as well as product and was successful in doing so."

[00:29:17] Wolfgang: Yeah, that was, uh, that was like a six month process. So I, I, I had this, like bug in my head, this, this itch in my head, if you will, that like this needs to get rewritten. It's beyond the point of like, Migrating this code base. And so I kind of took some spare time of my own and rewrote portions of it in Elm.

[00:29:43] And then went to my manager, I think it was at the time, was like, Hey, like I really think this needs to happen. Here's a POC of how I think it can happen. I found like some template of like a, oh, what was it? Like a engineering, like P O C, like talk to your manager of like how he like planned or something.

[00:30:08] Just kinda like, Hey, same thing coming back from, from everything else I've done. Just it's gotta get done. How can we make it happen? It's like, how, how can I convince my manager to make this happen? So yeah, so I filled that in. Filled in this template I put down like why I thought Elm fit, why I thought React would work, what other things I had looked at at the time, why they wouldn't work.

[00:30:31] What would, what would we gain, what would we lose? I was like, Hey, let's, let's talk about this. We need to talk about this cuz this is not sustainable. And so I did a bit more work then went to a bunch of meetings over the course of, I, I want to say it was like six months, maybe it was a little bit less than that and showed off to then like had a front end, CTO, bunch of other people way above me at the time.

[00:31:01] And they were like, yeah, like this seems like a worthwhile investment. Let's go for it.

[00:31:07] Jared: Okay. Wow. Yeah. So you mentioned first presenting it to your manager, so that would be the dev management team at that point. What strategies did you use for that part of it?

[00:31:20] Wolfgang: Oh, I don't know that I really had a strategy.

[00:31:24] Jared: I.

[00:31:25] Wolfgang: I, I'm really bad at it. It is strategy, which is funny cuz I love strategy games and of all kinds and I'm really bad at it. I just kind of just go into it blind in a way, semi blind. I think it helps that I, I really like learning in my spare time.

[00:31:46] So when, when my manager's like, what about React? What about Angular? What about. You know, keeping it as it is, what about Rust or whatever questions they had, I knew I could answer because that's what I do in my spare time, is read about everything else I can and play around with everything else I can to just cause I enjoy learning it.

[00:32:10] So I think in that won't work for everyone. Not everyone has that kind of spare time or that kind of drive to just do those things in their spare time. So I think that's, I think I kind of got lucky there.

[00:32:23] Jared: Yeah. Okay. Well that makes sense. So you felt like you had prepared enough with your research and understanding the domain of the problem, and so you created this proof of concept. So that, I think, goes a long way to, present, you know, a partly working solution where I think when people can see something, they can really start to visualize how it might be successful.

[00:32:48] So when you were creating that, did you, I'm gonna bring you back to strategy here. Did you have a strategy for which parts you put into that proof of concept? Or was it just, okay, I've, I see a part, I'm gonna do that and I'm just gonna do this.

[00:33:04] Wolfgang: No real strategy. I think that also kind of was accidental. Uh, I, I found early on with programming, uh, probably way back in high school, even when I just learned that programming was a thing that I liked, recreating, things I knew to better learn. So that kind of was where the POC POC came from, is, I'm trying to understand this, this project I'm working on.

[00:33:32] I can't say I really understand it. Oh, I also am trying to learn Elm and kind of know Elm. Why don't I rebuild my work project in Elm? And I had, I had done that with prior projects, like every. Thing else. Every company I've worked for, I've done some aspect of, I don't fully understand the project I'm working on.

[00:33:51] Let me try to rebuild it in something I do understand and try to gain this better understanding of what's going on. Um, so my POC was very much a, I'm trying to learn this, this project and understand what's happening.

[00:34:06] Jared: Yeah, I like that. I guess to bring it into terms we often hear in the Elm world is you constrained the problem so that you took a, a technology that you understood pretty well and then used that to be able to focus on the, the software, the product that you were trying to understand.

[00:34:26] Wolfgang: Yes, yes. I think that's why I do all of my side projects, like 99% of my site projects in Elm is because it lets me focus so much on that. Like, like even mentioning before with like maintaining JavaScript projects, like even my personal ones, they're, it's so challenging to maintain that I'm distracted from focusing on the project.

[00:34:50] And so working in Elm, I'm just like heads down on features the entire time I look up and I'm like, oh, four hours have passed and all I've done is feature work. Well, I guess that's a successful day. Like

[00:35:02] Jared: Yeah, totally. I mean, that's the thing that you want your, you know, your company to hear, right?

[00:35:09] Productivity & "the culture of moving a little bit slower"

[00:35:09] Jared: As a, as a manager, you want to hear, Hey, I was just working on features all day. You know, that's, that sounds productive. So, so I, I definitely agree with that and I feel that, but what do you think it is about Elm that helps you do that, if you could pinpoint a couple of things?

[00:35:30] Wolfgang: The compiler's definitely part of it. The friendliness of the compiler, like error messages that definitely goes a very long way. Other languages have static types, and I don't feel the same productivity. There aren't many other languages that do, uh, semantic or similar versioning the same way Elm does.

[00:35:51] I think that goes a long way, and I think the culture of moving a little bit slower to an extent. Like packages, for example, tend to move a little bit slower. There isn't a new feature in every package every day, and I think I see that a lot more. I think JavaScript's on the more extreme end, opposite end of Elm, doing that. That level of like just let's focus on what we want to build and not features for our language or I guess more features for our packages.

[00:36:27] Features for our packages aren't as important as building the thing for the person at the other end because at the end of the day that's like why kind of I write code is for the person at the other end of the code. They're not reading my code. They don't care what language I'm using. They don't care how many or few lines of code I've written.

[00:36:47] They just want their product to work so they can get their job done. And Elm really, I think both the culture and the language itself really helped me focus on that.

[00:37:00] Jared: Yeah, and I feel like Elm does a good job of being pragmatic in that approach where you only build things that solve real problems.

[00:37:09] Um, versus I feel like sometimes in, in the outside world, if you will, in in other ecosystems, the, uh, the tendency is to latch onto things that are happening right now and to kind of run with these different things before they clearly have a purpose, maybe, if you will. And, and so it can be easy to become distracted by those things.

[00:37:38] But also, I guess to play devil's advocate, there's a different scale that things are done at. But I, I do think definitely that the ecosystem around Elm and the culture is to think about the problem and to be very pragmatic in the approach. And I think that that definitely starts, I was talking with Dwayne Crooks a while back.

[00:38:03] I, uh, as we're recording this, I just published, uh, episode 55 with Dwayne, but we were talking about how, uh, we perceive Evan works and that, you know, he's, uh, sort of this digital minimalism Cal Newport, you know, style of work where, uh, there's a lot of distraction free work that's not focused on what everyone else is doing, but trying to do something that, you know, solves a particular problem and, and, uh, takes the, the time to do it right versus right now.

[00:38:36] Wolfgang: Yeah. Yeah, I definitely, I think part of me aspires to work in that way. I'm not very good at it, but I think Elm lets me find a nice balance like the, the, the package. So the language itself moves at that much slower pace. And then you have the packages which move at a moderate pace. I would say some packages have periodic releases.

[00:39:03] Much more frequent than, than the language itself. But that makes sense. Like packages need to evolve to fit the current needs to an extent. And then there's the product that you and I build with the language and with the packages, and that needs to move faster because our users need to move at a, we need to provide our users with what they need now, not tomorrow to an extent.

[00:39:32] And I, I think for me, it allows me to kind of move at that moderate to fast pace. I feel like I talk to a lot of people in the Elm community who are all about writing their types first. I'm really bad at that. I often find myself writing types later to verify that what I just wrote down without types, matches the type system.

[00:39:56] And it kind of still worked for me. Um, it allows me to, I feel like I can still iterate really fast, like try things out really fast and then go back and tidy things up after I've found what works, and make sure that it's still solid for the next person before I move on.

[00:40:17] Jared: I like that distinction between the way that , or the pace that the language moves versus the pace that the packages move versus the pace that the product moves. And I, I find that I agree because I can build something for a customer, for a user much faster because I'm not spending my time trying to figure out how to put things together or to update existing packages or to learn new language features, right? I can focus on the business logic and the, and the type system allows me to build that and model it in such a way that it's clear, it's succinct, and it it fits well. I don't have to do a lot of shaping my problem to fit the language feature.

[00:41:09] Introducing elm-review rules

[00:41:09] Wolfgang: Kind of lead that into, to what I've been doing at Vendr actually. , I, I've spent the last, was it last four months now? I think. Uh, introducing more elm-review rules. When I joined Vendr, they had, uh, this process called Zamboni, that was a GitHub action that ran once a weekend and would run, I think it was two elm-review rules, and auto fix them, create a PR for someone to merge in on Monday.

[00:41:40] I, I kind of. Made that my, my, my task on Mondays for a while, but I didn't really, I didn't like that process. It felt very non Elm like to me to, to wait for once a week to get feedback from, from a tool. Uh, whereas like running the compiler, your feedbacks almost instantly, I, I want that same thing from, from our elm-review process.

[00:42:07] Uh, so I slowly started reshaping that to run locally. Uh, Jeroen did a f fantastic job and has continued to do so to make elm-review faster over the past year. It's, I I don't even know how much faster it's, it's gotten, it's gotta be ridiculous amount faster in this past year alone. Yeah, so I, I taking all, all of his work to make it fast and then all of these rules that I was slowly introducing and.

[00:42:37] Using it to, delete code so that, you know, it's, it is really nice to say, yo, a Vendr has, you know, half a million lines of, of Elm in production. And here I am bringing that down by, you know, a good 50,000 lines of code. But to me that that kind of fits with, with the theme of Elm, of like focusing what's on what's important.

[00:43:03] And it's also, you mean going back to my entire career, it's what I've struggled with in pretty much everything else I worked in is like everything else focused on adding more constantly. It's always about adding more code, adding more features. And here I am, I've spent, you know, a couple months of, of my time at Vendr just deleting stuff and that focus on like getting us down to just what matters to the user. At the end of the day, there are no extraneous pages. There are no extraneous features. It's just what they are using and nothing more.

[00:43:41] Jared: Yeah, that makes sense. And I want to ask you about this process, the Zamboni process, and how you've moved away from that. Because I was recently attempting to introduce, uh, the elm-review no unused or the unused rule set, um to our code base. And I did introduce it. I had removed a whole bunch of code, uh, but found some pushback from, uh, somebody on the team that, uh, felt that it was keeping them from, being productive.

[00:44:15] And, um, you know, I'm still working through a understanding how that is preventing productivity. But the thing that I think you can, uh, you can maybe, uh, see if you think about how our process works, where we have these feature toggles. We put things out there in production behind this feature toggle. And then it can still be certain that that feature, it may not be on for every customer or every user, or it may be no users, but we have a smaller set of code that we can review and release at a time.

[00:44:50] And so we try to get closer to that, you know, continuous delivery process. But one of the things that happens with that is maybe as you're creating that incremental PR you are building out a feature and maybe there's one or two things that you're not using yet, right? And so you can see how this would be a problem if you're using the no unused rule, right?

[00:45:12] Because, uh, I'm going to use that. I just haven't used it yet. Uh, do you have any thoughts on that or have you ran into that challenge?

[00:45:20] Wolfgang: Uh, yeah, no, we definitely ran into that challenge. So the way I kind of went about it was, and I don't know if you're doing the same or not, but trying to introduce just one no and used rule at a time for maybe like two-ish, three-ish weeks, and then slowly adding the next, uh, definitely got very similar pushback of, oh, hey, I was using this, or I was about to use this.

[00:45:47] Can we not delete this right now? What worked for us, or has been working for us is using the suppress, uh, command. Uh, I'll review suppress, will take whatever things, whatever errors it's throwing and say, okay, ignore this quantity of errors right now in this file. If the quantity of errors changes in this file, re-alert the user.

[00:46:13] Um,

[00:46:14] Jared: That's a super important feature. That was, honestly, as soon as that feature came out, that was when I was able to introduce elm-review because it, at that point, I'd wanted to deprecate some things, but in order to deprecate them, I needed to completely remove them before suppress rules were there. So when that came out, I was like, okay, now I can say this is how many we have now, but we're not going to add any more of that thing, you know?

[00:46:41] And then, you know, we're migrating to this, usually migrating to some other module or some other way of doing that. So yeah, I found that to be extremely helpful in just getting elm-review off, you know, getting it started, but with no one used. How would you go about that? You know, let's say that someone has that, would they then run that on their branch?

[00:47:03] Would you review those suppression rules to see, okay, these things say they're not used and you know, that feature feature's now out there in production, you know, or do you do anything with that?

[00:47:16] Wolfgang: Yeah, we, uh, so we have a running on our CI. We have, elm-review running with without the fix flag just to see if there are, are any errors. There definitely have been times initially when I would introduce a rule, I think more so in the very beginning where we would hit issues with, oh hey, like how do I get around this?

[00:47:39] It doesn't happen as much anymore. We're still trying to figure out how to best go about making sure everyone's running elm-review locally. I think that's been our biggest sticking point, is making sure that it's running locally for everyone as part of their dev process. We've kind of done this with elm-format, where we run elm-format on a commit hook so that if you commit and you haven't run elm-format, you'll get a list of get changes of formatting.

[00:48:08] Uh, so that way we enforce that. Um, we're not quite there with elm-review yet, just cuz it takes a little bit longer and I don't want to slow people down too much during committing, but I could see doing something similar maybe. So yeah, so we run it, we run it in CI. If there are errors, we try to alert the person, Hey, you know, please do this.

[00:48:31] So I've definitely gone through, speaking to deprecation specifically, we've been migrating away from old UI to new UI styles, lots of deprecated code. Lots and lots and lots of deprecated code. To help get around that, I do specifically ignore, some of our like UI portions of our code.

[00:48:53] And I try to focus more on whether or not code is used in our pages, like our core, what the user sees. If a button is unused really doesn't matter as much to the user. It's more about, or even the developer, it's more about if I'm on a page and there's a form that's unused, that's a lot more distracting to a developer in my opinion, because that's a lot of code that's possibly hundreds of lines of code versus 20 at most for a button.

[00:49:27] I think I tried to make it focus more on what's closer to the user in a way. I think that helps a lot and I'm very comfortable with saying, oh, ignore this entire directory. We're not gonna worry about this. That, that has made, I think the team is a whole, very comfortable with moving forward with new rules of they can come back.

[00:49:48] If I introduce a new rule that says, oh, your whole thing is flagged red now with errors, and they're like, Hey, I really need this. Can we not do this? I'm like, yeah, cool. Let's, let's ignore your entire directory right now. You are fine to keep moving at whatever speed you need to move at.

[00:50:04] Jared: Yeah, yeah, that makes sense. I like that. Being able to ignore certain directories, and I use that approach as well, that strategy. The overall process and definitely with deprecation, I've found elm-review to be, you know, just now I can't live without it, you know, I feel like before, uh, whenever you try to move, you know, a process or move certain strategies in, in a way, , in a certain way, then you are doing a lot of manual work. I felt like I was doing a lot of PR, you know, explanation and then trying to guide things. But with this, I feel a lot more calm about it because I can say, okay, I know that if something comes up that will catch it, we can have a conversation about it.

[00:50:51] Hey, this is the approach that we take. We use this package, not that package, or, you know, whatever the case may be. And that has, uh, really been nice. But yeah, I think the, the only sticking point for me that I've seen that's really been, um a cause for concern with productivity and, , and team buy-in is would be the ability to, yeah, just handle unused code, but still have that rule in there. Do you think. Go ahead.

[00:51:21] Wolfgang: I was gonna say, it's a tricky balance. It really is. I think it's, it's a lot of... There was a quote from a talk Evan gave years ago. Uh, "code is the easy part". Um, and to me that's, that applies to elm-review and just engineering in general and like elm-review, like the rules are the easy part.

[00:51:43] Like adding or removing or tweaking a rule is so easy. It's really just talk to your team and be very open with your team all the time. Where, however, and wherever you can, like, I think that's definitely what allowed me to add rules. The way I did is I was constantly in our front end channel and our just general engineering channels in Slack and be like, Hey, I'm doing this.

[00:52:10] If you have any concerns before this gets merged into our code base, please let me know. I, I'm open to chat if you have any questions. If you are struggling like. Please just talk, talk, talk as much as we can about these things. And, uh, I, I think too, also, Vendr has this rubber duck channels thing, uh, which is a whole other topic, but, uh, just in my rubber duck channel being very open about, Hey, I'm working on adding these rules.

[00:52:39] Uh, I'm going to be doing this over this next week. You know, if you have any concerns, if you think this will impact you, let me know. I, I, you know, I'm going to make it as easy on you as possible. If you have any pushback, tell me because I will make the changes. You don't have to do anything. So I think having that level of like communication with your team, that you are doing this to help the team, and if it's putting a burden on your team, then it's not the right move.

[00:53:10] Like it should be helping your team entirely. And if anyone should be carrying that burden, it should be you because you're the one making the change.

[00:53:17] Jared: Yeah, yeah, that makes sense. I'll put a link to that rubber duck thing because you have that in your blog. A little, uh, description of how that works. I thought that was really neat. So, uh, we can put that in there. But yeah. Um, What I like about the rules and you know, even getting the team talking about it, you know, before introducing a rule.

[00:53:39] We have these, uh, tech topics meetings, and sometimes, uh, the topic is just general front end. And, uh, I presented on some of these rules, uh, you know, and hey, this is the thing we're going to introduce and, and you know, what do you think? Should we do it? Here are my concerns. And so I think that was really nice.

[00:53:58] But then also, you know, when people have to actually confront that and say, oh, okay, now this rule has come up, you know, uh, what do I do about that? Then it's a, another conversation. You can, you know, kind of explain those benefits too. So yeah, I agree. The, the communication is key there. And of course, yeah, like Evan said, "the code is the easy part."

[00:54:17] So, yeah. That's, that's great.

[00:54:20] Elm at Vendr

[00:54:20] Jared: I wanted to ask you before we get, uh too close to the end here, we're at an hour, but I wanted to ask you about, Elm at Vendr. And I wanted to ask you kind of the, the size of the, of the group there, how many people are using Elm, how many teams you have, things like that.

[00:54:38] Wolfgang: So I know we're somewhere around 500 employees I think now. Still hiring. Uh, so yeah, if you want to join, if you wanna join me and, and all the rest of us writing Elm at Vendr, uh, please check us out. I would say, even if you like doing backend and are just curious about Elm, like please, like my, my current team is almost entirely backend devs except for myself, and they help out with front end here and there and it's, it's a lot of fun.

[00:55:06] You're like, I really enjoy pairing with them on front end code. They help me with back end code. So it's, yeah, it's fun. But yeah, I think if I had to guess about how many of us are like dedicated front end, I would say around 10 to 15 maybe. I, I mean this is a complete wild guess. Uh, so someone will probably correct me when they hear this. Um, but yeah, it's uh, I'm trying to remember what the rest of the question was now.

[00:55:38] Jared: Yeah. So of course the, the size of the company, you answered, there's around 500 people. You're, you're growing, of course. You said there are 10 to 15 Elm devs, so that's how many people are working full-time on Elm, right. Kind of

[00:55:51] front end. yeah,

[00:55:52] And then you have some backend engineers who are also writing Elm occasionally as needed.

[00:55:59] Wolfgang: yeah, yeah.

[00:56:00] Jared: And then how many teams

[00:56:04] Wolfgang: Yeah. Teams,

[00:56:05] Jared: of developers?

[00:56:07] Wolfgang: I wanna say there's about seven or eight teams with devs on 'em, um, with like PM, uh, a designer and then devs. Almost all are backend heavy. I think there's at least one team that has no front end devs, which I think is in a way a testament to Elm that. So many backend devs who are not Elm developers, uh, in the traditional, like that is not their forte at all.

[00:56:35] Uh, can pick it up and get into it. I know there, there's at least a couple I've worked with both on my team and other teams who they may be hit me up once every, like once a month maybe for questions, maybe twice a month for questions. And they're usually something very complex that is unique to our code base.

[00:56:56] And like, not, not even an Elm question, it's really just an our code base question, but they feel slightly intimidated cuz they don't feel as comfortable with Elm yet. Um, but really I would say they're, they are Elm developers. Like they can write it very, like if I had to throw them on their own project, they'd be fine.

[00:57:13] Like I, I, they wouldn't be coming to me with any questions.

[00:57:18] Jared: Yeah, it's funny. I feel like we've hired a lot of folks who have, you know, Python experience because our backend is in Python, but no Elm experience. And yeah, I've felt very comfortable, you know, introducing Elm to everybody and if someone is apprehensive they, they feel like, oh, you know, I'm not sure what to do here.

[00:57:38] I'm like, You can try some things, I'll give you some pointers, but also if you do something and it's too far off base, you know the compiler's gonna tell you, you know, it's your friend. And if you, uh, learn to, uh, embrace that relationship, then you know you're gonna have a good time. And I think that that seems to have been the case so far.

[00:57:57] And, and it's, uh, it's really been nice to be able to bring people up to speed without feeling like, oh, you know, we need to get a developer that already knows this. So

[00:58:07] that's definitely a testament to Elm.

[00:58:09] Using Elm at scale

[00:58:09] Jared: And so you're using Elm at, you know, a growing scale at Vendr. What, are there any particular challenges you feel like you're facing using Elm that you're running into right now, that you're trying to solve?

[00:58:24] Wolfgang: How much time do I have in the day to write more code? Mostly like I, I, I keep expecting to hit like some wall with Elm. I really do. Like, I've hit walls with other languages where I'm just like, I'm really not sure how to do this. Yeah, I don't feel like I've hit those with Elm yet. So I will say like a part of that is definitely that I have a decade plus of experience writing JavaScript.

[00:58:55] And Elm compiles to JavaScript. So you know, if something goes wrong, it's just JavaScript at the end of the day. And I have a decade plus of experience reading and writing that, so I can very easily dive into compiled Elm and be comfortable doing that. I've had to do that I think twice, maybe at Vendr, maybe I think maybe twice that might be pushing it.

[00:59:22] And

[00:59:22] Jared: I was gonna ask that because I, I can't imagine a time when I've actually done that, so.

[00:59:29] Wolfgang: so, so the two, so I, yeah, so it's twice, uh, one of those times is I was being impatient and waiting for someone to flip a feature flag, and I didn't wanna wait for the feature flag to get flipped, so I was debugging production compiled Elm, uh, trying. And so I was manually flipping the JavaScript Flags.

[00:59:52] Flags in JavaScript. And yeah, I, I, I don't think most people will ever do that. Uh, but hey, when you know JavaScript, it's easy.

[01:00:03] Jared: Sure.

[01:00:04] Wolfgang: the other time was we write a fair amount of web components, and I, I, I still don't know the root cause, but I think we had an instance where because of the way web component was running, it was sending a message into the Elm run time late, uh, which was then, because of the way, type custom types get compiled in Elm, uh when you've compile with optimized on, they get compiled down to, uh, numbers.

[01:00:37] So the first fla-, or the first constructor of a custom type becomes zero, then one, then two, and so on. Uh, and we were getting the wrong branch of an update running because of that. Uh, because this message was getting sent back through web components delayed. It was running the wrong custom type only in production, uh, because one equals one in production code.

[01:01:02] Um, so that, that required a bit of JavaScript debugging to try and figure out what is actually going on here. Uh, that was, I, I've, this is the only time I've ever encountered that in all my years for writing Elm. I've heard of it happening in other code bases, but never in any of my side projects have I encountered it.

[01:01:21] And I use lots of JavaScript in my side component or side projects still too. Like lots of web components. Never. This is the only time I've ever seen it. There was, uh, Ryan Haskell-Glatz. He and I paired, I think it was the first two weeks of being at Vendr on a web component for doing modals.

[01:01:43] That is probably the closest I would say I've ever come to something like weird and challenging in Elm. We still need to write up a blog post about that. I, I'm, I'm bad at writing technical blog posts, so I've been kind of waiting for him to write it. Just check my name on is also contributed to, uh, but, uh, that, that was, I I should, I should finish that blog post.

[01:02:10] Yeah. Yeah. Cuz that was, that was an interesting problem space I would say.

[01:02:16] Jared: Yeah, that sounds like a valuable addition to the community. You know, some, something we can learn from.

[01:02:23] Wolfgang: I have a, a series I think of blogs that I want to write about Elm as it relates to the DOM. The general idea being that like the browser doesn't have to be the only DOM, like document object model isn't specific to web browsers. Anything can be a DOM and Elm uses a very tiny subset of DOM APIs, like, I think it's about 10 or 12 maybe, DOM specific or I guess browser specific.

[01:02:58] But they're really just, you can write your own DOM, like it's a very easy thing to do to write your own DOM and then, hey, JavaScript, If it compiles to it, Elm compiles the JavaScript. You're good. You can run Elm anywhere at that point.

[01:03:15] Jared: Cool. Yeah, I think that would be really neat to see. So I hope that you do make it to that. No pressure. But you know, if you, if you do, I think it would be really helpful to read. So

[01:03:27] Wolfgang: may, maybe I can get it out by the time this episode really comes out.

[01:03:31] Jared: There we go. Yeah, I

[01:03:32] Wolfgang: Maybe that's my goal.

[01:03:34] Jared: if you do, I'll put in the show notes. If not, then we can read it when it comes.

[01:03:40] Wolfgang: Okay.

[01:03:43] Jared: Okay.

[01:03:43] Strategies for adding web components

[01:03:43] Jared: So let me ask you one thing about using web components, because I know that is a really useful tool. Could you explain a little bit what your strategy is for adding in web components with Elm at work?

[01:03:58] Wolfgang: Strategies. Uh, as

[01:04:00] Jared: I keep coming back to that word intentionally.

[01:04:02] Wolfgang: Um, if I have something that I either don't want to take the time to write it in Elm, uh, because it would be a whole project unto itself. Like, uh, rich text editors. I think those are a pretty common one. We're like, that is a whole project unto itself.

[01:04:23] You're, you could start a company probably on an Elm rich text editor, so I don't want to do that. I just want to use one. So wrap it in a web component. That was actually kind of how I partly getting into Elm, like maybe my first year of writing Elm was writing a web component wrapper for, a, a Mozilla project called Fluent, uh, which is for a localization.

[01:04:49] At that point in my career, I had written localization for ExtJS stuff. Or I had used it in ExtJS. I had used it in Ember, I had used it in React. I had, I think I'd used it in jQuery. I had looked at it in Angular, and I was like, I don't wanna write this again. Like, I'm just done writing localization.

[01:05:10] Like every framework is like, oh, use localization in our package. I'm like, no, I'm done. Like, we'll write it once as a web component and be done. Uh, so yeah, I wrote a, a little wrapper. I've not had a chance to really use it for anything production wise, but it works as best as I can tell. Like, I have it running in Svelte and Elm and, uh, vanilla HTML, and it just, it works for all of 'em, nearly identically.

[01:05:42] I'm like, perfect. I don't ever have to write this again. If I ever need to do localization. Done.

[01:05:48] Jared: Right. Yeah. I mean that, I was kinda surprised that it worked so well. That approach to it. You know, I, I felt like I didn't think about it in, in that way of taking that approach, but I'll definitely add a link in the show notes to that project because I think that is a really, uh, useful answer for that. And of course, the, uh, example that I've, uh, always come back to for adding a web component is something like a map, but also a rich text editor makes sense. One of the strategies that I think about with it is, yeah, do I, is there already something off the shelf that I can use that, uh, that has maybe it's own, it's either really complex to write how it works, and particularly if it has its own kind of, I'd say internal state, right?

[01:06:37] Where it, or in Elm its own, uh, nested Elm architecture where you could write it in Elm and you would be able to wire it all up, but. If there's something already there and it's a web component, then you kind of get to not worry about that internal stuff and you only send back the events that you care about, right?

[01:06:56] You don't care if this dropdown list, this fancy dropdown list is open and you know, whatever, whether it has fo you just care what was selected and, you know, move on. So I think, um, you know, there are some cases like that where it's, it's just a, a really nice strategy as opposed to that wouldn't make sense to use ports for that type of a, an integration, right?

[01:07:17] So, um, so yeah, I think, uh, that there are times where web components are just such a, a nice tool.

[01:07:24] Wolfgang: Yeah, they really are. They really are.

[01:07:27] Jared: good thing to have in your pocket.

[01:07:29] Roc

[01:07:29] Jared: Well, what are you excited about these

[01:07:32] days,

[01:07:32] Wolfgang: am I excited about? Um, excited for Roc. Uh,

[01:07:37] Jared: What's Roc?

[01:07:39] Wolfgang: what's Roc? Uh, Rich Richard's, Richard Feldman's project. I've been following that for, oh God, I think he's, I've been known about it for at least three years, I wanna say now. Uh, over, I think over three years, 20, I wanna say 2019 might have been when I first heard about it.

[01:07:58] Um, so I've been following that. I hang out in the Zulip there. What else have I, what else am I excited about? Uh, Unison is the other one. I've, other thing I've been really excited about. Just another language trying to solve unique problems. Uh, also their package docs are written in Elm um, if you're in the Elm Slack, you might see some people talking about that every now and then.

[01:08:23] Jared: So you said you were interested in Roc and you've been watching it, uh, it's, uh, Richard Feldman's project and the programming language that he's building.

[01:08:33] Do you wanna kinda give us a little bit of a, a taste of what it's about?

[01:08:38] Wolfgang: Yeah. I would say it's very much a descendant of Elm. It is very Elm-like, uh, writing it. I've written a little bit just hobby stuff here and there. Uh, it feels very similar. I would say the focus is more on building on top of this like, framework ish idea that Elm has of, uh, when I'm writing Elm, I am writing a Browser.application or Browser.element or Platform.worker.

[01:09:11] That is what I'm writing. I'm not just writing anything. Those, I'm, I'm targeting something very specific and Roc is very much to me building on top of that. I know Richard's talked about that a lot in his talks, that kind of framework meets language idea. That's definitely what's excited me about it.

[01:09:32] I really like that direction of languages a bit. And then also the other thing that kind of makes it unique is, Uh, going more for how it does unions, whereas Elm has tagged unions, like when you do a, a type, a custom type in Elm, uh, Roc's are more like, uh, TypeScript unions. I would say if you're familiar with those.

[01:09:56] So it's kind of, it's Elm but with slightly different custom types in a way. And then it does a fancy thing called back passing, um, which you'd have to look up, uh, to get a good example of it. But it, it's, it's, say I, I would say pleasant to the eyes, way of doing chained code, uh, where you have to do a lot of functions in a row and use all of the values from those functions.

[01:10:26] I would say if you like Elm and you would like to see Elm on different platforms and different types of like programs, Roc is definitely something to check out.

[01:10:37] Jared: Cool. Well, this has been a great discussion. Is there anything else you wanted to talk about before we move on to picks?

[01:10:44] Wolfgang: No, no, I, about covers it. I think.

[01:10:47] Jared: All right. Yeah.

[01:10:49] Picks

[01:10:49] Jared: So what picks do you have for us today?

[01:10:52] Wolfgang: So Front End Happy Hour is a, uh, definitely a pick of mine. I don't listen to too many podcasts anymore now that I'm working from home and have been, uh, that is one I try to check in on every now and then. Specifically want to call out, uh, Stacy London, who's one of the, the hosts on there.

[01:11:11] Uh, got to work with her years ago at Corvisa and uh, she's the one who really got me into accessibility, I guess, with web and stuff. And I think that's really kind of driven a lot of my code stuff is accessibility to some extent. So definitely check out Front End Happy Hour. And then I would say my other two... there's an old podcast that just had its first new episode, and I wanna say it's been nine years, uh, called A Life Well Wasted, with Robert Ashley.

[01:11:44] That was like, early college for me was like a lot of that and a lot of his other podcasts he was on. And, I think it's that what, what I said earlier, just I like talking to people, uh, and communicating and communication is good. And that to me, that podcast is all about going out and meeting people.

[01:12:05] Jared: Neat.

[01:12:05] Wolfgang: Those, those, those are my two picks.

[01:12:08] Jared: excellent. I like it. I'll have to check those out and I'll put those links in the show notes. So my two picks, one Elm-related, one not. The Elm-related one is Matthew Griffith's elm-codegen.

[01:12:21] Wolfgang: Hmm.

[01:12:21] Jared: I definitely use that at work to generate things like icons and the endpoints from the backend, from Python to Elm. Create some guarantees there. And I. I totally enjoy it. It's great. Thank you, Matthew.

[01:12:39] And then the other one is a book, it's _Kafka on the Shore _by Haruki Murakami. Um, if you're not familiar with his work, it is, uh, kind of fantasy, but the author, Haruki Murakami has a background in running a jazz bar for a number of years, and so the writing kind of reflects that.

[01:13:03] And there's one section that I just really, en enjoyed in this book that I read over and over again where it's talking about an imperfect, uh, composition and someone trying to play that composition and never being able to get it right because it is imperfect. And, uh, and the way that he says it is so much nicer than that.

[01:13:25] But, uh, but that's, uh, page 110, 111 around in there. So yeah, definitely, um, if you, uh, check it out, look for that part if you're interested in those kinds of things. Um, I didn't really find myself, when I started thinking, that I enjoyed this aspect, a fantasy novel just kind of didn't sound like my kind of thing.

[01:13:45] Uh, but after I read it, it's, it's very kind of, uh, mind expanding. It, it feels like when I'm reading it, I'm like trying to stretch out and understand the things that are going on. And, and then of course the, the musical, uh, little tidbits in there are fun for me. So yeah, that's, that's what I have. But yeah, I guess that's it.

[01:14:07] Thanks, Wolfgang, for coming to Elm Town.

[01:14:11] Wolfgang: Yeah. Thank you very much, Jared, for having me. It's a pleasure.

[01:14:14] ​