The Changelog: Software Development, Open Source - Don't sleep on Ruby & Rails (Interview)

Episode Date: January 6, 2023

Welcome to 2023 — we're kicking off the year talking to Justin Searls about the state of web development and why he just might write a "You Might Not Need React" post. He's been so productive using ...Turbo and Stimulus (and tailwind) in Rails 7 that we had to talk about the state of Rails development today and a bunch of other fun topics around building for the web in 2023.

Transcript
Discussion (0)
Starting point is 00:00:00 Okay, we're back. This is 2023. Welcome finally here. And we're back officially the very first full length episode of the change all this year. And we're talking to Justin Searles about the state of web development and why he might just write and you might not need react posts. He's been so productive using turbo and stimulus and tailwind in rail 7 that we just had to talk to him about the state of rails development today and all the cool things happening around rails and a bunch of other fun topics around building software for the web in 2023 a massive thank you to our friends and our partners fastly and fly fastly is fast so that means our pods are also fast globally. Learn more at
Starting point is 00:00:47 fastly.com. And our friends at Fly are helping us put our app and our Postgres database close to you and every other listener around the world. You guessed it, no ops required. Check them out at This episode is brought to you by Century. Build better software faster. Diagnose, fix, and optimize the performance of your code. More than a million developers in 68,000 organizations already use Century, and that includes us. Here's the easiest way to try Century. Head to century.io slash demo slash sandbox. That
Starting point is 00:01:27 is a fully functional version of Sentry that you can poke at. And best of all, our listeners get the team plan for free for three months. Head to Sentry.io and use the code changelog when you sign up. Again, Sentry.io and use the code CHANGELOG. Well, we're here with Justin from Test Double.
Starting point is 00:02:08 What's up, man? Welcome to the show. Hey, thanks so much for having me back. It's been about a decade since you last had me, and I didn't know whether to take that personally. I wouldn't do that. It was actually, we've been missing you. Yeah. Yeah, the wisdom. Bring it. Yeah, I don't know if I have wisdom so much as...
Starting point is 00:02:25 Opinions, wisdom. Yeah, I have... What's that thing we're supposed to have is strong opinions loosely held. Yeah, I've heard that one. I'm a firm holder, just constitutionally. And so I speak with zeal and passion, and I change my mind every couple of years. There we go. Well, then we have you back at a good time, because maybe your mind has changed.
Starting point is 00:02:48 Maybe it hasn't. One thing that's happened in the meantime, of course, any listener who remembered that first episode, congrats to you, I guess, for sticking around for a decade. That's right. And remembering Justin Searles was on back in the 100s, talking about linemen JS. You've also been on other shows around our network. So people can go back into the feeds and find more of Justin's strong opinions firmly held on our other episodes.
Starting point is 00:03:14 But you've also been running Test Double for a decade plus. This is a thriving dev consultancy shop. I'm not sure what y'all refer to yourselves as, but tell us about Test Double, just like size of the not sure what y'all refer to yourselves as, but tell us about test double, just like size of the company and what y'all do. Yeah. Well, um, first I got to correct the record that at really no point have I ever run the company. Uh, and so I think I credit a lot of our longevity and success, uh, to that fact, uh, my test double is really the story. Um, at least it's how we started of me me and my co-founder, Todd Kaufman.
Starting point is 00:03:46 Because he and I have, we share all these same principles and values and broad strokes opinions about this industry and the mission that we're on to improve how the world writes software. But if you looked at us from a temperament and a skill perspective, we couldn't be more different. And he's our CEO, and he's the guy who can, you know, run the company. And I, um, I used to be really good at tweeting and I've been working on that. Now I'm learning how to toot, uh, and getting back to blogging and YouTubing and all that stuff. Um, but honestly, I think that the, the thing about test double to know at this point in 2022 is we're about 105 or so, 100-ish consultants. We embed most of our engagements as a consulting company. We are embedded with engineering teams at companies who give a shit about trying to do things better. And that's
Starting point is 00:04:38 really universal. Anyone who thinks that software should be better and is striving to get better and wants some outside salt to both get stuff done, accelerate a team's ability to deliver stuff, and also leave their team better than we found it is a good partner for us. And we've got clients that really run the gamut from startups building new products to companies like GitHub and Gusto who are trying to renovate large and existing codebases in a nimble fashion. We are very adaptable to meeting our clients where they are and understanding that you've got to start somewhere. We've built a really gifted team who are skilled at hitting the ground running and understanding you know that they got to win win win hearts and minds by just showing up and doing the work and so you know i i think of us as sort of like you know we used to joke that we were like a blue collar
Starting point is 00:05:35 agile software consultancy back when people still use the word agile with some regularity it was the selling point right like the agile the agile agency, we must find Google agile agency for hire. Right. It must be a challenge running that kind of business, right? I mean, you said you don't run it admittedly, but I'm sure you're a part of how it operates and part of its success to some degree. I mean, be humble if you need to. I'm curious, is that a challenge? Like I think of like the top tiles and the placement agencies. How have you been able to survive, if not thrive, I don't know, for 10 years in a world where you've got top tile in the top 3%?
Starting point is 00:06:16 And I only say that because they're a past sponsor. We kind of know their message a bit. And that's the one I think of most when I think about a brand or a company who cares about placing software developers globally, really, like the one I think of most when I think about some, a brand or, you know, a company who cares about placing software developers globally, really in a realm of like ability to place the better ones, you know, like they've got a vetting process, a certain amount get through that process and they, you know,
Starting point is 00:06:37 engage with, you know, the get hubs and the gustos. Like how do you compete or how do you operate in a world where that exists? Well, if you went to our website, testdouble.com, which you should do, it wouldn't really tell the full story of how we're different from a staffing company or a placement firm like those or like Upwork or something. Because if you just compare our people versus other people based on hourly rate, as if you're doing an apples to apples comparison of what you're going to get. I think that's a flawed analysis because our company, what we really are is we're change agents. So if you go to Top Tail or you go to Upwork and you could take the highest
Starting point is 00:07:17 rated, you know, or rent a coder and you pull them into your organization, the best case scenario is that they onboard really well into the engineering system culture process code base that you've already built. And when you work with us, and what I think some of our best clients would tell you, is that our people change the culture that they're in for the better.
Starting point is 00:07:40 They work within your culture, and they're in it, and so they have all the context to understand ways that the team could improve or the organization could improve. But they're not of it. Our engagements are usually three to nine months long. We rotate on to the next thing. And so our consultants are driven by that mission and purpose. rotate between so many different projects, always meeting clients at really high stakes moments where they're trying to affect change in their organizations, it produces a pattern recognition machine in our brains as consultants that help us on each subsequent engagement. We show up and
Starting point is 00:08:17 we're like, oh, you know what? This rhymes with something I've seen before. Have you maybe considered this? Or, hey, I was at another client that had a similar problem. And, you know, would you be willing to give this a try? And that is a pretty big, I think, differentiator between us and a lot of other firms. And I think it's a big reason why we've been successful. Not because, you know, I've got firm opinions firmly held, but because I was able to talk a lot about them in public and attract a lot of people who've got, you know, strong opinions loosely held. And they may be able to live up to that mantra a little better than I can. So when people come to you and your teams, they've already sort of adopted or already bought into your view of the world, like what you think creates better software, or do you have to also
Starting point is 00:08:59 kind of sell them from the inside about the way you go about things? Because one thing I didn't know about you, Justin, is you do have a very specific view of things. And maybe it's changed over time. I remember maybe an older version of what it was. I could probably name a few things that I think you believe, but maybe we'll let you name off some of the things that Test Double believes in in crafting software. Is that a process that happens? Or do people come to you and they're like, we want the Test Double system? Yeah. You system. What's funny about that is if there's a spectrum, if there's two polar opposites between a staffing firm and a delivery firm that just claims to have figured out software development. We found the silver bullet. Our way is the perfect way. And when we founded the company in 2011, I was very cognizant because I was hanging out with people from Aethlite, from ThoughtBot, from HashRocket. I was hanging out at the offices of Pivotal Labs in Boulder and had some friends there.
Starting point is 00:09:56 And each of them had a different marketing strategy that basically said, we've cracked the nut on software. If you're frustrated about software, come pay us money and we will be the panacea to all these problems. Trust our people maybe up in this ivory tower who are going to hoist upon you this perfect code and you're just going to be able to pick up and run with it. And I thought that was both patently disingenuous because it doesn't respect the fact that I think software is just encoded communication between people and all parties need to be in the room working together through it. It's not like the artifact is what matters. It's the benefit is in the planning and the conversation and the shaping of that stuff. And so it's a joint collaborative exercise. And secondarily, I would look at a
Starting point is 00:10:43 company like Aethelite, which at the time had a kind of pyramid-shaped engineering progression scheme. I think I saw a diagram of this once with you're all craftsmen. And then the top was the master craftsman, and that was Uncle Bob, who was one of the owners in the company at the time. And I just remember thinking as somebody who likes, if I'm not humble, I at least like self-deprecating humor. I was like, I can't start a company, put me at the top of the pyramid, and then tell everyone that they've got to do things or think things the way that I would do. Because a big part of me and my co-founder Todd's ideology is inspired by D.W DW Deming, which is like in the Toyota production system, you've got to trust the people closest to the work to make the right decision. So if there's some talking head up in the clouds like me on Twitter saying like, no, this is how all your
Starting point is 00:11:33 tests should look, then it robs the team of being able to actually like look at their situation with all the rich context that they have and like make the right decision. And so I would say even from our first hire in 2012 and onward, there's always been a very healthy disrespect of Justin's ideas and takes. I'm more meaning to share them to be an exemplar of what it looks like to care a great deal about this craft and the journey that we go on as humans to kind of build, build great things together. Wow. Well said.
Starting point is 00:12:05 Great job. That's a great base to build from, honestly. I mean, to have that kind of, I mean, it is humble and it is self-deprecating in terms of humor, but I think that's a great base to build from because you need to, I like the idea of trusting the people that's closest to the work to have that rich context, as you said, to make the good decision versus somebody who's so far removed and potentially even domain-wise on something completely different. And your current thought may not translate well, so why would you disable them?
Starting point is 00:12:33 You've also stayed in the weeds for the most part, haven't you, over the years? I feel like maybe you're not, I don't know, you can tell us, maybe you're not deployed on specific projects and stuff, but I've seen you continually presenting your ideas in the public, showing real code, working on side projects, doing stuff that is real. And so while you don't want to have the ivory tower, Justin's, here's how we do things, I think it'd probably be fun working in your orgs because you probably do have to represent your ideas and let the truth come out through the discussion, through code, through argumentation. Do you feel like you've
Starting point is 00:13:11 stayed relevant over the decade? Or are you one of the people that's close to the problem or no? It's a great question. And I think that the answer kind of lies in my joking description that we were like a blue collar agile consultancy. A big reason that that answer kind of lies in my joking description that we were like a blue collar agile consultancy. Like a big reason that that was top of mind for me was I was seeing a lot of capital T, capital L thought leaders just slowly veer away from anything that looked pragmatic to just sort of becoming an echo chamber. It's a big reason why, you know, we'd never called ourselves like a capital A agile consultancy at any point, right? I'm not sure it was ever on the website, even the word. And if you think you've got it all figured out, then what ends up inevitably happening is you will be met with circumstances
Starting point is 00:13:55 for which like your prescription or your favorite way of doing things is not a good fit. Maybe it's no longer a good fit because the industry has changed, or maybe it was never a good fit for this kind of particular circumstance that you just hadn't run into before. And every time we as practitioners run into something like that, we have a choice. We can either dig our heels in and try to force the problem to be shaped like the solution that we like, or we can adapt and try something new. And maybe it'll have pieces of other solutions that we've seen in the past. But every single problem is a new one. And as a result, for me in my own practice, I'm very sensitive to the idea that if I just go off and speak at 25 conferences a year, or at least in the before time when there were that many conferences, if I just talk and talk
Starting point is 00:14:42 and talk, eventually I will lose touch of the work. And so I had a very fortunate, several very fortunate mentors early in my career. And one of them told me that everyone goes through seasons in their career. You know, we like to think of it as a progression. It's a step ladder that you're just like, okay, I'm senior one and now I'm senior two. And then, uh, you know, we've had all these kind of titles promulgate over recent years. Now I'm staff and now I'm principal. And like, that's the track. I think of it instead as in this season of my life, this three months or six months, I'm going to go heads down, sit really close to the ground and really listen for the pain points that I'm experiencing or that this team is experiencing. And I'm going to take notes.
Starting point is 00:15:23 And then, you know, Jared, when I went to speak at your conference at NEJS in Omaha, a big, what, what those events were for me was a chance for me to plant a flag in the ground and look back over the last six months of my life and say, what did I learn? Was it worth it? Like what, what from this experience that I just had might be useful for somebody else? And surely there's something, right? And there have been times when there really was nothing. And that's separate feedback about how am I spending my time and what am I choosing to focus on? And so what I've been doing this year has been to take dedicated time to build custom applications inside of our company at Test Double that a scaling business now
Starting point is 00:16:05 needs. You're a 100-person company. We've got a bespoke approach to how we staff people onto engagements to make sure that the client gets what they need and the people get what they need. And by building that, I've observed so many cool things about both new tools that are great as well as popular things that I think aren't so great. And that's the opportunity or that sewing gives me the opportunity to reap those sort of opinions from a more informed place where I can actually play ball with other people instead of just kind of talk at them. Yeah. Well, I think that's a great setup because that's kind of what we have you here to talk about to a certain extent today is some of your findings and some of your gleanings and learnings and thoughts about the state of web development,
Starting point is 00:16:48 about Ruby on Rails. I think there's some setup to this particular conversation. A few things. The first one is over the summer we did an episode, Adam, what was it called? A new set of web frameworks emerge, something like that. Where it was actually a trifecta, a sampler platter, I think we called it, of JS Party episodes
Starting point is 00:17:09 where we had interviews with Astro, Fred K. Schott from Astro, Mishko Hevery from Quick, and Luca Casanato from Dino's Fresh framework. And I was on one of those three original JS Party episodes and therefore was on the show. And one thing I said about Fresh at the time was, it seems like finally for me as a person who has roots in Ruby and Rails was my first big framework, if you don't count WordPress, which is where I really started, was Ruby on Rails. And then the Node thing exploded and we went kind of that direction as many of us did.
Starting point is 00:17:47 It seemed like the JavaScript community was kind of starting to finally come around and accepting that like a batteries included, full stack framework can be a good idea, can be a good thing versus the small libraries, you know, piecemealing everything together for yourself, which has kind of been the ethos of the JavaScript world. After listening to that show, we had a lot of feedback, some tweets,
Starting point is 00:18:11 kind of like saying Rails devs are out here listening to Dino team talk about Fresh and talk about some of these other things. It's like the Rails devs are out here kind of rolling our eyes because we've been here for a while. We've had this and Rails isn't cool anymore or whatever. People have to rediscover stuff Rails've been here for a while you know we've had this and rails isn't cool anymore or whatever and so like people have to rediscover stuff rails has been doing for a long time was kind of a part of the reaction to that um and then you had a post a tweet which today would have been toot but it was a tweet at the time which caught my eye and you said i've been so productive since getting up to speed on turbo and stimulus
Starting point is 00:18:46 which are parts of or sub components of a modern rail stack plus tailwind is your parentheses in rail seven that i'm at serious risk of writing a quote you might not need react blog post hold me back hold me back and i don't know if you ever wrote that post, but I replied. I said, sometimes just coming on a podcast and talking about it is like just as even more fun, right? Like none of the pain of writing and to which led to this conversation. So we've wanted to do kind of a rails catch up kind of an episode for a while. Adam and I have had in kind of in our list of things to do and didn't really see opportunity. And then your, your comments, I was like, okay, Justin's obviously feeling things about productivity with rails, with a modern rails set up versus some of the stuff you've been doing. Otherwise,
Starting point is 00:19:37 I guess react is the, the one named. So let's talk about it. Let's talk about where rails is. Let's talk about what's exciting and new or what it's good at, what it's gotten better at, maybe where it still fails, and how that compares to some of the other offerings out there in modern web dev land. So that's a whole lot of words. I will now stop talking and ask you to respond. Maybe give a little bit of your most recent experience
Starting point is 00:20:01 with what tools you've been using lately to build stuff inside of test double or otherwise. Yeah. Now as a contrarian with a lot of opinions, I have an inclination very often when I'm asked a question to ask if I can like answer a different question instead to start, which is to say I would, I would love to,
Starting point is 00:20:21 if it's okay. As a longtime podcast host, I say, no, you have to answer my question as asked. He's kidding. I'm kidding. Can we back up and just sort of set the table a little bit?
Starting point is 00:20:32 Because I'm sure everyone who's listening to this is coming to this conversation with different experience over the last X years. If you don't know me and you're just meeting me now, hi, hello. In the Ruby world, I was always sort of the outsider looking in for a long time. I helped start a Ruby meetup in 2006. We had an event.
Starting point is 00:20:56 I asked some hard questions about how Rails was working, and I was like, you know what? Screw this. And I went and worked in Enterprise Java for a few years. In my very first conference talk at RailsConf, the national Rails conference in Chicago, I think in the spring of 2014, it was a talk about why Rails was not meeting the moment of front-end JavaScript and single-page applications and rich user interfaces using JavaScript, and how you could marry the Lineman.js tool, which is incidentally what we talked about 10 years ago, with Rails to almost bifurcate your system between
Starting point is 00:21:31 a backend API and a frontend static site generator that you'd build your UI with. And a couple years later, I think it was the day as I became more enmeshed in Ruby land, gave a keynote at RailsConf. Later that day on the exhibition floor, me and DHH just had it out in the open like a 90-minute long debate. A crowd was gathering. If you've ever seen the music video, beat it. It was kind of like that.
Starting point is 00:22:00 But we actually, all in good fun, and it was a healthy debate about full-blown front-end static single-page applications versus what we used to call Rails views, server-side rendered HTML with JavaScript sprinkles on top, which is the pejorative way to put it. So just to be clear, I spent a lot of time on the other side of the fence here. The way in my mental model that I thought about the problem at the time and that I think I still think about the problem, the through line, is that in 2014, if I wanted to build an application with an interesting user interface, with drag and drop, or with simple actions not requiring a full-blown page refresh, you could start any application. I viewed it like a chasm, like the size of the mountain that I could build of an application
Starting point is 00:22:50 in terms of dynamism and user interactivity. And that stuff was possible to do with just pure Rails. But at some point, if my product owner or somebody else were to say, hey, and I need this, you know, I need an interactive map view for putting all of these like work orders on it. Then at that point I would just groan because now the JavaScript sprinkles would become too big, you know, and I have a backbone app at the time or whatever it is. And it would just be, it would create all this mess. And there's no easy way to go from, I'm an application that's a server-side rendered HTML template with a bunch of JavaScript sprinkles to wave a magic wand. Now I'm a fully formed, robust backend API plus logically organized frontend user interface application. There's this chasm in the middle where it's just so hard to jump from one to the other that my advice at the time was, if you think that there's any chance at all
Starting point is 00:23:45 that in the reasonable future, next couple, two, three years of development, that you might need that richer user interface, just let's make it really easy on day one to separate the two activities and just build APIs that talk to JavaScript front ends. All of that to say, I think that what's happened in the last few years is that
Starting point is 00:24:06 first Phoenix and LiveView and then in the Elixir stack, and then in the Ruby world, Rails and what they call Hotwire, which is really kind of a combination of a tool called Turbo, which does partial page refreshes and other kind of like navigation tricks to make sites that are actually phoning home and getting like you know fully formed html from the server but they're doing it over a web socket and it all feels very fast but me as a developer as far as i know i'm just designing these server-side templates just like i always was and stimulus which is a a very rails very Rails-aware, if not literally aware, like it's definitely in on the gag of how to bind events and actions to small, little, tiny, focused JavaScript functions and classes that themselves are arranged in a hierarchical way that mirrors the DOM.
Starting point is 00:25:02 So as I'm building out the DOM, I think David at some point has said the DOM is kind as I'm building out the DOM, I think David at some point has said the DOM is kind of in his mental model of an application, like the single source of truth. Turbo respects that because you're dealing with just sort of sub fragments of the DOM, and stimulus respects that because you're binding to sub fragments
Starting point is 00:25:18 of the DOM. And just like React taught us, as long as you're really rigorous about that approach to thinking about you're just snipping this subtree and swapping in a new subtree and letting the browser be efficient at repainting stuff, it moves the locus of control several notches further towards the server side, such that now when I think about this little tiny molehill of what I, seven years ago, was able to build with a Ruby on Rails
Starting point is 00:25:45 application. Now I can go way further. I can build, if you've seen the Hey email web client, it's basically Gmail in terms of its user interface. It's got lots of goodies. It's got a lot of very dynamic user interface features that we used to associate with single page application development. That's the only way to do it. And now what I'm saying is that like, there is still a gap. If you're building like a, an in-browser music player, right? Like with, with all sorts of, you know, very app like stuff, then yeah, you probably should be reaching for a single page application framework to build a true front end with an API back end. But if you're building what most businesses are building, which is not to be condescending about
Starting point is 00:26:31 it, but glorified CRUD apps with some cool components here and there, suddenly just pure Rails with stimulus and very, very few JavaScript dependencies is actually really appealing and completely enough, has been my experience over the last few months of working with the tools. This episode is brought to you by our friends at Square, developed on the platform that sellers trust. Here's what you can do with Square. You can bridge more experiences.
Starting point is 00:27:09 You can build online, mobile, and in-person commerce experiences that connect more customers and sellers. You can build custom booking solutions. You can create and track orders. You can accept payments. You can manage and curate inventory. You can organize customers. You can manage employees. You can extend Square gift cards to your app. You can use and curate inventory. You can organize customers. You can manage employees. You can extend Square gift cards to your app.
Starting point is 00:27:27 You can use Afterpay. And all this is powered by the world-class Square APIs and SDKs that enable you to build full-featured business apps for yourself or millions of Square sellers. So much is available as a Square Solutions partner. Learn more and get started at changelog.com slash square. Again, changelog.com slash square. Again, changelog.com slash square. So, when we compare, I guess, this stimulus library, and let's just focus in on that one, because I guess it's kind of where you work inside of the DOM, right? Where you're actually firing functions based on events and actions and what have you to me conceptually where i think react changed the game conceptually was the declarative nature of just defining what your component looks
Starting point is 00:28:34 like at the end of the day and then giving it certain ways of changing to get to that place and not worrying about anything else that That singular direction of mental model, I think is why, I think that's why React took off. And you can respond to that as well. And I wonder how much stimulus goes back to this feeling of like, well, it's better than Backbone, but you're still kind of just hooking up event handlers to click actions and fire and stuff, which I build web apps that way. I got no problem with it, but I know that as my web apps that I built that way get bigger and bigger, it gets more and more unwieldy. So maybe respond to the React paradigm versus this.
Starting point is 00:29:15 Yeah. Well, I mentioned one aspect, you know, when we were talking about Shadow DOM all the time when React was brand new and stuff. the reason that I think React was successful where Ember wasn't, for anyone listening, Ember was in a hot competition with React as like the thing to come after, you know, the 18 other frameworks that had preceded them, was that Ember really nailed like bidirectional data binding, right? For to make a better jQuery, like a sane approach to organizing applications that way. And where React, I think, agree with, totally agree, shine was the unidirectionality of data flows from a source of truth, and it lands on the page, and it doesn't go back from the page and upstream again, right?
Starting point is 00:29:57 I actually think that stimulus and turbo, when you work with them in concert, provides roughly the same effect. Because at the end of the day, if you look at React early days or now, the tricky bit is always state. When state changes, what happens? And who's tracking all the state? And with Rails and with the DOM, the answer is anytime state materially changes for anything that isn't totally ephemera the answer is you phone home and you get new html from the server over a web socket and the model that the controller is dealing with represents the new state and so this that it is unidirectional much in the same way where it is and it's also declarative in the same way in that like all of the stimulus binding stuff
Starting point is 00:30:44 is not happening manually it's through you know data the same way in that all of the stimulus binding stuff is not happening manually. It's through data attributes that you're decorating onto the HTML as you normally would. And so what the stimulus is really doing is strictly just saying, what do I kick off when somebody clicks on this? Or when I have a data attribute that has a particular value associated with it, when that value changes somewhere, how do I react to that? And it's not, you can totally still write the sort of like simple click handler, kind of like holding a lot of state in your head in the front end browser style of code. But if you spend the time to kind of shift your mindset a little bit and think in that unidirectional way, like if your brain's already been reprogrammed to think that way about React, then I would just replace the top node of your React application with locating that in the server-side router. And it's going to go to the controller, and then it's going to go render the
Starting point is 00:31:34 markup. And maybe it's only rendering a single little tiny div, but because of the optimizations that the framework takes care of for you, that's going to be done performantly because it's going to happen over you know a live a web socket connection that makes sense to me i think we have an allergic reaction as a industry to html over the wire like there's like something where it's like that's not pure it feels impure yeah is there something is there more to it or is it just like, that's not pure. It feels impure. Yeah. Is there more to it? Or is it just like there's a purity? I know as developers, we get idealistic, right? We have a purism that we desire. And then there's pragmatism. And we try to find somewhere in the middle
Starting point is 00:32:14 where we can be productive. Is there more to it? Like, are there valid reasons why sending HTML over the wire is a bad idea? Or is it just because it's not a data interchange format? Or I don't know. What do you think I am always so I should put on the table first that as a developer I I have a just a real
Starting point is 00:32:33 strong streak of believing that there is one true righteous answer to every problem and I have to temper that a lot because what I've learned through nurture, I suppose, over the course of my career is that there is just like there's infinitely many bad ways to do something in software. There's also infinitely many right answers. And a lot of the times the perfect right answer of, you know, pure functions and, uh, you know, unidirectional data flows and proper interchange formats that adhere to some kind of protocol or fit into some gigantic architecture
Starting point is 00:33:12 such that any two services in our enterprise could theoretically talk together, even though they all flow in just this one kind of tree-shaped direction, just like everyone else's services do. When you give in to thinking that that is going to be the solution to the problem of, boy, software is hard. It's hard to manage a bunch of complexity
Starting point is 00:33:32 and get everyone to agree about what this thing should do. Then I worry sometimes about, you said allergic reaction. I think that's the right answer. I worry about the allergic reaction that develops of an impure solution that like maybe is good enough and maybe is way faster to implement and actually, you know, like doesn't have a practical reason to be bad other than it feels bad and it doesn't suit my fancy of being, you know, being mathematically provable as correct. And that's where I had the same initial revulsion. I spent a long time before getting serious about trying turbo and stimulus.
Starting point is 00:34:11 I let it simmer for a couple of years before I really tried it in anger this summer. And the truth is, just like Rails itself was a pragmatic thing that was willing to say, you know what, all this stuff that your DBAs do with your databases and all the fancy keys and referential integrity, it kind of doesn't matter. Just treat the database like a hash and figure out the rest later. That was the thing that ejected me from the Rails community when I was much younger. And here, it's the same sort of thing where, in fact, that HTML over the wire thing, if you're actually using the framework and trusting it, once you get going, it's an implementation detail. I think I messed up and called it something else
Starting point is 00:34:48 a couple times to even remember that it's actually a WebSocket connection that is actually pushing HTML over a pipe because you just don't think about it because it just sort of just works. So here's a response to that. So I had this conversation, a similar conversation with Tom Preston Warner on JS Party,
Starting point is 00:35:07 talking about Redwood, which is GraphQL and SPAs. Well, okay, it's more complicated than that, but let's just say he believes in a strong API layer. We'll just say that. And his response to me when I said, kind of HTML over the wire, can't we just do it the traditional way? We have tools to get over a lot of the humps.
Starting point is 00:35:27 Obviously, there's times where you might need something else. But he said, it's all well and good until you have multiple clients. And once you have multiple clients, like for instance, we know we're going to have an iOS app. We're going to have a website and we might have a command line tool, etc. Now you're kind of stuck if you went this direction. Whereas if you went the other direction with a GraphQL API, for instance, and multiple clients, you're at least set up for that very possible reality for many people. Do you find that's the case? Is there a time where it's like, I think there's a lot of businesses
Starting point is 00:36:02 that think immediately, like I tend to get on the Yagney side of this argument. I'm not sure where you're land, but I feel like there's a lot of businesses that, you know, they do get some success and then they do want to go in these other directions. And then they're like, well,
Starting point is 00:36:15 do we like rewrite a whole new thing? Do we have to go back and re-architect our backend, et cetera? Do we bolt on a restful rails API, which in my experience has never been as easy as the sales pitch for Rails APIs? So yeah, his response to that was multi-client breaks that argument. What do you think about that? I think there's a couple worthwhile reactions.
Starting point is 00:36:38 One is when we say multi-client, we're mostly talking about phone apps. And the industry has changed quite a lot since the app stores were new, where to build any application at all would have required not only an API, talking to native Objective-C code or Java and Android LAN, but it would have to really sip the data
Starting point is 00:37:03 because the computing constraints were so narrow. And now we're in this other world where, if anything, with tools like React Native and with the advent of much more mature UI frameworks for those different clients, I'm not as concerned as I used to be about that exact question. It was something I worried a lot about in 2014 when I was thinking about like when you need an iPhone app, because everyone was like building those. And now what it is is, oh, it turns out that like we can actually run pretty far afield with just like, you know, really responsive web design and a mobile website. And if you need a, an application, nowadays when I talk to clients or prospective clients for Test Double, it's almost always not that I need my entire gigantic website of 800 controllers and every single thing that you could possibly do through
Starting point is 00:37:57 the web. It's I have a very specific use case where these people who are doing site inspections need to check for these particular things and they need to be able to scan barcodes really quickly and they need to be able to do this or that. And so the scope of functionality that's needed by mobile applications tends to be much narrower and it tends to come much later in the life cycle of applications than it did 10 years ago. And you asked me a bit ago, I seem to be coding a lot. Like, why is that? Like one big reason is I don't believe I'm not a believer in progress. I'm not a believer that like this industry is getting better over time and like innovation is happening. Cause when you're outside tech, everyone's like, Oh, look at
Starting point is 00:38:35 like, we're getting smarter and hotter all the time. And like all these new technologies are coming out and it's great. Like, I honestly feel like in many ways the industry has regressed since I joined it. And it's worth thinking about when we ask questions like this one of that may be what Tom shared is completely conceptually true. that you're going to need to build both a web client and two native mobile applications and maybe some third client on day one or near day one with full-fledged functionality. Even as I say that, I struggle to even think of how often I've seen that in recent years. And so I would instead say, if somebody had that consternation or that frustration, I would say, well, if you've got a small team and they're careful and they're experts, for example, when I do a Rails application in this way, the controller is kind of the controller in terms of like, you know, it's going to, my search feature is going to like take a query string from users and then it's going to go and figure out what are the results. And then it's going to call stuff that does all that hard work for me. And then the last little line is just going to like
Starting point is 00:39:48 render a template from that piece of data. And I could just as easily respond to a JSON format or header and just convert that to JSON and have like a quick presenter just do that. And in well factored Rails applications, while yes, building the whole separate API as a bunch of separate endpoints really never works because you end up with two code paths doing the same thing. You're really careful about being rigorous in how we structure the data that flows into the templates. The controller and the route is asking the same question. The inputs are the same arguments that might modify the answer. And then the answer is factored in a way that it's the same question. The inputs are the same arguments that might modify the answer. And then the answer is factored in a way that it's the same answer, it's just different shapes to present it
Starting point is 00:40:31 to the client. And so I've had really good luck of doing exactly what you've struggled with, and I've seen a lot of teams struggle with, of just, okay, cool, well, this particular set of routes needs an API response now, so be able to respond to JSON requests as well as to web requests. In fact, Turbo, which I've been talking about, has a TurboStream feature where those action cable little partial page snippets are also just another kind of request. It just goes through the same templating. It just knows it's only a document fragment instead of the whole document. So that's, I think, more functional than going whole hog on day one and saying, you know what, we just need a full-fledged API.
Starting point is 00:41:08 It's just like saying we need microservices on day one or something like that because we're afraid that in the future we're going to have more complexity. Sure, sure. Yeah, in my experience, and I don't have that much, I probably have like two or three go-arounds on that. It's that what happens with the, well, we can just take this controller action
Starting point is 00:41:24 and we can render it to JSON with a slightly different presenter and all as well, is that it seems like the phone client or whatever the second client is, ends up needing at any particular endpoint dramatically different representations of the data in order to do its job that it feels like, well, I'm just basically building two.
Starting point is 00:41:42 And so I can't actually just say.json and roll. I have to create an endpoint for this because the shape of the data is way different than that matching web page. So that was my experience. And you're making the point for me that it's easy to talk on a podcast about everyone's experiences
Starting point is 00:41:57 and then stake a claim that I've got this figured out. But the truth is I am very confident if Jared and I were to sit down and try to solve a problem and spend a few weeks on something, that by the end of that few weeks, we'd have something working. And there'd be zero surprises. And we'd both feel good about it. So there are cases where that's 100% true and vice versa. It really depends on the context.
Starting point is 00:42:18 Yeah. This feeling that you have of not progression but regression instead what where's that come from how does it manifest in actuality examples give us examples yeah so i think of it i think of it in terms of like a sine wave sort of is like how the industry it might get better overall over time but the we go through these cyclic patterns and when you've been through a few of them, uh, it's hard not to see them. And when you've come out the other end of a few of them, it's hard not to become a little bit jaded about it because it sort of feels like we're not going anywhere. Like we're just walking in circles. I'm not there yet. I'm not jaded and I'm not
Starting point is 00:43:00 cynical about the industry. But when I hear an example, like when I was coming out of college and I was working in big enterprise Java stuff, there was a lot of J2EE, Java 2 Enterprise Edition, which I think they kept calling J2EE until Java 5 came out. It was such a complex, burdensome, multi-person, the whole, everything about it was this assumption that you're going to need 18 layers of striation to do a hello world, to build the most basic application. And the answer to the question, why do we need this is, well, someday when you're, when you're a big application, you're going to need to be able to do that. Or if you're like IBM or BEA or Oracle who are selling these things,
Starting point is 00:43:45 the answer was, well, our proprietary Java application server has some feature like hot swapping the application in production without having to restart any servers or something. And in order to do that, it has to be packaged in a certain way. And at really high scale, you just need that. And so that's why we have these architectural decisions. And I pushed back against that. And so how I got into JavaScript front-end development was I was working in those environments, and I was like, nope, I need to move a lot faster. And so I was just building full-blown applications
Starting point is 00:44:16 in JavaScript and just sipping data however I could to get the user interface the way that the customer needed. And I think that that spirit of eclectic set of small tools solving very specific problems of the JavaScript open source world, as much as people look back and see all this churn as we moved from framework to framework and tool to tool, there was a certain pragmatism about, look at all this stuff that i can solve and bypass
Starting point is 00:44:45 the really silly complex machinations of my enterprise because they just literally don't care about what happens in the front end because it doesn't matter but what when i say like there's cycles like i get my years mixed up because it's bleeding together a little bit but like once react became dominant and once you started seeing Amazon and Google, in addition to Facebook really start to push open source, like their favorite open source tools through like, you know, paying developer evangelists to kind of like, you know, just press the flesh at conferences around the world and convince everybody that like, you know, no matter what scale you are, the answer is Kubernetes or like our favorite, you know, tool for, you know, just coincidentally
Starting point is 00:45:29 plugging into our, you know, cloud computing platform. Right. So that's why we want you to go serverless on our servers, you know? So there was a sort of enterprise of vacation of open source that occurred by just marketing really heavily towards the same impulses that, you know, you're expressing like, well, you know, like I might need it someday and I don't want to throw all this out. And so it's, you know, if it works well for Facebook, you know, using create react app and pulling in, you know, at a given point in time, hundreds of small dependencies, then surely it's, that's good enough for me. Or that's good enough for me or that's enough for me without thought of, well, Facebook has a much larger group of people pouring over those
Starting point is 00:46:09 dependencies and keeping them updated. And the complexity that you see now in front-end applications looks more to me like the average front-end application. Of course, you can write really lean ones. I strive to with very minimal dependencies, but the average one, the average team, they just have this, it's a disposition and a temperament towards looking to an authority and pulling in tools, external tools, wherever possible to solve problems. And the people who are kind of, you know, the loudest voices in that community are trying to solve problems at Facebook scale, Google scale, Amazon scale. And if you're just some startup, you just, it is the agony. You're not going to need a lot of that stuff. Definitely not now, maybe not ever, but you're either way saddling yourself with that level of complexity. Yeah. I've heard of progress described, you know, we think of it
Starting point is 00:47:00 as maybe a ladder or some sort of vertical ascent, right? Like maybe it's rocky or whatever, you're going up a mountain, but I've heard it described and it kind of matches your description to a certain extent, more as a helix where you're actually like circling something and you're slowly like going upward as the helix does make progress, but it's way slower than you think it is as you're just right there. You think you're going up this mountain and you end up doing a lot of the same stuff over and over again. And maybe you revisit the same concepts, but now it's five years later and there's different tools
Starting point is 00:47:27 and different capabilities. And so it's a little bit better than it was last time we were here, but here we are again. And I've also been in this industry for a long time now. And I've seen a lot of things, a come and go, but also come and then go and then come again. And a lot of excitement about stuff that isn't new ideas it's just newly discovered same ideas and so that can get for the next generation right yeah like the the this industry so many developers enter the industry every year and so many leave that like we basically replace ourselves every three years so it's no wonder that some some hot take some smart some smart wisdom that i had a few years ago no one's even heard it right
Starting point is 00:48:05 because like so many people come into this industry that i think we have to relearn a lot of lessons regardless i love the spiral staircase idea i think that there's a lot of truth in it but for anyone listening to this conversation you know at best i can offer up this sort of like amateurish prognostication about like what I've seen the industry doing, but how I bring it home and how I think it's, I make it relevant in my existence as a developer who's moving through it is I think about that helix. I think about that cyclic nature of gradual improvement through my own practice of each app I build, each thing I do, each time I solve a particular kind of problem is a new opportunity for me to do it just a little bit better and to like learn from last time. And the more cognizant I am of that and the more careful I am about like thinking about how I think about
Starting point is 00:48:54 things, the firmer footing and the more steady progress I have to actually get better each time. And that's something that if you can achieve that for yourself as an individual, and as somebody who consumes and lives in like the kind of information ecosystem that we all do as developers, I think that you also develop a reflex to know what you're looking at when some new splashy landing page, you know, of some new open source tool that's going to save us all. When that lands, you'll be able to read that and look at the different heuristics to tell you whether it's still going to be around in a year and whether it's going to actually make your situation better or just be the 17th tool in your stack.
Starting point is 00:49:39 One of the founding principles of this podcast has been to be not the Ruby show, not the JavaScript show, not the Kubernetes show, not the like our services. So you pick your buzzword, you know, and, and throw it in their show. It's been the show to look over the fence at all the cool things happening
Starting point is 00:49:58 throughout the industry, throughout software and see how they apply pretty much anywhere. And I, I wonder if, if we're in this chasing cool issue i don't know what to call it necessarily like you know there's a lot of cool things happening in the javascript world but there's a lot of really sturdy stable capable things in the ruby world and i i wonder, I thought maybe a part of your answer would have been the chasing cool. People are so focused on chasing cool and iterating that they forget to look at what's really stable, say, not just in the Ruby world, but elsewhere, that they keep
Starting point is 00:50:35 returning and recreating only to come back to where we've been. But it's not JavaScript, it's Ruby, so it's not cool. You raise a really good point. I think of this often in terms of life cycles of language ecosystems or tool ecosystems where the temperament and the disposition of an early adopter. None of these trails have been blazed. Maybe I have to produce a lot of open source on my own just to get the very basic stuff done versus somebody who, you know, very late in the process might be like, well, there's no such thing as a greenfield development of a Pearl crud apps anymore. So every new project that I get, I actually love it because it's a
Starting point is 00:51:16 chance for me to treat each project as a puzzle box to kind of like crack the nut and figure out how do I continue to make forward progress in this world of a stagnant ecosystem. Sorry to any Pearl enthusiasts. It's something that I think about in those terms probably a little bit more because we all, I think, will mature over the course of our careers and just go through different modes of sometimes I'm really excitable about a new technology and it's splashy and it's fun and it totally unlocks something for me. Other times I'm just trying to get something done. If you want to categorize it into two buckets, I think that we have technologists who are really in the game. They're just here for the music.
Starting point is 00:51:56 They want to be on the cutting edge and see the next thing and be there. What I have strived to do, when I think of the best moments I've had in my career, it's actually not thinking of the technology as an ends, but as a means to doing something else, to helping people, to sitting with a product owner who wants to solve a problem with software. I just take that bevy of technology experience
Starting point is 00:52:23 and I figure out, if it's a business, how do I make it make or save that business money through deploying the software? Well, where if you start thinking about technology as a means, as opposed to an ends, then of course the pragmatic solutions are going to rise to the top because you don't, you're not there to waste their time or yours to solve the problem. And that's where I try to spend more and more of my time is, where can I help bridge that gap where I'm both engaging with new technology, innovation, ways to think, not fall into that sort of cynical, stodgy old man yells at cloud persona that I sometimes play on mastodon.cloud or social.
Starting point is 00:53:01 Mastodon.social. Oh man, I should probably know the domain name of where I took it. Oh, he doesn't even know his instance. Come on. Got a mastodon noob over here. The big one.cloud or social. Mastodon.social. Oh, man, I should probably know the domain name of where I took it. Oh, he doesn't even know his instance. Come on. Got a Mastodon noob over here. The big one. Yeah. Yeah.
Starting point is 00:53:11 You can find me at justin.searles.co. That is a URL that will exist for a while, and it links to all of my, whatever my Mastodon is. I'll figure that out eventually. But that's, you know, I'm kind of curious if that adam is does that resonate with you based on where you were when you were asking that question yeah i mean i think well i'm kind of grokking what i think the undercurrent of your tweet might be even which was maybe you were not paying attention to, and you said you used,
Starting point is 00:53:48 I think you said you used Turbo and Stimulus out of anger even, less with blinders. So maybe your lack of usage and desire to steep deeply in it and determine whether or not if it would work for you and the kind of applications you build and the style you build them, I wonder if there's a part of the world that just simply has blinders on to because it's not javascript you know they won't look at the other side of the fence to say okay well i i could use that or that is actually really productive because it's only javascript or because it's because it's ruby and that isn't cool anymore that's that's kind of like to some
Starting point is 00:54:25 degree the world has said that ruby isn't cool anymore even though it's highly capable very stable etc etc i wonder if that's part of your undercurrent there because you said you're almost serious about writing you may not need react so it's almost as if you you kind of played a double part there where you did it out of anger, then you steeped yourself in it and you found it was pretty productive, et cetera, et cetera. I wonder if there's a population that were out there that just doesn't look at it at all because of blinders. A Ruby hero of mine is the late Jim Wyrick.
Starting point is 00:54:56 And he used to say that you don't really know a technology until you've used it in anger. And when I say I use something in anger, what I mean is I'm the dog who caught the car, and I'm holding onto that bumper for dear life, and I'm going to build this thing, damn it, one way or another. And so I'm going to go through the hard parts, and I'm going to come out the other end, and then I will have an honest appraisal of whether or not other people should use it too. Because it's the only way to really know, I think, whether the tool is going to work.
Starting point is 00:55:26 And to the point about JavaScript, it's interesting because JavaScript has been the trendy thing for so long. And the ecosystem, it's more of an ecosystem than a community, because everyone needs it. It's the lingua franca of the web, that you can spend your entire career there. And you could get lost for years and years and years in just JavaScript land and keep yourself completely busy and have a wonderful time and career but i'm fortunate looking back on you know just how much both like boutique like languages as well as just competition among primary languages there was when i was coming of age as a programmer because i first language i really felt like i got and understood deeply was Java.
Starting point is 00:56:06 And when I understood Java, I identified as I'm a Java developer and I want to find every solution I can in Java. But then once I cracked the nut on a second language and then a third, then I was able to relax that a little bit and think more in terms of what is the stack getting me, how do I feel, what kind of teams are successful or not successful with a particular technology. And I would wish that for anybody. So even if you spend a lot of time in JavaScript land,
Starting point is 00:56:30 trying to solve something in a radically different technology stack is just good life experience because it frees your mind, it liberates you from thinking that every solution has got to be JavaScript. Because frankly, you mentioned Ruby not being cool anymore. We joke about this sometimes internally at my company. We had a period of tons and tons of Node.js and server-side rendered React projects come through
Starting point is 00:56:51 in 2016 to 2018. But then they started to trickle off. And then we had a bunch of really, really massive companies invest in renovating their Rails apps because they tried either building a whole bunch of microservices and breaking up their monolith, or they tried rewriting their entire interface in front-end React, and they saw how much extra work that was
Starting point is 00:57:11 than I think Jared used the phrase batteries included earlier. They're like, it's actually much cheaper for us to upgrade from Rails 3.2 to Rails 7 and get up to speed. That's a jump. Actually, Test Double has done a lot of upgrade projects and we've got a whole knowledge base. That's four versions in the middle there, Justin.
Starting point is 00:57:31 That's a big jump. Yeah, of how to do that. You can check our blog for some advice. But now today, we're at the point where there's probably more Ruby developers getting paid to write Ruby and Rails applications than at any point ever. But we show up on Hacker News less and less because a lot of this stuff's been solved and it's less noisy and it's less public. But it's still making a lot of people a lot of money, I think.
Starting point is 00:57:55 It's an interesting time, too, because there's a lot of layoffs. I saw this one thing where somebody had, I'll paraphrase their scenario because it's not necessary for the conversation here, but they wanted to now take their new focus because their focus has changed and focus on founders and mental health. And the reason why was because there's gonna be a lot more founders out there because of all the layoffs and all the change in the job market. And actually, there's the people who don't want to go and work with these big companies anymore because of whatever the reasons are. I just wonder if there's some sort of gem, let's say, inside the Ruby world
Starting point is 00:58:32 that is not visible to folks because they just haven't because of the label, it's not cool anymore, even though I still think it's cool. I wonder if that's just taking people away from this cool land and that kind of thing where hey if you're in that space or whatever maybe maybe just go out there and build a rails project as a hobby project and realize what's still there I wonder if that's a this might be a good time for that I think layoffs are always concerning even just talk about them like if you look at all these press releases about layoffs, the vast majority aren't pointing
Starting point is 00:59:07 to actual economic conditions or business constraints. It's worry about what people are talking about. It's investor sentiment is what's driving a lot of it. But we're not immune as individuals because we're either affected by those layoffs or we think about, me as a developer, am I going to be affected or impacted? Or if I am, will I be able to find something? And what I can tell you as a consultant who has seen several cycles and come in that company, generally when we're helping companies, it's a really interesting time for the company, good or bad. That's why they're bringing in outside help. And the one thing that I guarantee for you as a professional
Starting point is 00:59:49 that's going to be recession-proof is an ability to solve people's problems that generate more value than your cost. And pragmatic tools are the name of the game in being able to demonstrate that repeatedly and to have a big impact and to leave a good taste in people's mouth when they work with you. And so if you have a sort of this mathematical purity approach to technology, or if you have a, an arm's length, sort of like if you're, if you're in an organization right now where you can't explain how the thing that you do makes or saves the company money. Like somebody else is probably also struggling to answer that question. And maybe you're right to be concerned, but if you, if you
Starting point is 01:00:29 want to be able to independently full stack, just build stuff, that's just sweet and rocks and does cool stuff. That is what I think the Ruby and rails community has been. That has been our purity of line as we focused on the tools that we build and use. How do we make it as productive as possible for solving problems with technology so that an individual, much less a small team, can run circles around much larger organizations? And that's always been true. as the venture-backed startup world started agglomerating into larger and larger human organizations that started demanding a lot of the cloud services, DevOps, and complexity that now occupy a lot of our brain space when we talk about technology. So on the lines of Rails again and individual productivity and progress, even if it's a helix,
Starting point is 01:01:20 what is Rails' current story when it comes to loading your JavaScripts, your assets, your... I'm from the days, so I've been using Phoenix myself for the last few years on changelog.com, which is really the only app that we work on. I'm no longer a consultant like you, which I was for many years.
Starting point is 01:01:39 I just have our app, and I work on it, and that's the one. So I don't have this experience, but back when I was using Rails for multiple people's web apps, it was Rails Asset Pipeline days. That was what I used. And there was like, NPM was blowing up and it wasn't the greatest way of doing things. It was slow and error prone. And I'm curious what the story is now with just loading stuff. How does it work? Yeah, well, the answer is, if you're coming into an existing application, whatever you used to be doing probably still works fine.
Starting point is 01:02:14 All these tools are still supported. But if you're running Rails new today, the golden path is one of the two following. First is, if you're targeting modern browsers that support import map out of the box, no bundling happens. You just create a manifest and say, Hey, these are my dependencies. These are the version pins browsers, you know, pull them in and cash them. And then, you know, now I've got low dash or now I've got whatever it is. And if you use tools that, you know, will work correctly when imported via an import map in a browser, then you're off to the races. And that's like, I couldn't dream of something like that. I guess I could dream of
Starting point is 01:02:51 something like that. It was called like RequireJS and it didn't really work super good. But now it's something that is standards-based and it doesn't require a custom Ruby gem solution for wrapping every single dependency, like we might have seen when Bower was the thing before NPM. The second path that you might take, and this is the one that I've taken because it only takes about 15 minutes for the first path to go sideways in practice, is there are new first class gems that Rails New will bundle if you say the right incantations on your command line. And if you get confused about that, toot at me and I'll try to help you because it can be a little bit confusing if you're new. I think it's called Rails CSS bundling and Rails JS bundling or something similar. The CSS bundling and the JS bundling, I think, is all driven by esbuild.
Starting point is 01:03:42 There's also a Tailwind-specific mode that will incorporate the Tailwind CLI and Tailwind configuration. So ultimately what gets built, now that, you know, I skipped over in the story because you mentioned the asset pipeline, which was like run by a gem called Sprockets. The bad years were when Sprockets was kind of falling over and couldn't really support NPM stuff.
Starting point is 01:04:02 And then Webpack was the like, Webpacker was the rails way to do it and it you ended up with 15 different configuration files that said the same thing and it was really it truly was a mess but now you know es build is so great it's so fast it's so it's no nonsense it's set it and forget it you don't really have to do any configuration rails handles all that for you i have literally you working on this project for a few months now. I've done two or three now with this tool. If I'm deploying to Heroku and I don't have any complicated infrastructure needs,
Starting point is 01:04:35 once I have a hello world, I haven't thought about this question at all. Nice. Well, that's the best story, right? The invisible story is the best one. In fact, even in giving that answer, I am very worried that I made several factual errors because I'm explaining a thing that I saw on a read me, you know, in June. Cause I don't know. Cause I don't need to know. And that's the best you're right. That's the best kind. We'll give you the benefit of the doubt. Well, that's a great answer because it was so painful for so many years. And especially
Starting point is 01:05:02 during the transitions, uh, like you said, where we were kind of like in this web this new webpack world but we were still in the sprockets world and the transition was was heavy that's why those upgrades you probably have some like serious intellectual property in your upgrade run books there at test double like here here's how we upgrade those are money makers for sure it was painful for that so that's excellent the other thing that I don't know about, because I, like I said, I haven't been in the Ruby world. I still, I'll echo Adam. I still love Ruby. I still use it all the time. Anytime I write any sort of script on my computer that has to take an argument and do his thing and shell out, like I don't even go for bash. I go straight to Ruby pretty much. And cause I love it that much. Um, but I haven't used it like in modern web stuff for probably five, six years. And so I know that
Starting point is 01:05:50 Ruby three was supposed to be like three times faster. That was like a deal. Like that was a marketing deal. Ruby three X or something. I know Ruby three is out. I'm curious about advancements in the language itself or changes that have happened of late. Have you read or read me back in June that told you the answer to this one? Yeah, yeah, you know, it's great. So if you're listening to this conversation and you're not a Ruby person, you're like, why do these three schmucks talk about why they have this nostalgic almost or this affectation towards this Ruby language when you might not see that or understand it?
Starting point is 01:06:23 I think one thing that Matt, the creator of Ruby, and DHH, the creator of Rails, have in common is that they're both optimizing towards programmer happiness. So if you are a developer and you're interested in being happy, you should check out Ruby. Because that is, I think, the north star for a lot of decisions in the language, as well as in the frameworks and tools that we use.
Starting point is 01:06:44 Because we always want to be productive, we want stuff out of our way, we want to like, you know, be able to express ourselves in a minimal terse way and just have the computer do the work for us. And it's easy to say that, but you see 1000 points of light that you can point to if you're going through a code base of like, here's an example of a config file I didn't have to write or a method where I didn't have to, you know, you know, copy paste the same basic thing five times to satisfy some framework underneath me, all the syntax that I didn't have to, you know, sprinkle in to make something compile correctly. And when you look at Ruby as a language, what's maybe most interesting to me is that the experience of trendiness, of popularity, of how much people talk about Ruby
Starting point is 01:07:26 has waned in the West. We talk about it less. The conferences have, I think, fewer people going to them. It has fewer committers from the West than it did. But I'm a student of Japanese language and Japanese culture and I've lived in Japan several times in my life and I'm friends with a lot of the, Matt's a Japanese person, in Japan several times in my life, and I'm friends with a lot of the Japanese Ruby
Starting point is 01:07:48 community members as well as committers and maintainers of Ruby overseas. And if you go to Ruby Kaigi, their national event, every year the crowds are bigger and bigger. It's a professional event. People take Ruby really seriously. They're really excited about Ruby as a language. They have a whole onstage discussion of all of the committers, like a Q&A session. And the committers are big enough to field an orchestra. It is so many people who show up on stage excited about, hey, here's an example. In Ruby 2.7, we used to have this way of parsing the syntax of a Ruby file listing called Ripper that like, it was very fast, but the API would produce sort of this like gobbledygook that
Starting point is 01:08:33 like you had to write a custom parser of the parser's output to try to figure out like, well, here's a method definition, here's a parameter. In Ruby 2.7, they released an abstract syntax tree module that like allows anyone who's writing Ruby to reflect on the Ruby and introspect the structure of the file listing and then dynamically play with that or build other interesting developer tools based on the awareness of what's the code actually do and what's its structure. Another example is the IRB, a little terminal REPL that you get with Ruby. And in any dynamic language, I think REPLs, if you're not familiar with the acronym, is read, eval, print, loop.
Starting point is 01:09:10 You type a little something, you hit enter, you see what it does, and then it asks you for more input. Working with the REPL is a really rapid way to get feedback from your system. I think the longer that I'm programming, the more that I think programming is really just a conversation that I'm having with my computer and anything I can do to ask my question faster and get a faster answer from the computer and then think whatever thoughts I need to ask the next question. That feedback loop is the most important thing to any developer's improvement and productivity. So the REPL has been massively improved both in performance as well as in features. Now you have a lot of introspectability available to you inside of the REPL. It's easy to
Starting point is 01:09:50 pull one up at any given code point. It's got much nicer autocomplete. It's visually just a much more, I think, pleasant place to be to help you understand where am I and what's this code doing and how's it behaving. So the REPL is another great example. Another one is there used to be a debugger that was kind of modeled after GDB, the GNU debugger, which you might be familiar with if you've written C or C++. It was called RDB. And it was not to demean anybody who might've worked on it, but it was roughly forgotten about entirely for like a period of like 15, 20 years. Like when I was coming of age in Ruby land, people would tell me, Oh yeah,
Starting point is 01:10:28 we just don't debug. Aaron Patterson. I think one of his most favorite or famous blog posts is I'm a puts debugger. Like he doesn't use the debugger. He just prints out statements because it's literally more, more pleasant and a faster feedback loop than like trying to fight with a step debugger and Ruby Shabbat.
Starting point is 01:10:44 Hassan, his handle is HSBT, took it upon himself. Oh, shoot. Did I give Shibata-san credit? It was either Shibata-san or Koichi Sasada. One of them came in, there's going to be a link or something. One of them came in and totally rewrote the Ruby debugger library and made a gem of it. And so now it can interact with, just like Node can with Node Inspect, it can interact with any kind of debugging user interface, whether that's VS Code, your IDE of choice, or a remote terminal session that connects to something that's listening on the other end. And it's a first-class great debugger. And I've got a YouTube video of how to set that up
Starting point is 01:11:25 in VS Code. I've had a really terrific experience with that. It makes Ruby feel fresh and modern. And those are a few examples. Ruby itself is indeed a lot faster. It is quite mature. They're adding new stuff all the time. And something that I hope to be doing more of in the future is to start unearthing more of the kind of new features that come out every year. Ruby has an annual release cycle on Christmas of all days. So Ruby 3.2, I think, 3.2 is next. I'm always playing with preview versions and stuff.
Starting point is 01:11:56 It comes out on Christmas, which is really fun if you maintain a bunch of gems, by the way. Because then on December 26th, you get a whole bunch of free GitHub issues from helpful people on the internet. They're gifts, consider them gifts. Yeah, they are. Yeah, it's Boxing Day. So all that to say, each new version of Ruby
Starting point is 01:12:12 does contain so much new stuff, but because a lot of the contributors are in Japan, speak Japanese, and may not be writing blog posts that get traction in the US, I would like to see myself and other people in the Ruby community do a better job of just surfacing some of the cool stuff that's happening. Because I don't think we've done a good enough job of really highlighting Ruby's advancements in the last few years.
Starting point is 01:12:34 So just take my word for it, please. What could bring that back, though? I mean, you said it's waning here in the West, not so much in the Far East. In fact, it's thriving, as you said ruby kagi is just uh killing it basically growing and you know maturing and innovating all the ings what can we do to like what are some pragmatic ways we can actually like stop that waning here in the west i mean is it is it simply a chasing cool issue where you feel like
Starting point is 01:13:05 the invoke thing to do is to basically just not look at Ruby, look at anything else, I suppose? Well, once you've been up or down the helix staircase of progress a few times, I think that you become comfortable with associating yourself or with working with tools that aren't necessarily
Starting point is 01:13:22 the trendiest thing. And the answer to the question of how do we reignite enthusiasm for Ruby in the West is first to just recognize that it is a stronger tool than ever and more people are using it than ever. Now it's true that if you build it, people won't come. They have to hear about it. They have to learn about it. And that's why I think the call to action right now is just celebrate the cool stuff that it does and talk about it. That's why I'm here today. It's exciting stuff to talk about because it's really fun to use and it's really productive. And I want more developers to have that kind of experience. And because the fundamental tools, both recent innovations in Ruby, as well as the
Starting point is 01:14:02 current formulation of what you get when you type Rails new, if you're writing a Ruby on Rails application, it's just so strong that I think that that will serve as a testament for anyone who tries it. People are going to touch that flame, and they're going to get excited about it, and they're going to share it via word of mouth. And hopefully, it'll be just like it has been on other moments of Rails ascendancy or anything else. people won't be able to shut up about the productive time that they're having well that's uh it's been fun talking about this this journey with you catching up i mean it's just been too long honestly we got to
Starting point is 01:14:36 get you back more more frequently than every 10 years uh maybe every one and a half maybe every uh seven and a half years 16 and a half months on the nose, I'm not sure. I won't take it personally. Well, please don't, please don't. Because we have respect for you and enjoy when you come on the show. But we're fans of Ruby. And I was actually thinking, as we asked you, how can we prevent the waning, I suppose. Jared and I have great passion for ruby we use it
Starting point is 01:15:07 whenever we reach for something but you know when we have the only application we work on is changelog.com we're not going to rewrite to ruby because we want to like see it thrive again in fact i mean there's a lot of things that we can compare with phoenix and ruby on rails and things like that and see the the differences but we can't really help and Ruby on rails and things like that and see the differences. But we can't really help that by building an application because we're not at builders anymore. We we've built one and we're going to maintain it and that's it. Keep improving it.
Starting point is 01:15:33 So that's a, it's an interesting aspect because I was just thinking, how can we, and to be clear, to be clear, I would not want you to write like, so test double, we've got a lot of Elixir clients.
Starting point is 01:15:41 We've got a ton of people in the company who don't like rails or ruby or they have moved on to you know elixir and phoenix and they're they love it uh i haven't you know had the opportunity yet myself but the moral of the story is it's great to get excited about new technology but if you've got something that's already solving a problem and you're having a good time you shouldn't feel bad because something else is suddenly cool. Right. Well, I do have one bigger question, but I'm going to save it for our Plus Plus members because we're at time and I'm actually not sure how it's going to land.
Starting point is 01:16:12 So you might see me get some egg on my face if you're a Plus Plus member and you're tuning into the after show or you might be like, hey, let me become a Plus Plus member so I can hear this. It may not be worth it. We'll see. Or it might go so poorly that it's not even a Plus Plus member so I can hear this. It may not be worth it. We'll see.
Starting point is 01:16:25 Or it might go so poorly that it's not even there for Plus Plus people either. I hope. Well, that's the egg on the face. If it's not there, that's basically the egg on my face, as you've said recently, Jared. Justin, thanks, man. Thank you so much for coming on and sharing your passion for Ruby and the productivity it's given you and the road you've been on. I think that's so true when you said about giving that talk to look back the few months or the year or whatever it might have been to say, what can you offer?
Starting point is 01:16:47 I think I want more people to do that. I think this is a, this is the kind of platform people get to do it on, which is a podcast. But I appreciate you sharing that here with us today. So thank you. I appreciate that. And, you know, this moment in time where we're living and we're kind of watching Twitter self-immolate, I am in a moment of reflection about just like recapturing some of what was magical about the web before all the web 2.0 companies sort of like sucked all of my attention and creativity. So if you're listening to this and you have things to share, I think there's
Starting point is 01:17:15 never been a better time to start a blog seriously. Even if it's just a link blog, even if it's just something little, you know, make a website, share your thoughts and link to other people. And hopefully they'll link to you because the best way, just like rubber ducking through a hard problem and talking to, you know, talking through the problem helps us solve it. You know, the reason that these talks or these blog posts or the open source that I've written has been so impactful to me personally is not because I'm imagining somebody with like, you know, this leather bound collection set of the Justin Searles tomes or something to serve as my legacy when I'm gone. It's because doing that work of digesting and sharing and articulating, like, what am I learning? That is where I get so much of,
Starting point is 01:18:03 I think the, the edification from this as a career because it helps me understand and contextualize like, who am I in this industry and what am I doing? Well, I'm glad we have you out there as someone to emulate. So if you are planning to take Justin's advice and you plan to emulate some of his learnings and this process of putting it out there, so to speak, through a blog or through toots or tweets or who the heck knows what's coming next. We have an easy way, Jared, right? ChangeLog.com slash submit. That's how you submit to ChangeLog News, weekly newsletter, online
Starting point is 01:18:35 all week long. We'll share your links. We want more blogs out there. We're for the open web. We're for RSS feeds. We're pro R rss we record entire podcast episodes about rss in which we state emphatically what justin just said please start a blog publish own your domain notice he has justin.searles.co and he can confidently say unless the dns system breaks down at some point that that sucker is going to be there right regardless of what that of what else happens. So we definitely...
Starting point is 01:19:07 As long as that's my name. And I'm bummed now because I actually spent on two different websites in the post-Elon Twitter purchase era written custom Atom XML feeds by hand to perfectly curate your experience if you subscribe to blog.testable.com or justin.serlz.co. Those feeds are immaculate and readable,
Starting point is 01:19:29 which was not true before. Talk about using a technology in anger. There you go, hand crafting, RSS. Each one's written by hand by me. When your client goes, I'm there doing it with pen and paper and then I'm relying on transcription technology to deliver that. Beautiful, it's a beautiful thing.
Starting point is 01:19:45 Well, Justin, thank you again. It's been awesome. Thanks, guys. That's it. This show's done. Thank you for tuning in. Hey, let us know what you think in the comments. We want to hear from you.
Starting point is 01:19:56 The link is in the show notes. And if you haven't yet, check out ChangeLog++. There is a bonus on this show for our listeners. So if you're a Plus Plus subscriber, you're getting that bonus. But hey, if you're not, you can easily check it out at changelog.com slash plus, plus 10 bucks a month, a hundred bucks a year. Either way you choose that gets you ad free shows that gets you closer to the middle. They get you bonus content, but more importantly, it lets you directly support us. Again, changelog.com
Starting point is 01:20:26 slash plus plus. Again, a big thank you to our friends at Fastly and Fly, and of course, to Brakemaster Cylinder for those banging beats. We love them. I hope you love them too. But that's it. This show's done. Thank you again. We'll see you on Monday Thank you. Game on.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.