Elm Town 75 – The Great Wall of Code with Taylor Troesh
[00:00:00] Taylor: I was at Strange Loop, and I was talking to Evan, and I was asking like, , , how do you personally, arrange modules. Like what, what are the size of your, your files generally? He's like, there's nothing wrong with having a 3000 line file. I just looked, I was like, Whoa, that just, that just blew my mind.
[00:00:19] Ever since then, I have been writing lots of very large files.
[00:00:24] Jared: Hey folks, welcome back to Elm Town. I'm your host, Jared M. Smith. We'll be visiting with Taylor Troesch today.
[00:00:30] Sponsored by Logistically
[00:00:30] Jared: But first let's talk about our sponsor, Logistically. At Logistically, we make intuitive software to help logistics teams make better decisions and improve efficiency. Logistically pays me to record Elm Town episodes as well as pays for our production and hosting costs.
[00:00:46] 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 at LogisticallyInc. com I'll put a link in the show notes.
[00:00:58] Introducing Taylor
[00:00:58] Jared: Now, let me introduce Taylor Troesh. Taylor is a developer, designer, DBA, and chaos muppet.
[00:01:06] Those are his words. To name a few. He published Surprise Talk slash Elm Burma a few years ago. And an article he wrote, Why I Use Elm in 2023, was on Hacker News last year. You can check out more of his work at taylor.town. Taylor, welcome to Elm Town.
[00:01:26] Taylor: Thank you for having me.
[00:01:28] Jared: Yeah, I feel this is kind of a match made in heaven here because we have elm.town and you have taylor.town.
[00:01:35] Taylor: The meeting of the towns. Uh, I, I also, I think I own Taylor dot land and was unsure which one to pick. And I ended up going with the town.
[00:01:46] Jared: Well, it worked out for us. There's also Elm Land, so really you could have went either way. Awesome. Okay.
[00:01:57] The beginning of computing
[00:01:57] Jared: Well, I usually like to get started by asking about how you got started in computing and programming, your kind of origin story.
[00:02:07] Taylor: Oh man, all the way back to the beginning of, of computing. So I thought I wanted to go into neuroscience at one point, and I ended up joining a neuroscience lab and they're like, Hey, you need to learn C++ to help out with the research. And so I did, and I was like, this is way better than, than, than biology.
[00:02:27] Uh, and so I ended up, this was back in the day of, of, uh, PHP and WordPress. So I, I ended up, uh, while I was getting my computer science degree, I've made a ton of websites for people. Over time, I worked at startups and kind of progressively went more and more back end. I ended up accidentally specializing in databases, but my heart is in front end, and that's originally where I found Elm.
[00:03:03] We'll, we'll talk about it later, but I'm, I'm back in front end, baby.
[00:03:07] Jared: Oh, yeah. All right. Yeah, well, so you were originally interested in neuroscience and biology. And then switched over, and this kind of reminds me of when I was starting college, I was considering psychology or computer science, I was undeclared at the time and I decided to go computer science after taking some classes, learning some programming.
[00:03:36] So it sounds like you had a similar thing where you're thinking about going a different route, but then you're like, okay, I'm getting into this. This is much cooler. What was it that brought you in when you were learning C++?
[00:03:49] Taylor: I think I really like making things much like most programmers, right? Like we have this, this draw to the, to the, uh, to the maker's spirit. And I think the programming community just has a lot more makers and I. Uh, very much vibed with, people like producing things and making little scripts and, uh, did not see as much of that over with the Biofolks.
[00:04:11] Jared: It seems like you would have to work a long time in that industry in order to be able to really make something.
[00:04:20] Taylor: Yeah, yeah. I remember how quickly I was able to get up and running. My, my first CS class was Making apps in Objective C for iOS. That was painful. I remember, like, almost instantly regretting my decision trying to do Objective C because it's, it's, it's I love Swift now. Swift is very nice. Swift UI is pretty nice.
[00:04:45] Objective C back in the day was not nice.
[00:04:48] Jared: Sure
[00:04:49] Taylor: So after I got over that hurdle, I was very much happy to be in the programming land. Especially when we started getting to the functional languages. The moment I saw Lisp and a few other of the less frequently used languages, I felt very much at home.
[00:05:09] Jared: Okay, yeah, so you were learning Lisp and you felt at home. What do you think it was about that that made you feel like it was the place for you?
[00:05:18] Taylor: I do have like a, strong draw to design. I really like design things that feel designed right, whether or not I degree, uh, agree or disagree with the design decisions. It's, it's nice to, to feel some, uh, have something that feels thought out. And c plus plus Java Land did very much, did not feel thought out.
[00:05:37] even, even to be, it felt, it felt like, it felt like something that kind of. Came across by chance accident, right? Like, you could feel the lots of decisions and just like, learning a language with like, nine primitives or whatever it is. Just like, I was like, yes, yes, elegance.
[00:05:55] Jared: Right, yeah, yeah, that makes sense like the The recursive ability within Lisp and in that, yeah, you're taking just such a few number of concepts and being able to make big things out of it. Right. And be able to create a lot with that is, is pretty incredible.
[00:06:15] Taylor: my finale with Lisp was I took a, um, computational evolution class. And. We had to, for the final project, make, uh, an ant, you know, program, an ant colony that's able to like find food and a few other, a few other things. Um, but I wrote it in Lisp and writing genetic algorithms in Lisp is so cool.
[00:06:40] If you haven't like looked it up or tried it, it's like, it is the most mind blowing thing because, cause you can like, you can really get the feel of the code is data, data is code thing. Um, and it's, it's bananas, dude. You can just, you're like, uh, go check it out.
[00:06:58] Jared: Okay. Yeah. That sounds pretty incredible. Cool. Yeah. I have to look that up. So you're doing computational evolution. You're doing, you're building sites though. You're creating things, right? You're doing this PHP and WordPress stuff. What was that? What kind of things were you making then?
[00:07:14] Taylor: Oh boy. I was working in Magento mostly. Outside of just like, you know, people's blogs and bakery sites, you know, things like that, but then main thing I was working on was Magento, which is like this e commerce platform and, I got really tired of the ways in which PHP broke. And so, having really liked Lisp at the time, and then kind of going more into PHP, I was like, Ooh, man, I do not like, uh, I do not like things breaking on me, which is, I think, how I first discovered, like, types, and started, like, I think this was right before TypeScript came out, but I started looking into Haskell and a few of those languages because I was like, I was like, uh, I'm, I'm tired of things, uh, breaking unpredictably.
[00:08:03] Jared: Yeah. That sounds pretty familiar. So you had encountered C++ is a statically typed language, correct?
[00:08:15] yes,
[00:08:17] Jared: yeah.
[00:08:17] Taylor: yes, it doesn't feel like it though, right? Like, the, the, the types that you're using are, are like micro types, I guess. Like, you're not using,
[00:08:28] Jared: they're primitives, right, is
[00:08:30] Taylor: yeah, yeah, yeah.
[00:08:31] Jared: Yeah, yeah, that makes me think of, again, kind of going back, because I just recorded this episode, sorry, we're, we're getting more of me in here, but, um, It makes me think of, of a similar thing where I had started out with Java and C# and things like that, and then I found JavaScript and I was like, oh, cool.
[00:08:49] I can do all these different things. You know, I can code in a bunch of different ways and try out things. And I know I've said this before, but the, what's interesting is I didn't really appreciate the types in C# or in Java, I think for one of the reasons, because it was mostly primitives, or it was you have to build out these clunky classes and inheritance models in order to actually design things that fit with your business model.
[00:09:18] Discovering Elm
[00:09:18] Jared: So then when I found, you know, other functional languages, Elm primarily, then I was like, Oh, okay, no, this is how I can really utilize types. So it sounds like you, also had a sort of realization about types, but in a, in a deeper way with similar languages. So you were learning Haskell, right?
[00:09:42] Taylor: I think I was poking around with Haskell and a few other languages. Um, I think at the time I was also really interested in performance, because PHP is not performant. Um, and was kind of looking for better mental models on how to do things efficiently. Especially at the time I was also working, um, increasingly more with async architectures.
[00:10:08] And I, I went from the transition from callback hell into promises. This was before async await syntax, so it was promises. And I was like, this, this does not seem right. There's no, um, And so some, some time around there is when I found the, the Elm architecture and I was like, okay, both the types side of things and this like little magic loop runtime that, uh, that is able to do things effectively on one thread, like just blew my mind.
[00:10:39] Like that, that, that was the move.
[00:10:41] Jared: Nice.
[00:10:42] Okay, so you found Elm and the Elm architecture. Do you remember how you discovered it initially?
[00:10:52] Taylor: I don't, I think. If I remember correctly, I played around with it the first time when it still had signals in it. Um, that was like way, way back. And the signals did not feel great to me. Um, so then I think, I think when they, when it moved to the Elm architecture, right? That, that, uh, application loop that, that we're all now used to.
[00:11:19] So It was an aha moment for me in how to build certain types of applications, especially ones that, you know, you, you have, you have a, uh, main thread and you, and you want to display things with that main thread, and you don't want to put, uh, you know, HTTP requests and stuff, uh, competing with your, your, um, with your render loop.
[00:11:43] So. That was just like a big, uh, big idea for me. I think, I think I've like written a few game engines and how to do this efficiently was always like, I've never built a game. I always, I was built, got to the game engine and then stopped once I stopped after that. Um, so I think I've been interested in this space and yeah, just having, having like a very clean, clear model was, was, uh, unheard of,
[00:12:11] Jared: Yeah, okay. Game engines. That's, that's a lot of fun. I want to ask you about that. This, but this reminds me of, I was back, going back listening to, you had done an episode of ChangeLog.
[00:12:24] Taylor: right, right.
[00:12:25] Jared: Don't make things worse, I believe is the name of that episode. And then I ended up. Listening to more Changelog episodes related to Elm, and there were a couple of them that I found.
[00:12:38] One of them included Evan, and one of the things that he said that I, kind of makes me think of this is, he was originally toying around with making things move on the screen, right? You know, like, okay, you have a square, now you make that square move around. And that was the initial thing that he wanted to do, and then, He went and made this compiler, made this programming language, and then he was like, oh look, now I can do that, and it's a lot less code.
[00:13:06] It's much nicer to do. It just kind of seemed like a really long way to get around to that, but it, it just made me think that, yeah, you, you're trying to build something, and then you go and build the thing underlying it, which I think is, again, you're, you're a maker, right? You're, you're a creator. So as you're building the thing under there, what languages were you using these game engines?
[00:13:33] Taylor: Much later in Rust, Rust was very exciting at first, and I'm, I think I'm, I think I'm, uh, past the point of disillusionment with it, unfortunately. Um, definitely tried out some JavaScript, a lot of the stuff I wanted to do was in the browser, so it's like, um, trying to do things efficiently without, uh, without, uh, What is it?
[00:13:55] Without jQuery at the time. Without jQuery and without I don't think that WebGL was even a thing in the browser back then. Um, so I was just kind of like looking for different options, right?
[00:14:06] Jared: Right.
[00:14:07] Taylor: it was. I don't remember. Maybe it was just not a nice experience.
[00:14:12] Jared: Yeah. I don't remember when that came out, but yeah. Okay. So you're trying to build this nice experience and then You're making things under the hood. You don't really get around to making a game. What comes next? Where do you go from there?
[00:14:31] Opinions on styling options
[00:14:31] Taylor: I ended up working for a cryptocurrency company. Uh, this was back before How do I put this? All the, all the, the sleaze and slime got in there.
[00:14:43] I'm, I'm very much not a fan of, uh, uh, not interested in cryptocurrency now. Um, but at the time it was, it was new and potentially cool. Uh, so I got to build a wallet in Elm for a company that I worked for. Um, I think around that time is when I built the package Elm Bulma. Cause Bulma was a CSS framework I really liked at the time.
[00:15:07] Um, and I wanted to have type safety with accessing all the stuff in, in Bulma. I now looking back, do not think that that is the move , I, I, I, I wish I had spent the time to like kind of make my own CSS primitives in something that's more static. 'cause right now it's probably dead because, you know, I have to keep it synced with Bulma. Something, you know, built in Elm CSS or something like that, that is self contained might have been a lot nicer. But
[00:15:45] Jared: and there's elm-ui.
[00:15:47] Taylor: Oh, I love Elm UI. I've not got to use it in a project yet though. But the mental model is just excellent. Kudos. Kudos.
[00:15:59] Jared: Yeah, yeah. Matthew Griffith has done an excellent job on that. And one of the things that I've been working on recently at work is Finding a way because we already have an existing code base with a bunch of CSS bootstrap old stuff. And then I'd initially started building out our own UI stuff and did not use Elm UI.
[00:16:24] And then recently I've been like, but I want to be able to introduce it. So I'm kind of wrapping it within that existing infrastructure. And so that is really pretty powerful because now It has the, I can use all those things underneath and it has that, you can reach into it. And a lot of it is really simple to create basically a, an adapter pattern for.
[00:16:50] But, but then I don't have to rely on the API of it and I can sort of incrementally jump into it and use it. So it's been pretty nice so far. It's still early on, but, but, um, But yeah, it's been a cool way to introduce Elm UI
[00:17:07] Taylor: So one, one question for you with elm-ui.
[00:17:11] So I have two kinds of ways of thinking about, uh, designing on the front end. One of them is more component based, right? And I, um, I have like a function that returns just a little snippet of some view and that comes self assembled with its styling. other way that I tend to think about things when I'm, you know, building in, you know, plain HTML as I I'm building like semantic structures and The CSS as queries to at the very end, you know, uh, provide some coherent styling to the whole thing.
[00:17:49] I think Elm forces the, the, the first option. or at least it makes, it, makes the first option very nice to use. Have you, uh. Experienced this push and pull at all? Do you, do you like using the CSS? Do you like using functions more? Um, it seems like two good ways to do it.
[00:18:08] Jared: Sure, yeah, so let me see if I understand this. So the first way we'll say that is this way of containing everything within functions and making sure everything is within Elm, and then the other way being put things on the screen using basic semantic HTML, and then Outside of Elm, build up CSS.
[00:18:33] Taylor: It doesn't have to be outside of Elm. It's more like, um, does the CSS get inlined and spread across, uh, like put in place next to the, uh, to the component it's, it's relevant to, or do you kind of just like. Use CSS Global, uh, you know, from Elm CSS and just throw it all in one spot and call it a day.
[00:18:57] Jared: Right, right. Okay, yeah. Well, I like to keep things that are functionally related as close together as possible. So, I think, I might think about it more in terms of that, What you're calling components, but that word, I know
[00:19:16] Taylor: Yeah, I know. I,
[00:19:17] Jared: negative connotation. So,
[00:19:20] Taylor: they're, they're, they're functions, right? They're, they're, they're just pure, pure, unadulterated, uh, view functions. Yeah.
[00:19:28] Jared: yeah, yeah, right. It doesn't need to have the entire Elm architecture in order to have a view module somewhere, or I mean, a view function somewhere in some other module. And so, yeah, I, I prefer that just because if I'm going to work on something, I can, I know I can go and look in this place. And if it, if it has other helper modules or other helper style related things, that's great.
[00:19:57] But I always know I don't have to like, okay, it's related to this thing. So I have to search this CSS class and then go find it in another file magically, or, you know, pull in, I don't know. I just don't. I like to, I like functionally organized applications so that I can think about it in those, in that way.
[00:20:19] But yeah, it's, uh, it's definitely in terms of if you, I know you're, you have these ideas around cheap web things, right? And I think, and I think if you were to think about it in that way, you might want to have, things more separated just because then you could start with this unstyled version and make it good enough or frugly, I believe is one of the terms
[00:20:53] Taylor: that's a, that's a new one. Yeah.
[00:20:54] Jared: yeah, yeah. And so, yeah, you want to talk more about that.
[00:21:02] Taylor: Well, yeah. Yeah, I think, I think, um, I didn't realize that that's why I was thinking about it, but that cheap web, uh, idea was very much, um, like, I wish like a lot of web pages were just nice without CSS and I could just like add my own CSS, you know, like I'm, I'm on, if I'm on like Reddit or Hacker News, right?
[00:21:22] Like I wish they were, they were like less, uh, connected so that I could just style it myself. Right. So it's just like, they, they provide the data and I can provide the styling. So I, I like that idea in terms of like making things cheaper. I wish the web was like that. But at the same time, It does feel nice to just program everything in line and just not give the uh, the user that choice.
[00:21:47] All
[00:21:50] Jared: can think about it in a couple of different ways there, where if you're trying to present a web page, that is different than presenting a web application, right, that has a lot of complex stuff going on, right? And if you're building a complex web application, organizing those things around the functionality, Is a lot more important because that thing could be huge, right?
[00:22:15] That's why we have single page apps. That's why we have all these different frameworks and things is because we're building these complex systems on top of the web. But if, yeah, you're going to build a website for displaying information, right? Just sharing things, then yeah, it's not really, as important.
[00:22:38] Taylor: right, fair enough.
[00:22:40] In my
[00:22:40] Jared: mind
[00:22:41] Taylor: to hear what the uh, what the, what the true voice of Elm says. Uh, love it.
[00:22:49] Custom operator confession
[00:22:49] Taylor: Um, oh, I've got a, I've got a little story for you. Hm. K., so I, at one point in Elm, you could have, Custom operators. Uh, and those were, I think, Banned in like, uh, version 19. Or something like that. I'm pretty sure that I'm one of the reasons they got banned. Um, I was reading this book right here, uh, To Mock a Mockingbird by Raymond Smullyan. It's about combinators. I made this awful combinator library with the absolute worst operators. It was kind of a joke, just kind of like a way to learn. But this thing was unholy, um, and It was like shortly after that that uh, that uh, Custom Operators went away.
[00:23:44] So I, I, I feel personally responsible. I'm sorry to all of you who missed out on that feature.
[00:23:51] Jared: that sounds pretty interesting. Let's, uh, let's dive in a little bit more. What were you making? What were some of these operators? What do they look like?
[00:24:00] Taylor: Oh dude, I had all, I need to um, what was it called? It was called elm-pointless. Um, let me find it real quick. Uh, so, I even had like a um, I even had like a, I created all these dumb terms like Flargs, and you had like multiple A's in it to, to, to, you know, denote how many, like what, what, uh, what the combinator was in.
[00:24:30] It was, it was just so bad. I need to find this thing and send it to you. Maybe we could put it in the show notes.
[00:24:35] Jared: Yeah. Yeah. We'll do. Interesting. Okay. So you feel responsible for that not being there, but I think, you know, generally thinking about custom operators and talk as we were talking about CSS and kind of relating to their style and how you find things, right. One of the things that is maybe. Part of the motivation for that, or as I understand, to be part of the motivation for that.
[00:25:07] I'm not officially the voice of Elm in any way, but from my perspective, I see the custom operators, of course, yeah, you can kind of abuse them in that way, but then just the discoverability, right? You know, as we were talking about organizing things in terms of their, their function. Seeing something that's been exposed within a module and it doesn't have a name, right?
[00:25:33] Like, do you know to go look that that could be a custom thing? Or if you're new to the language and you see Elm Pointless stuff in there, and it's, you know, a lot of these, a lot of these operators and you're like, Hmm, I better go ask about this on the Slack or I better go to Stack Overflow or wherever that person, you know, they use Google or, DuckDuckGo or Kagi, you know, uh, they are trying to discover the source of that.
[00:26:04] And when it's a bunch of, you know, a bunch of symbols, right? Maybe, maybe that's less likely to go look and, Oh, is that imported? I dunno.
[00:26:15] Taylor: Oh yeah. Like, I very much agree with the decision. Like, that was one of the things I hated about Haskell. This was, uh, this was a little learning experience for me. So I have no hard feelings about them being removed. Cause, cause I do, I do. The only operators I was like scared to lose was the, the parse and keep.
[00:26:35] I, I make a lot of parsers and I love having the little, uh, visual indicators in the pipeline. Um, love, absolutely love those. I'm glad those didn't go. All the rest, uh, I'm glad they're gone.
[00:26:48] Jared: Fair enough. Yeah. Yeah. Those are nice. So yeah, a little bit can go a long way and, um, custom operators. Really cool.
[00:26:59] Building a crypto wallet
[00:26:59] Jared: So you've, you were using Elm as, as a way to build out this, this product, right? You were talking about the wallet that you were making in Elm.
[00:27:10] Taylor: Right, right. Uh, security is a big thing in, in, uh, in the, in the whole blockchain world. So that was, um, I, I remember like going to the CEO and being like, okay, we currently have this thing in react. I'm like, look how many lines of code that we have to trust. And we're using like 60 packages. I'm like, this is non viable.
[00:27:32] I was like, I was like, this is not secure. Um, so I made like a little iframe thing in Elm and it was like. We could inspect every single line of code in the whole thing, all the packages. I think there was one package we used, that was just such a huge value add to be like, Hey, this thing is probably very secure because there's no, there's no weird code running in there. So that was, that was how I was actually able to, um, sell it. And, , it happened to also be just way snappier. Like everyone was very happy with, uh, with the, the end result, um, compared to what we had at the time.
[00:28:12] Jared: Nice. Cool.
[00:28:14] All the way to the back
[00:28:14] Jared: So you were using Elm and you were building this stuff and then what happens next? Where do you go from there?
[00:28:26] Taylor: I think I had one React job, decided I was never going to write React again, uh, and then ended up going, getting a job as a database person. Um, I had this. I was, I was managing a database that ingested all of the, the songs and videos on the entire internet in real time.
[00:28:52] That was very stressful. Yeah. It was, it was, it was crazy scale. Um, that was, that was a giant distributed Postgres database. Um, well, the Postgres database held all of the metadata. So things like how many likes, what, what's the title of this stuff? Um, We had a different, we used FoundationDB for the fingerprint data.
[00:29:18] Cause this was a, , video analysis company,
[00:29:22] but, uh, my Postgres was my baby and that was stressful.
[00:29:27] Jared: Wow. Okay. So that's a, a bit of a shift. You, you shift out of the front end at that point, right? And now you're doing back end, you're doing. All the way to the back.
[00:29:39] Taylor: Yeah. Yeah. All, all the way to the back. That was a major jump. Um, I think what, I think, I think. Building up the knowledge of types was extremely helpful for being able to do database schemas. Um, I, I also had like a bunch of experience with making things performant, so, you know, understanding how the CPU works and how these, these, uh, pages are, are being arranged on disk, um, is essential.
[00:30:13] But like having that functional mindset of what's valid and what's not, I think was extremely helpful. For architecting the next giant, you know, next wave of products that they made. I Inherited a very big, ugly, scary database. And got to architect one after that.
[00:30:33] Jared: Okay. Yeah, I see. All right.
[00:30:36] The Great Wall of Code
[00:30:36] Jared: So front end to back end, working on databases, architecting, what's this about The Great Wall of Code
[00:30:46] Taylor: The
[00:30:47] Jared: you had, you had said to ask you about that.
[00:30:50] Taylor: Oh, yeah, The Great Wall of Code. Um, ok. So it is something. It was actually around that time, because I was writing a ton of SQL. SQL doesn't really modularize, right? Like, you just write one, one big, ugly, like, thousand line SQL query, and that thing is just, it just runs, uh, until you change the underlying table.
[00:31:17] Um, but, I remember I was at Strange Loop, and I was talking to Evan, and I was asking like, hey, how do you, um, how do you personally, arrange modules. Like what, what are the size of your, your, your files generally? And he's like, he's like, there's nothing wrong with having a 3000 line file. I just looked, I was like, Whoa, that just, that just blew my mind.
[00:31:42] Ever since then, I have been writing lots of very large files. Now, I don't think he was recommending to do a large file. I think his advice was like, Hey, do what makes sense. Um, there's no, there's no pressure at any point to like split the file. Like you'll, you'll kind of know when to split it. And ever since that, and with the SQL experience, I've just been kind of like.
[00:32:07] Not breaking things apart unless I need to, and it's been great. It's been absolutely the right, the right move. I just have these big, giant, you know, nested things and it's okay. Like I don't need to add and remember variable names to everything and put things in modules. Um, so I call, I call that the, the, The Great Wall of Code.
[00:32:29] 'cause um, I've, for a few personal projects, I've, I've brought in some friends and they're like, what is this giant file? Like, it's The Great, it's The Great Wall of Code Um, yeah, the, the, the major, the major thing that, that, uh, convinced me was how much easier it is to refactor when you don't have module boundaries to renegotiate.
[00:32:54] Uh, if you get those module boundaries wrong in the beginning, like moving things around is just a pain, you've got the mental model all wrong. Uh, so I just, yeah, tend to stack things until I can't stack them. And I'm like, Oh yeah, like the, now is the time to, uh, break things out.
[00:33:13] Jared: Yeah, yeah, and I,d there's a video about that, that Evan gave a presentation, The Life of a File, I believe it is, where he talks about that particular idea, and yeah, that's one that is always a struggle for people coming from. I think languages like JavaScript, right? Where if you don't break things up as quickly as possible, it becomes difficult to manage because you have state that can, you know, get out here and get out there and, and, and it's hard to find references and things like that.
[00:33:57] But yeah, when you're using Elm, then you have those. boundaries, but they're, like you said, they're not as strict as if you then break them out into modules and separate things before you're, you've really settled on, is this the same or is it similar? Is it unique? Those type of, of questions. So,
[00:34:26] Taylor: I was um so my friend, he likes teasing me about Elm because he doesn't understand fun... he like, he's, he's a very good React programmer, uh, and I think he's like, curious about this whole world because I make a lot of claims, um, that like, I don't know, just, so for instance, uh, he's like, how's the new job?
[00:34:48] I'm, I'm, I'm working an Elm job now. And I'm like, oh, it's great. Like I, I have, I have a single, 2000 line view function that I have to worry about right now and that's it. That's like, that's like it. And he's like, Oh, that sounds terrible. I'm like, it's, I was like, it's just one file. Like I only have to worry about one file.
[00:35:07] Everything is like very easy to decode because you could just go in and look visually at where things are nested. Right. Um, and I was like, would you rather have one 1800 line? Function. Or would you rather have, like, 1, 800 one line functions? I was like, there's no, there's And he's like, actually, yeah, when you And we did chat a little bit about, like, what's the right size for a function.
[00:35:35] Um, I think he ended up saying that he'd rather have 1, 800 one line functions. And I'm like, eh, I haven't convinced him yet.
[00:35:44] Jared: Well, those functions could be in the same module still.
[00:35:49] Taylor: He was, he could not believe that, like, The app that I'm working on fit into 1, 800 lines. Cause I send him screenshots and he's like, Oh, we're like, he, he just, I was like, I can't send you the code because it's like, you know, private, proprietary, but like, trust me, it's only 1, 800 lines, the whole stinking thing.
[00:36:12] Jared: Nice.
[00:36:14] Taylor: Yeah.
[00:36:15] Jared: Yeah. Cool. Okay. So yeah, you, you've brought up that you are now working on the front end again, you're back in Elm. So is this, we didn't talk much about kind of your, your writing, um, But yeah, I know you've been doing a lot of that recently and then now you're, you're doing this, this Elm job. That's, that's really exciting.
[00:36:40] Do you want to tell us more about that?
[00:36:42] Taylor: Yeah. So I think before I get into this, this Elm job portion, I want to say that, um,
[00:36:50] Elm folks on the backend
[00:36:50] Taylor: That DB experience that I had, uh, I think is underrated. I think more people in frontend should move into backend or vice versa. Um, I have been, how do I put this? What's, what's the movie where they, they have the, the space, the, the astronauts, but they need to get miners and they need to send the miners out to the asteroid to kill it because they can't, 'cause it's easier to teach miners to be astronauts than vice versa.
[00:37:22] That's the whole premise of the film. I, I, I think it's Armageddon, but I, I
[00:37:26] Jared: Yes, that's it. Yup.
[00:37:28] Taylor: so that's, that's how I feel about this experience with the, uh, with the database thing where it's like, I think it's easier to teach a person, a front end person with, with, uh, good taste, you know, how to, how to, uh, to think about performance and schema stuff than vice versa.
[00:37:47] Right. It's, it's, um, anyway, sorry. So I think, I think more people, more front end folks should really think about databases. Um, I've been doing like a little bit of consulting, uh, after the database job. And there's so many companies that literally their, their whole problem is that a non front end person designed the database and they just get in these Figma doom loops because the person on the database could not conceive of what they might, what the product might, might need. And so, um, I really do think that the front end people are like very much undervalued in the database space because they can anticipate what's needed and just prevent so many unnecessary migration, you know, changes and updates.
[00:38:35] So I've been helping, uh, companies recently design things in such a way that they won't have to redesign them for the front end. And that's been, that's been fantastic. I wish more, uh, I wish more Elm folks would, uh, would help me in the, in the database land. It's, it's, it's been great.
[00:38:55] Jared: Oh, nice.
[00:38:57] Taylor: Um,
[00:38:57] Jared: Okay. Yeah, that's, that's good advice. So learning kind of the, In this way, I considered it kind of full stack, right? You're kind of learning what happens on the other side as opposed to only knowing one half of the side. Now you're saying that this, it might be easier to teach. Why do you think that is?
[00:39:23] Taylor: I think, especially with the Elm folks, they understand the importance of state. And they understand the transformation and, uh, the holding of state and how that can be a problem and how to respect it and treat it with care. Um, I think, I think a lot of those values, especially for the, for, for the Elm people, um, are very good for understanding how to make, uh, Databases that don't need to be changed later.
[00:39:57] Um, in the reverse, you take a, take an average DBA and try to teach him CSS. And he's like, forget it, man. Just, just absolutely no. Um, and yeah. So, so I think, I think that's the, I think that's the asymmetry there is. Is you have one group that really cares about state and then another that doesn't tend to care about design. Um, and the state side is just so important. Um, all the stuff in between personally doesn't matter that much.
[00:40:33] Like, uh, between the, the, everything between the front end and the database tends not to matter that much to me. Uh, because you know, it would take it for an average company. It would take me. I don't know, a weekend with GPT to switch from Go to Rust or any of those. Like the, you're just moving data around.
[00:40:53] It doesn't tend, unless you have like some secret sauce, uh, algorithms that are doing stuff outside of the database. Um, it's generally pretty easy to grok. It's that, it's that holding of the state that ends up causing a lot of people problems.
[00:41:08] Jared: Yeah. Yeah. Okay. I get that and that makes sense.
[00:41:13] Pairing learning experiences with deliverables
[00:41:13] Jared: So thinking about it in terms of design, this makes me think about a question I had about you on your blog. It says you write about learning and as someone who was has thought in design thinking and has done front end and then to go learn this database stuff. Do you have any thoughts on How people could approach that better. What, what ways could influence how they think about it?
[00:41:48] Taylor: Hmm. I. Like many other engineers am prone to Wikipedia spirals, like these, these Wikipedia things, I have found pretty much all of those to be wastes of time in retrospect for, for, for the most part. Um, most of my really good learning has come from, uh, Has come from just doing things, right? Like. Like, Hey, I want to, I want to make this and then just kind of figuring out how to do it, uh, with no, no experience.
[00:42:22] Um, a subset of that is I, I got, I landed a few jobs because I was a little overconfident in what I could do. And then I had to, you know, get my skill, catch my skill set up. Uh, I think not a, not enough people are, um, are willing to put themselves in positions where they need to learn something. Um, highly recommend that, right?
[00:42:44] Like. Tell somebody you're going to do something and then do it.
[00:42:48] Jared: Okay. Yeah. So it's, it's a way of kind of putting yourself into a position that is a forcing function for the learning.
[00:42:57] Taylor: 100%. Yeah. Huge believer in forcing functions. Huge believer in putting, putting, delive pairing your, uh, learning experiences with deliverables. Uh, like having an output that you want to work toward. For instance, like, I've been trying to learn Spanish for a while, and it's, it's like, impossible because I don't want to use Spanish for anything, so I always just put it to the side.
[00:43:22] But if I've, for instance, if I was like, oh hey, I want to go to like, Peru in 2026, and like, I bought a, I bought a plane ticket, right? It would kind of, it would kind of like, it would make it real, right? Like, it would make this experience of like, oh hey, I get to learn Spanish so that I can go do this thing, Makes it like a real experience.
[00:43:42] Unfortunately, I just don't have the time to go to Peru. But like, um, uh, Yeah, I think that's the gist of my learning strategy.
[00:43:55] Jared: Yeah. Those are good things. Yeah, I've thought about that too. What can I do to force me to learn something? And I've traveled a little bit and learned German in college, and so I went to a summer program in Germany. And that was good, except that When you go to somewhere, and this was a college town, so they were all eager to learn, but they wanted to learn English.
[00:44:22] So they were ready to practice their English with me, which made it more difficult for me to, to practice my German. But I was thinking, well, maybe with something like Spanish, it's, oh, I can try to teach a class on programming in Spanish. And then I may not have the everyday language, but at least it'll force me to take an existing set of knowledge and apply that in, in this foreign language.
[00:44:50] So
[00:44:51] Taylor: I just finished reading Surely You're Joking, Mr. Feynman. Excellent, uh, hilarious, uh, read. Just a whole bunch of, uh, stories from this, this, uh, crazy, Nobel Prize winning physicist. He's, he's excellent. One of them, though, is him talking about him learning, um, Portuguese and then teaching, like, within, like, two or three months, like, he's teaching physics classes in Brazil in Portuguese.
[00:45:18] Um, and yeah, it's a great one. Look it up,
[00:45:23] Jared: yeah. Okay. That sounds cool. And it sounds like he's using that right. The, by creating that forcing thing that says, okay, if I'm going to be able to teach this, I have to really understand it. So yeah.
[00:45:37] Taylor: Um, so okay,
[00:45:39] The new Elm job
[00:45:39] Taylor: back to your original question about the new Elm job. I now get to work in Elm full-time, uh, for a company called Replenysh. I love their mission for sustainability, and they're in SoCal, which is like. Double great for me 'cause I live in SoCal. Um, and what they do is they, uh, well they work, they work with logistics, uh, uh, sounds, sounds like something down your alley.
[00:46:08] They, they work with, uh, technology and logistics to build a, uh, circular supply chain. The whole thing is like, let's not put things in landfills and make it economically viable to do so. So they work with a ton of different clients, just like, hey, let's get our aluminum back into the factory, right? And that is, it is insane to me how that's not like, already a thing.
[00:46:37] Jared: Yeah.
[00:46:39] Taylor: Like, these companies, why, why, like, why aren't they trying to get their materials back?
[00:46:44] Jared: Yeah. Well, that's, that's great news. Yeah, I, I really like that concept. And it does seem when, once you say it, it seems like, yeah, why don't they do that? It makes me think of something that my partner, my, my wife, Brynn, she had come up with and she was talking about how she learned that, When there was starting to be a lot of, like, trash bags that had companies names or, like, you know, Coke cans that have Coca Cola on it, it was a bad image for the company.
[00:47:16] But instead of taking the responsibility for cleaning that up, they tried to make individuals feel more responsible about it. And, like, change the messaging that You know, it is your responsibility as an individual, which, of course it is, right? But that, that, that was the alternative way. It's like, well, we don't, it doesn't cost us if we just, you know, make them feel bad about, about creating trash in the world.
[00:47:45] Right. So, and then it gets cleaned up.
[00:47:47] Taylor: Right now it is cheaper for a given company, . It's cheaper for a given company to make you feel bad about them not doing their job right, like they can, they can hire pr, PR folks is now, right now it's cheaper for them to hire PR folks than to actually get their materials back and, uh, Replenysh is trying to change that.
[00:48:07] So I'm like, all about it. Uh, very, very happy. And their whole stack is Elm and, uh, Postgraphile. It's a whole GraphQL thing. The whole thing is, uh, based on Nix packages. It's just functional all the way down. I am, I'm I am elated. It feels so nice. Everything just works. Uh, yeah, I'm, I'm just, I'm just so very happy to be working on this.
[00:48:32] Cause the, the person who architected this, uh, was just, was just, uh, a hundred thousand IQ, so good.
[00:48:42] Jared: Well, congratulations. I'm, I'm really glad to hear that you're doing that and that it. is, you know, something that is really going to, I hope, have a positive impact on the world and yeah, and kind of make it viable for them to do so. So yeah, you can, if you can create the incentive, then that's why they want to do that.
[00:49:06] That's, that's great. Um, so yeah, we're nearing the end here and. I know there's, there's so much.
[00:49:15] Why I didn't play this harpsichord sooner
[00:49:15] Jared: We talked about this before we started. I get on your website, Taylor. town, and I start reading things and I go down these different paths and I'm like, Oh, there's so much good stuff here. The writing it's, it's smart. It's funny. And it's deep, and I really recommend that folks go check that out. But I wanted to talk about a couple of these because, um, I just thought they were neat ideas. One of them is this article called, Why I Didn't Play This Harpsichord Sooner. Do you want to
[00:49:53] Taylor: yeah, that's a good
[00:49:54] Jared: talk about that?
[00:49:55] Taylor: yeah, yeah. So, that one was a, was an unusual piece. I don't know. I've been, I've been trying to learn how to talk about things more personally. I think, I think in school, they teach you to write yourself out of all of the essays, right? You're supposed to be this non biased observer.
[00:50:14] I think I've been trying to unlearn a lot of that. And the Harpsichord one came from a simple question I asked, why don't more people have personal websites? And I replied with that question on, on Hacker News and somebody, I got a bunch of replies. None of them felt quite right. Cause, um, I think, I think they were right in that it is a technological problem.
[00:50:39] I was more interested in like, yeah, why, why don't, why aren't more people interested in creating things? And I kind of thought about myself and, um, I only really recently started shipping things and creating things in earnest. I did a lot of Wikipedia rabbit holes for a while and I kind of compared that experience growing up in a very conservative group where everybody played music.
[00:51:05] And it felt weird to me going to Los Angeles and, and observing that like, oh yeah, there's actually fewer people. Like, like the, the average, the, the, on average, fewer musicians than I, than I had grown up around. And that, that felt weird. And I don't know. There's, there's an interesting parallel though, for websites that I'm unsure about still, but there's a parallel there. Oh
[00:51:28] Jared: Okay, yeah. Well, I guess what I liked about it was you created this metaphor, right, of this harpsichord for whatever your creative outlet is, right? Like, why don't people, that's the way I read it anyway, is why don't people have and, and actually, you know, actively work on their creative output? But I, but I like that you Mention this in, in terms of your own personal experience.
[00:51:58] And in terms of, I know you have a couple of different terms here. The, uh, Candid Culture is one. Yeah, that, that's, that's a good one. I like that. And then, uh, of course, going back to Hunter S. Thompson, Gonzo Journalism. That, that is, uh, that's a good one that I think is really helpful because, and again, Before we start here, one of the things that I like about Elm Town is we talk about people's personal experiences, right?
[00:52:26] We talk about their struggles, what their motivations are, and like how to overcome and why people are in the Elm community, right? So, I think that if you don't have that, part, then there's a missing connection, right? With that drive of these are the things. And sometimes you want to do that, right? Sometimes you just want to state the facts because it is so polarized that if you try to weave in some, you know, politically charged thing, then the message is lost, right?
[00:52:58] But, but if you personalize it, right? And you bring it down to, well, if you look at what a person is thinking about, they're not thinking about This rhetoric or that rhetoric or this line, you know, they're just thinking about what are the problems I'm trying to solve? What did I struggle with? How did I get through?
[00:53:13] And, you know, and then I think that there's something real that comes out of that, that people connect with. So yeah, I, I really, I really appreciate you creating that, uh, that just your you're just your harpsichord, right. And in playing your harpsichord, so
[00:53:27] Taylor: Thanks. It, it, it took a while. uh, had a, had a lot of, um, uh, yeah, I, I, for, for anybody that is, is disappointed with, with, or feels behind, I think, I think feeling behind seems to be an ev increasingly, um, increasingly common experience. And there's, there's ways out. I don't know how I got out, but I got out I, I was feeling behind all the time and. Now I don't feel that way anymore. It's great. But, I don't know, if anybody has the answer for that, please write about it and publish it online. Because so many people feel this way and there doesn't seem to be any good, um, I don't know, good advice.
[00:54:17] Jared: Sure. Okay. Well, maybe we'll find something that you've written in the future more about that too. So yeah, I, uh, I don't know. I don't want to lead anything, but
[00:54:32] Taylor: I have not been able to figure that one out. Um, and, uh, Yeah, I don't know. I feel like, I feel like somebody that's in it needs to do it because I think, I think like, I also think with a lot of these advice, I try to stay, I try to stay away from like writing about advice stuff because I think we, We do things, and then the problem is solved, and then in retrospect, we're like, Oh, it must have been this thing that I did.
[00:55:02] And I think we're kind of just making things up a lot.
[00:55:05] Jared: of course.
[00:55:06] Taylor: so, um, like you said, it's like, it's kind of better just to talk about the personal experience, the story, and not try to over prescribe. I am, I really like writing in like a imperative tone, though, so it's problematic for me. Cause It's just so hard to write without, if you, if you couch everything and I think, I believe it's just not good writing.
[00:55:31] Like it feels so, so, uh, watered down. But at the same time, like, I don't, I'm not, I'm not, I'm not very confident in pretty much anything. I'm like very not confident, uh, at least with, with like, uh, my, my, my knowledge and opinions and stuff. I'm confident that I can figure things out, not very confident. In having them figured out already.
[00:55:56] Uh, so, so yeah, I don't know if anybody has any advice on that, on that front too. I'd appreciate it. The writing forcefully is a scary, but I have not found any other solutions.
[00:56:12] Jared: Yeah, yeah, that's maybe that's it, because for me, when I journal, it helps because, and I do the same thing where I do it in the imperative, but when I'm saying you, I'm talking about me, but it helps me to also gain some perspective by not saying I, so it allows me to kind of take a step back away from it.
[00:56:32] And then when I go back to reread it, then it can be a bit prescriptive. It can be, you know, you need to do not necessarily you need to, but like, you know, you thought this, or you're going to do this, your principles are whatever. Right. Like when I write like that and I go back and read it, I can more likely.
[00:56:53] I feel like, and this is just, you know, maybe I'm just doing it and it, and it, and it just happens to be that way. But, um, it feels like that disconnect between it is me and it's something, some actions I want to take or something that I think is useful right now, uh, is a nice distinction for me. So don't know, maybe that's it.
[00:57:19] All right. Well, we're at an hour here. Is there anything you want to talk about before we get to picks?
[00:57:26] Taylor: Oh, before picks.
[00:57:28] I don't, I don't think I have, uh, I'm trying to think. Um,
[00:57:32] Oh, I mean, Hey, just go, go, go read Taylor.Town.
[00:57:36] Jared: Yeah, okay.
[00:57:38] Taylor: about it.
[00:57:39] Jared: All right, fair enough.
[00:57:41] Picks
[00:57:41] Jared: Well, Taylor, what picks do you have for us today?
[00:57:44] Taylor: All right. Uh, before, uh, just, just for a little insider baseball, uh, before, before we recorded the episode, he was like, do you have any picks? And I'm like, oh, I can't, I can't think of any. He's like, oh, maybe you'll, maybe you'll think of some along the way. I've got so many from this conversation. Uh, uh, first one, uh, a book called Cradle to Cradle, a very good book about, um, sustainability from like, a chemical perspective, like, that was the mind blowing thing for me, was, um, it wasn't, it wasn't really a, uh, book on Um, let's say, it wasn't just like moral and like theoretical things. It was like, It's somebody with a very strong, um, chemical science background. Uh, what is the word I'm looking for?
[00:58:32] Material science. Um, so very good. Cradle to Cradle. Very good book. Um, I think I also want to recommend A Timeless Way of Building by Christopher Alexander. Um, I recently stumbled upon this book and it's, it's about like building architecture, like house architecture, but it's also very much not, and kind of mind blowing some of the concepts in there.
[00:59:01] If you're interested in design and design systems, highly recommend that one. What else? Uh, I highly recommend the Elm Town podcast. Uh, Elm Town is excellent. Uh, and they are, they are very kind for having me on.
[00:59:27] Jared: Well, thank you. You didn't have to say that. I appreciate it.
[00:59:32] Taylor: That's one of my picks, dude. You, you have to, you have to live with it.
[00:59:35] Jared: All right. Anything else?
[00:59:40] Taylor: Hmm. I think my parting words for our audience today is Go. Go forth. And build. Build that great wall of code.
[00:59:55] Jared: Yes I love it. Great wall of code. Yeah, excellent. Okay. Good picks, and, uh, I just have two picks today. The first one is I was creeping on your music history and you review some music on your blog and, and saw that you listened to some Vaporwave, you had some CYBEREALITYライフ in there. And so there's one that I recommend called Nmesh.
[01:00:27] It's actually someone from Louisville, Kentucky, which is near me. His name's Alex Koenig, but goes by Nmesh. That's the letter N M E S H And some of the titles are explicit, so if that's not your cup of tea, then don't look it up. But if that's okay, then there's usually not lyrics, so it's just a vaporwave.
[01:00:52] It's just something that I like to code to, and keeps me stimulated as I'm working. So, uh, that's my non Elm related pick. And the other one is if this is you listening to Elm Town and you're not using Elm yet, as this is how one of the ways that I got started was I listened to a lot of what was going on in the Elm realm before I started becoming an Elm programmer.
[01:01:21] So I recommend the official Elm guide. One of the things that I mentioned on here. was us talking about how to break things apart, and of course, the great wall of code. But one of the things that Evan has in that official guide is thinking about the same versus similar versus unique. And that is just one of a very succinct guide.
[01:01:48] It's not like you have to read a whole lot to get through it, but there's a lot of cool things in there. And so if you're getting started, that's a great place. To go
[01:01:59] Taylor: Dude, I'm a, I'm a veteran and I need to learn that.
[01:02:02] Jared: I go back to it. I go back to it for sure. Yeah. There's nothing wrong with going back and kind of emptying your cup and starting
[01:02:09] Taylor: Oh, the empty cup. Oh, beautiful, beautiful.
[01:02:15] Jared: and build up your wall of code, so I just want to say thanks to all the folks listening out there. Please rate and share if you're enjoying the show, and thanks Taylor for coming to Elm Town.
[01:02:28] Taylor: Thank you.
[01:02:30]