Fable Tales, Staff Engineer at Stripe
Hey, everyone. Welcome. My guest today is Fable Tales. I met Fable years ago when we were speaking at a Ruby conference.
Fable Tales:Yes.
Ben Orenstein:And you invited me to pair on some RSpec code, and we have been friends ever since.
Fable Tales:Because that's that's how you make friends in the Ruby community, apparently.
Ben Orenstein:I do wanna talk talk about that in a second, but let let me finish introducing you first. So you previously worked at DigitalOcean and Google. You currently work at Stripe. Yep. You were a technical adviser to the CTO at Stripe.
Ben Orenstein:Now you're a staff engineer.
Fable Tales:Mhmm.
Ben Orenstein:Welcome to the podcast.
Fable Tales:Thank you. Thank you so much for having me.
Ben Orenstein:Yeah. I'm I'm stoked to chat. It's nice to talk to a friend that I know well. Maybe we start actually with that that conference interaction because you I would say you have this the quality of being really unafraid to sort of reach out to people and, like, ask them to do things. And that is the reason we're friends.
Ben Orenstein:Like, I would not have done that in the other direction. And so maybe talk about how you got that skill or, like, encourage other people to do it because I think it's so good.
Fable Tales:Yeah. I think, like, honestly, this was something of an experiment for me. So this was actually the very first international Ruby conference I had ever attended, and I only knew a few people who were coming, and I I sort of wanted to make additional friends. And so what I did, it wasn't just you, but I reached out to a handful of people who I knew were attending, whose talks I had really enjoyed videos of. And I was like, hey.
Fable Tales:I'm on the aspect team. Would you like to hang out in one way or another? And, you know, lots of people said yes. I think when people are going to conferences, if you give them an opportunity to, like, make a new friend, they they will actually really want to take that. I think, like, conferences can be very overwhelming.
Fable Tales:Right? And, like, just walking up to somebody in a hallway and starting to talk to them is, like, socially difficult. But if you have, like, a primed thing with somebody, it's, like, much easier.
Ben Orenstein:Right? That's a really good point. Yeah. Yeah. Conferences are basically I I mean, I really feel that, like, conferences the best thing you can get out of them actually is connections with people.
Ben Orenstein:Yes. Like, nothing like, no talk I've seen approaches the value I've gotten from friendships developed at a in person conference.
Fable Tales:Yeah. And, honestly, when I when I go to conferences where I know they are recording the talks, I will spend the vast, vast, vast majority of my time in the hallway, because I can watch the talks later, but I can't get that time with those people back. Right? And, like, you know, for example, a really good thing this habit has created is opportunities to, like, work with people I wouldn't usually get. So right before I stopped working on arspec, I was at Ruby Kaigi with the JRuby folks, and we, like, skipped maybe, like, 3 hours of talks to sit together and do some, like, rspec jruby debugging that, like, would have been just impossible to do any other way.
Fable Tales:Right? Yeah. And, you you know, Charlie Nutters doesn't live that far away from me. Like like, Japan is certainly further away than where where he lives to me is, but it was, you know, that we were together in a hallway in Japan that caused us to to actually do that. Right?
Ben Orenstein:Mhmm. Nice. Yeah. And I think that, like, reaching out to do a specific thing also Mhmm. Like, worked.
Ben Orenstein:You're like, let's use Vim and pair on our spec. And I was like, I mean, like, did you wanna go to the contributor list for rspec? It's like a pretty good pitch.
Fable Tales:Yeah. I I knew I knew I had sort of, like, it's it was, something to learn and something to offer. Right? Like like, I had seen your VIM talk. I was, like, I wanna get better at VIM.
Fable Tales:I bet Ben will help me get better. And in fact, you did. And Nice. You know, you got you got yourself on the aspect change log, so we both got to learn something. Right?
Ben Orenstein:Yeah. That's cool, and it's it's a good experience. Mhmm. And, yeah, you're right. The conference can be sort of default intimidating.
Ben Orenstein:Yes. Like, it's it's a room full of people. It can be a little tough to make those connections.
Fable Tales:Mhmm. Yeah. Yeah. Yeah. For sure.
Fable Tales:Yeah.
Ben Orenstein:Cool. Alright. So can you give me a big picture overview of some of the things you've worked on at Stripe in your time there?
Fable Tales:At Stripe, yes. I have done I've done a lot of things at Stripe. So when I joined, I was on our API platform team, and that is the team that is responsible for running the core Stripe API service. So when you hit the vast majority of Stripe API endpoints, you are, like, directly going through code that is maintained by the API platform team and sort of, by association, that means, every time you make a request to the Stripe API, you are executing code I have written, which is is, you know, sort of cool. I then, after I was on the API services team, was the tech lead of our Ruby services team, where Stripe is sort of in this transition from having a large monolithic service to, smaller services.
Fable Tales:And we didn't have a great story about having a Ruby service that lived outside the monolith. And so I kind of worked on the team that was responsible for, starting to build a lot of those, primitives. I, like, actually was the sort of founding tech lead for that team. So, like, literally from scratch, starting to design, pieces of of how Stripe's Ruby services are architected and wrote, a system called Common Core, which is is now, like, as the name suggests, in every single one of our Ruby services. Right?
Fable Tales:From there, I actually ended up going back to the API platform group for sort of, like, weird internal reasons that aren't really worth getting into in too much detail. Then I was the technical adviser to our CTO, David Singleton. And now I am, a staff software engineer in our developer infrastructure group where I mostly work on sort of, like, really deeply gnarly, like, Ruby VM and low level Ruby infrastructure issues. Like, literally before this podcast, I was debugging why the Sorbet pry signature system breaks in the new version of the pry jam. And, you know, debugging a debugger is, not a trivial task.
Ben Orenstein:Yeah. Wow. That's awesome. How did you other than pairing with me at a recent conference, how did you get good at programming?
Fable Tales:I think, like, the I I'm sort of very lucky, right, by comparison with lots of programmers that I so so my my dad worked at IBM, and so, like, I grew up in a in a house of sort of, like, software. And I started programming when I was 12, in Java because my dad worked at IBM. And, you know, I just I just programming sort of was my hobby, alongside playing video games, you know, through my teenage years. I studied computer science at university. I I always just loved it.
Fable Tales:And, I mean, like, you know, by the time I had graduated university, I had probably been, you know, programming effectively full time for already 4 or 5 years of my life. And so, like, you know, you sort of you can gain a lot of skill. I think software engineering is, like, a a really interesting field because, like, you can be at the literal cutting edge with just, like, consumer grade hardware. Whereas, like, if you want to be a, you know, nuclear fusion physicist, you you can't do that if you're age 13. Right?
Fable Tales:It's just not possible for you to be in a lab that does that. And so we are very lucky that we can get to the state of the art, you know, basically as soon as we can get computers in our hands and learn it if we want to.
Ben Orenstein:Okay. So you put in a lot of hours, which is certainly like a big component. Right? But it's also probably not enough. It's not sufficient.
Ben Orenstein:Yeah. It's I I think you're doing other clever things to get better.
Fable Tales:I think yeah. And I so I think I think for me, like, the biggest I think one of the biggest things that can help you become a better software engineer is, like, never accepting that something is, like, impossible or too difficult to be solved. Right? Like, the in some senses where I've seen sort of, like, myself succeed where the software engineers fail. It's just a sort of, like, dogged determination that you can understand the behavior of even, like, very complex systems if you are just willing to, like, push and push and push and push and, like, inspect, like, how this thing runs and, like, what branches does it take and that sort of thing.
Fable Tales:Right? And, like,
Ben Orenstein:you
Fable Tales:know, just just earlier today, I was sort of talking to someone about, like, how I debugged through some nonsense in the Ruby VM. And I was like, fundamentally, what it came down to was just, like, shoving print statements in, like, various pieces of the Ruby VM and seeing what happened. Right? And, like, that sounds that sounds really scary. Right?
Fable Tales:Debugging into Ruby VM.
Ben Orenstein:Totally.
Fable Tales:But but it just it's just it's not actually.
Ben Orenstein:That's funny. Because because I am I am that programmer that you are doing better than because I'm, like, too afraid to go look in the Ruby VM for what the thing is. I mean, that's just like, too too black magic, too scary, too
Fable Tales:low level. Yeah. Yeah. And, like, you can you can understand it. Right?
Fable Tales:I think another thing is, like, being willing to learn and work, like, in anger in as many programming languages as you can. And I think in in particular, even
Ben Orenstein:though it's
Fable Tales:I think it's not cool anymore, like, being willing to, like, work in and with complicated c programs is, like, probably one skill I possess that distinguishes me from a lot of, like, programmer like, notionally, right, if you look at my CV, I am a Ruby programmer. But, like, I can, you know, I can deal with, like, complicated c programs with the best of them. Right? And, like, you know, I think I think, like This
Ben Orenstein:is a great pairing too. Right? That's what's underpinning the all the Ruby. It's like, if you need to go to the c level, no problem.
Fable Tales:But it it it also underpins, you know, all the browsers and the operating system. And, like, you know, it lets you it lets you read the kernel, like, should you should you need to go read the kernel, which, you know, I have done. And, like, you know, when I worked at DigitalOcean, we were literally we were maintaining a Rails app that was like an internal admin interface for people to use. But the internal admin interface spoke to, you know, hypervisors on bare metal all around the world, and, like, you you need to be able to, like, drop to the, VM hypervisor level to be able to, like, debug issues sometimes. And, like, that's you know, I'm gonna SSH into this, like, physical machine somewhere around the world and, like, start editing Perl scripts, like, managing, like like, Libvert state.
Fable Tales:Right? Yeah. And so just like being a like, I think many programmers believe there are, like, bounds to the complexity they can understand. Right? Like, if I'm a JavaScript programmer, I'm going to bound the complexity I understand to, like, the the DOM and the JavaScript I'm coding and not what the browser does.
Fable Tales:But, like, you know, you often see Adam tweeting about browser bugs and, like, the fixes to those are always, like, some crazy piece of, like, Gekko needs a change to it. Right? Or, like, you know, as I've sort of alluded to here, if you're a Ruby programmer and something doesn't make sense, maybe you actually do need to drop into if not the VM, then at least the code of the interpreter. Right? And and, you know, this is true to for, like, Python programmers and and it's different for Java programmers, but, like, being able to drop down is really useful as well.
Fable Tales:Right?
Ben Orenstein:And it seems like c and c plus plus are, like, the the languages there. Like, you could pair those with almost anything higher level and say, like, because so much software is written in that. Like, if you're gonna dive down the stack, you're gonna hit c m c plus plus. Right?
Fable Tales:Yeah. Yeah. I would say you are in like, actually, god, now that we're now that we're talking about this, I'm I'm reminded of, one of the things I did at Google, which, was debugging a memory leak in the protocol buffer library for PHP, which also, like so I I've not slung all that much PHP in my life. Right? It's like some when I was a kid before I discovered Ruby, but, like, never serious production usage.
Fable Tales:And, like, I was like, I just found this bug in PHP's memory allocator, which also was c code. Right?
Ben Orenstein:Wow.
Fable Tales:And and I I do think like, I I I wanna illustrate as well. While c and c plus plus are important, I think it's, like, being able to get to the underlying complexity of whatever system it is you're working on and just it just so happens that a lot of the time, c and c plus plus are
Ben Orenstein:what underpin those systems. I feel like do you have a bug spotting knack? Is it a side effect of just, like, being able to grok the system well enough to sort of notice that that's a bug there? Is it, like, a is it an intuitive thing where you're kinda like, something's up here?
Fable Tales:I think I don't know if I do by comparison with other software engineers of my level of experience, but like, I think regardless of your sort of, like, natural bug spotting ability, the ability to sort of, like, confirm and bisect problem spaces and that sort of thing is, like, more important. Right? And so, like, to me, it's not just Mhmm. I can, like, I I am not not some, like, godly programmer who can stare at c code and immediately tell you where all the bugs are. You know, I'm just gonna go in there and fire in a bunch of print statements and have that sort of, like, tell me things about the the system.
Fable Tales:Right? And I think, like, like, a lot a lot of people are, like, unwilling to, you know, fire up gdb and go, here here is here is the specific And so to me to me, like, the the thing I when I people ask me for advice on this, I'm like, just do it. Like, don't don't be scared of the thing. I know it looks scary. I know there's, like, a bunch of weird things like pointers and structs here that you may not be totally familiar with, and, like, that's okay.
Fable Tales:You know how to call printf, and it turns out, like, being able to call printf will get you a lot of the way. And just so, like, like, most people just give up. Right? And I think the the single most important debugging skill is, like, knowing that the problem is characterizable and just being willing to just keep digging until you get there. Right?
Ben Orenstein:Yeah. I you reminded me of a story from the, like, really early days of Tuple where we had this bug, and, Spencer, who had written so much of the app, was, like, away on vacation. And John and I were like, it would be really cool if we could fix this bug because it's like we can reproduce it reliably, and it would be great to fix it. And we realized that it was in the c plus plus of WebRTC. Mhmm.
Ben Orenstein:And Joel and I we were like, we probably can't fix this. Like, this is like neither of us are c plus plus programmers. This is probably like a dead end. But, like, I, like, pushed. I was like, let's just try for, like, a little bit.
Ben Orenstein:Let's just see what we can get get done here. And just by kind of, like, being like that function name seems kinda like what maybe would be happening here. That, like, that seems, like, about right. This, like, is maybe where it's it could could be the the problem could be. And, like, adding a bunch of print statements Yeah.
Ben Orenstein:And slowly graphing it. And then, like, I wonder if maybe it's doing this and then just finding out it was doing that and realizing, like, yeah. That's it. We just, like neither of us really knew the language and, like, it was like a there's, like, a 1,000,000 lines in the WebRTC, like, a little WebRTC. Yeah.
Ben Orenstein:And but we, like, we figured it out. We found the bug. We fixed the bug, and it was like, oh, okay. Yeah. That was that was totally doable just because we thought we could, and we decided to give it a shot.
Fable Tales:Yeah. Like, I think even very early career programmers have gone through the process of doing that debugging action. And, like, I think people imagine that in systems of a certain size or scale, like, some magical thing happens where it makes that approach not work when when in fact that is that is not true.
Ben Orenstein:Right? Yeah.
Fable Tales:Like like like, you know, all all of these all of these machines, like like, every CPU, anyone who writes code today executes on behave in, like, roughly the same way. And even even the, like, scariest of, like, you know, multithreaded, like, c or c plus plus, like, async, you know, programs, like, follow the same logical rules as, like, you know, hello world in JavaScript. Right? And and, like, you can like, I promise you that you can actually just slam print statements all over them and make the bug go away.
Ben Orenstein:I love that. Yeah. I think there's definitely also mental thing here of, like, these artificial boundaries that I have, like, that that I've constructed where it's like, oh, no. Like, that's a dependency. I can't go in there.
Ben Orenstein:Like, that's just, like, unknowable. This boundary cannot be passed.
Fable Tales:I was actually just I was actually literally just about to say this. You know, and sometimes that means knowing how to pull the source of a library down and compile it and, you know, link it into your program versus using your dependency manager. And, like, lots of people have never done that. Right? Because most of the time, most of our software dependencies work exactly as we expect them to.
Fable Tales:Right? Like like, I'm certain that most of the people listening to this podcast will never ever ever ever ever ever ever need to go into the source code of the Linux kernel. And also that they probably don't know how to, like, pull down the source code of the Linux kernel and compile it for debugging. But, like, just knowing that you can if you really need to is is I also think, like, one of those blockers that most people most people have never gone past it, and so most people don't know that they can. Right?
Fable Tales:Whereas, like, you know, when when I am when I'm debugging the Ruby VM, I'm, like, totally just working off source code on my laptop. And I was actually I was talking to someone at Stripe who is also responsible for doing Ruby maintenance stuff, and they were like, I did not know you could just run Ruby from source, like, on our our development and production boxes. And I was like, yes. You absolutely can, and here's how I did it.
Ben Orenstein:Interesting. Yeah. I that that that makes sense. So there there is some can there. You can download the kernel and run it.
Ben Orenstein:My guess is Great. It's that's, like, not often the thing. I think it's more of the fear. Yeah. I think it's, like, there's something special about a kernel or a VM, and, like, this is just, like, un understandable by a mere mortal like me.
Ben Orenstein:Yeah. So I just, like, shouldn't get in there.
Fable Tales:Yeah. And I'm like, I'm not I'm not especially much more clever than most software engineers. Right? I don't have I don't have magic powers. I just I'm I'm just unwilling to take no for an answer.
Ben Orenstein:Yeah. Yeah. It's the it's the willingness. You're just like you yeah. And I I I think your message of just like, you can slam print statements in anything and eventually kinda figure out what's going on.
Ben Orenstein:Yeah. And, yeah, just go for it.
Fable Tales:Yes.
Ben Orenstein:Print statements or do do you how do you feel about debuggers versus print statements?
Fable Tales:They both have their utility. I think, like, I would never tell anyone that you, a 100% of the time, want to use a debugger and a 100% of the time, only want to use print statements. Like, I I will pry things. I I so I guess not everyone who's listening to this podcast is a Ruby programmer. Pry is like Ruby's debugger, for those of you who are listening.
Fable Tales:I will sometimes use print statements in Ruby programs. I will sometimes use gdb when I'm in the Ruby VM. I will sometimes use print statements when I'm in the Ruby VM.
Ben Orenstein:Got it. So print statements, fast and light, easy to do debugger when you wanna, like, maybe step through a lot of things or something?
Fable Tales:Well, it's it's a bit more situational than that. Like, you know, you you can get into sort of, like, hell where, like, the thing you're debugging is a subprocess being invoked by another program that, like, is capturing standard out and standard error. So you need to, like, side load print statements out to another file. Or, like, like, there are there are hell versions of this where it's or, like, you're you're 19 layers deep in forks, and so you just don't know what your process ID is, and so you can't attach a debugger to it. Like, there there are sort of programs that are more and less resistant to, like, various types of debugging techniques.
Fable Tales:And so I think being handy with both is, like, a really important skill because it lets, like, it lets you flex to the situation. Right? Mhmm. And, you know, you may also you may also just have no idea what, like, what area of the source code you even need to be in. And so, like, if you don't know if you don't know where you are, you can't start throwing print statements in because you don't know where you are.
Ben Orenstein:And a a
Fable Tales:debugger can at least tell you, you know, you're in this frame. And and then once you've done that, you can slam print statements in. Right? And so I I my approach is almost always hybrid. And, you know, like, as I mentioned earlier, like, I was I was debugging pry.
Fable Tales:If you're debugging a debugger, you probably can't use the debugger to debug the debugger. You you probably only have print statements. Right? And so the it it's just really situational. You talk
Ben Orenstein:a bit about the tech advisor to the CTO thing? That catches my catches my interest.
Fable Tales:Yeah. I I guess we we really never talked about this on air before. That that doesn't seem real.
Ben Orenstein:That's a great yeah. Maybe we did. It'll be
Fable Tales:possible. Possibly. I'll, yeah. I mean, I'm happy to give you a summary anyway. So so it was time time has become a a blur in my mind, but, it was is most of 2022 and some of 2023, I was I was technical adviser to Stripe's CTO David Singleton.
Fable Tales:And, you know, that role was very varied, sort of just depending on what he was needing in any given week. But, like, a lot of it was, when when things within Stripe weren't necessarily working as well as they could, like, going and having really detailed conversations with, you know, as many people as possible in the responsible area and, like, doing some sort of recon and compressing that and reporting back or, helping, you know, all sorts of things, helping push the engineering blog along.
Ben Orenstein:Oh, interesting. That's that yeah. Those are those are quite different.
Fable Tales:We definitely talked about that on, Art of Product. So I'm Alright. That's an
Ben Orenstein:that's an old podcast. We're on a new podcast now. I'm not gonna make people go listen to that one. This is we're doing a whole new thing now.
Fable Tales:Okay. Yeah. I mean, we can we can maybe get into that, but, David always sort of ran and sponsored the engineering blog at Stripe. So I ended up, kind of keeping that moving. I think there were, like, so many thing.
Fable Tales:It's, like, it it's funny. We we had this thing we talked about, which was kind of like the milieu, of just like, a lot of it was just very textural, and so it's hard to sort of describe any particular thing so much as just, like, being with the CTO and helping him with whatever, like, needed attention that he maybe couldn't get to. Extra pair of hands, like, trusted advisor. A lot of it actually and I thought this was really interesting was, when we would be in meetings together, I would, like, catch sort of, like, language or reactions that maybe he wasn't and be like, did you notice, like, this thing? Yeah.
Ben Orenstein:Or like Nice.
Fable Tales:Or like feed him things to say, without without it getting too spicy. There were definitely instances where, like, I would send him a DM and he would just say exactly what I DM'd him verbatim. And, yeah, so I mean, really just kind of like, you know, the second brain person at your back kind of a role. Having someone who is really in tune with engineering at Stripe and just, like, helping out.
Ben Orenstein:Cool. Nice. Alright. You wanna talk about code more?
Fable Tales:Yeah. Sure.
Ben Orenstein:Alright. What's a coding hill you would die on?
Fable Tales:See, when you ask me this question, I have I have a problem. And the problem is that it's it's, like, one of the least popular takes, in the in the Ruby programming language. But I think new style and by new style, I mean, Ruby 19, hash syntax was a mistake, and we should just never have gotten rid of the hash rockets. And and this this take is, like, so nuclear in in Ruby that, even when I wrote my own Ruby auto formatter, like, people argued me off this hill, to I was like So
Ben Orenstein:so you wouldn't die here?
Fable Tales:I guess in my heart of hearts, this is the hill I will die on.
Ben Orenstein:I hear you.
Fable Tales:But but like if when I'm building a popular tool for the masses Totally. I knew it was one I had to give up on. But Definitely. To this to this day, I would I would keep the hash rockets if it didn't get me, you know, thrown out of RUBY forever.
Ben Orenstein:Is it an aesthetic thing or parsing or something?
Fable Tales:So so the the the argument roughly goes that, we don't gain any capability with the new hash syntax and that it is actively confusing for things like quoted symbols, and that it makes the implementation of the language more complicated for, like, what isn't really that big of an aesthetic change.
Ben Orenstein:Yeah. I hear you. And the Hash Rockets are kinda cool looking. Yeah. They just they they look cooler.
Ben Orenstein:Alright. We gotta get off this in case some some of the audience isn't a Ruby programmer, and this is, like, the worst
Fable Tales:Anyone in anyone in the audience can at can at me. I I don't care. Yeah. This is a terrible take, but you are you asked. So
Ben Orenstein:Absolutely. Yeah. Are you a are you a prototyper? Do you make little little programs to, like, try things out?
Fable Tales:Oh, yeah. You know, it's it's interesting because, like, it's quite rare that I am doing new things. Like, I spend I spend much more of my time, like, in the abyss, like, fixing arcane bugs. But, I actually I actually ended up building a whole new, RPC client within Stripe, last year. And, absolutely, the the first rev of it was, like, a script.
Fable Tales:Not even like, not a library code that could not be reused, just a script which, like, fired a request out and, like, paused a response. And, like, you know, we we sort of pounded on that until it was, like, good enough. And then we we threw it away, and we did it much more properly.
Ben Orenstein:Okay. So yeah. So you you properly spiked.
Fable Tales:Oh, yeah. Yeah. I I was writing trash code
Ben Orenstein:Yeah.
Fable Tales:As fast as I could to prove that it could work. And and actually part part of that is because, a lot of people, has said it was categorically impossible. And coming back to sort of the previous conversation, like, I don't believe in categorically impossible. So I was like, no. I can I can do this?
Ben Orenstein:That's awesome. It's you so you did the hard part of a spike, which is you threw it away when you were ready to do it for real. Yeah. Because you're writing so, like, you're telling yourself, I'm writing a spike. I'm gonna write crap code.
Ben Orenstein:And then you get it working. And now you have to do this really difficult thing psychologically, which is like, no. No. No. I'm not just gonna be like, actually, it's already working.
Ben Orenstein:Let me just massage it into good quality. I'm gonna actually delete it and start over.
Fable Tales:Yeah. Well, I had a reference architecture for what I wanted the thing to look like in my head.
Ben Orenstein:That's cool.
Fable Tales:And so Reference from somewhere else? What do you mean?
Ben Orenstein:When you say reference architecture, I'm imagining, like, you you saw another architecture you liked that you wanted to use or you just had, like, a plan?
Fable Tales:I had a plan for what I wanted the architecture to look like in my head with the the reference part of that is, like, that's what I was referencing. And, like, I was like, this script did its job. It, like, it proved it proved we can we can sort of do the thing.
Ben Orenstein:You you shut the haters up. You showed him. Look.
Fable Tales:Yeah. Yeah. Yeah. Quick quickly. And then I was like, okay.
Fable Tales:Now you're not gonna see any progress on this thing for, like, a month and a half. Mhmm. And then it's going to be ready to, like, drop into the rest of Stripe's Ruby monorepo. And I I think this is, like, this is really important for people listening to understand is, like, in say, if I was working at, like, a 10 person startup, I actually might have made the call to take that trash and massage it. I can call it trash because it's my code, and massage it into something that went into production.
Fable Tales:Stripe has a 25,000,000 line repository full of Ruby, and we have all kinds of defensive constraints we have to program against because the vast majority of software engineers at Stripe who write Ruby have never written Ruby before they joined Stripe.
Ben Orenstein:Wow. The majority?
Fable Tales:The, like, vast, vast, overwhelming majority.
Ben Orenstein:Yeah. Okay. So you're not even screening on Ruby ability really. You're just like, if you're a good engineer, get over here. We'll teach you.
Fable Tales:We we don't interview for Ruby Ability at all for, like, most of the software engineers we hire. Interesting. Yeah. Like, e there are even people on the Ruby infrastructure team at Stripe who never programmed Ruby prior to Stripe.
Ben Orenstein:So is there a, like, a significant curriculum to get people up to speed?
Fable Tales:It's not that big. We just we just throw them in. Okay. Yeah.
Ben Orenstein:So there's not like a there's not like course you do or, like, it's just kinda like, here's your mentor person to, like, ask questions.
Fable Tales:There is some there is some developer education.
Ben Orenstein:Mandatory? Happens for everybody?
Fable Tales:Yes. Well, so when you join Stripe, everyone goes through a week of sort of, like, generic Stripe onboarding, and then software engineers go through 2 weeks of, like, developing at Stripe onboarding. And part of that is actually, like, practically like, a small group of, people in your onboarding class will work together on a project and actually, like, ship something. In most people do Ruby. Some people do Java because we also have a lot of, Java services in production.
Fable Tales:And if you're primarily going to be working in Java, then you do Java and not Ruby. But, like, Yeah. So we we teach people Ruby in the 1st 2 weeks to ship something, but it's usually not something, like, super critical. And after that, they go to their teams and they just start they start programming Ruby.
Ben Orenstein:I'm thinking because we sometimes it's like we have kind of a weird problem domain, like a weird space and, like, our app is written in c plus plus. Mhmm. And it's like and I'm wondering if we're screening on c plus possibility when we shouldn't be. And what it would require to just choose for engineering ability, like, capability and, like, train people.
Fable Tales:I think it is reason more reasonable for you to screen for people who can program in c plus plus than it is for Stripe screen for people who can program in Ruby.
Ben Orenstein:I'm making the classic error.
Fable Tales:Yeah. Like like like, Tupelo and Stripe are very
Ben Orenstein:different businesses. Arguably, I guess.
Fable Tales:I you know, like, one, you know, one reason I can give amongst the many is that, like, it's way easier to start programming something in Ruby than it is to start programming something in c plus plus, and, you know, dozens of reasons beyond that. But, like, yeah. It's it's, you know, 2 very different business contexts.
Ben Orenstein:Fair. Are you a big, workflow optimizer in terms of, like do you, like, work on cutting out lots of shortcuts and, like, keystrokes? How crazy are you with that kind of stuff?
Fable Tales:I used to be. I don't like, I think I would continue to be if I was still a full time heads down software engineer, but I'm I'm just not. And so, like, at at least now it doesn't feel like the long pole.
Ben Orenstein:What's the breakdown of coding versus, like, not coding time for you?
Fable Tales:That's, that's a great question. I think on the average week, it's like super honestly, it's super variable. One thing I would say is, like, unlike many software engineers at Stripe, there's sort of, like, a presumption, that staff software engineers can be distracted into planning, architecture, resourcing, status updates, blah blah blah blah Yep. At almost any time. Right?
Fable Tales:Like, last year, I was, pulled just, like, randomly into a project to help a financial risk organization, where, like, you know, from my background, much of the development work I've been doing at Stripe has been, like, very infrastructural. And I was like, cool. Suddenly, I have 10 hours of meetings a week added to my calendar. Like, that's fine. But also, like, my as as I sort of said earlier, my job isn't really blasting out lots of code very quickly anymore, and it hasn't been for a long time.
Fable Tales:Like, when I when I worked at DigitalOcean, I had, like, the most insane, like, customized Vim config and, like, everything was, like, 2 keystrokes away. And, like, you know, I had, like, fully weaponized, like, just everything I was doing. And, like, there are times in somebody's career where, like, that is, like, actually is the most important thing for them to do. Yeah. And I just simply am not there.
Fable Tales:Yep. Right? Like Fair
Ben Orenstein:enough.
Fable Tales:Like, frank frankly, like, for for me learning the Gmail, hot keys was at one point a bigger productivity boost than, like, speeding up my IDE.
Ben Orenstein:Yep. That makes sense. Yeah. Do you miss the pure coding days?
Fable Tales:I think the problems I work on are more interesting now. I think, like, how do you make a organization as large as Stripe effective is, like, a sort of, like, very interesting meta problem. And, like, it's not for everyone. Right? I know deeply, deeply experienced software engineers who, like, don't want to stop being hands on keyboard and programming all the time.
Fable Tales:Right? And more power to them. It's just not for me.
Ben Orenstein:Fair enough. So is it about the the leverage? Is that exciting to you now? Having more impact? Or just that you're sort of tired of cranking out code all the time?
Ben Orenstein:You need more variety.
Fable Tales:There are I think I think the right way to look at it is it is easier to find people who can, like, crank out code than it is to find people who can do that and, you know, well understand business context and think about, you know, the the complex problems of, like, what our priorities are and, you know, how we do how we assign people to tasks and, you know, what are we actually trying to get done this year? And, like, how how does what we're doing measure up against the company objectives? And, like, you know, broadly broadly speaking, I think, like, programming is a tool software engineers need to have, but, like, being a really great programmer is actually not sufficient to be a a wholly well formed software engineer. And that if it were flipped, there are, you know, there's probably a lot of wasted opportunity by having me just, like, at the keyboard all the time.
Ben Orenstein:Yeah. And does that match with what you want? Or is it just, like, you you wanna serve your best, like, help the organization as much as possible?
Fable Tales:I will be I'll be honest. I'm person I'm personally very motivated by like wanting particularly, particularly Stripe, but you know, this has been true in the past as well just to be, like, as good as it's it can. And, like, I sort of just on a personal level, like, abhor not doing whatever I can to, like, make that true.
Ben Orenstein:Cool. It's like a core drive for you, sounds like. Mhmm. Those are the best. You don't have to, like they're just they're just there.
Ben Orenstein:Yeah. The fire just burns.
Fable Tales:Yeah. Ice icy problems. I make them go away. It doesn't necessarily matter what shape they are.
Ben Orenstein:Mhmm. And the fulfillment guns from there. Yeah. Nice. So does it make sense to talk more about programming if, do you do you like the nitty gritty still?
Fable Tales:Oh, yeah. I I I love it. There's something there's something very fun and interesting about just being, like, up against up against the computer and just, like, having to sort of push through. Right? Like, as I was kind of talking about earlier, like, a lot a lot of the work I do these days is just like people come with arcane bugs and they go, Fable, we need we need this arcane bug to not be here anymore.
Fable Tales:And and it's it's it's very enjoyable, Right? I like, it's it's, like, solving solving complex puzzles and
Ben Orenstein:They're, like, we've heard you have a lot of knowledge and a lot of tenacity. Could you make this go away, please? Yeah. Yeah. And everybody wins because you you seem to enjoy that a lot.
Fable Tales:Yeah. Yeah. Yes. And, you know, like, in particular, this is like I think I think this is a thing. It's really great that, I I'm here at Stripe because, as I mentioned, we have the largest Ruby code base in the world and actually actually by some distance.
Fable Tales:And so we we are sort of, like, pushing the bounds of what Ruby things can be done. And so it's like, we we naturally come across rough edges in Yeah. Almost everything we touch. And so as someone who, has been now been working in in Ruby for more than a decade, I think I'm nearly nearly coming up on 2. Like, it's it's, you know, just super cool for me.
Ben Orenstein:Mhmm. Yeah. I mean, Stripe needs a you. Yeah.
Fable Tales:Yeah. Yeah. That is true.
Ben Orenstein:At least at least 1.
Fable Tales:Yes. Okay.
Ben Orenstein:So let's we've been we've been high level a little bit. So let's let's dive down the stack Yeah. Touch and talk about some some Cody things. Are you a pretty strong practitioner of short methods, small classes, lots of little pieces linked together, operating a concert, or are you more like, why don't you just throw all that in one method? It'll be easier to not have to track through things.
Ben Orenstein:Maybe we collapse these down a bit.
Fable Tales:Am I allowed to be annoying and say it depends? That's I
Ben Orenstein:have a hunch that's gonna be, like, the refrain of this podcast. Yeah.
Fable Tales:Yeah. I think to me, the sort of there's, like, a there's, like, a much more interesting meta question there, which is like Please
Ben Orenstein:do my job for me.
Fable Tales:Like like like, why why would you choose like a particular version of one of those constructs over the other, right? And like to me to me it's kind of like are you trading off, speed to change, readability, speed to write? Like what, like, what are you actually trying to do? Right? And so, like, you know, for example, like, when I was shipping completely greenfield startup code, like, code just goes wherever.
Fable Tales:Like, like, where where the code is is, like, the the least of your problems compared with, like, you know, we're burning this investment money, and if we don't get this product into the hands of a user, like, you know, obviously, these are going to come for us or, you know, we're going to be out on the street because we've burned all our savings and we're bootstrapping. And so, like, the answer there is it doesn't matter. It it actually it it really doesn't. Like, the own the only thing that matters in that situation is, like, how quickly can I iterate and how quickly can I get, things that will get people to pay me to the people who are going to pay me? Right?
Ben Orenstein:Yeah. Yeah.
Fable Tales:I think, like, and, you know, it's, Kent Beck has this, framework, called, explore, expand, extract, which sort of, governs the journey of a life of a software product. Right? And so, like, in in the the early days, you're in the explore phase, and, you know, you want to find what the product is even supposed to be as as quickly as possible. Right? Because if you don't, you're going to die for the aforementioned reasons.
Fable Tales:And then you kind of have the, let me see if I can I can actually remember what the phases are? The expand phase is kind of where you're, like, growing and adding new features and, like, you've hit your core user base and you're beginning to sort of, like, expand as much as you can. And then you have the extract phase where you're probably not going to get any more users or, like, you know, you know, you're not gonna get any more users or, like, very few. And so at that point, it's really about, you know, pulling as much value of the thing out as you can. And, like, an example of a product in the extract phase is something like the Facebook timeline.
Fable Tales:Right? Where, like, the Facebook doesn't really have any, like, more users to hit. Like, everyone everyone who has access to the Internet in most of the places where Facebook is, like, is already on the Facebook timeline. Right? And so you don't expect radical, rewrites of, something like that, you know, unless Elon Musk buys out the company and then decides it's not good enough or whatever.
Fable Tales:And so to sort of apologize to the programmers at home and sort of loop back to the original question, I think just writing, like, long methods, long classes, being perhaps less careful about the structure of the code, is a thing you can get away with, when you wanna just write really fast and you're probably not going to be spending a lot of time changing the thing. But, eventually at some point, you're gonna wanna break that down as you have, like, more change occurring.
Ben Orenstein:I I haven't heard that back thing before.
Fable Tales:Mhmm.
Ben Orenstein:Okay. Do you have a sense of your personal style? Like if I saw some code and was like, oh, Fable definitely wrote this other than Hash Rocket syntax in Ruby.
Fable Tales:I don't know. Well okay. So I suppose there's one there's one way of answering this. Right? Which is that, I literally wrote a Ruby auto formatter because I was so angry about how, people were writing Ruby code.
Fable Tales:In a sense, all the Ruby at Stripe has Fable style.
Ben Orenstein:Got them.
Fable Tales:Yeah. Got them. This is maybe this is maybe a funny aside. That's That's hilarious. No.
Ben Orenstein:That's the way to win the style argument.
Fable Tales:Is just write the autoflex.
Ben Orenstein:Write it. Yeah. That's amazing. Yeah.
Fable Tales:You know what? We'll we'll do a we'll do a podcast exclusive, behind the scenes here. So, at Stripe, we anyone at Stripe can create a new emoji in Slack, And there is a there is a fable crimes emoji, because I I am sort of known for, kind of blowing past, safety features if they are in the way of, like, me solving whatever particular problem it is, I am trying to solve. And so sometimes I will be like, I'm doing so many crimes right now.
Ben Orenstein:Is this, like, past, like, type checking kind of safety features?
Fable Tales:Oh, yeah. Just like t untyped or, like, throwing evals in there or, like, reaching into private guts of objects. Like and this comes back to, you know, what we were talking about earlier of, like, being really unwilling to sort of, like, accept that problems are impossible is, like, sometimes you just you just gotta do crimes to, like, to to to to solve a problem.
Ben Orenstein:Sometimes you just gotta do crimes. A quote from a high level Stripe engineer.
Fable Tales:Yeah. We're really we're not passing the front page test on that one. But, yeah. No. What I mean by that is, like, frequently, and this is especially true in large systems, like, you know, that will be, like, the right way to do a thing, and it will be, like, safe and have boundaries and stop you from, you know, blowing up a thing.
Fable Tales:And I'm like, look. I know. Like, I know. I know. You you just you just gotta let me you just gotta let me do it this one time.
Ben Orenstein:And so
Fable Tales:I would say I would say fable style is most visible when I'm in the middle of a complex problem. Not when I've solved it, but, like, when I'm in the middle. And the reason for that is that, like, I will I will blow through, like, any and all safeties, I need to if it makes me, like, believe I'm, like, closer to fixing something. Yeah. And so I guess if when you ask me what my style is, my answer is crimes.
Ben Orenstein:I like it. Aggressive. Raw aggression.
Fable Tales:Sometimes you've gotta just be willing to commit code crimes, you know?
Ben Orenstein:Yeah. Yeah. Alright. I'm I'm on board. Are you still using Vim?
Ben Orenstein:No. Okay.
Fable Tales:Stripe has a really well manicured, Versus Code story. I use Versus Code in VIM mode, so I'm, like, half I'm halfway there.
Ben Orenstein:How is that?
Fable Tales:Good enough, actually.
Ben Orenstein:Nice.
Fable Tales:It's the first Vim integration in something that is not Vim I've ever used that doesn't make me angry and want to immediately rage quit.
Ben Orenstein:Cool. That's awesome. It it has seemed like that's possible. Hard hard. Because Yeah.
Ben Orenstein:It's like who what if you're gonna implement 20% of VIM, it's which 20%. There's no Yeah. Magic 20% that covers what everyone thinks is, like, the best 20%.
Fable Tales:Yeah. And that there are there are things in Versus Code VIM that infuriate me. Like, a really good example of this is,
Ben Orenstein:that's not remarkable, though. Right? Can't you say that about every piece of software you use?
Fable Tales:What pieces of software that do not infuriate me? Are there any?
Ben Orenstein:What's the most reliable piece of software you use that's like yeah, that you like?
Fable Tales:That's a great question. This is one that's probably gonna get me some hate, but I I actually find Zoom to be really, really solid. Like, I almost never have problems just, like, joining a call and talking to people. Yeah. I like I have my Mac.
Fable Tales:It's plugged into my screen. I have my microphone. That's it. It's oh, I just bashed my microphone. I'm so sorry, audience.
Fable Tales:It just works. It just it just always works. And, like, the screen sharing always works. And
Ben Orenstein:Yeah. It's great. That is the that is the thing they do. They work really, really reliably. And, like, even when networking distance are bad, it's like that's the they they do a great job with that.
Ben Orenstein:I have to give them that.
Fable Tales:And this is not a piece of software per se, but, I guess this is my best piece of hardware. YubiKeys. YubiKeys are amazing. They just work. They do exactly what they say they're going to do.
Fable Tales:Yeah.
Ben Orenstein:Yep. That's So
Fable Tales:what were we talking about?
Ben Orenstein:I asked you what doesn't make you rage. Oh, you're saying that v s oh, VIN mode in
Fable Tales:VSP. Yeah. Yeah. It's it's, location storage. So, like, like, if you use the control o and control I shortcuts to go back and forth.
Fable Tales:And if you use the tag stack, those don't work the same way in Versus Code that they do in Vim enough for it to make me angry, but most everything else does.
Ben Orenstein:You wanna pair on it and fix it?
Fable Tales:No. I don't I don't, I don't really do programming outside of work at all anymore. I did that a lot in my twenties, and then I just I kind of don't anymore. Like, I'm not on any major open source projects anymore. I I'm not on the board of Ruby Central anymore.
Fable Tales:I just I kinda stopped. I kinda I kinda stopped from wanting to do, programming outside of work time.
Ben Orenstein:So I did. Mhmm. I realized I should have I should have mentioned your open source work in your intro.
Fable Tales:Yeah.
Ben Orenstein:Because you're in the Rspec core team. I mean, among other things, that's what that's what stands out to me. And I wonder there are probably people that are interested in that. Mhmm. It's like, what is your what is your advice to people that, like, wanna get involved in, like, a heavier level with an open source project?
Ben Orenstein:They wanna get they want that core team credit and social proof and impact and all the good things.
Fable Tales:I think I think the open source world is very different to how it was in, what? Like, 2013, 2014 kind of
Ben Orenstein:times. Old? Our advice doesn't isn't relevant anymore? Our experience is not relevant?
Fable Tales:I I think the way I became a open source core team member probably would not work, anymore. Mhmm. Which I think is interesting. Right? That is interesting.
Fable Tales:Because all all I did was I I just, like, rolled up to the rspec project. I just started I just started sending them pull requests. I just started fixing fixing bugs, refactoring, and, yeah, they gave me they gave me a commit bit and a a core team bit. And, after how long? It wasn't that long, actually.
Fable Tales:It was, like, 6 months max max, like, a year, something like that. And, you know, like, if you look at, a lot of open source projects now, they have, like and I think this is actually this is also actually a really good thing. It's, like, the notion of open source governance models has come a really long way. You know, we have foundations now. We have, all kinds of different teams.
Fable Tales:We have, I mean, frankly, we have Discord now, which we didn't have.
Ben Orenstein:Mhmm. That's interesting.
Fable Tales:And, Discord is, like, one of the best tools for open source, which is hilarious. But, like, it turns out that when you design a chat system for gamers, you need really, really good moderation tools, because gamers are terrible. And so you end up with, you know, a tool for building communities that's really good.
Ben Orenstein:Yeah. That's interesting. Are you part of any great Discords? We're gonna ask
Fable Tales:a part of any great Discords? I have a lot of social Discords I'm in, with friends and stuff and those are really good. I'm in the the, Greater Boston Area trans people discord, which is, like, you know, a sort of, like, social community group. But
Ben Orenstein:you're not active in a programming one right now?
Fable Tales:No. Well and that comes back to you. I don't really do
Ben Orenstein:Yeah. Yeah.
Fable Tales:Programming outside Discord. How would you do if how would you
Ben Orenstein:do a commercial open source startup today? If you were to make a open source thing, give away the the the core of it, build a premium offering on top of that somehow?
Fable Tales:Yeah. I mean, it sort of depends on the, you need a little counter. You need, like, a ding every time it I I say it depends.
Ben Orenstein:That's what this podcast should be called.
Fable Tales:Maybe that's the episode title. There you go. But, like, you know, I think I think it also sort of depends on your, target customer.
Ben Orenstein:You've actually gone 2 depends deep, and you haven't even told me anything yet.
Fable Tales:Given you any useful information? Jesus. So so, like, you know, if if your target customer are, like, in less than, you know, hundreds of employees, companies, you probably have a much lower compliance burden to hit to sell software to them. So, like, if you're selling to, a company that needs to follow, you know, like, so I mean, it's Oxley or SOC 2 blah blah blah, then, like, a thing you can sell them really easily is just a hosted runtime of whatever your open source is because, like, people hate, like, running their own stuff. Like, running server running servers is like a hard problem, it turns out.
Fable Tales:And so, like, you know, for example, there are there were Ruby Gems as a service startups or, like, Mongo as a service or, like, Redis as a service. Right? Yeah. And so, like, you know, I'm the author of the make the makes widgets open source project, and you can use makes widgets pro to get a 1,000 compute hours a month of widget construction and pay me, you know, a $150 a month. That's the lowest price for SaaS, by the way.
Fable Tales:It's a $150 a month. Raise your prices, everyone. We should just all raise our prices today. And then, you know, like, there are variations on this. So, like, you know, what what Mike Perham did with sidekick is he had, like, the the the free version is the one where, like, it will, accidentally delete your jobs sometimes when your Ruby VMs crash.
Fable Tales:And if you want to be secure against that feature, then you have to pay him. And that's that's really good because, like, if you have a hobby project, you probably don't care against defending if your Ruby VM crashes. But if you're running serious software in production, you absolutely do. And, you know, so that's, like, a really good, like, split, value split in terms of, you know, what is and isn't, paid for.
Ben Orenstein:Yeah. And he didn't he his thing is nice because he doesn't have to host anything. Yes. Host hosting is not just an easy thing to do. Oh, and we just all we just host it for you.
Ben Orenstein:That's, like, that's, like, the business. Like, that's another business, basically.
Fable Tales:And so and so that's kind of the other that's kind of the other way you can split. It's like, what's the what's the, like, pro feature that businesses need, that consumers don't. Right?
Ben Orenstein:Yeah. I feel like if if it were you, if I were starting this with you, I would do it with some sort of hosted component. Because you could do that.
Fable Tales:Yeah. Yeah. Because you you'd trust me to run the service. Right? Like,
Ben Orenstein:Yeah. And so, like, if you were doing this yeah. Yeah. You you if you're on the team, you do the hosted thing.
Fable Tales:That's the other thing is, like, do you want to hold a pager forever?
Ben Orenstein:Definitely. Yeah.
Fable Tales:Right? And then
Ben Orenstein:But the prima the upset the premium version of this that you don't host is sounds like a sweeter gig to me.
Fable Tales:It it is, but it also is, you know, much harder to identify what the split is, like or even, like, know if you're building something useful. Right? Like, I would I would advise almost no one, go and start an open source project on something that's annoying them and then like try and build a pro version and sell it. I think like I think there isn't a lot of, like, obviously needful, unconquered stuff in that domain anymore.
Ben Orenstein:It doesn't sound that wrong to me. If you had a problem at work and you built something, and you open yeah. I like I feel like you can sort of test this in phases. Like, did you have this problem enough that you solved it at work? If you did, can you extract something from the source?
Ben Orenstein:When you do, do other people care about the free version? If so, maybe there's a pro thing there.
Fable Tales:Yeah. And, like, that
Ben Orenstein:So it depends what the annoyances. Is it a business annoyance? Was it just are you mad about something in your Bank of America statement or something like this?
Fable Tales:Yeah. And and also, no one values the time of programmers less than programmers.
Ben Orenstein:Totally. Yeah.
Fable Tales:Right. Right. Like like and that's the thing with, like, sort of turning open source, software pro is, like, such that, anyone's ever going to make a buying decision, they are probably in management and, you know, might be in a if you're lucky, they are an engineering manager. Like, if you're so they can actually understand the thing. But the the very first thing that somebody nets to the person making the buying decision is going to say is, like, I could build that overnight.
Fable Tales:Right? Like, someone is going to say that.
Ben Orenstein:And
Fable Tales:then and then you have to fight that against, you know, whatever egotistical tech lead or programmer is at your target, company ad infinitum.
Ben Orenstein:I honestly think this was a sneaky advantage of Tuple. It's just that programmers hear about it, and they don't want to build it. Yes. Yeah. They're like, that sounds hard and annoying.
Ben Orenstein:And
Fable Tales:so Yeah. Yeah. Video And they're right. Video streaming software is a uniquely annoying
Ben Orenstein:Yeah. Yeah. Totally. Alright. This has been a lovely conversation.
Ben Orenstein:I think I think we I think we wrap it. We have a nice little chunk here.
Fable Tales:Great. I mean, always always happy to chat.
Ben Orenstein:Yeah. This was it was super nice to catch up again. Stoked to hear about all your things.
Fable Tales:Cool.
Ben Orenstein:Yeah. Cool. Thanks for coming by.
Fable Tales:Yeah. Of course.
Ben Orenstein:Anything you wanna, like, point people towards?
Fable Tales:I mean, you know, I'll I'll just give the Stripe is hiring plug if you wanna come work at Stripe, Stripe.com/jobs. Lots of jobs all around the world, lots of remote jobs if you like where you live and don't want to have to move. Yeah. Take a look.
Ben Orenstein:Cool. Awesome. Alright. Thanks.