Transcription (demo)

Obie Fernandez: Pioneering AI in Ruby on Rails Development!

  • 00:00:00

    Welcome to the Maintainable Software Podcast, where we explore the art of improving existing

  • 00:00:08

    software with seasoned practitioners who have helped organizations overcome the problems

  • 00:00:12

    often associated with technical debt and legacy code. I'm your host, Robbie Russell. On this

  • 00:00:17

    episode, Obi Fernandez, who is a software engineer, speaker, DJ, author, and is currently

  • 00:00:23

    chief scientist at Olympia. Obi joins us from Mexico City, Mexico.

  • 00:00:36

    Obi Fernandez, we're so glad to have you join us on Maintainable. Welcome.

  • 00:00:39

    Thanks, Robbie. Glad to be here.

  • 00:00:41

    So as you reflect on your experience in the industry, what do you believe are a few common

  • 00:00:45

    characteristics of, dare I say, well-maintained software?

  • 00:00:49

    Oh man, we're just getting right into it. I mean, definitely having some test coverage,

  • 00:00:53

    because if you have test coverage, you can make changes. But how boring must that answer

  • 00:00:57

    be? I'm guessing every guest says that.

  • 00:00:58

    Some variation of that.

  • 00:01:00

    But one of the reasons after nearly two decades that I still love Ruby and still insist on

  • 00:01:05

    using it, even these days where almost everything that I'm personally involved in is done in

  • 00:01:10

    Python, it seems like. I think Ruby syntax leads itself, especially for someone who's

  • 00:01:15

    been doing it for so long since me, you know, like me, is to write readable code. And I

  • 00:01:20

    think that's a very important factor in your software being maintainable is, you know,

  • 00:01:25

    can I go back to what Obi from six months ago or Obi from a year and a half ago wrote

  • 00:01:30

    and figure it out? And I think my track record's pretty good on that. And I think Ruby is to

  • 00:01:35

    blame for some of that in terms of writing code that is fluent and, you know, reads like

  • 00:01:41

    natural language. And yeah, I mean, that's my answer.

  • 00:01:44

    I think about also you mentioned test coverage and precursor to this conversation, you had

  • 00:01:49

    also mentioned that code that's like robust code. And I was kind of curious, maybe hear

  • 00:01:54

    your thought on like, what makes code robust? Like, how would you kind of delineate that?

  • 00:01:59

    Well, I think if you've been doing this long enough, we're all familiar with like the code

  • 00:02:02

    that blows up for no, for no explicable reason. I've gotten a lot of that in the last year,

  • 00:02:07

    the app that I'm currently working on is called Olympia. And it, it probably is the most post

  • 00:02:13

    modern software I've ever written. I've hit a new peak of like external dependencies with,

  • 00:02:18

    you know, all the different APIs and kind of offloading major subsystems to providers and

  • 00:02:25

    things. And even the main one, which is OpenAI, which I use for, you know, for GPT-4 for the main

  • 00:02:32

    conversation loop of Olympia. It's the engine behind how our virtual assistants communicate

  • 00:02:38

    with our users. And over the last six months, I think I've done a pretty good job of making

  • 00:02:43

    the conversation loop robust in the sense that pretty much anything that OpenAI throws at me in

  • 00:02:50

    terms of error messages, I can handle gracefully, you know, whether it's retrying or giving feedback

  • 00:02:55

    to the user about what's going on or alerting customer support that they can be on top of it.

  • 00:03:00

    But it's taken a while to get there. There's definitely been an investment, you know,

  • 00:03:03

    in the less mature that the services that you're integrating with, the more uncertainty you tend

  • 00:03:08

    to have in terms of what's going on. Like I can think off the top of my head of like,

  • 00:03:12

    probably at least six or seven different ways that a request to OpenAI can fail,

  • 00:03:16

    you know, at the moment. That's interesting. You know, I was thinking about, you know,

  • 00:03:20

    definitely we'll get into talking about your book and stuff like that and definitely talk a little

  • 00:03:25

    bit about the software project you're primarily focused on right now, Olympia. But when you're

  • 00:03:29

    integrating with external dependencies, APIs on any software project can be a little challenging.

  • 00:03:33

    But I don't know that I've, because I personally haven't done much integration at all with any of

  • 00:03:40

    like, one, it's trying to find good useful use cases for particular projects we're already

  • 00:03:44

    working on. And it hasn't just been necessarily a big requirement for most of our current client

  • 00:03:48

    base. But when I try to wrap my head around, like how do you validate if it's a good response or not

  • 00:03:53

    from something that's, it's not like a data point that you can easily just check, like this thing is

  • 00:03:56

    a hundred percent accurate data point. And this, you know, how do you think about that when you're

  • 00:04:00

    having a conversational based back and forth with an API and stuff like that, and it gives you

  • 00:04:04

    something that's relatively confident in itself, but is this actually a match that you're saying,

  • 00:04:08

    pulling back weird areas, but like, it's like,

  • 00:04:11

    Oh man. So, so I would, I wasn't even talking about the, I wasn't even talking about like the

  • 00:04:17

    qualitative, you know, kind of more subjective, you know, correctness of the response. I was

  • 00:04:22

    talking about whether the response even worked to begin with. I've had to familiarize myself

  • 00:04:28

    with a whole gamut of, of HTTP error codes that I was, you know, kind of had forgotten for a while,

  • 00:04:33

    like 426, 427, you know, different kinds of five hundreds. Cause we get them all. Cause I mean,

  • 00:04:40

    there's, I'm picking on OpenAI, but it's just because, you know, we, we have a, they have a

  • 00:04:45

    fair amount of instability in their API. I think sometimes they're just, they just have too much

  • 00:04:51

    load instability, which is not reflected on their status page. So, I mean, you can't even just

  • 00:04:55

    necessarily rely on that to know whether something's going on. Luckily for the most part,

  • 00:04:59

    if you have a smart retry strategy, you just end up waiting. You do a little bit of back off and

  • 00:05:04

    it's usually okay. The other thing that's nice is that there's, at least for now, the users have a

  • 00:05:09

    super high tolerance of errors because chat2BT is just, isn't reliable itself and you know,

  • 00:05:15

    will fail. It's, it's really an interesting topic. It's a different topic, but it's an

  • 00:05:19

    interesting topic in terms of eval. Evals is what you call, you know, kind of systems or patterns

  • 00:05:25

    that are meant to, to check the correctness of the response, whether it aligns with what your,

  • 00:05:29

    you know, particular guidelines are. So there's different kinds of evals that you can do. And

  • 00:05:35

    actually this is something I get to in the book on the final chapter called quality control.

  • 00:05:40

    So there's kind of two sides of the same, two faces of the same coin. There's evals and guardrails

  • 00:05:45

    and guardrails are what you implement to eval on the fly the responses you're getting back from the,

  • 00:05:52

    from the AI. So for instance, a really simple guardrail that we have is to make

  • 00:05:56

    sure that only official languages are, the AI only responds in official languages.

  • 00:06:02

    And we do that with a super, super cheap model. That's really, really fast. Essentially we just

  • 00:06:08

    want, we want to spot check and make sure that no one's like kind of hacked our system to talking

  • 00:06:12

    Vietnamese or Chinese or something that blows up our costs by like 10x because of the nature of

  • 00:06:19

    Hey folks, it's me, Robbie. I want you to take a moment, close your eyes. Now picture your code

  • 00:06:24

    and your applications as a symphony. Now to keep that symphony playing smoothly,

  • 00:06:29

    you need an orchestra of tools. That's where our podcast sponsor AppSignal takes center stage.

  • 00:06:35

    They combine the elegance of error tracking, the precision of performance monitoring,

  • 00:06:39

    and the harmony of logging into one symphonic suite. Whether you're composing with Ruby,

  • 00:06:44

    jamming with Elixir, orchestrating with Node.js, or harmonizing with Python,

  • 00:06:49

    or maybe even a little bit of flourish of JavaScript, AppSignal's got the sheet music

  • 00:06:54

    for you. And here's the crescendo. Plans start at just $23 US a month. That's got to be music

  • 00:07:00

    to your budget's ears. Plus they're certified ISO 27001, and they dance the GDPR and HIPAA

  • 00:07:06

    compliance beats. So don't miss a beat, my friends. Head on over to AppSignal.com

  • 00:07:11

    meet your good friend, Robby from Maintainable Centia. Now open your eyes and let the symphony

  • 00:07:16

    of smooth coding begin. Let's get back to our show. So you could potentially, it could be very

  • 00:07:26

    easy for someone if they just loosely integrate with something like OpenAI to kind of change

  • 00:07:31

    how they're using it, whether it's malicious or not, or they're just changing the language and

  • 00:07:36

    that adds a whole nother level of complexity to the infrastructure. For this kind of app,

  • 00:07:41

    it's a conversational app and you're letting the user interface directly with the AI.

  • 00:07:46

    Our users are great. They pay quite a bit to use the service. So we haven't really had too many

  • 00:07:52

    out and out flagrant abusive cases or things where people were wasting resources or using us

  • 00:07:59

    inappropriately. A lot of the things that we implement that are kind of like extra layered

  • 00:08:04

    on top, whether it's guardrails or eval, kind of after the fact based evaluation of the conversations

  • 00:08:11

    for quality control, for customer satisfaction reasons, things like that. They're just that,

  • 00:08:15

    I mean, they're, you know, they're meant to provide a better service, right? But AI changes

  • 00:08:20

    the game because it's no longer just about the quality of your code, you know, that makes things

  • 00:08:26

    maintainable. I mean, some parts of what, some of the ways that you can use AI, and this is probably

  • 00:08:31

    what's most unique about my book and what I'm most excited about and what readers seem to be

  • 00:08:35

    most excited about as well is that I advocate for dropping in little AI black boxes as discrete AI

  • 00:08:42

    components to replace otherwise traditional implementations of functionality. So for

  • 00:08:48

    instance, I've been playing around with this concept within Olympia for some of our account

  • 00:08:53

    management. So in Olympia, you subscribe to one of three base plans that gives you a team of AI

  • 00:09:00

    powered consultants. And starting about four or five months ago, we started adding the ability

  • 00:09:05

    to add extra assistance to your plan. You know, if you're an experienced, if you're listening and

  • 00:09:11

    you're an experienced software developer, you can imagine, okay, there's like kind of a catalog of

  • 00:09:15

    extra, you know, extra bots you can add to your account. So you look at those and you have a

  • 00:09:19

    button that lets you add them. And then there's some validation that goes on. And then I have

  • 00:09:26

    to create a new line item and add it to their Stripe subscription.

  • 00:09:30

    And I have to modify them as, you know, it's kind of like the typical things you would expect when

  • 00:09:34

    account teams request. So when I was implementing that, instead of doing it in what I would call

  • 00:09:40

    just a normal traditional kind of way, what I did was I modeled an account manager class, almost

  • 00:09:46

    like a microservice, the way you think about a microservice, that's responsible for that kind of

  • 00:09:54

    change. And I made like a little worker. In the book, I call this approach multitude of workers.

  • 00:10:02

    So I made a worker who is my account manager. And the interface between the rest of the app

  • 00:10:07

    and this account manager is English, it's plain text. So basically, if the user goes in and looks

  • 00:10:15

    at an extra assistant they want to add to their account, and they push that button to do so,

  • 00:10:21

    internally, there's an English statement that's generated, you know, please add bot config

  • 00:10:28

    with a UID to account with a UID. That's packaged inside of an account change request. And it's

  • 00:10:37

    sent to this worker. And then the worker looks at the request. And it has at its disposal,

  • 00:10:43

    a number of tool functions that allow it to do a number of things, including adding new bot

  • 00:10:53

    configs to an account. But it can also send an email to the user or to customer service or both.

  • 00:11:01

    It can also reference Olympia documentation and guidelines. And it can also finalize the request.

  • 00:11:08

    So then at that point, programming it and maintaining that business logic, let's say,

  • 00:11:14

    around how that account manager works becomes a matter of prompting. So the prompt that's given

  • 00:11:19

    to account manager tells it how to behave. And in fact, while we're talking, I'll fire up my editor

  • 00:11:26

    and I'll bring it up so I can actually read it. But the instructions literally tell it what to do

  • 00:11:34

    when it gets a request. I'll read you the system directive, quote, unquote. This is the

  • 00:11:38

    configuration for this bot, right? You are an account manager for Olympia. The user will request

  • 00:11:44

    changes to their account and you will process those changes by invoking one or more of the

  • 00:11:49

    functions provided. Make sure to notify the account owner of the result of the change request.

  • 00:11:55

    Always end by calling the finished function so that we save the state of the change request

  • 00:12:01

    as completed. That's it. Between that and the functions that it gets and the functions it has

  • 00:12:06

    is add bot config to account, add new line item to subscription, notify account owner, and completed.

  • 00:12:14

    Those are the functions that it has available to it. Those are just normal methods that have

  • 00:12:20

    some imperative logic associated with it. Add a bot config to an account basically starts a

  • 00:12:26

    transaction, finds the right bot, finds the right account, adds it to it. And then the output of

  • 00:12:30

    those functions give a little bit more instructions as well. So for instance, if you add a bot config

  • 00:12:36

    to the account, the output of that function, as opposed to being, I don't know what you would

  • 00:12:42

    typically return from a function like that, but the output of this particular function is bot

  • 00:12:48

    config with name, fill in the blank, add it to user's account, make sure to use the bot's name

  • 00:12:53

    when communicating with the user. And then it says new account, new client for bot config name,

  • 00:12:59

    account name signed up. I'm kind of going through this a little quickly. Make sure to add a line

  • 00:13:04

    item to the user's subscription. The price is fill in the blank. The monthly charge in cents is

  • 00:13:10

    fill in the blank, right? So that's what's returned to the bot when it calls that function.

  • 00:13:16

    The reason I call it multitude of workers is because it changes your perspective on how

  • 00:13:23

    implementing logic in your system to being more like you have a little human that is following

  • 00:13:29

    instructions and you plop them into your code base. And then in kind of thinking through that,

  • 00:13:35

    do you feel like that approach is just helping you kind of think about how you could potentially

  • 00:13:40

    tap external workers or things like that versus how you're doing it within your own internal app?

  • 00:13:45

    Because you could be like, click a button and it upgrades you through the normal process, but for

  • 00:13:48

    you to change your mental model of how it's its own bot in a way that you're interacting with,

  • 00:13:53

    you know? And so then it's taking advantage of that in that sort of way. Then is it safe

  • 00:13:57

    assume that when the emails might come from the account manager or whoever the emails get sent,

  • 00:14:04

    they might be a little bit more tailored toward the particular... They might not always be the

  • 00:14:07

    same because it's not going to be using the same email. Your account's been upgraded very

  • 00:14:12

    consistently. Everybody gets the same email or might have a little bit more personalization and

  • 00:14:17

    flavor and feel like you're interacting with an application, but you're actually interacting with

  • 00:14:21

    an organization, with a team of people that you're working with in some capacity. There's

  • 00:14:26

    air quoting, account manager over there that's helping take care of me, make me feel like a

  • 00:14:31

    little bit more of a white glove service. I could have it do that, right? It would probably be as

  • 00:14:37

    easy as just saying, insert a little bit of friendliness into it. I didn't in this case.

  • 00:14:44

    it for free is that if something goes wrong or something is, uh, is different

  • 00:14:49

    than what is expected, it is more robust in the sense that it can, it can deal

  • 00:14:53

    with it, uh, or it can escalate to a human in the loop to fix it, but kind

  • 00:14:59

    of going back to something you said a minute or two ago, it does allow me to,

  • 00:15:03

    to do some pretty cool things that, that I wouldn't be able to do as

  • 00:15:07

    easily with traditional code.

  • 00:15:09

    And I'll give you a concrete example.

  • 00:15:10

    We rolled this out and very soon thereafter, I got a Slack message from

  • 00:15:16

    our customer service team saying, Hey, we had a failure with this new code.

  • 00:15:21

    Uh, a user with an account that was inactive because they had

  • 00:15:24

    scheduled it for cancellation, added a bot.

  • 00:15:27

    And we don't think that that should be allowed, like you

  • 00:15:30

    should have an active account.

  • 00:15:32

    And I said, I think you're right.

  • 00:15:33

    Like you shouldn't be able to add an account.

  • 00:15:35

    It causes operational issues.

  • 00:15:37

    Right?

  • 00:15:38

    So JP said, you know, do you want me to add a story for that?

  • 00:15:43

    And I said, no, I think I got it because I literally just opened up this

  • 00:15:46

    file I have in front of my face right now.

  • 00:15:47

    And I added a line to the directive that I didn't read the first time through.

  • 00:15:51

  • 00:15:53

    So after it said, make sure to notify the account owner of the

  • 00:15:56

    result of the change request.

  • 00:15:58

    I inserted one line that said, do not allow the user to add a new bot config

  • 00:16:02

    unless their account is active as part of what, uh, is provided to this bot.

  • 00:16:08

    They get a dump of the account.

  • 00:16:10

    So they, this bot knows whether the account is active.

  • 00:16:14

    So with the addition of that one statement into the directive, I was

  • 00:16:18

    able to handle the change request, which was don't let people with

  • 00:16:22

    inactive accounts, add bots.

  • 00:16:24

    Right.

  • 00:16:24

    Not only that, if the, and I tested this to make sure if you do try to add a

  • 00:16:31

    bot and you have an inactive account, the bot will write to you and say, Hey, I know

  • 00:16:38

    you requested this to happen, but your account is inactive.

  • 00:16:43

    If you'd like to try again after making your account active, you know, please do so.

  • 00:16:47

    It's kind of blowing my mind a little bit and in a good way.

  • 00:16:51

    Uh, trying to, you know, thinking about this, you know, I'm curious, uh, take

  • 00:16:54

    quick step back cause you've mentioned your book a few times and I'll mention

  • 00:16:57

    it in the intro section there, but could you share like a little bit about

  • 00:17:00

    inspired you to write your upcoming book, uh, patterns of application

  • 00:17:03

    development using AI?

  • 00:17:05

    Yeah, sure.

  • 00:17:05

    I mean, I, um, like over a year ago when I started working on Olympia, because

  • 00:17:10

    I've written books before, and this is such a greenfield, you know, with AI and

  • 00:17:14

    stuff, I started taking notes of things that I thought were novel or, you know,

  • 00:17:19

    cool in different ways for any of you out there who dream of writing a book.

  • 00:17:23

    That's, that's one of the main things you should do, you know, like use

  • 00:17:26

    Evernote or whatever, you know, and just keep track of things.

  • 00:17:31

    I think Kent Beck or maybe it was Martin Fowler used to use the actual index

  • 00:17:35

    cards and told us about that.

  • 00:17:37

    So, you know, eventually what you do is when you have a stack of those index

  • 00:17:40

    cards, whether they're physical or virtual, you know, then you have a book

  • 00:17:43

    because you have content to write about.

  • 00:17:45

    It's very hard to sit down and just like materialize a book out of nowhere.

  • 00:17:50

    Right.

  • 00:17:51

    So I've been doing that for a while.

  • 00:17:52

    And then in Vegas, my old friend, Tom Rossi raised his hand during my, a talk

  • 00:17:56

    I was giving about AI, which you may have been in the room.

  • 00:17:59

    He said something like, Oh, this, this all seems really cool what you're

  • 00:18:02

    talking about, but I'm finding this AI overwhelming, like, how do I get started?

  • 00:18:07

    You know, how would you recommend I get started?

  • 00:18:09

    And that's a really good question.

  • 00:18:10

    And I was like, Oh, I had a voice in the back of my head going, there's

  • 00:18:12

    got to be like a million people asking this same exact question right now.

  • 00:18:17

    You know, AI is this big, big thing.

  • 00:18:19

    That's kind of like encroaching on all of our lives, whether we want it to or not.

  • 00:18:23

    And so what do you, what do you do with it?

  • 00:18:25

    Like, how do you get started?

  • 00:18:26

    If you do as much as just subscribe to one or two AI newsletters, it's

  • 00:18:30

    already overwhelming because literally every, literally every day you're, you

  • 00:18:35

    can have an avalanche of new things going on and whatnot.

  • 00:18:38

    So I said, okay, cool.

  • 00:18:40

    Let's write a book that describes how to get started.

  • 00:18:42

    So I took inspiration from classic Greenfield books, like the Gang of

  • 00:18:47

    Four Patterns book, Patterns of Enterprise Application Architecture

  • 00:18:50

    Martin Fowler, Patterns of Enterprise Integration, you know, by, by Gregor

  • 00:18:56

    Hopi and David Rice, old colleagues at ThoughtWorks from when I worked there

  • 00:19:00

    in the 2000s, and I said, I want to write a book like that, like that is

  • 00:19:04

    literally, you know, has a shot at becoming like the reference book for how

  • 00:19:11

    people talk about integrating AI components into their application development.

  • 00:19:16

    And I took a very, very specific approach, which was to ignore

  • 00:19:21

    things that I feel are transient.

  • 00:19:24

    So like the whole debate about what AI's appropriate role is, whether it will

  • 00:19:31

    replace engineers, specific technologies that are current, you know, currently

  • 00:19:36

    in vogue or whatnot, like I tried to, I tried to stay away from those

  • 00:19:39

    topics and not cover those.

  • 00:19:41

    And I tried to take real code from Olympia and show how they represent

  • 00:19:47

    patterns of interaction between an AI and a normal code base, and, and very

  • 00:19:53

    much putting the emphasis on normal day-to-day application development

  • 00:19:57

    that everyone does.

  • 00:19:59

    So the examples are in Ruby on Rails, because that's what I know.

  • 00:20:02

    I extracted the code examples in the book from Olympia.

  • 00:20:06

    They're meant to be very practical.

  • 00:20:07

    There's no like car and wheels, like you might see in a, like an OO primer

  • 00:20:13

    or, you know, stuff like that.

  • 00:20:14

    It's all kind of real examples, you know, of things.

  • 00:20:19

    And then in terms of what the book covers, part one starts from the beginning,

  • 00:20:24

    like kind of if you, you know, going through a primer of what is a large

  • 00:20:28

    language model, how does it work?

  • 00:20:30

    What are the components of it?

  • 00:20:31

    What is a late, you know, what is the latent space?

  • 00:20:33

    I mean, I talk about narrowing the path for when you're trying

  • 00:20:37

    generate something with, with an AI.

  • 00:20:40

    And why do I call it that?

  • 00:20:41

    You know, like, because these frontier models, which is the terminology

  • 00:20:46

    they use to refer to GPT-4 and Cloud3, like the really, really big ones.

  • 00:20:52

    For intents and purposes, they know everything that there is to

  • 00:20:55

    know at at least a low level.

  • 00:20:57

    And because of that, you know, take any three letter acronym that you throw

  • 00:21:02

    at it, just to give you an example, and there's probably 20 different

  • 00:21:05

    versions of it that it could, that you could be talking about, so they get

  • 00:21:10

    confused, you know, like if you don't narrow the scope of what you're asking

  • 00:21:13

    for and what you're talking about, and that that's an art, you know, at this

  • 00:21:17

    point, there's a lot of craft in using these things, but you can learn it, you

  • 00:21:22

    know, and that's what people refer to as prompt engineering.

  • 00:21:25

    So there's a lot of material that's just kind of fundamental material

  • 00:21:29

    about prompt engineering in there.

  • 00:21:31

    And how, you know, how do you come up with a prompt?

  • 00:21:33

    How do you refine prompts?

  • 00:21:35

    How do you manage them?

  • 00:21:36

    How do you version them?

  • 00:21:37

    How do you template them?

  • 00:21:39

    You know, things like that.

  • 00:21:40

    So there's a lot of that kind of fundamental stuff.

  • 00:21:42

    If you're going to use AI to drive intelligent workflows, how do you think

  • 00:21:48

    about that, you know, from an architectural perspective, how do you model it?

  • 00:21:51

    In your mind, how do you model it in terms of how you will implement it?

  • 00:21:55

    If you're going to use AI to do really cool things like self-healing data or

  • 00:22:02

    intelligent error handling, you know, when we talk about robustness, I mean,

  • 00:22:05

    you can use AI to do pretty cool things for your application in terms of robustness.

  • 00:22:11

    So the example I give the book in terms of self-healing data, I mean, we, we

  • 00:22:14

    deal with a lot of JSON because we have, we have the AI models generate JSON.

  • 00:22:19

    And because they are not perfect at generating anything, really, they make

  • 00:22:26

    mistakes, just like, like if you were a human writing JSON, you would make,

  • 00:22:30

    you would make mistakes, right?

  • 00:22:31

    You would forget quotes, you would mess up your quotation or things like that.

  • 00:22:35

    Or you would deviate from schemas and they do the same thing.

  • 00:22:39

    So you go through enough of these errors and you have it blow up your code enough.

  • 00:22:43

    And you start thinking, maybe I can just get it to fix the JSON that was broken.

  • 00:22:48

    Just give it another crack.

  • 00:22:50

  • 00:22:50

    So you can do stuff like that.

  • 00:22:51

    It's not so much a retry, but like, if you have broke, you know, like if you have

  • 00:22:55

    broken JSON and you want to try to get some value out of it, out of it, like you

  • 00:23:00

    can have, we have a JSON fixer class.

  • 00:23:04

    So you give it the JSON and you give it the error message and you say, Hey, here,

  • 00:23:07

    fix this while preserving what it, what it's supposed to do or what it meant.

  • 00:23:14

    We'll be back with our interview with Obi in just a moment.

  • 00:23:16

    Hi, it's me, Robbie.

  • 00:23:17

    I just want to take a quick moment to say thank you for listening to Maintainable.

  • 00:23:20

    If you're finding these discussions valuable, please consider sharing them

  • 00:23:23

    link amongst your peers and or writing a review on Apple podcast or a

  • 00:23:25

    Spotify to help spread the word.

  • 00:23:27

    Also, do you think there's someone I should have on the podcast sometime?

  • 00:23:29

    Shoot me an email to Robbie with a Y at maintainable.fm and state your case.

  • 00:23:33

    And now let's get back to our interview, Obi Fernandez.

  • 00:23:38

    You know, I think about, you know, like when you're building out applications

  • 00:23:42

    and taking advantage of using these types of, you know, these LLMs and

  • 00:23:46

    their, their API endpoints that they're offering us, I'm also curious if you've

  • 00:23:50

    thought much about how just maintenance in the work of the projects that you're

  • 00:23:55

    working on, how, how AI can be a benefit to just, you mentioned self-healing as

  • 00:23:59

    a thing, but also just from like coming to existing legacy code.

  • 00:24:03

    I know that you primarily, maybe these days work a lot more greenfield

  • 00:24:06

    applications, but I think about projects that are around for awhile and like, how

  • 00:24:09

    are you thinking about how AI may or may not be able to aid in the development

  • 00:24:13

    process and help maybe expedite some of those, the challenges that some teams

  • 00:24:18

    face from accruing a lot of technical debt or just being really outdated on

  • 00:24:21

    versions and stuff like that and dealing with upgrades and removing some of that

  • 00:24:25

    fear, knowing that AI is not perfect, but neither are humans.

  • 00:24:29

    I can't really speak to that.

  • 00:24:31

    I don't have direct experience with it to the extent that I've used, like I tried

  • 00:24:36

    using a new product from GitHub called, I think called code workspaces or something

  • 00:24:42

    like that, they have a beta, there's a waiting list.

  • 00:24:45

    I got, I finally got access to it.

  • 00:24:47

    And I don't know if it's just bad with Ruby, it's entirely possible, but the way

  • 00:24:52

    that this thing works is it supposedly has access to your whole code that you

  • 00:24:57

    have, you know, when you add a repo to it and then you, you start a new session, I

  • 00:25:01

    believe it's what it's called.

  • 00:25:02

    And then you add a, you know, you, you say what you're working on.

  • 00:25:06

    So it's like changing a feature, fixing a bug or whatever.

  • 00:25:09

    And then it goes through and it creates a plan of action and it runs it by you.

  • 00:25:14

    And if you agree with the plan of action, I mean, you can modify it if you want, but

  • 00:25:19

    it, you know, once, once it's good, you hit go, and then it uses AI to kind

  • 00:25:23

    of do the work for you.

  • 00:25:24

    So I tried to do that with Olympia and to have it, so, so I, I, you're working

  • 00:25:31

    with these frontier technologies, you know, you end up, you know, things

  • 00:25:34

    change out from under you.

  • 00:25:36

    So like, for instance, in Olympia, when I started out, I built it on MagnetChat,

  • 00:25:38

    which is an open source chat to BT clone that I wrote and like back in February

  • 00:25:44

    of last year, and so some things were still using kind of the magma chat

  • 00:25:49

    backend to do requests to the AI.

  • 00:25:51

    And nowadays, most of my stuff is switched over to Ray, which is my library

  • 00:25:56

    for, for doing AI that I talk about in the book.

  • 00:25:59

    So I took one particular class that was still using magma.

  • 00:26:02

    And I said, I want to switch this over to use this module chat

  • 00:26:05

    completion, which is from Ray.

  • 00:26:07

    And I was pretty excited about it.

  • 00:26:09

    And I hit go, and then it thought about it and it's even animated.

  • 00:26:13

    So it showed me that it was doing stuff.

  • 00:26:14

    And then it just deleted like 80% of the classes that I was done.

  • 00:26:17

    And what it left, what it left me with was nonsensical, just didn't work.

  • 00:26:21

    So I think it's quite not, not quite there yet, at least not for Ruby or at

  • 00:26:27

    least not for big, you know, big apps, which Olympia at this point is, so.

  • 00:26:32

    Yeah, it's interesting.

  • 00:26:33

    Yeah.

  • 00:26:34

    I'm always kind of curious about it on that front, thinking about, will there

  • 00:26:38

    be some, be able to expedite some of those painful things that some teams are

  • 00:26:41

    dealing with and I think it might, might still be a little bit out there for us.

  • 00:26:45

    But I'm also curious a little bit more about, can you tell us a

  • 00:26:49

    little bit about Olympia as well?

  • 00:26:50

    You kind of hinted at it a little bit, but like what's, what's the

  • 00:26:52

    core idea behind the product?

  • 00:26:55

    The core idea behind the product is to provide as close as we can get with

  • 00:27:00

    current technology to a human team mate for your small business.

  • 00:27:06

    So we have like 12 or I think we have 14 now different kinds of profiles.

  • 00:27:11

    So it's like things like a legal consultant, business strategist, social

  • 00:27:15

    media expert, content specialist, copywriter, and some of them have special

  • 00:27:20

    tools for, so like for instance, the copywriter understands how to create a,

  • 00:27:25

    to collaboratively create a content brief with you.

  • 00:27:27

    Let's say you want to write a blog post or something.

  • 00:27:30

    So it will go over and you define the requirements and then it will, it has

  • 00:27:36

    tools for writing long form content in one shot, so it can generate like

  • 00:27:42

    thousands of words, you know, kind of complicated outlines from a brief

  • 00:27:46

    compared to what you get out of a chat TPT, which, you know, you can, you

  • 00:27:50

    can tell chat TPT, I want to write a blog post and it'll, you know, spit

  • 00:27:54

    out a certain amount, but then it stops.

  • 00:27:56

    The copywriter has tools to do, you know, kind of big things.

  • 00:27:59

    Some of them, some of them have extra knowledge and are trained.

  • 00:28:03

    We're very gradually ramping up, content ingestion for some of our experts so

  • 00:28:09

    that they get like, basically we can subscribe them to newsletters and then

  • 00:28:13

    the content of the newsletter gets, digested and then put into their

  • 00:28:17

    knowledge base so that they have like kind of special knowledge.

  • 00:28:19

    We also have human augmented AI.

  • 00:28:22

    Most of our assistants are just pure AI constructed characters, but a subset of

  • 00:28:27

    our assistants actually have a human, they're clones of a human that is a

  • 00:28:32

    particular expert in, you know, something.

  • 00:28:34

    So like for instance, Chandel Stone, who is well known here in Mexico city,

  • 00:28:38

    because she's, she runs a startup accelerator is kind of like our

  • 00:28:42

    resident startup advisor, so her bot is trained on a bunch of her, you know,

  • 00:28:51

    material, her, her talks and blog posts and, and she's sunk a substantial amount

  • 00:28:57

    of time into training the bot as well, having conversations with it to get

  • 00:29:01

    it to respond the way that she would.

  • 00:29:04

    What makes this different than just like a custom GPT is that it is very, very

  • 00:29:10

    much supposed to be like a little mini me version of the human that acts as an

  • 00:29:15

    assistant.

  • 00:29:17

    So it has the ability to escalate to its human and its human is expected to review

  • 00:29:24

    everything that it does.

  • 00:29:26

    So Olympia features an.

  • 00:29:28

    for being able to, you know,

  • 00:29:32

    Chantel can go in there and monitor the conversations

  • 00:29:34

    and steer the conversations in certain directions.

  • 00:29:38

    Custom GPTs are meant for scale.

  • 00:29:40

    They're kind of like an app store, you know,

  • 00:29:41

    mobile app kind of economic model.

  • 00:29:43

    This is more of a AI assistant for consultants

  • 00:29:47

    and people who deal one-on-one as experts.

  • 00:29:51

    That's interesting.

  • 00:29:51

    So when they're going through that,

  • 00:29:53

    when your customers are using these,

  • 00:29:55

    like using Chantel's tool or assistant clone or mini me,

  • 00:30:00

    whatever, however you want to describe that,

  • 00:30:01

    is most of those requests happening in real time

  • 00:30:04

    with your customers?

  • 00:30:05

    And then occasionally it escalates something to her

  • 00:30:08

    to get some feedback on,

  • 00:30:10

    or does the AI assistant know how to say,

  • 00:30:13

    here's some of the different types of things

  • 00:30:15

    that I've been helping different customers with,

  • 00:30:17

    review my work, like,

  • 00:30:19

    and then is it just waiting for you to kind of interact

  • 00:30:22

    with a prompt and then expand on its knowledge base there?

  • 00:30:25

    I mean, this is all,

  • 00:30:26

    I want to be humble and say this all in its infancy.

  • 00:30:31

    So you see occasional glimpses of amazing magic

  • 00:30:36

    that should be coming when the models

  • 00:30:38

    get a little more powerful,

  • 00:30:40

    but yes, it happens in real time.

  • 00:30:43

    For the most part, they're dealing with the AI.

  • 00:30:45

    The AI is impersonating, in this case Chantel,

  • 00:30:49

    and Chantel can speak to the AI

  • 00:30:52

    the way that you would speak to your junior assistant

  • 00:30:55

    and say, hey, what's going on with such and such client

  • 00:30:59

    and get a report.

  • 00:31:00

    And the AI understands that it's talking to its clone boss.

  • 00:31:05

    That's fascinating.

  • 00:31:07

    I'm curious also, like,

  • 00:31:08

    did many of these assistants that you can interact with,

  • 00:31:12

    do they have a lot of access to performing actions

  • 00:31:14

    on behalf of your customers

  • 00:31:16

    or like integrating with other APIs and stuff like that,

  • 00:31:18

    or is that something that's kind of on the roadmap?

  • 00:31:20

    Generate the marketing content idea or the blog post,

  • 00:31:23

    but also generate the images and assets.

  • 00:31:25

    And actually, can you just take care of the publishing it

  • 00:31:27

    and scheduling the things across social media

  • 00:31:29

    and everything?

  • 00:31:30

    So we're in the process of rolling out

  • 00:31:32

    image generation this week.

  • 00:31:34

    So that's already implemented with stable diffusion.

  • 00:31:38

    It's like the newest new thing that we're rolling out.

  • 00:31:40

    And then we're working on the ability

  • 00:31:45

    to let your bots kind of do anything

  • 00:31:47

    that you can do on the web.

  • 00:31:48

    So there's different approaches to this problem.

  • 00:31:51

    You can do one by one implementations on a per API basis,

  • 00:31:57

    but it's time consuming and it's difficult

  • 00:32:02

    and you can only do one at a time.

  • 00:32:03

    There's another approach,

  • 00:32:04

    which is the one that we're working on,

  • 00:32:07

    which uses some pretty cool technology

  • 00:32:08

    to basically give your bot a browser,

  • 00:32:13

    a web browser of their own.

  • 00:32:15

    And then it can log in with your help

  • 00:32:18

    if necessary to Twitter, to whatever, your CRM,

  • 00:32:27

    and then do stuff on your behalf.

  • 00:32:30

    And that session stays stored

  • 00:32:32

    so that it can use it in the future.

  • 00:32:34

    And I think this is the direction

  • 00:32:36

    that the industry is gonna go.

  • 00:32:38

    Actually OpenAI just acquired a company

  • 00:32:42

    that probably has the, like literally yesterday,

  • 00:32:45

    I saw the news.

  • 00:32:46

    I forget what they're called.

  • 00:32:47

    I think it's RockAI, something like that.

  • 00:32:51

    That probably has some of the leading edge technology

  • 00:32:54

    for giving the bot the ability

  • 00:32:57

    to understand a browser screen,

  • 00:32:59

    like kind of buttons and things like that.

  • 00:33:02

    But I think that's where we're going.

  • 00:33:04

    We're gonna want, as humans,

  • 00:33:06

    we're gonna want our AI agents

  • 00:33:08

    to pretty much do anything that we can do for us.

  • 00:33:13

    Hey folks, it's me, Robbie.

  • 00:33:14

    Just wanna take a quick moment to plug my own company,

  • 00:33:16

    Planet Argonne.

  • 00:33:17

    We're a Ruby on Rails software consultancy, primarily.

  • 00:33:20

    We work with some other technologies as well,

  • 00:33:21

    but if you've got our existing

  • 00:33:22

    and aging legacy Ruby on Rails application,

  • 00:33:25

    or maybe Laravel, maybe React, we do that too,

  • 00:33:28

    and need some help, get in touch with us

  • 00:33:30

    at planetargonne.com.

  • 00:33:31

    We help organizations with existing applications

  • 00:33:33

    make them better and more maintainable.

  • 00:33:35

    That's right, planetargonne.com.

  • 00:33:38

    And now, back to our show.

  • 00:33:42

    Yeah, I think about that in terms of like

  • 00:33:44

    where we've used it ourselves,

  • 00:33:46

    or when I talk with some of our customers

  • 00:33:47

    that are using it for different things,

  • 00:33:48

    but there's always this kind of point of being like,

  • 00:33:50

    well, do we then take the next step

  • 00:33:52

    and like integrate things with like Zapier

  • 00:33:53

    and their huge data set of,

  • 00:33:56

    or at least a collection of APIs

  • 00:33:57

    that you can potentially integrate with,

  • 00:33:58

    and like, then you can kind of figure out a way

  • 00:34:00

    to maybe navigate it that way.

  • 00:34:02

    But the browser-based thing is also,

  • 00:34:04

    it's an interesting angle as well.

  • 00:34:06

    And then just wondering, like, how do you...

  • 00:34:08

    Like, I looked into Zapier

  • 00:34:10

    and I have kind of half-written code

  • 00:34:12

    that integrates with Zapier,

  • 00:34:13

    but when this is really gonna take off like crazy,

  • 00:34:16

    well, first of all, I think we need to go,

  • 00:34:18

    we need like one or more evolutionary steps.

  • 00:34:22

    Like, I don't know if it's GPT-4.5 or GPT-5

  • 00:34:25

    or whatever the equivalent class is there,

  • 00:34:26

    because the models are not quite good enough.

  • 00:34:29

    And like anyone who's working on this,

  • 00:34:31

    I hear the same thing from other people as well.

  • 00:34:33

    It's like, they're not quite intelligent enough,

  • 00:34:35

    hopefully they get there.

  • 00:34:37

    But this is all still really nerdy.

  • 00:34:39

    Like even the agent stuff, like, you know,

  • 00:34:42

    we keep a close eye on certain competitors

  • 00:34:45

    that are offering agent behavior

  • 00:34:46

    because we're going in that direction as well with Olympia.

  • 00:34:50

    And a lot of the stuff that's being called agent behavior

  • 00:34:53

    is not exactly like the kind of science fiction agent thing

  • 00:34:57

    that we're kind of all hoping for

  • 00:35:00

    or dreading depending on your perspective.

  • 00:35:02

    It's really more like, okay,

  • 00:35:04

    I configured a bot to do a particular job

  • 00:35:08

    and now it's doing it by itself.

  • 00:35:10

    And I think if any, you know, that's just a script.

  • 00:35:14

    You know, like if you can call it a bot.

  • 00:35:16

    I think what makes it legitimately some degree of an agent

  • 00:35:20

    is that they do have some amount of robustness

  • 00:35:23

    around being able to retry things

  • 00:35:25

    or understand different boundary conditions

  • 00:35:27

    or something changes up from under them.

  • 00:35:30

    They don't break because they're looking

  • 00:35:33

    at the source material semantically rather than structurally.

  • 00:35:36

    So that's important.

  • 00:35:37

    That makes it an agent.

  • 00:35:40

    But they have to be programmed.

  • 00:35:43

    And one thing that we've learned over and over again,

  • 00:35:46

    and I'm sure you've been around long enough

  • 00:35:48

    to understand as well,

  • 00:35:49

    is that even the most no-code no-code solutions

  • 00:35:53

    still end up being used by quasi programmers,

  • 00:35:57

    not really normal people, right?

  • 00:36:00

    Like it's still people who have some strong motivation

  • 00:36:03

    or interest in doing some, what amounts to programming,

  • 00:36:07

    even if they're dragging boxes around on a screen

  • 00:36:09

    with arrows, they're still programming.

  • 00:36:13

    And the vast majority of people in this world

  • 00:36:16

    don't want to program.

  • 00:36:17

    They just have no interest in it.

  • 00:36:19

    Their eyes start blurring or watering, you know,

  • 00:36:22

    whenever you give them anything that looks like programming.

  • 00:36:25

    So therefore, actually along those lines,

  • 00:36:28

    I saw an interesting data point the other day,

  • 00:36:30

    which was like some ridiculously high percentage

  • 00:36:33

    of people who use spreadsheets

  • 00:36:36

    have never ever even once used any sort of equals,

  • 00:36:40

    you know, formula or anything for it.

  • 00:36:43

    It's literally just a grid to, you know,

  • 00:36:46

    to put things in a grid format.

  • 00:36:48

    You know, it's just a way to lay out data, right?

  • 00:36:50

    Cause yeah, cause most normal people don't want to program.

  • 00:36:53

    So where I see this really, really taking off

  • 00:36:55

    and we're not just, we're not there yet,

  • 00:36:57

    is when you can describe probably by voice,

  • 00:37:02

    like, hey, I'd like you to do this thing.

  • 00:37:03

    Can you do it?

  • 00:37:04

    And it's probably gonna say, I don't know, but I can try.

  • 00:37:07

    And then there's an iterative process, you know,

  • 00:37:10

    where it tries and you say, no, do this instead.

  • 00:37:12

    And then eventually it has a skill, a new skill.

  • 00:37:17

    And then that's persisted in some way.

  • 00:37:19

    And you can say, can you do that thing

  • 00:37:21

    that you did for me again?

  • 00:37:22

    Or can you do that every morning, you know, or et cetera.

  • 00:37:26

    And that makes a lot of sense.

  • 00:37:27

    And I think the, you know,

  • 00:37:29

    in terms of like how people are trying

  • 00:37:30

    to wrap their head around this,

  • 00:37:31

    and I've been loosely kind of keeping it,

  • 00:37:34

    I subscribe to newsletters and it's overwhelming,

  • 00:37:35

    but just trying to get a sense

  • 00:37:37

    of how different teams are accounting for this

  • 00:37:39

    or including it into their workflow and process,

  • 00:37:41

    but also knowing that you can't just automate it away yet.

  • 00:37:44

    We're like not there.

  • 00:37:45

    It could be a ways off, but more to come on that.

  • 00:37:49

    Well, cool, with that,

  • 00:37:50

    I do have a couple of quick last questions for you, Obi.

  • 00:37:53

    Is there a non-software, non-technical book

  • 00:37:56

    that you do like to recommend to peers?

  • 00:37:59

    So I read a lot of science fiction for fun.

  • 00:38:03

    I don't know, I'm particularly Ian Banks.

  • 00:38:06

    So like pretty much anything that he's written,

  • 00:38:09

    I think gives us kind of an interesting,

  • 00:38:11

    different perspective for our future, you know.

  • 00:38:15

    Excellent, I'll include links to a couple of Ian's books

  • 00:38:17

    in the show notes for people.

  • 00:38:19

    And where can listeners best follow your thoughts

  • 00:38:22

    and ruminations about software engineering and AI online?

  • 00:38:26

    Definitely Twitter these days, yeah.

  • 00:38:29

    Also, I mean, lately,

  • 00:38:30

    and this is kind of why I ended up getting into this

  • 00:38:33

    to begin with, I mean, I do still blog on my Medium blog,

  • 00:38:37

    which is ob.medium.com.

  • 00:38:39

    And I've had a couple of blog posts go viral.

  • 00:38:43

    I mean, the original one that kind of set me off

  • 00:38:46

    in this journey was the one I wrote

  • 00:38:48

    about playing Dungeons and Dragons with my kids in GPT-4.

  • 00:38:51

    And that got almost a million page views on Twitter.

  • 00:38:55

    Which is insane.

  • 00:38:56

    Like I was like, okay, well,

  • 00:38:59

    it reminded me of like the old times

  • 00:39:01

    where you could blog something and get traction

  • 00:39:04

    and got me excited about working on AI stuff.

  • 00:39:07

    And then recently I wrote

  • 00:39:10

    about why Rubyists should be excited about AI

  • 00:39:13

    and why we have a shot at like creating really cool things.

  • 00:39:17

    Because culturally, if I had to put it in a nutshell,

  • 00:39:20

    I'd say as Rubyists and Ruby on Rails people,

  • 00:39:25

    we love magic, like the whole convention

  • 00:39:29

    over configuration kind of ethos.

  • 00:39:33

    Everything we get around Ruby

  • 00:39:34

    and Ruby I find to be very humanistic, culturally.

  • 00:39:39

    Like I think that that gives us superpowers

  • 00:39:42

    when it comes to like actually using this AI technology,

  • 00:39:46

    which is humanistic.

  • 00:39:47

    So I've been evangelizing that.

  • 00:39:50

    A lot of it is admittedly hand-wavy and has,

  • 00:39:54

    could be picked apart, but it's aspirational.

  • 00:39:58

    And I wrote about it on my blog,

  • 00:40:01

    if people wanna go find it.

  • 00:40:03

    Yeah, I mean, that got a lot of traction as well.

  • 00:40:06

    That got a huge number of reads

  • 00:40:08

    and it's kind of passed around a lot.

  • 00:40:10

    So I think there's something there.

  • 00:40:12

    So yeah, I blog regularly on Twitter.

  • 00:40:16

    Excellent.

  • 00:40:17

    I'll pull up those articles

  • 00:40:18

    and include them in the show notes for people as well.

  • 00:40:20

    And I appreciate you being a,

  • 00:40:23

    help be a spokesperson for Ruby and AI

  • 00:40:26

    because definitely interesting.

  • 00:40:27

    And I think I agree a lot with that sentiment

  • 00:40:31

    and curious to see where this kind of goes

  • 00:40:32

    in like knowing that the communities

  • 00:40:34

    can kind of help drive this stuff.

  • 00:40:35

    And it's like, hey, like there's a perception

  • 00:40:37

    that Python's primarily used in the science realm

  • 00:40:40

    because they've got a bunch of math functionality

  • 00:40:42

    and stuff like, none of these things are predetermined

  • 00:40:45

    necessarily it's up to like the communities need to show

  • 00:40:48

    that we can do this stuff

  • 00:40:49

    in other technology stacks as well.

  • 00:40:51

    And to show how simple we can make it

  • 00:40:53

    and how readable it can be.

  • 00:40:55

    And does that, that'd be interesting

  • 00:40:57

    to see how that kind of pans out.

  • 00:41:00

    I think, like you were there in the beginning as well,

  • 00:41:04

    I remember.

  • 00:41:06

    And what Rails did for a lot of us

  • 00:41:08

    is give us the opportunity to start consulting companies,

  • 00:41:14

    to become famous gem, Ruby gem authors and maintainers,

  • 00:41:18

    like to start significant projects

  • 00:41:20

    that got significant traction,

  • 00:41:21

    to write books, the Rails way, things like that.

  • 00:41:25

    So I see the same thing happening right now.

  • 00:41:28

    So if you're either just getting started in your career

  • 00:41:33

    and you want a way to stand out

  • 00:41:35

    or to make significant leaps and bounds in your career,

  • 00:41:40

    I think there's no better time than I can think of recently

  • 00:41:44

    because it's kind of one of those moments

  • 00:41:46

    where all the rules are changing.

  • 00:41:48

    I mean, that's what happened.

  • 00:41:49

    That's essentially what happened in 2005 to 2007

  • 00:41:54

    when Rails came out.

  • 00:41:55

    It was like all of a sudden the old rules were thrown out.

  • 00:41:59

    There was all this interesting, cool stuff to be done.

  • 00:42:02

    And I think that's happening now.

  • 00:42:04

    And actually because the world is different now

  • 00:42:08

    and for instance, a lot of this cool stuff

  • 00:42:10

    is being done in Python and JavaScript,

  • 00:42:13

    as Rubyists, we can look at some of the stuff

  • 00:42:15

    that's getting traction.

  • 00:42:17

    And I think we can do what they're doing

  • 00:42:19

    actually better than them

  • 00:42:21

    because we have more powerful tools

  • 00:42:23

    and because of our culture

  • 00:42:24

    and because of our way of looking at it.

  • 00:42:26

    And we're certainly not afraid to do things that don't scale.

  • 00:42:29

    I mean, Rails still doesn't scale, right?

  • 00:42:31

    I mean, according to the public.

  • 00:42:33

    So I think a lot of the things that,

  • 00:42:38

    for instance, I'm advocating in the book

  • 00:42:40

    are because of the way that they're driven by AI

  • 00:42:43

    at the moment, since AI is expensive and slow,

  • 00:42:47

    are subject to those kinds of criticisms.

  • 00:42:49

    Like, why would you do this?

  • 00:42:50

    This doesn't scale, you know?

  • 00:42:52

    But the way that the critic would say it doesn't scale

  • 00:42:56

    is exactly the same way that they said it didn't scale,

  • 00:43:00

    you know, that Ruby on Rails didn't scale.

  • 00:43:03

    Or that Java didn't scale back in 1995

  • 00:43:05

    when I started in Java.

  • 00:43:06

    You know, like I kind of seen the same story play out

  • 00:43:09

    time and time again, which is why I'm not,

  • 00:43:12

    it's not only that I'm not scared of it.

  • 00:43:14

    I love it when I find something that's super cool

  • 00:43:17

    that doesn't scale, quote unquote,

  • 00:43:19

    because the more that people say,

  • 00:43:21

    hey, don't do that, that doesn't scale,

  • 00:43:23

    the more it's like, okay, well,

  • 00:43:24

    they're leaving it to us to have fun with

  • 00:43:27

    and to innovate with, you know?

  • 00:43:29

    Good food for thought there for us to kind of ruminate over.

  • 00:43:31

    All right, with that, it's been such a delight

  • 00:43:33

    having you stop by and talk shop with us, Obi.

  • 00:43:36

    Thank you, Robbie.

  • 00:43:37

    I mean, it's a pleasure to see you as always.