Code with Jason
Code with Jason
309 - How I Built SaturnCI (Starring JP Camara)
Use Left/Right to seek, Home/End to jump to start or end. Hold shift to jump forward or backward.
In this episode I talk with JP Camara about RubyConf 2026, submitting CFPs, and why everyone should give talks. JP shares his experience using SaturnCI on the Mastodon project, and we dig into Saturn CI's Docker-based setup, Kubernetes architecture, and test-focused UX philosophy.
Links:
Snail Mail For Developers
SPEAKER_01Hey, it's Jason, host of the Code with Jason podcast. You're a developer. You like to listen to podcasts. You're listening to one right now. Maybe you like to read blogs and subscribe to email newsletters and stuff like that. Keep in touch. Email newsletters are a really nice way to keep on top of what's going on in the programming world. Except they're actually not. I don't know about you, but the last thing that I want to do after a long day of staring at the screen is sit there and stare at the screen some more. That's why I started a different kind of newsletter. It's a snail mail programming newsletter. That's right, I send an actual envelope in the mail containing a paper newsletter that you can hold in your hands. You can read it on your living room couch, at your kitchen table, in your bed, or in someone else's bed. And when they say, What are you doing in my bed? You can say, I'm reading Jason's newsletter. What does it look like? You might wonder what you might find in this snail mail programming newsletter. You can read about all kinds of programming topics like object-oriented programming, testing, DevOps, AI. Most of it's pretty technology agnostic. You can also read about other non-programming topics like philosophy, evolutionary theory, business, marketing, economics, psychology, music, cooking, history, geology, language, culture, robotics, and farming. The name of the newsletter is Nonsense Monthly. Here's what some of my readers are saying about it. Helmut Kobler from Los Angeles says, Thanks much for sending the newsletter. I got it about a week ago and read it on my sofa. It was a totally different experience than reading it on my computer or iPad. It felt more relaxed, more meaningful, something special and out of the ordinary. I'm sure that's what you were going for, so just wanted to let you know that you succeeded. Looking forward to more. Drew Bragg from Philadelphia says Nonsense Monthly is the only newsletter I deliberately set aside time to read. I read a lot of great newsletters, but there's just something about receiving a piece of mail, physically opening it, and sitting down to read it on paper that is just so awesome. Feels like a lost luxury. Chris Sonnier from Dickinson, Texas says just finished reading my first nonsense monthly snail mail newsletter and truly enjoyed it. Something about holding a physical piece of paper that just feels good. Thank you for this. Can't wait for the next one. Dear listener, if you would like to get letters in the mail from yours truly every month, you can go sign up at nonsense monthly dot com. That's nonsensemonthly.com. I'll say it one more time. Nonsense Monthly dot com. And now without further ado, here is today's episode. Hey, today I'm here again with JP Kamara. JP, welcome. Uh thanks for having me, Jason. It's good to have you back. This is episode number two for you. Um and we were just talking about how very long it's been since we've spoken.
SPEAKER_00It's been quite a while, yeah. I think I came on to talk about Ruby concurrency, and then we mostly just talked about some flights of philosophical philosophy fancy, uh basically.
SPEAKER_01Philosophancy.
SPEAKER_00Yeah, philosophancy, yeah. Or philosophancy, some people call it. Oh, yeah.
SPEAKER_01Yeah. Um, and then I don't remember if this is before or after that. I think it was after we saw each other at RubyConf.
SPEAKER_00Yes, Ruby Conf in Chicago. Yeah. Yeah. Um, and then I think we haven't seen each other since, actually. I don't think so. Because you weren't at RailsConf and you weren't at SF Ruby. No. Um so why weren't you at SF Ruby? I expected to see you there, actually.
SPEAKER_01Yeah, just time and money and all that stuff.
SPEAKER_00Fair enough. Fair enough.
SPEAKER_01Yeah. Yep. Um, and then speaking of Ruby Conf, uh, RubyConf 2026 is coming up. I don't know if you know, but I'm I'm co-chairing that one, so I'm excited about that.
SPEAKER_00I do. I get nonsense monthly, so I was uh just reading about it earlier. Uh that's that's cool. I hadn't realized you were co-chairing it, but that's awesome. Um that's probably one of the only ones I'm like definitely planning on going to this year. Uh I'm not totally sure what other ones I might go to, but definitely RubyConf. So I've never been to Vegas, so that'd be cool.
SPEAKER_01Yeah, I've been there a thousand times. Um almost never by choice. It's it's kind of weird. It's one of those things. Um abductions. Yeah. Uh I had like work reasons to go there. Um, got married in Las Vegas. I I did choose to get married. I just didn't choose to get married there. Um my wife's parents.
SPEAKER_00Did you do like the like the cheesy Las Vegas wedding, or do you like a real wedding just happened to be in Vegas?
SPEAKER_01Cheesy. Cheesy, nice.
SPEAKER_00I mean, I you know, I'm I'm kind of casting Spursions, I suppose, but you know, did you you did like the drive-thru wedding type thing or like quick uh I'm I'm only familiar with it through like movies as a Vegas.
SPEAKER_01Um so we got married right in front of the Welcome to Las Vegas sign. Nice. And it was uh officiated, whatever the word is, uh by an Elvis.
SPEAKER_00Oh my god, that's amazing. That's very good. I'm kind of jealous, to be honest.
Vegas Weddings And Sin City Ruby
SPEAKER_01Yeah, my wife's parents said that they would pay for the whole thing if we did it in Vegas, otherwise, we're on our own. You know, we were relatively young and broke, and so we're like, all right, free option it is, I guess.
SPEAKER_00Did they know what they were getting?
SPEAKER_01Well, it was kind of the the deal was already sealed, uh, in a way, because we already had a kid, and so uh yeah, it's like you're kind of stuck with me in a way, no matter what.
SPEAKER_00Because the abduction thing again, I guess you're abducted by childbirth.
SPEAKER_01Abducted by my own child, the Jason Sweat story.
SPEAKER_00You did uh you you also organized all the sin cities there, right?
SPEAKER_01So yeah, yeah. So I had a work connection. Uh the first Sin City Ruby was 2022. Um, and it's a long story, but it started as a uh class that me and my boss were gonna kind of put on. Um the class was a total flop, nobody signed up. Um and so I salvaged it by turning it into a conference. I couldn't just cancel it because I had already paid for the space. Um and the conference worked out, worked out fine. Uh people came to it, and it was just gonna be like a one and done kind of thing, you know. It was just to uh just to not lose money that one time, but then it was like, hey, let's let's do this again, and then we did it yet again, and the third time was the last time because I live in Michigan, Las Vegas is really far away, and expensive. We we held the first two Sin City Rubies at the Tropicana, but then the Tropicana tragically exploded, and then we had to have it somewhere else.
SPEAKER_00Sorry, can't go past that one. Uh did it actually explode?
SPEAKER_01Uh explode, implode, whatever, whatever you want to call it. Um, it was scheduled and intentional. Uh it was it was just tragic for me.
SPEAKER_00Okay.
SPEAKER_01As far as I know, no one was killed.
SPEAKER_00Yeah. Okay. All right. It wasn't like in the middle of a conference, and the energy was just so electric that the building just kind of exploded. Yeah, yeah. And they all ascended. I don't know. Um but okay, imploded makes a little more sense, I suppose.
SPEAKER_01Sorry, please. Yeah, and so the the final SinCity Ruby, we had it at uh oh MGM, the MGM grant. Um, and we lost an absolute shit ton of money. So that was uh yet more motivation to not do that again. Um but it's okay. I think it all kind of comes out in the wash. Um these things tend to have career benefits and stuff like that. And so it's like, yeah, rolled the dice and lost that time, but like it there's other things that'll happen later that'll totally make up for it. And I think probably even already have.
SPEAKER_00Yeah, I find uh I I don't know, I I have never been as deeply involved as I am in other communities as as I am these days in like the Ruby community. Not that I'm like crazy deeply involved, but I'm I'm I'm somewhat involved. And uh I do find it interesting how many Rubyists or people in this community put together conferences. It's kind of crazy, to be honest. Like I it just shocks me how many people are just like, yeah, I I organize like mostly regional, like not like huge ones necessarily, but still they might have like what is it? Um Blue Ridge have like hundreds of people at it, like several hundred people.
SPEAKER_01Sounds right. At least a lot of people.
Conferences, Costs, And Community Ripple Effects
SPEAKER_00Yeah, which is amazing. I mean, it's a regional conference that had like two or three hundred people at it and organized largely by Jeremy, and just kind of shocking me. Actually, that was one of the other ones I was gonna try to get to this year, but I it the timing's not gonna line up for me. But uh yeah, it's amazing. What why do you think that is?
SPEAKER_01Good question. Um, you know, not to like toot my own horn, but I know that at least at least two of these regional conferences were inspired by Sin City Ruby, you might call it a Roger Bannister effect or a uh Velvet Underground effect, where it's like, hey, if this Jamoke can do it, I can probably do it too.
SPEAKER_00That guy's an idiot if he can do it.
SPEAKER_01Exactly.
SPEAKER_00No, I think that that makes sense. Yeah, you inspired some others, and I think uh that probably makes sense in general, and I think post-COVID people had a little bit more of a hunger to get out there as well. But oh yeah, that's pretty cool. So you're the inspiration. So you you think the primary reason is Jason Sweat?
unknownHa ha.
SPEAKER_01The the primary reason for at least two people's conferences. Okay, which ones? Um, um, I don't think it's happening anymore, but the Rails SAS conference. Um, Andrew Culver to told me that he was inspired by Sin City Ruby, and he said these words. He said, Sin City Ruby changed my life. I'm not sure what's behind that. I don't know if that's hyperbole or whatever. Um, but his words, not mine. Um and then if I'm not mistaken, Jeremy Smith said that he was inspired by Sin City Ruby to do uh Blue Ridge Ruby.
SPEAKER_00Oh, nice. That's awesome. Wasn't sure if uh you inspired like XO Ruby at all or not, which I am very excited. I I think XORuby, I know XORuby has its own story and stuff, but um that one's amazing to me as well. And I think there's gonna be one probably in Boston this year. Um I'm hoping there is, so I'll try to be involved in that. But I I am not one that would want to be involved in organizing a conference, despite my extreme inspiration from Jason Sweat. Uh uh, that's not for me. But just speaking at a conference is woof, it's enough, man. I've done two in the past year and a half, and I'm like, why do I do it? I always enjoy doing it, but leading up to it, I'm just like, oh my god, it's so much work. And I can't imagine what a conference would be comparatively.
SPEAKER_01Well, it it's like somebody once said on on writing, I don't enjoy writing, but I enjoy having written. It's like yeah, speaking at a conference is something I'm happy to have done. Yes. But doing it, yikes.
SPEAKER_00I totally agree with that. I mean, there's there's definitely moments of excitement uh while getting prepared for while while writing, because I write a lot as well. Um, and and preparing for a conference. Like there's moments where you're just like, yeah, like this is great. I'm really excited. But like that's probably like 20% of it. It's like 80-20 or 80% of it is just kind of pain. Um, and then you're just really happy that you did it.
SPEAKER_01It's like childbirth.
SPEAKER_00Yeah, I would never compare it that way because I think my wife would punch me in the face. Um, but I'd be like, honey, my writing in my conference talking is just like childbirth, and then she would just pile drive me. But uh, you're probably you're probably right in spirit that yes, uh, there is like a lot of euphoria and stuff like that and joy that comes with childbirth, but it's also incredibly challenging. And then you get to have that baby at the end, which is awesome.
SPEAKER_01Get to have that beautiful baby. That's right. Um, but there's a lot less blood and stuff, at least for my conference talks.
SPEAKER_00I do a blood sport type thing where like before I write, I like kind of grind my fists into some broken glass just to get myself into a sort of like a ascendant state. Um, but yeah, so there's a little bit of blood for me, but only uh part of the part of the stuff.
SPEAKER_01That's dedication. I like it. Um what uh what speaking have you done?
SPEAKER_00Um so I yeah, I spoke at the conference you were at. Um I spoke and did a talk on Ruby concurrency, but most recently at SF Ruby. Oh yeah, right.
Speaking Anxiety, Prep Styles, And Why To Submit
SPEAKER_01Yeah, I remember I was like, yeah, I specifically timed it so I would just miss your talk.
SPEAKER_00I didn't want to say it. I didn't want to come on the cut come on the podcast hot, but um, I do believe I was you were like, oh cool. Well, I'll be there the next day. Great. Um, but that one went quite well. It was actually very I it got on hacker news and stuff. I don't know how it ended up spreading around. But it got quite a few views, and it was it was I was pretty happy with it. So that one felt good. Um and then at SF Ruby um I did a talk on real-time collaboration uh using uh mostly about like any cable and action cable and CRDTs. So um conflict-free uh replicated data types, which you can use for collaborating in real time and having eventual consistency between clients um and the server. And so I did a talk on that, and that went well as well. So that was a lot of fun. S of Ruby was awesome. I really, really enjoyed it.
SPEAKER_01But I guess it's it's all just a testament that even the most simple-minded among us can sometimes accomplish great things.
SPEAKER_00Oh man, I love coming on this podcast because I feel like it was like this last time where we just kept like digging on each other, and it's the best. Um, but it's true. I mean, I I sometimes joke that like a lot of what I do is just like produce I produce like Ruby and carbon dioxide, and that's like most of what I do. Like otherwise, I don't know what I produce in this world. Uh so yeah.
SPEAKER_01Um, me too. And there's there's a third thing I produce some of. Um you know what? Hmm, is this is this too unprofessional to talk about on the podcast? I don't know. Um, but you have the power to edit it, I suppose. Yeah, yeah. Well, I'll just say this. Uh in France, their toilets are smaller than in America. Um and we went to a really fancy restaurant, and there was just like it was like a one-person bathroom. Yeah. Um, and and let's just say I'm never going back there.
SPEAKER_00Yeah, you can't let's just say you can't show your face in France, actually. It's crazy, but uh yeah, I hear that. I think that was that was eloquent enough to go on a podcast. So I'm I'm okay with that.
SPEAKER_01Yeah, you can read between the lines.
SPEAKER_00Sure. Um that was beautiful. Uh but yes, no, I mean the truth is, like, as much as I know you're you're joking, or maybe you're not, and maybe you think I'm a total buffoon, and that's fine. I it's I'm not a particularly intelligent person. I anybody can do a talk if you are excited about a topic, get out there and do a talk. I I'm almost the annoying person at the Boston Ruby meetup where I'm always just like, hey, you should do a talk, and you should do a talk. Like everybody I talk to, I'm just I just think everybody should do a talk. Um because they maybe not necessarily at a conference, but everybody has something they're excited about that they're into, and that excitement uh I think often like breeds interest in other people. I can I can listen to a lot of people who are excited, even if I'm not super excited about that topic and be like, that was interesting. I enjoyed that. And so uh I try to encourage people to do speaking or or speak or write about something if they have any inkling to do it.
CFP Encouragement And Lowering The Bar
SPEAKER_01Yeah, I I do too. And how appropriate, JP, that the CFP for RubyConf is coming up soon. Um so maybe people can hear our encouragement and be inspired to go submit a CFP. Um I I always encourage people also. Um, and you know, I think it doesn't even have to be something that you feel a special excitement for that's true. Because if you know if you're listening to this and you're like, hmm, I don't know what my thing is that like makes me jump for joy or whatever, um it can just be something, you know. The the bar the this might sound bad, but the bar is low. Um like it's not a big deal. Um, you know, as my old boss used to say, everything is shit and and it's very true. Um and so like if you just get up there and give a talk, like it if it's not the greatest talk on earth, nobody cares. It's it's like 20, 30 minutes, and then it's over. Um and man, I'm just being really candid, but like talks are are rarely all that great. Like you rarely go to a talk and you're just like, wow, I'm fucking blown away. Sure. It's usually just like, oh, okay, I remember like three snippets from that talk. I guess I'll go Google that later or something like that. Yeah. And that's usually what it is. You know, like I don't watch a talk to be uh efficiently educated by the talk itself. It's more like, oh, JP gave a talk about concurrency. Um I'll I'll go look up stuff about concurrency. That's something that wasn't really on my radar before. Sure. Um, so you don't have to you don't have to do you don't have to hit it out of the park. Um and you don't have to commit to dozens of hours of prep. Some people do that. Uh frankly, I think that's kind of crazy because it's like, okay, for me personally, I'm like super lazy. I'll prepare like maybe four hours tops when I give a talk. Um, and then I'll give the talk and it's maybe like a C plus talk. And then somebody else might prepare for 40, 50, 60 hours, and they give like a B minus talk. And it's like, okay, well, the there's diminishing returns there that start pretty early. So like, and and and what I find is like when I give a talk uh for the first time, I find like, oh shit, like I the scope was way too broad, that was like the wrong topic. I need to pare this way down and go in a bit of a different direction and basically rewrite it from scratch. So, like to invest so much time into the first time I give a talk is just like um in hindsight, uh kind of irrational to make such a big investment for such a small payoff. That's how I look at it anyway. How do you look at that stuff?
SPEAKER_00Um I think it's an interesting perspective. So like I'm I'm the flip side person that uh gives the B minus talk and puts 50 hours into it. Um and that's just probably my personality and the only way I could feel like comfortable doing it. I feel like when I'm doing a talk personally, and and I, you know, it kind of maybe goes counter to some of my encouragement where like I think anybody should do talk. I love your perspective on it of like just do something. And I think especially if you're doing it at like a meetup or something like that, start there. Like for a meetup, I'll put in like a few hours or something before it, probably, and put something together pretty quickly and get the content across and then get feedback from people, and then I'll use that as the seed for doing a more expanded thing. I have a hard time getting to a conference personally and not feeling like I could answer most questions that people would have about it afterwards, or like touch on all the keynotes and like talking points that I want. So I put a lot of effort into my talks. I don't know if that pays off or not, but I've enjoyed doing them and I've gotten good feedback. Um, but I agree with you that like it's a good point that if I go into the enthusiasm aspect, that's probably not the best encouragement for everybody because you're right, not everybody is enthusiastic about stuff, but you might have a knowledge base or just something that you're kind of like, I did this thing and I think it could be helpful to other people. It's almost certainly going to be helpful to some people. And like you said, most talks I go to. I do take away some key things that I'm going to look up later. Or it's like a seed for a future idea I have later where I'm like, oh yeah, like there was this talk. They mentioned this thing, like I should use that, that that solves this problem I have right now. And that's kind of what you take away from most talks.
SPEAKER_01Yeah. And now that I like think about it a little bit more, even though I don't usually put a ton of prep into the talk itself, I'm usually speaking on something that I'm already very familiar with. It's like, yeah, yes, I only half asked my prep for this talk, but I wrote a book on this topic. So like it's not exactly totally seat of the pants.
Comedy, Improv, And Conference Culture
SPEAKER_00Yeah, that I mean that's very fair. I think my concurrency talk, even though I put a lot of effort into that, a lot of that was really just trying to um I just wanted to make it as uh easy to consume as possible. So I put a lot of effort into like animations and things like that in my keynotes, but I had a large amount of knowledge on it already. So it was pretty easy for me to put together. But for my SF Ruby talk, I had done a lot of the things that I was talking about, but I didn't understand CRDTs fundamentally that well. And so I put a lot of time into doing that. And so that was where so I think that's those both kind of line up with what you're saying, is that like by concurrency talk, even though I put a lot of time into the presentation, I knew a lot about it, so I like I felt very confident as I was putting it together. For the SF Ruby one, I was like, I don't feel like I can explain CRDTs well enough. And so I spent probably 25 hours like researching and testing and debugging and doing stuff with CRDTs because I was like, I'm using these, I'm gonna present on it, I want to understand it better. And now I've actually started to do some open source work around them and stuff as well, which has been kind of fun. Oh wow. Um again, not something I'm saying everybody has to do, but to your point, I I came in with a lot of knowledge at RubyConf, and that one felt like pretty seamless to put together. And SF Ruby felt a little harder, but partly I just felt like I wanted to deeply understand what I was talking about. But again, that's just me. I just I think I'm more of a I have a hard time riffing. I mean, I I actually can riff just fine. I came on this podcast with like not a ton to talk about, uh, except set staying up till one in the morning last night playing around with that with Saturn CI. Um but yeah, I think you know, just just submit a talk, everybody. That's all I'm saying. Just subscribing CFP and yeah. If there's something that you did that you're like, this was kind of interesting and it was helpful for me, that could be the seed, the complete talk that you're doing, and people would benefit from that tremendously.
SPEAKER_01Yeah, and and if you're nervous about it, uh what I always say to comfort myself and others is like it from a geological perspective, we're all gonna be dead tomorrow, and nothing will matter. Um the the universe will succumb to entropy. Uh at every there will just be stillness and darkness for the rest of eternity. And who gives a shit? Who gives a shit if your talk sucked then?
SPEAKER_00That's right. The universe doesn't. Yeah. The universe will just as soon snuff you out. So you might as well get a talk in before it does.
SPEAKER_01How inspirational.
SPEAKER_00I love it. Yeah, yeah, really. I'm sure these CFPs are just gonna be flowing in like a tsunami.
SPEAKER_01Yeah, well, one of the tracks will be morbidity. It'll just be let's let's all reflect on our mortality.
SPEAKER_00So I was looking at the different tracks. I see morbidity, existentialism. Um, I don't actually, those are the only two. That's weird. I thought I thought there'd be more Ruby stuff. But okay.
SPEAKER_01Um You know what would be fucking fun? Um and uh I I guess the best way to plan a conference is to just like toss around ideas that you might not do live on a podcast. That's the way to do it. Um but it would be fun to have like a stand-up track, like a like a lightning talk kind of stand-up session.
SPEAKER_00Yeah.
SPEAKER_01Because I know that you do stand-up, which oh, you mean literal stand-up, stand-up comedy.
SPEAKER_00Like that makes more sense because I'm imagining like at first I'm like, are you talking about like like uh scrum? Like like what we just everybody just gets up and like, hey, every we just had to do multiple talks where you just report on the work you've done recently. Um stand-up would be fun. I I did improv uh is what I did. So um uh I never did stand-up, although I don't I've always wanted to do stand-up, but I don't think I will ever will. I don't know.
SPEAKER_01Got it. I mean it's all the more impressive that that you can do improv because for somebody who's just like not funny at all, that must be a lot of work.
Saturn CI Hands‑On: Mastodon Setup
SPEAKER_00It's really, really hard. I have to get up there. I have a lot of like rubber chickens, and I do a lot of like armpit farts and stuff, and I'm enjoying it. My kids enjoy it, but um, yeah, the crowd's pretty stone faced, if I'm being honest with you. But um, but yeah.
SPEAKER_01Yeah, I I I do uh routine just about every day at at dinner time uh for my wife and kids, and they never like it. They never ever like it.
SPEAKER_00That's the role of being a dad, I think. It definitely is. I mean, especially because your kids are probably older now, right?
SPEAKER_01Yeah, 12 and 15.
SPEAKER_00Yeah, I I doubt they ever think you're funny anymore. I mean, they might think you're funny again in like you're in their 20s, but it's during their teen years, I'm not sure how funny they can imagine you to ever be.
SPEAKER_01Right. Um but yeah, I I I have come across a number of of programmers who do stand-up comedy, and so it could make it enough.
SPEAKER_00Enough people that would be amazing. I would I would watch the hell out of that actually, if if they did. I mean, there's always that risk of like anybody I've ever known who's done stand-up, I I've never I haven't known many people, there were a couple people. I'm always very nervous to go see them because then it's like if I don't like it, I know you. Like, I have to like interact with you after that point, and I don't if I'm not close enough to you, then I can't be honest about the fact that I did not enjoy that. But um, I'd still want to watch it. Yeah, I'd go.
SPEAKER_01Yeah, yeah. Um crap, what was I gonna say? Oh, yeah. Well, I ruined it now. I was just gonna interject with threads, are weird? Um what's the deal with threads? What's the deal with Kubernetes? Um yeah, alright. I'm I'm gonna I'm gonna think about that. There will be arm wrestling. That is a done deal. Are you guys doing it?
SPEAKER_00I know that was the Sin City thing.
SPEAKER_01Yeah, we're gonna keep that going.
SPEAKER_00Wait, wait, wait, but are you doing this? Because I know you're organizing a Chicago-based conference too, right?
SPEAKER_01Uh Michigan-based. Oh, Michigan, okay.
SPEAKER_00Uh and that is that gonna have arm wrestling or is RubyConf gonna have arm wrestling?
SPEAKER_01Well, RubyConf is gonna have arm wrestling for sure. The Michigan Conference, undefined, haven't made any decisions about that.
SPEAKER_00Dang, I'm gonna have to start, I don't know, pumping some iron, I guess. Yeah, getting ready. It's not just about muscle, it's about technique and like like there's a variety of things as well. So that's interesting.
SPEAKER_01Yeah, and psychology too. You gotta get in the other guy's head. Yeah. Yeah. You're worthless, your parents never loved you, that kind of thing.
SPEAKER_00Oh man, I think you must be very good at it because I I think the insults flow like uh like wine from your lips.
SPEAKER_01Um yeah. So uh thank you very much for your generous offer to come on the podcast and talk about Saturn CI. Of course. Um, and thank you for apparently staying up till one uh 1 a.m. uh getting the config going. Yeah.
Local Docker Workflows And Developer Experience
SPEAKER_00Um I I mean I I well I I have been interested in Saturn CI. I think I sat in on one of your uh like pairing session calls. I don't know if you still do those or not, but I sat in on one one time and uh it was fun. And I mostly you worked through some stuff in Saturn CI and it got me kind of interested in it, um, which I think is the genesis of this, like probably like a year ago. Um but I didn't want to come on and not have used it at all, but in using it, it was kind of fun to get set up and uh work through it and get that Docker file set up. And and then once I saw Mastodon, I was like, oh right, Mastodon's an R spec project, it's Rails, like let's try getting that set up. So anyways, yeah, it was a good idea.
SPEAKER_01And like just under the wire, we got it working. The test suite isn't passing, but the tests are at least running.
SPEAKER_00Yes. Well, I mean it's almost completely passing. What is it? Uh 6800 specs and four failing, and they're all like kind of silly errors. Uh it's checking for a Redis, like it's checking for a Redis URL, and it doesn't match what we have in the Docker config or something like that.
SPEAKER_01Yeah, I saw that and I'm like, that test seems kind of tightly coupled to implementation details. I don't know if that's a test that should actually exist.
SPEAKER_00I don't think so either. I mean, if anything, what I would probably test is just like, did Redis run? Um, is there a likelihood that you have Redis URLs in your project that are not the ones you're expecting? I don't know. It seems kind of odd.
SPEAKER_01Um so I want to share for context the approach I'm taking with Saturn CI as a business and a product. Um there's um you know, there's a there's a funnel, there's a sales funnel where you get people in the top of the funnel who are interested, then some portion of those people sign up, some portion of those actually uh start using the product, uh, some portion of those stay and become paying customers, and then some portion of those people stay for a long time, and others churn and stuff like that. Um and so I'm taking a kind of back to front or bottom to top approach with the funnel. Um I'm I'm making sure first that people who make it in and become customers uh don't leave. Um because I could start the other direction and optimize for getting the most people in the funnel, but like you know, what happens if I make a hacker news post and a bunch of people sign up and it's like, oh, this doesn't really work. Okay, never mind. Um so I'm I'm going that direction. So I say that partly because if the setup process was painful, that's not surprising because I haven't made it that far up in the funnel. I'm um I'm I'm helping people by hand get in and get set up and stuff like that. Um so just want to say that for context. And I want to ask, as somebody who is new to the product, um, even though you've seen it on at least one of those Code of Jason sessions, um, if you had any observations, and I'm not looking for like useful feedback or anything like that, it's just total, totally out of curiosity.
Rails‑First Focus And UX Over Compute
SPEAKER_00Hmm. Yeah, that's a good question. Um, in terms observations, just can I just give general observations or like specifically about using it? Yeah, I mean, one thing I will say is that um having a Dockerfile-based system was pretty nice and refreshing. Um, I'm not a Dockerfile expert by any chance by any measure. Um, I certainly used Claude Code to help me with it, um, which is what I usually use for any kind of like Terraform Dockerfile type thing, very config heavy. I feel like those tools are very good at those. Um, but they're especially good at something as conventional as like a Docker file. And so any issues I hit, it was pretty much like immediately was able to fix them and walk through that. And it's a pretty conventional setup. I was able to set it up locally. I, you know, I had it run through all of the Saturn CI stuff locally, which was super nice because most of my experiences, like you mentioned, I think in some of your docs, there's like custom YAML files or whatever for these systems, and it's like you got to push it up to them, try it, see if it works, things break, and you kind of have this cycle of doing that. That's always been my experience. Um, versus this where like I literally had the whole thing running locally. Um, and that was pretty nice. Um, I should have probably run the entire suite locally. I should have just done that, and then I wouldn't have even hit some of these issues. Um, but uh yeah, I think that was one of the things that stuck out to me the most is that's a good choice to be so conventional.
SPEAKER_01Interesting. How did it occur to you to try to run it locally?
SPEAKER_00Um, so actually, well, I saw like the up and down and run files, and so it was kind of like, well, this will probably work. And I just had Claude Code try to explore it and running it, and it it just was like, oh, I'll just like hand this stuff into run, it handed into the specs, and those ran locally and stuff, and so it was actually pretty seamless. The combination of the convention of the files that you gave. So I used that template. I think your your setup has like a Rails template you can use. It creates a set of shell files, mostly just for interacting with the Docker image um or Docker file. And so pretty quickly, combined with that and Cloud Code, I it started running the specs locally, and that was pretty seamless. So that was how I debugged most of the stuff prior to sending it up to the server. The F there was a so for listeners, the last error that I fixed was a missing package because I hadn't run all the specs locally. But once I saw that, I also just fed that into Cloud Code and was like, hey, let's add FFmpeg and it added it to the Docker file, pushed that up, and now everything's almost everything is working. So interesting. Do you not have people running it locally?
SPEAKER_01No, I do. Um Okay. So one of my other customers, actually, my my sole paying customer currently, um, I like pointed him at the docs and then he got it set up totally on his own. Um and he was like, Yeah, it's it's really cool that I can run it locally. And I'm like, how did you figure that out? Like, I I I'm not expecting anybody to figure that out on their own, and yet people are. I think by virtue of the fact that it's very, like you say, very conventional. Um it just uses I I guess we haven't stepped back and um explicitly said that the way that Saturn CI is configured is not through a custom YAML format like Circle CI or GitHub Actions, it's just bare vanilla Docker Compose. And people probably put two and two together that if it's just Docker Compose, you can run it locally. For me, this was just kind of a for the future thing. Like, okay, I'm in the future. I'm gonna add documentation that says, hey, by the way, you can run this locally so that you can have a tighter trial and error loop and not have to do that thing where you push it up and wait and push it up and wait. Maybe you'll still have to sometimes, like we had to. Sure. Um but you can you can first do the the quicker local loop.
SPEAKER_00Yeah, absolutely. Yeah, because yeah, like you mentioned, there were some issues we hit, but they were at the actual like runner level on Saturn CI, however, you have that code set up. But yeah, I mean I can kind of create my own environment and harness to use there and run it locally as well, and that's that's pretty convenient. And I could technically put anything in it, right? Like I I mean, I don't see why I couldn't. Um like you came because I think your version came with like Ruby 3.3 or something like that, and so I didn't change that yet, but I would, and I don't think there's any at first. I was like, oh, I must have to do that, but I think that's just your templates, just maybe it's slightly out of date or something like that.
Parallelism On Kubernetes And Test Splitting
SPEAKER_01Yeah, I should update that. Um, yeah, it is expecting um Rails and R spec. Uh sure. Yeah, and if you put anything else in, it won't work. Um but yeah, uh what what that does, okay. Let me back up. Um my whole angle with this product is to have really good UX and DX. Because offense intended, GitHub and Circle CI, your UX and DX are terrible. Um so I'm I'm trying to make it good, you know, starting with the setup experience. Yeah. Um, and I think it'll it'll just be more and more the case as AI improves and AI adoption broadens and stuff like that. It'll be the case where the the the installation instructions just say tell give Claude Code this uh copy paste this documentation into Claude Code and just let it do all the setup. I I don't see why that wouldn't be the case. Um and then um what the heck was I even trying to say? Anyway, anyway, UX and DX. And then once you get in there, um the biggest thing is like when a test fails, you want to be able to see what failed. That's like the whole thing you're interested in. GitHub Actions and Circle CI, etc. kind of make that hard. Um this makes it the easiest thing in the world. Um, so that's where I'm coming from.
SPEAKER_00Yeah, absolutely. And uh I do have some thoughts on that as well. But do you want to take a step back? And I mean, I know you've talked about Saturn CI multiple times on the podcast. Do you want to talk about what it is specifically real quick? Just since if anybody listens for the first time and they're like, these guys are talking about Saturn CI, like what are they talking about? They're in the weeds about something I don't know. Do you want to talk about it a little bit?
SPEAKER_01Oh yeah, like high level, it's um yeah, it's a it's a continuous integration platform, um, kind of apples to apples with Circle CI and GitHub Actions and GitLab Pipelines, Jenkins, Team City, that kind of stuff. I mean, yeah, I think none of these are like 100% apples to apples, but broadly they're the same uh same kind of tool. Sure. Um that's what it is in a nutshell. Should I say more about it? I'm so familiar with it that I don't even know what I should say about it.
SPEAKER_00Yeah, absolutely. Um what's I guess I guess you sort of alluded to, or maybe explicitly said a moment ago, why you built it. But so you built Saturn CI, or you've been building Saturn CI because the need that you feel is like you want to have in some ways, you want to start off with the specialization of getting to what people need the most out of a CI tool, versus where I feel like a lot of tools come from that I've used where they're like, I can do anything in the world you want, and then you can also add some features to it to get to the thing that you actually want. Because what most people want from a CI tool largely is is my app running, like are my tests running properly and which ones fail? Exactly. And most tools, whether they give you a good interface for that at some point, it's not it's not out of the box. And so that's kind of that's one of the big focuses, I think, from my outside perspective of Cyber CI.
Built‑In Distribution vs Knapsack
SPEAKER_01Yeah, I think that's right. You know, I don't know if this is an accurate characterization, but I kind of see GitHub Actions as like, okay, we have some compute for you. We're gonna sell you some compute. And by the way, here's an interface to interface with the compute that you're using. Um Saturn CI, the compute is the incidental part, and the um interface is like the whole thing.
SPEAKER_00Yeah, that makes a lot of sense. And you've you've focused to start, or maybe forever for a long time, on Rails and R spec. Um whereas and I I there is a correlate uh correlation in my head between that and like early Heroku, or like early Heroku was pretty much like most it was I it might have been beyond just Rails, but it was like Rails, Ruby, uh, and like getting your app set up really easily for that. And they expanded beyond that over time and became an infrastructure for tons of other things. But the thing they did really, really well was that particular thing, and that got a ton of adoption for them. Um, and I think Saturn CI may solve a similar need for people.
SPEAKER_01Yeah, exactly. Um, I'm like making it a really nicely paved path for Rails and R spec first, and I'm actually taking the same like build pack approach, like Heroku. Oh yeah, yeah, Heroku deeply is like agnostic, and then you know, they have like a Ruby build pack, Python build pack, or however it is, I don't remember. But I'm taking the same that's basically it. Yeah, yeah, I'm taking the same approach where I'm I'm trying not to too tightly couple uh Rails and R spec like deep into the bowels so that I'll have bowels again. Um, so that I'll have uh a huge job to have to extract all that and disentangle it at some time later. I just have like a Rails R spec build pack kind of thing. It just so happens that that's the only build pack for the foreseeable future.
SPEAKER_00That makes sense. And fun fact, Saturn CI is also not allowed in France anymore. Just just like Jason. Um, but yeah, that that makes total sense. Um it's it's funny because I feel like like I'm a I'm an R Spec user, um, and I still use it for most things, honestly. Um, but I do think like the Omacaste type perspective is like mini-tests these days, but I don't know how many people are specifically following that or not. And there's obviously still huge projects, especially ones that have pre-existed, but also still new ones coming out using RSpec. Have you seen anything around that in terms of like are you starting to see people move away from R Spec? Obviously, it wouldn't be I don't think it would be that hard for you to switch to mini-tests, but like I'm just curious on that perspective.
Visual Voicemail Moments In CI UX
SPEAKER_01Yeah, you know, I just I just have a pinhole view of the world, like I guess everybody does. But um I've had at least two cases so far where somebody was like really interested in Saturn CI and we like got a ways into it, and they're like, Oh, this is R spec only, uh, I use mini test. And it's like, oh shit, uh, thought we talked about that, but yeah, this this is not gonna not gonna work. Uh nothing against them. Uh uh I don't expect people to immediately grasp everything that it's that it's about. Um but yeah, that was painful. And it's also I think the case that like commercial projects tend to use R spec and OSS projects tend to use mini-test. Yeah. And I think it could be maybe a good marketing move at some point to offer it to OSS projects uh for free or cheap or something like that. Sure. So accommodating mini-test is definitely on my to probably do list, but I'm gonna see how far I can get with RSpec first because yeah, yeah.
SPEAKER_00Yeah, I mean, like for you right now, the most important thing I think is like well, I finding customers working with people, crafting it, and like the people who are gonna pay right now probably are using R Spec. Um, I was actually very interested in whether you would eventually be like, oh, I'll have like an open source, like you get it for free, or or like you said, cheap or something. Like what I don't know how much you would want to go into it, but like what are kind of your operating costs for like what is the operate? Like, I don't know what the operating cost is like for a CI company. Like, what has it been for you so far? Uh maybe in the abstract.
SPEAKER_01Pardon me while I wipe the tears from my eyes. Um I'm on DigitalOcean right now. Sure. Um, you know, I've gone through a few rounds of like let's just get it working any old way, and then let's optimize for efficiency and cost and stuff like that. Um my bill for last month was about 1500 bucks, and then my bill for this month, uh so far is like 600 some dollars. I think I checked it yesterday. We're we're about halfway through the month. Um, so it's shaping up to be around twelve hundred bucks this month. So a little better, even though the usage is heavier, it's it's gonna be a little cheaper. Um, but I I think what I need to do after after talking with um guy I actually just had on the podcast um a few days ago. Um I after talking with him and talking with Claude Code about it, um, I think I'm gonna switch to Hetzner, which offers some better pricing. Yeah, that's gonna be a big project, but it's pretty necessary because according to Claude Code's estimate, I can go from like twelve hundred bucks a month to like two hundred bucks a month. So that's obviously way better.
SPEAKER_00Yeah, I feel like Hetzner was like all people were talking about for a while, and I I hear about it less now, but um, but it does seem to still be a very, very cost-effective option. Do they have US hosting now or is it still primarily Europe?
SPEAKER_01I don't know. I'll have to look into that.
Go‑To‑Market: Motivation, Costs, And Hetzner
SPEAKER_00Yeah, not super relevant necessarily, but um that's interesting. Yeah, I mean I feel like it's not in France. Oh gosh, they won't even let I your server will start up and it'll just be immediately shut down. Don't worry about that. They actually contacted me before this to make sure that I because I'm thinking about visiting it, and uh they were just like, well, I don't know, maybe you won't be accepted in if you talk to Jason. Um but the uh the interesting one of the interesting things as well to me about this project and what you've been doing, and I know I'm talking a little bit abstract about some of it, but is like it's almost like you gave yourself like a system design problem, like a system design like interview question, is like build a CI tool and how do you create containers and like how do you scale up and how do you optimize costs? So it's kind of fascinating that like this is the this is the choice you made. Um it's a fun architectural problem. Uh seems challenging though.
SPEAKER_01It is what keep is challenging, yeah. Yeah, what keeps you going on it? Um the prospect of becoming uh fabulously wealthy.
SPEAKER_00Fair enough. Yeah, you want those three commas, is what you want.
SPEAKER_01Yeah, yeah. I I'd be happy with one comma. I'd be happy with one dollar.
SPEAKER_00Um I thought you've met, I think according to nonsense monthly, you've you've made some, you have some something.
SPEAKER_01Yeah, I mean when I said one dollar, I meant one dollar in profit because right now my profit is like negative one thousand one hundred and eighty dollars a month.
SPEAKER_00So once you go to Hetzner, you'll probably be up actually. If you do if it truly is two hundred dollars a month, you could potentially um start making money just by moving to Hetzner.
SPEAKER_01Uh soon, hopefully. Um yeah, I just have one customer, one paying customer right now, and it's uh just a solo developer side project kind of thing. Sure. Yeah. Um, and then I've been working with uh an organization of mine, organization of mine, a former boss of mine, um, his company, they're working on getting onboarded, but I don't want to count any chickens or jinx it or anything. Um but that'll be more than just a twenty dollar a month thing if and when that happens. And then that with Petzner, maybe I can get in the black.
SPEAKER_00Yeah, that's awesome. Um, all right, let's talk, let's talk a little bit more then about uh Saturn CI itself in terms of like the web UI and stuff. So we've talked a bit about like the architecture of it, how it gets set up, um in terms of the web UI, what's what's the thing you try to uh express to people the most as being the thing you enjoy the most, and then I can talk a little bit about it um as well. Like so you have a paying customer, you've had people interested. How do you sell them on it?
SPEAKER_01Good question. How do I sell them on it? Hmm. Um I don't I don't believe in the idea of selling people on things, I think. Um the what the way I look at sales in general is helping people buy what they want to buy. Um and my job as a marketer is to show people what Saturn CI is um so that they can understand what it is and and if it resonates with them, if it aligns with what they're already interested in, they can recognize that and be like, oh yeah, okay, I'm into that. Um and so at least at this early stage, um, the people who are gonna be into it, uh there's there's people who are into it and people who aren't. And I I'm just focusing on the people who are already into it and and helping them get onboarded and stuff like that rather than trying to um persuade anybody.
Why Another CI: Aesthetics And Fit
SPEAKER_00Fair enough. So you're taking you're you're letting the marketing do the talking, and if people are inspired by what it offers, then those are the people you want to you're trying you see coming on board right now. You're not selling it to anybody.
SPEAKER_01Yeah, that's basically it. Um, and the difficult thing for me is I I don't want to bias myself and go in a speculative direction. Um I I want to lazy load it and and get some customers and then find out like, okay, you're here. Why did you show up? What spoke to you about this product? And and then I can identify some commonalities and stuff like that. But out of all the people who have started that journey into the product, maybe like 10 people or so, it's all over the map. Like there's hardly any two people who were interested for the same reason. Uh, I had one guy, he he felt the same way I do about GitHub actions. He's like, I hate it, it's stupid. Saturn CI just like is logical and makes total sense. Um another person came because his uh circle CI bill unexpectedly like doubled, and he's just like, I gotta switch to something. You're my friend, I'll use your product. Sure. Um, another guy had a similar thing. He was just like, Yeah, I just want to support you, which is like fine and valid and everything, but that's a a different reason. Um another guy was like, I asked him why he was interested, and he's like, I just want to like give the finger to the man. Like, I don't want to use circle CI because it's like the big guys, and and that's an interesting rationale. Very, yeah, yeah. So it's all over the map. So again, I I need a bigger sample size, sure, so that I can see okay, when people come here, why are they interested in? But my my my bet so far is that you know, why do some people use Android and some people use iPhone? It's like an aesthetic thing. Uh sure. No offense to anybody who uses Android, but it just like makes me want to puke. Like I feel like they don't Google as a company just like doesn't get UIs or usability or anything like that. Steve Jobs gets it. Um it's it's that kind of thing.
Growth Tactics And Founder Outreach
SPEAKER_00Yeah, I mean it you know, in the even though there's uh a variety of different reasons people have commented, it does seem like the one of the common themes is just like I don't well, I guess except for the person who had the big bill, everybody else is just like GitHub Action sucks, circles the eyes confusing, like these things aren't very good. And so what's another option out there that just gets to what I'm looking for? So I I think that is the commonality, even though people have a variety of reasons for getting into it. Um and I do I do like that about how I've utilized it so far, um, is that it it just highlights the tests, and it actually it's kind of funny because uh in looking at it, all of a sudden I was like, oh right, that is the thing I pretty much care like 99% about. Like I, you know, there's obviously linters and things like that. I run those as part of CI as well. Um, but it's it pretty much just comes down to like tests and linters. Like that's pretty much it. Um and seeing some a tool that just shows me tests running and like highlights how that went, it's like, oh, that's kind of refreshing that that just happens automatically. Um I'm mostly uh through just historical reasons, I've used Semaphore CI a lot. Um and it's fine. Uh I think it's a lot better than GitHub actions. I've uh I've never used Circle CI actually. But one of the things I like about it the way I have it set up now is that it does have a test tab that shows up uh automatically. However, you have to configure that. That is not something that just happens out of the box. So you you have to put some work in after going through all of the custom YAML and all that stuff to get everything set up. Now I have that, and that's great, but to be able to just like start from scratch and just land in tests, that's that's definitely compelling. So I like that.
SPEAKER_01Yeah, that's good to hear because that's of course what I'm going for.
SPEAKER_00Oh, is it? Yeah. Yeah. Okay. You're like, yeah, literally, that's literally what I've been talking about. The same design I've used been here.
SPEAKER_01But my male models.
SPEAKER_00Um so yeah, anyways, that's that's kind of been my perspective on it so far. I've I haven't used it a ton, but uh I was looking around for projects that might fit the mold pretty well. Uh and I was like, oh Rob, what about Mastodon? Mastodon uses R spec, which is awesome. Um and it's running pretty well there. I mean it runs, I don't know how normally how fast it normally runs on GitHub, but I think it ran in like it's actually quite variable now that I'm looking at it. But the most recent one was like five minutes. Um but uh tell me a little bit more about uh what goes into a a build in Saturn CI.
Future Topics: Ruby Concurrency Book
SPEAKER_01Yeah, good question. Um so I've gone through uh uh various generations of infrastructure uh and I won't uh I I'll I'll spare the listener of of all those details, but it it runs on Kubernetes now. Kubernetes orchestrates the the test runs. Um so you know you can see if you look at this most recent Mastodon uh test run. I I cranked up the parallelism to 12. I noticed that, yeah. Yeah, yeah. So we have 12 um concurrently running um um chunks of tests. It looks like you know, it takes these 6800 tests and it puts about 600 tests on on each one of those. Um and each one of those test runs is a Kubernetes pod. Okay. Yeah, so uh dear listener, if you're not familiar with Kubernetes, um I'd look at it as basically a way to abstract away your infrastructure from your hardware. And so like uh you have layers. Like you have your I'll call it physical, even though it's virtual many layers deeper, but you can have a physical machine, you call that a node, um, and then on top of that node, you can have any number of pods. Maybe you'll have three nodes and you'll have ten pods distributed across those three nodes or or whatever. Kubernetes doesn't really care, you just have a a pool of nodes, and you have however many pods, and and it can all be abstracted away. So that paradigm made a lot of sense for running tests. And this isn't unique, like I'm not the only one running CI via Kubernetes. That's a standard use case, and the fact that it's a standard use case is one of the things that led me to do it this way.
SPEAKER_00Interesting. Okay, so that is how the yeah, I mean what I'm looking at right now. Uh can I call them dear listener? I don't want to be weird about it. Um I'm looking at a page that shows me like the test cases that I ran. Um so it gives me information about the error message, it gives me a list of all the test cases on the right, and then I see a bunch of tabs at the top, and that's what Jason's referring to. If I see like task one, two, three, four, that's these are all the different uh pods you mentioned. So yeah, each one of these is a different pod. It's up front, it does a dry run of our spec and figures out all the different specs I can have and then splits those out into, I guess, however many pods you've determined up front. Um and so that makes a lot of sense. I've seen that, I've seen a few different approaches to how to do this in CI. Currently, what I'm using primarily is uh Knapsack for doing a lot of my splitting. Um and so, although Knapsack doesn't necessarily preclude this type of setup. So have you have you thought of using something like Knapsack at all in terms of like integrating that? Probably not, because you're such a nascent product, but yeah.
SPEAKER_01Yeah, yeah, not yet. It's definitely on the roadmap. Um, I I have taken a look at the difference between the the fastest running um okay, so you have your test suite run. That's the term that I use, test suite run, and then it's divided into what I call tasks. Um so in this case there's 12 tasks that run concurrently for this one test suite run. Um and I look at the difference between the fastest task and the slowest task. And right now the difference is not that much. And so if I were to like store the historical uh uh runtime per test and try to arrange it so that all the tasks finish at the exact same time, the gains would really just not be that much. So that'll that benefit will be worth the price at some point, surely. Uh just hasn't gotten there yet.
SPEAKER_00Yeah, interesting. So you see that as potentially being part of your offering at some point is actually doing test distribution. Okay, cool.
Closing And Where To Find JP
SPEAKER_01Yeah, because like honestly, it's kind of bullshit that you have to have your CI provider and then you have to have the second product just to make the tests run efficiently. It's like that should be built into the product.
SPEAKER_00I agree. You're very test focused, it's almost as if you're the test guy.
SPEAKER_01Umdeed.
SPEAKER_00Uh yeah. Um, that makes a lot of sense. Yeah, because I mean I as I thought about it, it was like, yeah, that's right. That's really what Napsack provides, is just like an API for figuring out for figuring out what the distribution should be, like trying to distribute things so that the you effectively run everything finishes around the same time. And it does a really good job of that, I will say. I know I think you had the Knapsack um founder on a while back. Um, and that was an interesting conversation. But uh having it built into this would be pretty compelling. And then yeah, you wouldn't have to build another tool because that's caused us issue, like it's caused me issues as well. Is like there's there can be a cache in it, and like things can get the distributions can be wrong. If you're running across a bunch of different things, like if it was built into the tool, that would be pretty nice.
SPEAKER_01So yeah, and ideally it's something you just don't even have to think about. It's like, yeah, of course it's gonna distribute the tests even.
SPEAKER_00I know, right? Yeah, it is funny. Like, I think I I keep going back in my head to the the idea you had with GitHub Actions of like we're giving you compute and you do something with that, and Saturn CI, I think that is that's like an interesting tagline of like the compute is incidental, like we make a great testing tool, and it happens to allow you to set up Docker files and things like that and run on our infrastructure.
SPEAKER_01Yeah, I actually didn't think about that framing until this conversation. It's like, oh yeah, with them, the compute is the main thing, the UI is the incidental thing. With me, it's the other way around. I I didn't think about that. Um, like a comment I want to make, um, and I think you're probably old enough uh to to have been around for this like transition. I I see a few gray hairs. I I assume you're 65 years old. Um but uh when the iPhone first came out, uh do you remember visual voicemail? Like we don't call it that anymore, we just call it voicemail.
SPEAKER_00I see, I was actually everyone in my family had an iPhone. I was a little bit late of an iPhone adapter. I think I got the first 3G, I think is what I got. Um so I I don't remember the visual voicemail. I've heard of it, but I don't remember it specifically.
SPEAKER_01Have you ever used the older cell phones where you had to like press press six to listen to your fucking voicemail?
SPEAKER_00Oh yeah.
SPEAKER_01Oh yeah, I remember yeah, and then visual voicemail came out and it's like duh.
SPEAKER_00Like obviously, like right, just be able to tap through them, basically, right? Is that the idea?
SPEAKER_01Yeah, yeah. Like you don't have to listen through the messages. Uh uh, you you just jump straight to whatever you want. Like that makes so much more sense. Um and then the other thing that made so much sense about the iPhone was the headphone jack. It's like, yeah, obviously I'm gonna want to be able to plug headphones into here. And I ranted about this recently, so I won't do it again. Tim Cook took that away from us. Uh, worst move ever. Anyway, things like that. Like the things that just like, yeah, of course it should do that. Those are the things that Saturn CI is gonna do.
SPEAKER_00Yeah, that makes a ton of sense. Like uh it's obvious in retrospect, but now that I see it, it is quite obvious that it should have been that way all along. So cool.
SPEAKER_01Yeah, and I want to comment, I don't know, I don't know if you noticed this, but like uh the UI is laid out like an email inbox where there's like the messages on the left and the detail in them on on the big right hand pane.
SPEAKER_00Yeah, it didn't stick out to me that that was the case in particular, but I see, yeah, I I I see that now, yeah. Yeah. Yeah, I like that. Looking through your email. Can I mark things as on red? Do I have like archive and trash and stuff like that?
SPEAKER_01You can reply and say fuck you, and it goes straight to me.
SPEAKER_00Oh my god, did I wait a minute? That's not it. That's all I'm gonna use this to. I'll start paying for it if I can do that. And you'll never know when it'll happen. It'll happen like at such random intervals, but you'll just get a little fuck you every now and again. And yeah, you'll think of me.
SPEAKER_01For an extra fee, you can deliver an electric shock. I got a collar that I wear.
SPEAKER_00Oh my god. You know what's what's somewhat sad is I feel like you'd probably make the most money by doing that. Um, that's that's your way to to three commas. If you made a CI tool that mostly when people run builds, you just get an electric shock every time. And you're like always on video. Um team call and you're just like, yeah, and so today I was sorry. Um uh yeah.
SPEAKER_01Oh man. Yeah.
SPEAKER_00Um, I feel like that's how you end it.
SPEAKER_01Exactly. Well, you know, if if we get enough customers, the voltage will eventually be high enough that that will be the end of it.
SPEAKER_00Yeah, you don't want the premiere customers. Yeah, you haven't created a premiere tier yet because I don't want to die.
SPEAKER_01Yeah, enterprise voltage.
SPEAKER_00Enterprise one special customer and actually kill Jason. Uh we'll have someone, we'll have someone standing by to continue continuously revive him. I feel like we're just writing like a CI Black Mirror episode or something like that.
SPEAKER_01Yeah, dystopian sci-fi novel.
SPEAKER_00Yeah. Dystopian man.
SPEAKER_01So much that. Yeah, so so that's where I'm at with the product and the business and stuff like that. Um, I hatched an evil plan recently to to bring founders and CTOs and such onto my podcast. Um I put up a Reddit post. And I've been I've already started this. I've had some founders on the podcast from that. And we'll see how that goes. That's a work in progress. Yeah. The ploy is to have people on the podcast, then we become acquainted and become friends. And you know, I visit their house and we have dinner together and stuff. And then I pull out the hey, you want to use the Saturn CI thing? No? Okay.
SPEAKER_00Alright. I was waiting for Saturn CI to come out of it. I was like, is he just going to go into like, and then, like, you know, I officiate their wedding and uh we grow all together and we have our deathbeds are next to each other. I'm like, where and then I pull it out. And then right on our deathbeds, I'm like, hey, have you seen Saturn CI?
SPEAKER_01It's my dying wish that you become a customer.
SPEAKER_00Right. I'm also dying, but I'll have my descendants do it.
SPEAKER_01Yeah, this is the long game.
SPEAKER_00Yeah, you're playing really the long game. That makes a lot of sense. Uh I do think it this this fits the mold for a lot of people. I mean, it actually would for me even, uh, but I also run a lot of uh JavaScript specs as well. But primarily, I mean, I'm like thinking about what I run, and like primarily I run R spec, JavaScript specs, and linters, and that's it. So like there's really nothing too fancy, and yet it seems like it's often one of the more complicated things you deal with, um, which is quite frustrating.
SPEAKER_01Yeah, yeah, and it's one of those things like the product's early, so it doesn't do much. So there's a very specific kind of customer who's gonna be a fit at this stage. The whole thing is kind of customer who will who will put their deathbed next to yours. Exactly. Yeah, I'm not saying this to complain or anything, but the whole thing is tough. Uh it's taking a lot of time. But the thing is with this, like it's not an experimental product category, like it's a CI platform, people need CI. Uh, so the it if it doesn't take off, the the only reason why I wouldn't succeed is if I don't do a good enough job of sales and marketing and building the product and stuff like that, which is great because then I can like commit to it. I never have to wonder like, am I just being stubborn? Should I throw in the towel and do something else or something like that? It's like, no, like the this idea is a workable idea. I just need to put my nose to the grindstone and do it.
SPEAKER_00Yeah, I mean, I uh just two comments to that real quick. One is uh, so it sounds like you are pretty committed to it at this point. Because I feel like earlier on in my understanding of it, it was just kind of something you were like, it was like great for like code review on code with Jason and those sorts of things, but it seems like it's becoming something you're like, I think I can make something out of this, and I really I want to take a go at it, basically. Is that true?
SPEAKER_01Yeah, 100% committed at this point.
SPEAKER_00Cool. And then the other one is uh actually I had Cloud Code. I was like, what has Jason said about Saturn CI? And I just had to like analyze you a little bit, and it brought up some tweets you had posted. Um cloud code, I guess, apparently good at um you know creeping on people. But uh, one of your tweets you had mentioned, like announcing Saturn CI, and I think someone was like, Well, why like GitHub actions exist? Like, why are you doing this? And it's like the thing I think people forget sometimes is you know, it's one of those things where it's like it's not a zero-sum game. Like, there's just like there can be a million CI tools and they can all be successful because people have different needs, there's different perspectives, there's different focuses of the tools. So there's no reason to look at this and be like, why wouldn't I just use GitHub Actions? Well, first off, GitHub Actions isn't that great. So that's part that's the whole premise of why. But also, like, you you know, different CI tools bring different perspectives, so Saturn CI is kind of bringing its own, and that makes a lot of sense to me.
SPEAKER_01Yeah. And I will know that I have succeeded when I've driven GitHub Actions completely out of business. And the people who work there now are gonna be living in a homeless shelter, uh, just regretting their life choices. They're like, if if only I had put that button on the left instead of the right.
SPEAKER_00I just imagine you like showing up at the homeless shelter just to like heckle them. I don't know.
SPEAKER_01Yeah, they'll be like, hey guys, really sorry about what happened. It here's a dollar.
SPEAKER_00Yeah, here's a dollar. I made it from Saturn CI. Exactly. I feel like half of GitHub actions right now is probably just like, I don't know, crypto mining or something like that. Don't people use it for a whole bunch of like crazy things um and probably you know bad actors and stuff like that? Because like you said, I mean it's compute, and if you have like an open source thing in principle, there's probably a lot of nefarious stuff you can do with it. I'm not yeah I don't want to assume that that is the case, but I'm pretty sure I've seen that that people do try to abuse it all the time.
SPEAKER_01I'm I'm sure that's true. I'm sure I'll get some of that at some point. I think it's kind of inevitable.
SPEAKER_00Yeah, in your case, they're probably yeah, I guess so, I suppose.
SPEAKER_01Your system seems like it'll try to like deliver an electric shock to somebody or something like that. I I don't know who would think of such a depraved idea, but uh people out there probably doing it.
SPEAKER_00Yeah. I can't find a single example of where someone would have come up with that, but maybe someday.
SPEAKER_01Um so you know what would be great, JP, is if someday in our life uh we have you on the podcast to actually talk about concurrency like we tried to do that one time. And completely completely uh went off course about two seconds into the podcast. But um let's do that. I think that would be wonderful.
SPEAKER_00Yeah, definitely. I'm I uh I am like I I kind of had some family stuff go on over the past year and like fell off of writing as much, and so I've gotten back into it, so my series is kind of like coming out consistently again. So if you go to jpcamara.com, you'll be seeing new posts, and ultimately those are gonna culminate in a book at the end as well. Oh no. So uh yeah, I've got lots to say about concurrency in Ruby.
SPEAKER_01So that'd be great. By the way, I think you should at some point try to give two concurrency talks at once.
SPEAKER_00Oh, I get what you're saying. Yeah. That would be that would actually be. I'm just suddenly imagining um my wife dressed up as me doing a talk at like the same time, and we're like kind of uh we're like two raptors, so like she'll take different slides and people will have to just try to consume them both at once. I like that idea a lot.
SPEAKER_01Yeah. I I don't I haven't seen your wife, but I don't know if she could do a convincing job of of being you.
SPEAKER_00Um the answer is no, but it would be funny to see her try. Yeah, she she does not look like me. Or she's not. I don't know how I'm trying to describe this. Well, you've really put me into a corner here, huh? All of a sudden I'm trying to like defend my wife not looking like a big, long-haired, bearded man. I I can assure you she isn't.
SPEAKER_01Wouldn't that be awkward? Wouldn't it be awkward if your wife was she had the exact same build as you? And you're like, no, actually, my wife, yeah, she's like a giant, she's a a giant man, but just yeah, yeah, that would be awesome.
SPEAKER_00Yeah, she coddles me at night. Yeah. Much the same as you coddled me as a baby the first time we came on the podcast. So we've come full circle.
SPEAKER_01Um, all right, we better end it before it gets too weird. Uh maybe we're well beyond that point.
SPEAKER_00Um we started off weird and then we got back into normal territory, but now we're weird again.
SPEAKER_01Weird again. Uh I must know before we before we end it um this book that you're working on. What what stage is that? Is it an idea? Obviously, you have some material that you can use in it. Where are you at with this?
SPEAKER_00Yeah, I mean, I I in principle I'm probably about 50% of the way through it. Um, I have a lot of material for the later parts of it. Um, I am going to publish most of it on my blog, um, but there's gonna be some sections of it that I think are specialized enough about like production usage of concurrency and how to like optimize and do streaming and use certain concurrency tools that I'll probably just do for the book that I'm thinking through right now as well. So I'm almost done with threads, which has taken me forever. I'm gonna go into fibers next and then true parallelism, and then I'm gonna have book-only versions of probably how to effectively use like streaming across a ton of different contexts to scale up your application. Um, and then also a section on uh like using concurrent tools like concurrent Ruby and stuff like that to to build things. So um yeah, so I would like to say within like another less than year I'll be at a like beta readers kind of stage. Um, but uh I do get distracted a little easily uh by other things like talks and things like that. So we'll see. But I'd I'd actually love to talk to you a bit about it because you are a published, self-published author, and so um getting a little insight from you would be great.
SPEAKER_01Yeah, are you thinking ebook, paper book, both, or primarily I'm just thinking ebook right now.
SPEAKER_00I know it does look like I believe you've uh I've only bought your ebook, but it looks like you've also uh had like published versions of it. So um, but I've only thought of ebook up until this point, so kind of curious about that as well.
SPEAKER_01Yeah, yeah, it is fun to have the um the physical copy at uh that RubyConf in Chicago where you and I saw each other. Um people actually a handful of people brought their copy of my book and I did signings. I always sign them with with insults.
SPEAKER_00Um that's not surprising at all.
SPEAKER_01Yeah. One one guy I'm I signed it, I said, fuck you and the horse you rode in on. So but but sometimes I try to make them personal. You know, if if there's some like if you have some physical deformity or something, I'll I'll work that in.
SPEAKER_00Yeah, like you talk about how my wife looks exactly like me or something like that.
SPEAKER_01So I haven't yet insulted someone's wife in in my assignment, but that's that's a great idea that could really hit home. I think, yeah, it'll hit yeah, some if I can cause them like marital problems with my book signing, like I've done my job.
SPEAKER_00Yeah, because you know the first thing when someone gets home, they're gonna be like, oh, what did Jason write? And they'll be like, oh no. Well, honey. Oh no, you're not gonna like it, but but God, and you'll respect it.
SPEAKER_01Okay, with that. Um, before we go, is there anywhere, JP, that you would like to send people to learn more about you and what you're up to?
SPEAKER_00Yeah, you people can just go to jpcamara.com. That's jpc-a-m-a-ra-a.com. Um that's pretty much I go by jpcamara everywhere on the internet, so it has links to other stuff, but that's where I do all my blogging and and kind of talk about things I'm I'm doing. So all right.
SPEAKER_01Well, JP, thanks so much for coming on the show. Thanks for having me, Jason.