
Code and the Coding Coders who Code it
We talk about Ruby, Rails, JavaScript, and everything in between. From tiny tips to bigger challenges we take on 3 questions a show; What are you working on? What's blocking you? What's something cool you want to share?
Code and the Coding Coders who Code it
Episode 51 - Chris Oliver
The last RailsConf ever is coming to Philadelphia this summer, and co-chair Chris Oliver joins us to pull back the curtain on what's sure to be a historic gathering for the Rails community.
Chris reveals how the programming committee curated an exceptional lineup from hundreds of submissions, balancing nostalgic looks at Rails' 18-year journey with cutting-edge technical content. You'll hear why Philadelphia's walkable layout, incredible food scene (Reading Terminal Market gets particular praise), and Fourth of July celebrations make it the perfect host city for this final RailsConf hurrah.
Beyond the sessions themselves, Chris and I explore what truly makes tech conferences special—those irreplaceable in-person connections. Whether you're a seasoned Rails veteran or relatively new to the framework, the hallway conversations, shared meals, and spontaneous problem-solving sessions offer exponentially more value than what appears on the official schedule. We both share how these gatherings have accelerated our careers and sparked lasting professional relationships.
The conversation takes an enlightening turn as Chris opens up about his current technical challenges, including the complexities of testing Hotwire applications and designing flexible API wrappers for payment processing systems. His insights on balancing specificity with adaptability when building reusable libraries offer valuable perspective for anyone writing code meant to be shared.
This episode serves both as an enthusiastic invitation to join the Ruby community in Philadelphia and a thoughtful exploration of why in-person events remain vital in our increasingly remote world. Supporting RailsConf isn't just about personal growth—it's about strengthening the Ruby ecosystem that has supported so many developers throughout their careers.
Ready to book your ticket for this historic event? Don't miss our podcast panel at RailsConf—come experience our conversations live and in person!
Links:
HoneybadgerHoneybadger is an application health monitoring tool built by developers for developers.
Judoscale
Autoscaling that actually works. Take control of your cloud hosting.
Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you.
Hello everyone and welcome to another episode of Code and the Code Encoders. Who Code it? I'm your host, drew Bragg, and I'm joined today once again by Mr Chris Oliver. Chris, if someone somewhere somehow isn't familiar with you, would you please do a brief introduction?
Chris Oliver:Those people are probably not listening to your podcast, I would imagine so, but just in case. I'm Chris Oliver. I run Go Rails Education for Ruby on Rails developers, Jumpstart, SaaS Template for Rails developers, Hatchbox, which is a hosting platform for you guessed it Rails developers, and I've been recently working on the Learn Hotwire course with William Kennedy, which has been lots of fun, Probably one of the biggest things I've ever had. To put together Hotwire and Hotwire Native is quite a large topic, I will say.
Drew Bragg:And then, of course, co-chair of RailsConf, the very last ever RailsConf, the very last RailsConf in my hometown of Philadelphia. Yeah, you got your wish.
Chris Oliver:Yes, yes, it took a lot of running around the very last RailsConf in my hometown of Philadelphia. Yeah, you got your wish.
Drew Bragg:Yes, you got your wish. Yes, it took a lot of running around and annoying a lot of people, but I got my wish.
Chris Oliver:Yeah, philly's a good city for it. Yeah, I'm excited.
Drew Bragg:Very walkable city, but we are going to talk all about that. The typical show format for anyone not familiar with my show is I'm going to ask Chris three questions. I'm going to ask him what he's working on, what kind of blockers he has or recent blocker he had and how he found a solution for it. And I'm going to ask him about something cool, new or interesting that he's recently learned, discovered. It doesn't have to be coding related, but it can be so because we have so much to talk about, especially around RailsConf, I want to jump right into what are you working on? But also how's the RailsConf planning going?
Chris Oliver:Well, I have two secret projects I can't talk about that I am working on. But Learn Hotwire course is not secret. It's basically done, but I have a few videos I want to finish up. And then, of course, as we're wrapping things up, the new Hotwire Native 1.2 came out. So then William was like I can probably get rid of some videos.
Chris Oliver:actually, yeah, there you go Shorten things and I was like, well, that sounds like a great thing, that is rare, so we're polishing up the course. But in between that and everything else that's going on just regular day-to-day screencasts for Go, rails and all that RailsConf. That's been fun. I feel like now that we've gotten through the big stuff where we get the submissions in, we go through all those, we get the schedule together. So we flew in and all as a team looked at the rooms and the layout and nearby restaurants and all that stuff and just got a in-person feel for it, because you can look at a map and whatever and it's not quite the same as being there.
Drew Bragg:No, especially Philly has very small city blocks. Yeah, I feel like I've gone to other Rails comps and Ruby comps where it's like, oh, it's only four blocks away, that's nothing. And then you walk and you're like, how are we still walking four blocks In Philly? It's like four blocks is five minutes, it's super easy.
Chris Oliver:That was nice because on the map it looked like Reading Terminal Market was a ways.
Chris Oliver:It looked like it could be a 30, 45 minute walk if it was a different city, but it was super short to get there and easy. And the scale of the maps you can't quite tell Cause you're like, well, I see blocks and LA block is different than New York and Philly, chicago and wherever, so that was a little strange. But what's nice is they're so small and so you can get anywhere really easily, really fast and stuff. So yeah, that's fun. I feel like a lot of the process is already in play. So me joining as co-chair is kind of last minute, right before CFP opened and stuff. So they have a lot already planned. Picking the venue and stuff was already done. So I get to help with the picking you and the rest of the program committee. That stuff was important so that we have a good group.
Drew Bragg:I'm pretty sure, because I picked the city I was in first.
Chris Oliver:Yeah, you were in first.
Drew Bragg:I don't know who else is involved in this, but I know I am. That's all I know.
Chris Oliver:It's always a critical part of the conferences because that sort of dictates get all the CFP. Everybody ranks them anonymously. But when we have to go fine-tune and finalize everything, that's where your personal preferences and expertise and what you want to see, what you think the community wants to see, what goes over well, because you've witnessed that at previous conferences and that's what we picked the people.
Drew Bragg:There's what six people on the program committee yeah, I guess if you're just on the programming committee, not including co-chairs.
Chris Oliver:Yeah, I guess if you're just on the programming committee, not including co-chairs there's six of us, which is great. That's not too small, not too big. If it got to be too small or too big, it could be unwieldy either way. Too much work for too few people or too many people and they don't agree could be a problem too, and so I think it worked out really well.
Drew Bragg:I'm really happy with the schedule we ended up coming up with and I'm still like damn, there are so many great talks that didn't make the cut. It's insane. When I think about every talk that we looked at, I was just like I want to go to this talk, I want to listen to this talk, I want this talk to happen and we don't have that many slots. We only have three days. Can we make it a whole week, since it's the last one? Maybe Because there's so many good talks? But we have a great schedule, I think.
Chris Oliver:Yeah, it was so tough because it was like basically one in 10 submissions were all we could pick, so that meant nine out of every 10 were not able to be selected, which was hard to whittle them down to that. That was really tough, but I'm looking forward to it. It's one of those where you know that you want to go see one person talk, but then also, at the same time, somebody else's talk you want to go to and you're like conflicted, which is a sign we did a good job.
Drew Bragg:Yeah, absolutely.
Chris Oliver:So that's how it's always been. How many tracks do we have?
Drew Bragg:We have two or three, three, three. I want to say three. Yeah, I think it's three, which is better. I've been to ones where the number of talks at the same time was a little crazy. Maybe, I guess, for videos, for releasing videos, it's nice to have that many more videos, but for attendees, I can't hallway track and attend the three talks I want to go to while missing these other three.
Chris Oliver:I think three is very manageable. Recording the videos is always valuable, but also I feel like it's too easy for them to get lost on YouTube or whatever, and I will say I wanted to go see that talk and I'll watch it afterwards, and then you get home and life's busy and you forget about it or whatever. So that's one of the reasons why you have to come out to Philly with us, so you can be there in person to talk to people. Absolutely, and don't miss it.
Drew Bragg:Sincerely, though. There is definitely something special about seeing a talk in person, live, having someone sit next to you talking to them about what you guys just witnessed going afterwards out to the bar or just hanging out in the hotel lobby or whatever, and there's a good chance someone else saw the same topic and you can talk about it. Or someone went to a talk that you didn't get to go to and you can talk about it, and when you do that with YouTube videos, it's just not the same. It's too easy to get distracted. You hit the pause button, you walk away, maybe you don't even start it back. Seeing it in person there's something about seeing it live. That's special.
Chris Oliver:Totally yeah, I agree. And also, the conference experience is better when the conversation with people is not what talk did? You just go see You're actually talking about nuanced whatever, about the thing you just watched together, so you end up with deeper conversations and stuff. I think because of that too and that's incredibly useful and valuable that you just yeah, maybe you do if you two happen to be working on the same project or something not quite the same yeah, I agreed my terminal here says it just switched.
Chris Oliver:I think it says 54 days left till rails 54.
Drew Bragg:54 days. It feels so close and yet so far.
Chris Oliver:It does feel a long ways away, but it's really not Less than two months.
Drew Bragg:I've got Podia Retreat next week, so that's slightly more of my focus, and then when I come back, there's not much more going on between now and then, so that'll become my real focus. I still owe a food guide to Philly. There's so many good places to eat. Trying to come up with a list is like I don't know where to send people.
Drew Bragg:I can tell you where to avoid pretty easily, but telling you where to go is a lot tougher because there are a lot. I gave a preview list and it was already a pretty long list, but Reading Terminal Market is the only guaranteed thing that you have to go eat at least once. If you go to RailsConf which you should you got to check out Reading Terminal Market. It is an experience.
Chris Oliver:There is so many things there to eat and the only thing I ever want is those damn cookies and a philly cheesesteak. But every time I walk in I'm like there was that turkey place and whatever else greek food goods are so good too, yeah when brooke and I were in philly for your wedding, we went to Amada, which is Chef Jose Garza's Spanish tapas restaurant, which was phenomenal. So if anybody looks for a fancier dinner. That was fantastic. That's what I'm trying to do with the list is.
Drew Bragg:break it down to like this is fancy, this is you can go in with your backpack. This is fast. This is not fast.
Chris Oliver:This is you have to take your hat off here, sir. Yeah, I didn't even know I was wearing it. This happened in Sin City, ruby in Vegas For anybody that wasn't there, because I'm always wearing a hat of some kind, because I never get haircuts at regular intervals.
Drew Bragg:And then I go oh, I can't go out in public like this. And we went to a very fancy steakhouse and I was wearing my hat and the first thing the guy said to us was you can't wear your hat in here, sir. I was like oh, this is going to be an expensive dinner.
Chris Oliver:Yeah, I thought that was hilarious. The rest of our clothes was like t-shirts and shorts or whatever, but the hat did not improve the overall vibe of our group.
Drew Bragg:I think Irina was the only one that looked presentable out of our group, but she always looks presentable. So that was a very fun conference and also a last conference.
Chris Oliver:So I'm glad we got to do that one, although I heard some rumblings that maybe it just needs to be closer to home or something.
Drew Bragg:To be honest, I think it would lose a lot of its magic if it wasn't in Vegas. I think that is part of the draw. Even if you're not a gambler or a big crowds person, vegas has something. It's really easy to get outdoors. We went to Red Rock Canyon on the Saturday after we went to a Knights game and we did some people watching and a little bit of gambling just because why not? You're in Vegas but got a ton of good food and stuff. I don't know. There's not many places quite like that that you could have a conference. So I think, in order to still be Sin City Ruby, we need to stay in Vegas.
Chris Oliver:I just like the size and the vibe where it was so casual you could heckle the speaker if you want that kind of vibe. To the conference was really special, I think, and you could do that anywhere. To the conference was really special, I think, and you could do that anywhere. It just reminded me of Southeast Ruby and stuff that Jason put on back when it was 100 people and just small and an intimate group of people. That was special.
Drew Bragg:So, yeah, sad that Sin City Ruby is over, but hopefully Jason Sweat keeps something going, definitely bring it to Detroit so it'll be a different conference, but he could still do a small gathering conference and being outside of Vegas probably will help with costs of things, because it's Vegas A little bit, yeah.
Chris Oliver:Yeah, you don't have the asbestos-ridden casino to have the low prices at.
Drew Bragg:Yeah, we won't unfortunately have a hockey game for RailsConf, being that it's in July, but you can go catch a Phillies baseball game if you're into live sports. Everything in Philly is very close to where we're going to be. We're going to be center city, perfectly, and nothing's far over.
Chris Oliver:You can see the liberty bell and whatnot independence hall.
Drew Bragg:We got the art museum with the rocky steps and the rocky statue. If you've ever seen the movie rocky, you know what I'm talking about. If you don't figure your life out, go check it out yeah, there's so much real close by good city for it.
Chris Oliver:I'm glad that you convinced them to do it.
Chris Oliver:Lots of Philly cheesesteaks are in my future, so people are going to be cheesesteaked out by the end of it, but it'll be well worth it yeah, and that's one of the things that I think you were the pioneer of was convincing us to get people out into the city for lunch, which I think same thing with Sin City Ruby, and I think that's how it worked in Tropical on Rails as well. We all went out on the town and you got an hour or two hours, whatever it was, and go actually experience the city a little bit. Usually you're flying in straight to the hotel and then to the conference venue, which is also the hotel, and then at night you might get to see a little bit, but that's about it. I think that is a really awesome call to make to say let's go experience this city. We're not all from Philly, so maybe you've never been there before, maybe you've only been there briefly. This will still be a brief time. You won't have tons of time to explore unless you add a few extra days, but at least you get to go see Reading Terminal Market.
Chris Oliver:And what was that brewery we walked to. That was fun.
Drew Bragg:Victory Brewing, there's a few good breweries to eat at and chill and just great restaurants. And yeah, that was something that we talked a lot about at Ruby Conf in Chicago was Philly has so many good spots for food and I'm not saying that the hotel food is going to be bad, but it's not going to be representative of Philly. Let's let people go for lunch, let them go to Reading Terminal, go get a cheese steak, go hang out Rocky Mountain, ruby, blue Ridge, ruby, sin City, ruby. They've all done that and it's been one of my favorite parts about going to those smaller conferences. You're in this cool town but you're stuck in this building the whole time. I don't want people to come to Philly and just be stuck in the Sheridan the whole time. Sheridan's fine, the conference is going to be awesome. Come to Philly and just be stuck in the Sheridan the whole time Sheridan's fine, the conference is going to be awesome.
Drew Bragg:But there's so much about Philly to experience, let's get them out more. But yeah, to your point of like, if you add a few days on, I will say like, if you can swing it, you should definitely come in the weekend before, because the weekend before 4th of July is a Friday, and holy crap. Ph July is a Friday, and holy crap. Philly throws a party for 4th of July. We have the Liberty Bell, we have Independence Hall, like so much stuff happening. Yeah, you have not experienced 4th of July until you've experienced it in a place like Philadelphia. So if you can swing it, come out the weekend before and get your city in, then it will be well worth it, I promise it's a really good point.
Chris Oliver:I assume they do fireworks on the water there.
Drew Bragg:Oh yeah, like they did fireworks fireworks on Penn's Landing, which is right on the water. They do fireworks at the art museum. The art museum just lights up. It's awesome. There's tons of cool places on the parkway to to just chill and watch. Yeah, it is a huge party. The whole city is just on fire. It's great. Yeah, super cool.
Chris Oliver:Yeah, I'm pretty sure Penn's Landing was where we were when we were down for New Year's after your wedding and saw the fireworks down there. It was cool.
Drew Bragg:They go a little harder for 4th of July but yeah, it's similar vibes. Yeah, Penn's Landing is super cool. It's a little bit further away from the Sheraton than like a lot of the other stuff I'm suggesting, but it is a really cool place to like walk and hang out and be outside and on the water and that's a great place to go and hang, especially middle of the week.
Chris Oliver:Water and that's a great place to go and hang, especially middle of the week, won't be super crowded. Yeah, I'm looking forward to it. I'm trying to think of, like other stuff that we did for organizing. Ruby central does so much of that and as co-chairs we're kind of more for guiding the general direction. We're not dealing with contracts with the venue, luckily right.
Drew Bragg:Yeah, I will have a lot more to do as we get a little bit closer and once it happens, you'll be on stage doing introductions. I'll be on stage doing introductions. Someone will be running around like a headless chicken trying to fix something there will be water.
Chris Oliver:Don't worry, we'll have water.
Drew Bragg:We know we'll have water, that will not be a problem ever again. But yeah, right now it's get hyped because it's coming and it's going to be awesome and super exciting. So many people are coming, like even people that we haven't seen in a few years. Just for whatever reason, they don't go anymore, or this, that, the other thing.
Chris Oliver:There's a deliberate effort put into bringing people who have been historically part of the community and making sure that they are very encouraged to come back and celebrate as the last rails conference stuff. So I'm loving the theme that we landed on of the past, present and future of Rails, and there's so much cool stuff to look back on. I always forget this. When was the first year of RailsConf?
Drew Bragg:RubyConf was 2006,. Right.
Chris Oliver:It doesn't look like there was a 2005.
Drew Bragg:Well, that's when I mean 2005 is basically when Rails came out, so that'd be a little crazy to so. 2006 must have been the first one Almost 20 years.
Chris Oliver:That's pretty wild, you know. What's fascinating is how much has changed in 20 years and all the people that have come and gone and been a core part of the community, and then they move on to something new. And it's been fascinating because we haven't even experienced all of that. We've only been around since we started and so there's quite a few years that we missed, and probably dhh is the only one who's experienced all of it. We're really early crew, like toby, so yeah, I think it'll be fun, like aj's keynote of keynotes that's gonna be great.
Chris Oliver:Yeah, the keynote of keynotes it's stuff like that, you start reading the cfp for it and you're like, oh, this is sweet can't wait.
Drew Bragg:I think we did a really good job to balancing those types of talks the past and maybe a little bit of the future. Celebrating rails, maybe not completely from a technical. We have good ones that go into some of the technical aspects while still being a past, present, future theme, but then also just having really good technical talks that people are going to walk away learning stuff from.
Chris Oliver:Yeah, we were all very deliberate about choosing technical talks this year. If you had to choose between two, you'd pick the more technical one. In general, I think, as what we landed on which is good, because that's what I've felt sometimes in the past I wish we had more technical, deep dives into internals of something or other, and that I think we landed on really well but also those that are looking back on in interesting ways of like what's the retrospective of active resource? That was a thing, that it got removed, why? And talking about those things and all the stuff that the community as a whole has learned over the years, that's really valuable.
Chris Oliver:Webpacker was a cool idea at a time, but now it's not. And thinking about where was the community at the time, what was the problems, and that was a solution. It didn't last, but understanding the progression of things and how it went helps you think about how things will go in the future. What do we need? What's next? Where do I contribute? Yada, yada. So I like that stuff a ton and I'm excited for those just as much as I am for like the technical talks on how to do X, y and Z with, or how the internals of this feature in Rails works Always like those it was very, almost clear once we started really picking and choosing the technical talks.
Drew Bragg:That's going to be a great one for a beginner, a junior, someone maybe newish to Rails, to come in and go. I don't actually know how to use this. Well, I can go to this talk and get a really good primer on it. Next step up of a little more complex, a little bit more of a deep dive and then we have the really hey, what's going on under the hood? How does this thing actually work in Rails and what are all the design iterations that happened to get us here? What are all the design iterations that happen to get us here? So it's like something for everybody on the technical side. Really fun talks around those technical bits. It's such a good schedule. I don't mean to harp on it so much, but I'm really excited. Like I'm a hallway track guy, that's usually what I do at conference. I maybe go to one or two talks and otherwise I'm in the hallway. This time I'm like I'm gonna go to so many talks. There's so many good ones.
Chris Oliver:Yeah, it's going to be hard to balance. I'll probably do my usual of like I really want to go to this talk, but I know I can watch it later.
Drew Bragg:Well, your biggest problem is you are a celebrity, so you walk down the hallway and people go hold on. I want to talk to you. I'm slightly less of a celebrity, so I don't have as much of that.
Chris Oliver:It is strange, not a celebrity anywhere else For the three days or whatever, I'm a celebrity. It's kind of weird. I always get the most out of that because that's the friendships that, like yo, after the conference, let's hop on Zoom and dig deeper into X, y or Z that we were talking about and just build those long friendships. I have to default to doing that, but that's been so much fun because, yeah, it's made so many good friendships. And here I am, went to this guy's wedding.
Drew Bragg:And that's also how, essentially, how Remote Ruby was born. It was just you and Jason in Vegas.
Chris Oliver:And here we are. Yeah, but yes, totally. It was exactly that how we met. Andrew just hung out at our table one year, and then jason and I just randomly met at rails conf even though I didn't go and right, yeah, so it's a fitting city. I feel like chicago could have been a fitting city for the last one if it wasn't just yeah, we just did ruby conf and we've never had one in Philly.
Drew Bragg:None, neither, no Rails, no RubyConf has ever happened in Philly, which is a crime. That was my whole platform when I was running around, so we're going to fix it for the last one.
Chris Oliver:Yeah, the only reason Chicago would have been cool is just to full circle back from the very first one, being in Chicago. But the actual location doesn't matter that much. Philly is going to be phenomenal. That's the thing. Just find a great city to be in where people will have fun together, and that's it. So yeah, I still think about how much fun Ruby comp San Diego was on the resort, sitting by the fire pit. I could have just done that alone for three days. Hang out by the fire pit. You find the spot with the right atmosphere or whatever, and that's it. Just get people together, they'll have a good time.
Drew Bragg:The people are what make it great, no matter what the location is, and there's going to be so many people there to celebrate.
Chris Oliver:We have great speakers, but the additional guests coming because it's RailsConf it's going to be a big one and it's going to be a big party and I am super excited to have everybody and go through it. And I think it's probably helpful for Ruby Central to just do RailsConf this year and then they're down to one to focus on. If you or your employer wants to sponsor, I think they'll still happily accept new sponsors. So reach out to whatever email address is for Ruby Central. I'm sure it's on the railsconfcom website. That's been incredibly great too, because I think you were part in saying Power Home Remodeling is a big company that uses rails here in Philly.
Drew Bragg:Huge company does rails.
Chris Oliver:They were excited to get involved in everything. And that's another cool thing is the conference can be in a city like Philly and then it's like well, what are the cool rails shops here that we could show off or whatever and support, and I think that's special. It's another really cool thing and hopefully, like the traveling circus, gets to go to every small fun town. I'd love people to come to st louis or kansas city again at some point.
Drew Bragg:So you gotta get on ruby central and let them know you want to help make it happen. That's what I did. I was just annoying to the point where they couldn't ignore me anymore and then I have a phone call from the director of Ruby Central. I'm like there's only one reason why this guy is calling me right now, and it was to tell me that they were doing it in Philly and I was jumping on my couch and freaking out my dog and it was. I was pumped. I'm excited to have one.
Drew Bragg:I'm a little bummed in a way, because I do really like going to a new city and traveling, and getting to go to Denver was super cool, and every time it's somewhere new, I'm like cool, I get to go experience the city. I get to go find out this place that I probably wouldn't have gone to otherwise or may not have had the opportunity to. So this is a little weird because I'm like I'm in Philly like every other weekend, so it's not really that, but I get to impart some of my like yeah, I'm in Philly almost every other weekend. So here's something cool, here's a great place to go climbing, here's a great barcade or whatever it might be.
Chris Oliver:You got your rental tour bus and you can take us around town and give us the fake history of Philly Sure.
Drew Bragg:Yeah, this is a place where I did that. This is where my boot camp was. It's not there anymore, but yeah.
Chris Oliver:In general, organizing the conference as a co-chair has been very easy because UFUK and the Ruby Central team know what they're doing, so I've been able to contribute my opinion whenever useful and stuff, and yet I haven't had to get into the weeds of anything. Really, I feel like they've gotten so much organized, so much done. All of the reaching out to people and saying here's the process, you accept your talk and then this happens If you want mentorship or advice on your talk, here's how to sign up for that and whatever. There's so much stuff done already, which has been amazing because it's a lot of work to put on one of these conferences. There's I don't know how many people working on this and I'm just glad I can help, you know, wherever I can, and we just want to make this as best of the final RailsConf as we can. But also I'm like geez, thank goodness you didn't just dump this all on us, because I don't know how we would end up doing it all. It's wild.
Drew Bragg:Yeah, that's something I'm really excited for from Ruby Central is their new initiative to support regional conferences, since they won't be doing two conferences. They've got the resources to make conferences happen. They've got all this experience making conferences happen. There is a lot more regionals popping up, but it's hard to put on these conferences. It takes a lot of time and effort and there's a lot of risk and liability and if you've never done one before, it can be daunting. So to have something like Ruby Central be able to come in and help you with so much of the logistics, so much of the here's what you need, here's your checklist. Here's how we can help. That's going to be such a great addition to the community and help so many more regionals come up and actually happen and not just be someone's dream to someday host this thing and not lose a ton of money for the organizer that too.
Drew Bragg:Yeah, I won't have to get up and be an auctioneer.
Chris Oliver:That was such a On the organizer. Yeah, I won't have to get up and be an auctioneer. That was such a On the spot. I am so happy that worked out so well at Sin City Ruby, because you hear from pretty much everybody who's tried to organize their own conference. They've lost thousands of dollars every time. That's not going to get them to continue going forever. It's got to be sustainable and I'm sure they don't care that much to make a ton of money from it. They just want it to be sustainable. They don't want to lose five or 10 grand or whatever just a few days to hang out with friends.
Drew Bragg:For sure.
Chris Oliver:So that kind of stuff is really useful, whether it's advice on how to deal with contracts or what venues to look at, or whatever it is. That stuff alone will save your bacon. If you ever think about doing something and want to, I'd love to do something here in St Louis or somewhere around here at least, and I would definitely look towards that because, yeah, here at least. And I would definitely look towards that because, yeah, I'm sure, if I knew somebody who is an event organizer or whatever, but, like you know how expensive a wedding is and it's like conferences that, if not more, if not double, good lord, yeah, it's too much of a gamble and that's what you're trying to mitigate. There is, make it sustainable, make it something you can do every year, or at least not lose a ton of money. Right, right, yeah.
Drew Bragg:Yeah, so I am very excited for Ruby Central to start doing that in addition to everything else they do. I definitely, early on in my career, did not have a great appreciation for Ruby Central because I didn't quite understand their role in our community. And now that I'm a lot more senior and I see what they've done, I've peeked behind the curtain and I know how much easier my life is because of them. I'm so grateful for them and everything they do.
Chris Oliver:Same. Couldn't agree more. I'd hear the name Ruby Central and stuff, and then you can go to a conference or see videos after RailsConf. It's not RailsConf by Ruby Central, it's RailsConf.
Chris Oliver:I didn't even put two and two together for the longest time for that reason too, and I was like whoa, I'm glad to help support as much as possible now because I had no idea what they were doing for us as a community and stuff. So agreed wholeheartedly and encourage everybody else to support, attend the conference, stay at the conference hotel. Those things were little details that we wanted to make sure we emphasize this year too. Because I'd go to a conference and then it's cheaper to stay somewhere nearby and when budgets were tight I was like, well, I'm going to have to do that. But at a certain point I had no idea that the conference has a contract with the hotel to sell a certain amount of rooms and food and beverage and stuff like that. They are having the conference at a hotel because they're trying to sell hotel rooms. So you actually help support the conference a lot if you stay at the conference hotel.
Chris Oliver:I never knew that until somebody mentioned it offhand. I was like that makes so much sense, but why did it never cross my mind until now? And it's funny how those things you could probably take for granted easily If you've been on the team at Ruby Central organizing conferences year after year. That's just how it works. As attendees, we have no idea what goes into it. Half the time I had no idea how hard it would be to rank 250 talks against each other. That was exhausting and so tough.
Drew Bragg:And it's so important for Ruby Central not to lose money on the conferences, not just because like, oh hey, we want a good conference and we want it to happen more, but when Ruby Central makes money off of a, a conference which, let's be clear, like these conferences, are fundraising efforts. These are not marketing events like maybe rails world is more of like a hype train, get the rails foundation loses money on this, but that's sort of the point. This is a fundraising effort for things like ruby gems and bundler and things we use every day and the security of those things and the performance of those things. That's very easy to take for granted. We used to use curl requests to download someone else's Ruby code onto our system. That's the pre-RubyGems days.
Drew Bragg:I don't want those dark ages anymore. I don't want to have to think about oh, what if one of these gems that I rely on is hijacked. Ruby Central takes care of the security. They make sure Bundler works and works really well and fast. But they need to make money on these fundraisers which are conferences. Yeah, so get the hotel room, talk to your boss, get them to pay for the ticket.
Chris Oliver:That's, I think. Another helpful thing to convince your employer to send you to RailsConf or RubyConf is you are going to get an awesome experience at the conference, make friends, learn tons of things, have people that you can reach out to afterwards because you met me or Drew or anybody there and we talked about some interesting issue you have at work. We would love to help out. If there's any advice we could give you or whatever after the conference and stuff. There's that which is sometimes a little bit hard to convince your boss that spending money so that you don't work for three days or, realistically, more like five days, because if the conference is Tuesday through Thursday, then you're traveling Monday, traveling Friday, you lose a full work week. So that's kind of tough, I think, as a sell sometimes for employers, but also telling them that not only are we going to learn a bunch while we're there and be more involved in the community and have more support from the community, but we are also supporting RubyGems and Bundler and the longevity of that is awesome and, I think, a great way to think about it too.
Chris Oliver:Every piece of this. We are just supporting the future of Ruby in general, which is critical. We get so much from big companies like shopify and github and whatever, but like you don't want to be dependent on just one or two large companies, from sponsoring and stuff, like the individuals, the small businesses and all of that are what really keep us sustainable, because if one God forbid goes out of business or whatever, there's still plenty of people there to support and whatnot. And then maybe new startups spin up on Ruby and Rails and they give back and whatever. That is what keeps it going and keeps it from being a rocky situation where you don't want them to be on the brink of Like during COVID I'm sure it was impossibly hard to work through for the events and that is also funding the future of Ruby Gems and Bundler and all that. So scary situations like that can be mitigated by us all supporting them.
Drew Bragg:You're right, it is a bit of a tough sell to your boss. A good way potentially to frame it is especially early on in my career. I got so much benefit from attending, not just because I would go to a talk and I'd learn something, but it's kind of like learning a different language. The best way to get better at the language that you're trying to learn is to go to that country right, be completely immersed and surrounded by it. A lot of us are remote workers. Maybe we don't even have that large of a team, but even if we do, it's a lot of slack conversations and not in person. But you get to come to this in person. You get to talk to people about work, adjacent things.
Drew Bragg:I always left Ruby and RailsConf early in my career like so excited for my next week of work. I want to write more Ruby, like I want to get better at this. It was such a career accelerator for me early on and now it's just such a great way of now I know this person. Now I know that person. I was introduced to this. I've texted you or Jason Sweat out of the blue like, hey, I'm not bothering one of my coworkers with this. Have you ever had to do this. Point me in the right direction. We don't need to have a full-blown conversation, just point me in the right direction. That kind of stuff is so valuable. It's not, oh go and you'll get a job because of the networking. It's like, no, you go and you'll get resources. Because of the networking, you'll meet people who have different experiences in you and different expertises in you, and that's going to make you a better developer, which is going to benefit your company in the long term.
Chris Oliver:Totally. Every single conference I come back from I'm fired up. I always am like I should go build that thing that I've been wanting to for a long time and it always gives me so many good ideas of like, wow, I could go back and refactor this or that or have a new approach for this other thing. And it's always intangible things. You can't come into RailsConf or RubyConf knowing those things specifically will happen. But they will.
Chris Oliver:They will be random conversations that you end up talking about namespaces or whatever and you're like, oh, I think that could fix our whole major issue of our architecture at work on this problem. You never would have known that that was going to be what you walk away with. But those are the invaluable things that you can go get all this knowledge dump from hundreds and hundreds and hundreds of other Ruby developers and that is all over three days. And you come back home and you're like I need to build a Ruby gem for this thing and we can refactor this at work and yada, yada. That alone, I think, is worth the price of entry, the rejuvenation being in person with people work remotely too much Just me and the dog for way too much of the day, every day, so I'm excited. I can't wait. It's only 54 days away, as we're recording this, at least as we're recording this.
Drew Bragg:It'll be even closer once it is released in june, so yeah, get your tickets. Get out there, come visit us come say hi, visit philly, it'll be great.
Chris Oliver:And we will have a podcast Podcast panel.
Drew Bragg:Yeah, so yeah, you can come see this nonsense happen live, raw and unedited. Cause Paul does an amazing job making us sound so much better at this than we actually are.
Chris Oliver:That was fun. Paul actually came to RailsConf in Atlanta, atlanta, yeah.
Drew Bragg:Yeah, that was great to meet him. I was still pretty new at this. He gave me a big hug and I used him for like five episodes at that point, but he was already like his really great friend. He was just such a cool dude, Always had unsolicited but great advice, and I'm like I don't pay you enough for everything you do for me for this podcast, for this show. He's so great.
Chris Oliver:Yeah, shout out Paul and his wife the best. Yeah, we got very lucky with them. But yeah, also, that's a good time to come out and if you want to start a podcast, come ask us questions. Whatever, the more podcasts the better.
Drew Bragg:Absolutely. There's so many people to interview and so many topics to cover and this show is so much different than remote ruby, which is so much different than the ruby on rails podcast, which is different than the bike shed, and I could just keep naming podcasts all day, but like they're all just a little bit different enough that even if the guest is the same, the content ends up being different constantly listening.
Chris Oliver:It's like school. You'll really latch on to a certain teacher at school because the way they explain things really fits how your brain works, or whatever. Same thing goes with podcasts. This person I really really understand and like and whatever. So there's always room for more. I think the more the better, especially in a community like Ruby that is decently sized but still tiny compared to JavaScript and even probably Python at this point, because Google and the Python community there is pretty massive. We need to spread the word of Ruby more and so if you want to do any of that, we'd be happy to chat and help you get launched or whatever. Whatever it is.
Drew Bragg:Yeah, I sort of know what I'm doing now. I've done this a couple of times.
Chris Oliver:Your 50th episode came out today 50th episode will be next week.
Drew Bragg:As I'm recording this, may 20th will be my 50th, actually closer to my 60th episode, but like live at rails world wasn't a full episode live at rails comp, for you know I had a few bonus episodes, so like they count. So I'm technically over that. But like that's the 50th, the title is episode 50, Adam Fortuna.
Drew Bragg:So yeah, that is the 50th it's a big milestone, man congrats yeah it's cool, I never shocked, I hit it what's your release schedule on those can't? Remember, I try to do it twice a month, sometimes life gets in the way like well over a year, then it's longer.
Drew Bragg:So when I started I was once a month and then I went to twice a month and I've missed a month or a week here and there because, like remote ruby, especially when it was the three of you like one of you drops, you've still got a show, two of you drop. As long as you have a guest, you still have a show. For my show it's me and whoever I have coming on, I have to be available, and then I also have to have a guest. So there's been misses here and there. It's not as easy without a co-host, but I also am not organized enough to instill this on anyone else.
Chris Oliver:It's so much harder to coordinate once you have co-hosts so yeah, but that's amazing man. Co hosts so yeah, but that's amazing man. It's the hamster wheel that's easy to like. I don't want to do this this week and you don't have anybody else expecting you to be there, unless it's a guest that you've scheduled. So then you're like maybe I do skip this week and it's the grind. It's the same grind as you got to get to the gym or whatever, and take your medicine, whatever, all those things that you're like I have to do this consistently, and what is most important is that I do it. Not how good was this episode compared to the last one? Was it better? That doesn't matter. You just got to be there consistently and then magically, they end up getting better all the time.
Drew Bragg:I had to listen to one of my earlier episodes because I was trying to remember something and I was just like, good Lord, is that what my episodes used to be like? What the heck it was terrible. And it also used to be a very expensive hobby because I paid for this and paid for Paul and all this stuff. And luckily now Honey Badger and Judo Scale are amazing sponsors and sponsor the show and let me do it without my wife going you're spending how much on this stupid hobby now.
Drew Bragg:So, yeah, I thanks, paul thank you for making this so much thanks josh and ben and yeah and adam and big time thanks.
Drew Bragg:well, I also get to thank adam at least once a month when I get my automated Judo scale email for Podia and it's like you saved this many thousands of dollars this month and I go thanks, adam, because that means Podia has more money to send us to in retreats or something. What an awesome product Judo scale is, and Honeybadger too. It's. Just Honeybadger is a little more less about. Here's how much you saved and more of like. You get to catch this exception earlier and fix it and save yourself money by not having downtime, which is great.
Chris Oliver:Well, and you guys, being a platform like that, something like Judo Scale is pretty much invaluable, because you don't know when somebody is going to launch a major sale or something. You do know when Black Friday is coming up, but you don't know how big Black Friday will be, so judo scale really saves your bacon, I'm sure. Huge Like insane.
Drew Bragg:That's great, big time, big time. But continuing with the episode as it should be blockers. I know you have secret projects that we're not talking about. Is there any blockers that you currently have or anything from like the Hotwire course that you want to talk about?
Chris Oliver:I've got three or four, maybe five lessons on testing for the Hotwire course that I want to do and those are tricky because of it's JavaScript and system tests suck.
Drew Bragg:Yes, they do.
Chris Oliver:Recently. I can't explain this either, but recently the test suite for Jumpstart Pro failed with one test, but it just became consistent all of a sudden, and it was because our fixture used the password as password, obviously, and that was in some data breach, of course. But apparently the data breach includes that email and password or whatever combo, which is like tested exampleorg or something. And so now the test suite runs headless Chrome. It takes a screenshot. When it fails, it goes and fills out the login, submits the form, and then it's waiting for the next page to show the dashboard or something. Well, that never gets there and then it takes a screenshot. Here you go, this is what we got stuck on, and it's like the empty login page and it never shows, because this is one of those like browser modals that shows up when you log in and it's like, hey, we found your password in a breach recently. That doesn't actually show up in headless Chrome at all. There's no way to turn it off either. So I've been like, yeah, screw system tests, but for something like the Hotwire course, if you want to test turbo frames or something like that, you really need to do that, because if you don't wire it up right, it'll work, the request will work, but it might not grab the frame from the next page because that might be missing and you need to then check for the JavaScript to insert content missing or whatever, add an error to the console or whatever. So I want to talk about some of that stuff, but also there were some really cool little details that I want to get into in the weeds a bit, where if you're using Hotwire and you're using things like TurboStream, from which basically on the page load will then use a web component to connect to the Action Cable channel, what's really cool is there are test helpers for that, so you can load it in the headless browser, but you're doing automated testing, so it's running as fast as possible, which means the page will load and then you will do stuff before the WebSocket actually connected. So the test helper is actually really slick. It looks for all of those tags in the HTML and then just waits until the connected attribute appears on them. So then that ensures that every single one of the TurboStream source tags is weighted until it's actually connected on the back end. So if you want to test a broadcast, you just add this little one-liner and it looks a little bit like magic, but we'll go into the internals and show you how that works and it's like, oh, I could have written that myself. I don't have to thank goodness. But now that I actually see that the implementation of this method is like one line, three lines of code, something tiny you're like, oh, this is cool. I can use this now to think about how to write my own tests for my own stimulus controllers or something that pattern you learn from that teaches you ways to write your own custom stimulus controllers or other web components or whatever in a hotwire manner. I just need to sit down and have some time to record those, hopefully next week.
Chris Oliver:I said that the last two weeks and personal family stuff has come up and allergies have been killing me and other things, and so I've been a little behind. But it's awesome. You look at the source code for some of the stuff in Rails and you're like there's no way that's as simple as that is, and sometimes that's the case and it's like it's actually quite complicated what this one little thing does. But other times you look at the test helper and you're like, are you serious? It just looks for these tags and waits for the connected attribute to show up and then it continues and that's it. Oh, that's cool, that's really creative. I don't have to put a stupid sleep five. We've done that before. I'm sure all of us have done that at one point or the other, and that's okay as a solution. But if it ever runs faster than five seconds, which it always should generally this way is just more or less going to pull until that shows up, and so then it's still going to be as fast as possible, which you always want your test suite to be as fast as possible, especially the dang system tests that are slow. So I'm very excited to dig into some of that stuff.
Chris Oliver:I just think that half the battle with Turbo is understanding the mindset you need to be in and then understanding those little nuances of oh, this is how I should think about it. Can take it from being this framework where you're like I don't know, I feel like we should switch to Inertia and use React and whatever else. You see that all the time and it usually comes from that where they don't fully understand Hotwire and how it's implemented and how to work with it, and so the easier thing is all just to go throw it away and use something else, and that's not how you should approach it. If you run into a challenge, this is your opportunity to understand how it works and why it works that way. But that can be tough unless you have someone who knows how to give you that answer, because sometimes you can look at it for a month and still be like I still don't know how the hell this works. So yeah, my goal is to do that.
Chris Oliver:Talk a little bit about the controller test too, which have some.
Chris Oliver:They have some value too, because you can write those way faster. If you were just doing something where it's, I submit a form and then I like replace this thing on the page, replace the form with a new, fresh copy of it, for example. If that's all you're doing, don't write this freaking system test for it. Just ask the response. Did you include a TurboStream tag for a replace or an update or even a visit or whatever? And the thing that's blocking me lately has just been going to sit down and write those sort of examples to show off and then record it 15 times until I get it right, and then if you sit that project down for too long and you try to come back to it. It's been two or three weeks now. It's hard to come back to that and remember where you were at and the little details and like, oh, I was going to do this and that and whatever, and I hadn't written it down and it was in my head in fine grain detail at the time but I didn't write all those thoughts down.
Drew Bragg:Yeah, it's dangerous to leave things in your head without putting them down in some way. Yeah, done that before. We're releasing a new soon TM in air quotes, soon releasing a new checkout flow at podia and a whole bunch of back-end stuff is changing like really big architecture changes and we want to make sure like this new checkout's good. So I've been tasked with kind of writing an automated test suite for it and whole man, it's got to be system tests. There's so many different moving parts and components and things have to change.
Drew Bragg:When you select different plans for a thing. What if you already have it? What if you're a customer from the EU? Are we applying VAT tax correctly? What if you're in Canada and you've got two different tax lines and with a discount? So much stuff. And then, of course, does it work with Stripe? Does it work with PayPal? Can? And then, of course, does it work with Stripe? Does it work with PayPal? Like, can you actually purchase the thing? It's been a lot. So when you're like system tests suck, I was like, yeah, yeah, I know, trust me, I know they're super valuable.
Drew Bragg:We've caught so many good bugs with it Stuff that just no one had tried this combination in a minute. We didn't realize it broke when we did X, y or Z. Now this combination in a minute. We didn't realize it broke when we did X, y or Z. Now we've got an automated test. We'll know if we break it again. We were able to fix it, find other things.
Drew Bragg:We've caught a lot of edge cases of like hey, actually if the server takes a while to respond and we do something while this form is submitting, we don't actually disable that button. If we hit it too fast, weird shit happens. I wouldn't have found that if I was just clicking around. I wouldn't have clicked that fast. But the test runs fast enough. It's like oh, once that button's able to be pressed, press it. But we didn't disable it while we were submitting this other form. So the tool just tests, just hit the button, whoa, this coupon wasn't applied or this total wasn't correct, and that kind of stuff has been super valuable to catch also. So it's like they're a pain in the ass, but they are pretty freaking valuable if it wasn't so hard to debug them.
Chris Oliver:that's still probably the biggest issue with them it's doing stuff. I can't see it because the other half of it is like well, I can pause it after a request happens, but I can only inspect the HTML in the browser. I can't see it unless I switch to non headless Chrome, and that's sometimes just so annoying because you're like I need to see what the hell is happening and slow it down, and then sometimes you'll slow it down and then it works and you're like wait, what the flakiness is the worst.
Drew Bragg:Yeah, I've been using playwright because of the flakiness that we were getting from selenium, and playwright has video recording built in so whenever I'm like oh, this isn't working correctly. I can just rerun the test with the record mode turned on. To be fair, these are not actual tests, because I can't get stripe to work in our test environment so this is actually my development environment and it's just using Playwright as a browser automation tool, calling it a test, and my assertions are just basically my own little concoction, but the record mode is super cool.
Chris Oliver:You reminded me because I was going to say something when you were talking about payments. I had really nice tests for system tests back when Stripe was like the card element and that's all there was. But then I tried to keep that going when we moved to like Stripe checkout and checkout is embedded but it depends on the configuration of your Stripe account what even shows up. And then there you change the UI every few months and I was trying to keep that going. And then for Jumpstart, we have people in the EU and whatever, and it's defaulting to ideal or some other payment method or something that we don't even have here. So I can't even write my freaking tests to do that. And I was like, yeah, screw it, this stuff, I will run through manually and trust that.
Chris Oliver:And at this point the embedded Stripe checkout is simple enough. If I know that we created as a Stripe checkout session with the right arguments. That's all I need to know, because literally we hand it off to the JavaScript and they redirect us when it's done and that's it. There's not much for me to actually test anymore. It would be nice to have a full end-to-end situation going there, but now I can more or less just trust that, yes, our JavaScript is like nothing anymore, and I've manually tested it. No, it still works. And then the system tests can more or less go away, because the unit tests or controller tests can just, hey, let's stub out this request to the Stripe checkout session, and if it works, it works good.
Drew Bragg:We have a lot of those too, but there's just something about you really need more than we do. There's so many extra complicated steps of like. The creator has created this type of product.
Chris Oliver:We want to make sure that you can click the button go to this screen.
Drew Bragg:They fill out this information. So much stuff changes. You can do PayPal checkout or Stripe checkout. If it was a little simpler sure we could just do a controller test for it, but you've got a lot of complexity because you're the platform level and one-time payment plan subscriptions.
Chris Oliver:Uh yeah, it's a lot it's a mess and it's one of those things that you think would be so much simpler or have been figured out by now that everybody needs to accept payments. Why isn't this just easy? It's like well, it turns out, the payments global payments are an absolute nightmare. If you only wanted to accept credit cards, it's actually not too bad. That's pretty much been solved by Stripe forever. But now it's. That's pretty much been solved by Stripe forever. But now you got to deal with tax and shipping addresses and whatever else.
Chris Oliver:And then, yeah, you want to accept such and such. Well, it's like a confirmation that takes two days for the bank to approve, or whatever. And it's like so we just put you in limbo for two days, I guess, and then provision your account later. Or we do it now and then we revoke it in two days if it guess, and then provision your account later. Or we do it now and then we revoke it in two days if it doesn't actually go through. And then so many of those things are like well, either we have to decide as a platform how that's going to work, or we let the customer decide. And then, if we let the customer decide, we have to support both options and test against both options, and then you end up with so much complexity, which that's exactly what you have to deal with as a platform like that, because you're trying to serve everybody yeah, everybody all over the globe and so many configuration options.
Drew Bragg:But yeah, it's, it's nice to have it, it is, it's been good been fun.
Chris Oliver:It's good job security, for sure.
Drew Bragg:Yeah, I'm uniquely positioned at Podia now. I'm the one and only person with an automated test suite for our checkout because no one else can run it.
Drew Bragg:I'm working on that, getting it so that everybody can run it, but right now it kind of is dependent on my developer environment. But baby steps, baby steps, fixing all the bugs I've found thus far. So those would be cool. Tests and videos will be good. The wrap-up question, my favorite. You've had some good answers to this in the past. What is something cool, new or interesting, other than your Hotwire course, of course, that you've recently learned, discovered, built, created, read anything?
Chris Oliver:I've always been a big admirer of Rails and how 37signals tends to write code. The Rails authentication generator is always my example where it's like allow unauthenticated access and these class methods that get added resume, session and whatever else just the specific terminology in it, I feel like, has always been something I've admired about rails and I've always wanted to get much better about that, and that's been something that I feel like as I've written. More open source code. You can get by without doing a lot of that in your regular application code, I feel like, but when you start building libraries, that's something that starts to be really important because you're trying to communicate the same thing to people that may or may not even speak English as their first language. So the terminology does make a big difference and stuff. So I don't know.
Chris Oliver:That's been something I've been working on a lot with the gems and things lately, trying to I get my first version of it out of my brain into a gem and then I'm like it still feels clunky, it's not as polished as I want, and so I've been trying to figure out those things and the balance of in pay. Lately I rewrote a whole bunch of stuff because their API has got some breaking changes in latest versions and stuff. But even those things are tough to balance. I want to sync the payments that you've made, the subscriptions and the customers to your local database with webhooks so that we don't have to hit the API and our application can be way faster as much as possible. But syncing that stuff that is going to change potentially every API version, how do you write code that's not going to blow up? All the time? Pay has been tough because it's like well, there's Braintree and Paddle and Lemon Squeezy and Paddle's got two versions and there's also Stripe and whatever, and I'm trying to take these concepts that are sort of shared between all these APIs and abstract them. And I've gone so many different directions over the 10 versions of pay and the latest one was like you know what, why don't we just save the whole JSON blob from Stripe and we'll go retrieve the latest copy and expand as much of it as possible.
Chris Oliver:One thing you may have run into is I was building Learn Hotwire site which we may end up selling that source code on Cell Repo. At some point. If anybody's interested, let me know. I've been debating if it's worth doing or not, but for that this is my first time using one-time purchases with Stripe's adaptive pricing. So if you're in the Netherlands you can pay in your local currency versus having everybody pay in my currency. And unfortunately that means that Stripe's charge objects give us pesos or euros or pounds or USD, and so when I went to calculate what's the amount of sales we've had, it was like way inflated because it had Australian dollars in there and whatever else, and the exchange rates are hidden in the secondary object and the fee is called a balance transaction. So I actually need to calculate those. But then if I just store those in the JSON blob, I can go and select from the JSON blob, I guess, if that thing even exists in there but it sucks because I don't have just a column I can say here's the US dollars and just sum all of those, like you would expect to be able to do.
Chris Oliver:But then if you're building a library this is a library that may be used by people whose actual bank account is in euros how do you set the default currency? And then that's going to all be data coming from Stripe anyways. So as far as I know too I think there is, if I remember right you can connect multiple bank accounts to your stripe account. So if you have us and european sales, it'll use whatever is the closest. So it might end up where you have euros and usd in the balance transaction. So you may never actually get what's the total sales ever, because it will end up being split up across those.
Chris Oliver:So that's been one of those things where I'm like I don't even know how to build a reliable library for this type of thing, because I don't know if there's a good answer for that. Stripe has extra magic they can do internally to build their own dashboards and we can save as much data as possible. But then building these tools to give you some easy things to have just a total sales number, it's like I don't even know if I can do that in this library. So I've been struggling a lot with that and learning.
Chris Oliver:Maybe we don't try to build our, because what I did previously do is we would have features that were general across all of them, like this is the amount of this charge and this is the amount refunded and this is the currency. But then there were some other things, just like what's the payment intent id? That's a stripe only thing. Paddle has its cancel url and a receipt url and stuff, and so I was building these like one-off things but trying to make it also generic. And so this latest version of pay. I realized what if I just don't mess with the stuff that Stripe gives us and we just store it and then just allow you to rehydrate the Stripe charge object and do whatever you want with it? So if you want to build a callback to save the USD currency, you could extend pay and just always have a column in amount refunded, usd or whatever. That would work for me, but somebody that has their primary bank account in euros could then extend it and do the same thing but for euros or something.
Chris Oliver:So, yeah, it's been one of those things where, like, you're writing code but it's such a meta level when you're doing libraries that I've always been curious how do I find a good balance of that? I want to do it to solve my problems, but I also want to build it generically enough to solve other people's problems, not just mine, but I don't have the same problems they do. And then I run into things where I'm like, oh crap, I didn't build this open-minded enough or flexible enough so they could even do that. Now I got to undo my stuff and then whatever, which is why it's went through like 10 major versions of the library. But I feel like I'm finding the balance more lately, where I'm like when I integrate with APIs, it seems safest just to say, hey, we will save the whole result and then you've got it to use later if you need it and you can change your code without having to like, oh shit, we need to resync 10,000, 100,000 payments from Stripe because we changed how our thing worked.
Chris Oliver:And then you end up in that data migration situation where the code currently relies on this data. We need to change it to this. The code can't be deployed to depend on that until we've synced all this stuff. So you need to do a multi-step deployment process for the migration, which is also darn near impossible to explain in a gem. You're going to have to do this in steps. People. They just upgrade the gem and deploy it straight to production. So that's no bueno. So yeah, I don't know. That would probably be the best answer.
Chris Oliver:Lately, of things I've been learning, of trying to get better at building code for those types of problems, that is very building code for those types of problems that is very as future-proof as possible, I guess, and that's just darn near impossible sometimes. I'm sure that everybody implementing an API wrapper for Gemini and OpenAI and yada, yada, yada, all of those are going to end up being sort of consistent where they all have similar like prompt api end points, but all of the arguments are going to be a little different here and there and then try and abstract those and then one goes away and then they got, oh, a new version of this model but it takes new parameters and at first you're like, maybe I'll validate that you have all these options that match the API docs. And then at some point you're like, screw that, let's just do a splat of args and just forward them along to the request, because I don't want to have to go and update my gem every single time an argument changes or something. And you learn those types of things over time and what works best for the specific type of problem or whatever. But that's one that's been a forever sort of struggle for me and I always feel like I'm learning how to improve that and do it a little bit better here and there. And it's just tough to sort of model that stuff.
Chris Oliver:Anyways, we're different because we have a Stripe account that has multiple products in it. Sometimes it's in CS. The web hooks all need to go to all the different apps but, like, learn hotwire doesn't care about any of the payments or customers from the go rails app or whatever, and it's like we should probably just ignore those and then deduplicating that sometimes, too, is confusing, because now we've got the same person paid for both products, we need another layer on top to be like here's all this person's accounts and their total lifetime value and that type of stuff. One person now has multiple Stripe accounts. They also have multiple accounts across our rails applications and whatnot. So it's a fun challenge, but, man, it's also very distracting from doing actual work for sure.
Drew Bragg:Yeah, I think you guys actually talked about this on remote Ruby a few weeks ago, but Andrew ran into the Stripe web hooks Don't come in in a guaranteed order. Yeah, I think you guys actually talked about this on remote ruby a few weeks ago, but andrew ran into the stripe web hooks don't come in in a guaranteed order. You could get like an update subscription before the create subscription comes in and it's like hold on, how do I update? It doesn't exist yet. What the?
Chris Oliver:yeah, I just had that with those balance transactions I was talking about. If you purchase something, it takes a second for them to, so the charge succeeded event comes across and the balance transaction is nil and then the charge will be updated a millisecond later or something stupid, with the new balance transaction and that will be the thing that actually contains the data. So I shipped this thing to start calculating our sales from the balance transactions, goes to production and then boom, honey Badger's, like you don't know what you're doing, wait a minute. This worked just fine in development and sure enough it was like yeah, some of these don't have a balanced transaction for a fraction of a second, but you rerun that code after the next webhook comes in from charge updated and you refresh the page and it's fine now. But the first request was not wait a minute. What is going on here?
Chris Oliver:And it's like yeah another web hook, updated and added this extra data to it, and now it's fine. If you hadn't loaded that page within those couple seconds, you never would have known this is a bug and I was like, oh great, this is another one of those things I don't want to have to deal with here, but sure enough. So I don't know if it's a good answer for that, but it's been some learnings and stuff that I've been doing good learnings.
Drew Bragg:Yeah, it is one of those interesting like payments have been solved but they haven't. It's just endless combinations of so many different things and it makes it fairly brittle to wrap your head around to to write a good test for to. Yeah, there's a lot, and it's scary too, because it's people's money. You don't want to get it wrong. You don't want to end up charging someone $1,000 when you meant to charge them $100.
Chris Oliver:There was an old app I worked on once and they were telling me that they had set up PayPal and PayPal has a two-step process where you set up the charge and you send them over to PayPal, they put in their account details, whatever, and then it sends you back like an ID and you have to then confirm it to actually do the actual payment and apparently they weren't doing that second step.
Chris Oliver:So everybody thought they paid for it and they never collected a dime and it was like tens of thousands of dollars that had just never been collected and I think they were able to maybe go back through and collect stuff. But it was confusing to people because they were like what do you mean? I got charged today, but I paid three weeks ago. Well, technically you never did pay three weeks ago, but trying to explain that to people it's not easy. And this is the stuff that makes me feel like we're all excited about AI and everything, but like we still can't even make payments easy For sure. Ai and everything, but we still can't even make payments easy For sure.
Chris Oliver:The nuance to all this is still too complicated, too hard to do a lot of things. Even building front-end stuff with Hotwire or React is still really painful in a lot of places, and back-end stuff is not as simple as it should be in many cases. Rails gives us the best abstraction so far, but even it can probably abstract a lot of things even more. For us, it still feels like very early days where, like, tell me to go build something. It's like there's still a lot of decisions I'm gonna make along the way that seem like they shouldn't really have to be decided or whatever. But yeah, I think the hype train is left, as people are like oh, we don't need this many developers and we got AI and whatever. We're hiring tons of developers with super high salaries is not cool anymore, but I feel like we're still going to be insanely valuable for quite some time.
Drew Bragg:I think one of the best. Oh, job security is a thing. Here. The comic I read where it was a junior developer using AI to write whatever couldn't figure out this bug. Ai wasn't being helpful, so he called over his senior developer and the senior developer is like well, let's look at the code. And the junior goes you can read code. It's like yeah, yeah, vibe coders are going to have a hard time debugging their shit in a couple of years when they've created these monstrosities that they can't read or reason about. Even like, you got to be able to read code and it's important.
Chris Oliver:There's just so much nuance and details that matter still that it's going to take a long, long, long time to just skip past that because all the vibe code stuff is just going to make assumptions for those and that's not something you can legitimately in production just can't do that. So it'll be great for lots and lots of things Helpful for debugging and thinking through stuff and whatever else. But yeah, I'm excited to wrap up a couple things and start working on these new secret projects. I will have to tell you about afterwards, but they'll be out soon enough.
Drew Bragg:Good. Well, the questions are always the same what are you working on, what blockers do you have, and what's something cool, new or interesting? So the moment you have a new answer to any of those questions, you got the link. You can always schedule some time to come on and talk about them. So which will definitely have you on again, since you are a repeat code encoder. But in the meantime, meantime, where can people find you and your products and whatnot on the internet?
Chris Oliver:you can find me pretty much anywhere as excid3.com, on x, on blue sky, on linkedin reddit places yeah, all the places. All the places and you can find gorailscom, learnhotwirecom, I think gorails probably links to everything else and the navigation if you want to check out Hatchbox or Jumpstart or whatever. Working on way too many projects, I think, is what it's about, and adding two more, you're doing great.
Drew Bragg:A few more. Well, yeah, we'll include links to all that in the show notes so no one has to remember it. But appreciate you coming on. Talking about rails conf, I'm hyped. I'm so pumped and excited and excited for the learn hotwire course because I'm sure I'll be back in hotwire land after. Well, I'm actually in hotwire land. Of last two bugs we did some goofy turbo frame stuff that I had to fix because the test caught them nice, nice.
Chris Oliver:But yeah, I'm sure I'll be back on hot wire land soon and ready to devour that course there will be probably new things here in a few months at rails world that I'll have to go add to the course, and always new stuff, but that'll be. The nice thing is, the goal of that course was like just make the most comprehensive thing we could possibly do and keep it as up-to-date as possible. So I think it'll be pretty neat to have new releases of hotwire and like, all right, let's take the project we built and now upgrade it to use the new features and stuff. So that'll be huge. It'll be a special course, I think for that reason, because I don't feel like most of them have quite kept up in the long term like that. So that's our goal with it.
Drew Bragg:It's a great goal.
Chris Oliver:Alrighty sir.
Drew Bragg:Thanks again for coming on and audience. We'll see you in the next one.
Chris Oliver:And at RailsConf in 54 days.
Drew Bragg:And at RailsConf in Philly in however many days it is. Math is hard and time isn't real, as Andrew likes to say. See y'all in the next one. Bye.