Episode 112

Carmine Paolino on RubyLLM, Chat with Work, and Building AI Products Solo

With Carmine Paolino,
March 28, 2026

What we talked about

Carmine Paolino is an AI builder and founder based in Berlin. He co-founded Freshflow to help supermarkets reduce food waste, built RubyLLM, an open source library that makes working with LLMs in Ruby feel simple and elegant, and is now building Chat with Work, a workplace knowledge assistant that connects tools like Google Drive and Slack so teams can find answers without guessing where information lives.

Show notes

Today I am joined by Carmine Paolino, an AI builder and founder based in Berlin. He has worked across machine learning, distributed systems, and full stack engineering, helped scale teams at OLX Group and Capgemini, and co founded Freshflow to help supermarkets reduce food waste. 

Full transcript

Federico Ramallo (00:00) Welcome back to the pre-vetted podcast where we spotlight extraordinary people and remarkable talent reshaping our world. Today we’re joined by Carmine Paolino. He’s an AI builder and founder based in Berlin. He has worked across machine learning, distributed systems and full stack engineering, help scale teams at OLX Group and Capgemini and co-founded Fresh Flow to help supermarkets reduce

food waste. Now he’s building new AI products. Outside of work, he produces electronic music and he’s a DJ in Berlin. Carmine welcome to the job.

Carmine (00:40) Hey, thank you for having me.

Federico Ramallo (00:42) I am honored to have you here today.

So tell us a little bit about how you got involved into engineering, software engineering.

Carmine (00:53) ⁓ yeah, that was a really long time ago. So when I was a kid, I remember that I wasn’t able to sit still. And one of the ways that, you know, my father tried was of course to put me in front of the TV, but that wasn’t very successful. I found the TV always a little bit boring because I couldn’t interact with it. And so…

What he tried next was computers. And at the time, we used to have a 386, which had a monochrome screen. So whenever you had to type and then delete the characters, they would actually fade out slowly. So it was really old technology. And he put me in front of that, and he taught me how to go to the folders in DOS and actually start some games. And from there,

I started to appreciate how amazing that is. It was kind of like a mind-blowing moment that I could type something and something would happen on a screen, like not totally different than how TV would work, right? So from that moment, I was hooked. And also thanks to the rest of my family, which is a bunch of engineers on my dad’s side.

they start to feed me with multiple games and like, here’s how to do some other things. I started to also like look into, well, so I think one time actually, I remember complaining to my uncle that…

I needed to type all these things and you know, I was like five or whatever like I was really really young And I needed to type all of these characters which was slow for me in order to get into the games, right? So then he told me like hey, you can actually do the exact same thing but type it once inside one file and then you can run that file and I was like what really? That’s insane. Yeah, it was a mind-blowing moment

Federico Ramallo (02:52) You

Carmine (02:52) So it

basically taught me how to do batch scripting, right? But I didn’t know what it was. I was just like five years old, right? So I did that and I found it amazing. So I started to do it for all my different games. And then I started to see that there was a thing called QBasic inside the computer.

but I couldn’t really grasp it fully. Like I could see this code and it was in English and it kind of looked like a super advanced version of batch scripting and DOS and I just couldn’t figure it out. So I kind of left it there.

And then a few years later, well, many years later, during high school, I started to install Linux on my computers because I started to buy all of these magazines for technology and they had demo disks of various games and sometimes software. So I remember there was SUSE Linux 7.0.

I think it had KDE 2 or something like that. So it looked really ancient, but also really cool because it was like Windows 95 kind of look to it. And I remember installing that.

and feeling like, my god, this is insane. So I can change the operating system of my computer, and this is free, and I can install it. That was another completely mind-blowing moment. So then from there, I started to look into other distributions.

And one that really stood out for me was Gen2 Linux, because you need to compile everything yourself. And it gives you a really nice guide in order to install it. So from that guide, I you know, I learned a few tricks. I learned a few things about how Linux works, right? You had to format your hard drive manually with a disk. You know, you had to extract some Tarji zip.

for the stage one and stage two, and then you could compile the stage two, and all of that was amazing. Just seeing the compiler work, it was such great feeling when I was young, because I was feeling like I could finally get into how these things really work. And that was such a powerful moment again. And so I started to help out Engine 2 Linux.

And I started to go into the Gen 2 forums and helping out there. And then suddenly I found that there was a group of people that were Italians and also including some people from Italian Switzerland. These were called The GECOs. and…

Basically, they were helping out even more people by organizing events and they had a special discussion server and CMS. So I started to also become a bit of a system administrator for them and doubling with Drupal and PHP and Apache and all of that stuff. And it was pretty interesting. But at the same time, since I was so involved in Gentoo Linux,

I really wanted to know how the emerge command would work. The emerge command is like the package manager of Gen2. So I just opened it up with Vim, and I noticed it was Python. And I was like, oh, that’s really cool. Maybe I should learn Python. So I downloaded the book of Python and printed it out, just like I printed out the Gen2 book.

and started reading this book and started to try out things. And that’s how I started to learn Python. Of course, in the meantime, I was learning a lot of bash scripting, also to help out other people in the forum. So it’s quite active. And

Yeah, through that, then I learned Python. I could write some more intricate things. Of course, I chose computer science. That was my passion all the time. I was using computers all the time, ⁓ whether it was for gaming or for installing Linux or for trying things out in a programming language. So it was kind of the obvious next step for me. And of course, the computer science course for me was like the best thing ever. Finally, was not high school,

which is a bunch of other stuff that I didn’t care about. It was finally my passion, you know, all the time. So that was really good. And also I have to say a bit of a shout out to the professors at the University of Bologna that I think they did. They had quite a lot of passion and they could share that and you could see it by how they were teaching their subjects.

Federico Ramallo (07:13) you

Carmine (07:31) Yeah, so this is how I got into it. actually I graduated from University of Bologna with a thesis in Distributed Systems. I also published that. But then when I went for my masters, I did it in Amsterdam.

And for that, I actually chose AI. And I chose AI because to me, that was the most interesting subject. Actually, the story is a little bit more complicated than that. I initially applied for Internet of Web Technology. And the reason is that I was doing, I did the Internet of Web Technology final course at University of Bologna. And that’s actually where I started to use Ruby. And that’s where I fell in love with Ruby.

And ⁓ yeah, so Ruby was not the language that we should have used, right? It was actually PHP. But I was on Acre News all the time, and I was seeing our Ruby and Rails. They were the hottest shit on the planet. And I decided that we should use that. I actually, like, we had a team of four.

Federico Ramallo (08:14) Really? Interesting.

Carmine (08:34) and the other three people, they all knew PHP. And I actually convinced them to use Ruby instead. I didn’t know much PHP, right? I just knew a little bit through Drupal before and a little bit through the course, but they were actually using it a lot more. But I managed to convince them. And we did this project and we had so much fun. And it was like Rails 2.3.2 or something like this. I know because I checked recently, actually.

Federico Ramallo (08:57) You

Carmine (08:58) and it was

⁓ Ruby 1.9 and it was such a pleasure to work with that I completely fell in love with it. Like the rest of the programming languages even thus far, you know, they didn’t give me that feeling. You know, I programmed a little bit in bash, in Python, in Java, in school, you know, in Scheme, which is kind of a Lisp thing, in Lisp dialect. And…

The joy that Ruby gave me was like so much better than anything else. It felt like finally somebody understood aesthetics and they put it inside programs that you can almost read like it is English.

So I fell in love with that. But then I decided when I moved to Amsterdam, because I did apply for Internet over Technology, that there was something else that was also really interesting. And maybe that was my chance to really grasp it by doing a course, which was, or an entire master track in AI.

was AI, think, one of the coolest things, already in 2011, right? Because I heard about deep learning at the time, and I started to look more and more into it, and it sounded super cool. So I did apply for that, got in, and then since then, I studied AI, did my master’s in that, and then I was a data scientist for many, years until 2021, when I then founded my first startup.

which you mentioned Freshflow. And then in 2024, I started to work on something new, which is what I’m working on right now.

Federico Ramallo (10:35) Before we get into that, I want to mention you dodge a bullet with PHP. I work a little bit with PHP. I worked before with ASP. Before it was ASP.NET, right? So it was similar to PHP, right? It was interpreted within the HTML file. It’s easy to get started compared to Ruby where you have to like, with Rails where you have to follow like the whole, you know, MVC structure and whatnot. So it’s tempting, you know, to get started with PHP and then…

Carmine (10:41) Hahaha

Federico Ramallo (11:04) you you get into a big, big problem, you know, three months further on the road, right? So, yeah, you definitely dodged a bullet and I’m glad to hear that you learned about Ruby instead. Yeah, I forgot to mention in your introduction about your current project. So let’s get into that. Tell us a little bit about what, you know, what AI system you built.

Carmine (11:17) Museum.

Federico Ramallo (11:31) it’s a workplace knowledge assistant, is that correct?

Carmine (11:36) Yeah, that’s correct. That’s correct. It’s called Chat with Work. And as it says in the name, you can chat with your work accounts.

So it’s kind of like a all-knowing co-worker that can search anywhere in all your files, in all your work accounts, maybe Slack, Notion, even GitHub at some point, Basecamp, whatever you have. I want to build a lot of integrations for all of these work tools because I think one of the biggest problems that we have at work right now, and I think also the Basecamp guys may agree, is that you have a lot of different tools and all of them

They have some information, but not all the information. And so you need to then search in which tools this information lives. And usually you have some mental model or where it should be. But oftentimes, you you start to, even if you’re the most organized person on the planet, you know, at certain points, you work with some people that may not fit that exact view. And so you need to then search things in places that you may not be able to, that were not obvious.

And in fact, that same exact thing happened to me in my previous job at Freshflow. And I was feeling like, man, I cannot find it. I’m the co-founder and CTO of this company. And then I asked one of the employees, and they actually told me exactly where it was and the information that I had. So I felt ashamed. And I felt like this can be done.

in a different way, perhaps, right? And ⁓ combined with the idea of, ⁓ LLMs can use tools, that idea formed in my head. I didn’t know that there were so many other startups that were trying to do the same also. And now looking back, I’m like, yeah, this is a very, very crowded market. But it also allowed me to be in the space where, you know,

Federico Ramallo (13:12) you

Carmine (13:23) I think there is the biggest advancements in technology. The speed at which everything is happening in AI and especially in LLMs is just completely insane. So I’m really glad that I’m doing this. And also through that, I created a library, which is called RubyLLM. And I needed to do that because…

I was starting to do also other projects using LLMs at the same time for the same reason. know, LLMs are just the coolest thing at the moment there. ⁓ think they are just as important as probably the internet. I think they’re going to have such a massive impact in our world that we’re going to see it ripple through our society so much.

I started to do other projects with that and I needed to have something that I could port between all these different projects and so that’s how I created RubyLLM. But getting back to chat with work, right now we are in ⁓ invite only alpha where basically I’m testing out everything

Federico Ramallo (14:15) Right.

Carmine (14:24) But it’s already quite functional. It can search in Google Drive. I’m about to launch the integration with Slack, which is already quite useful. yeah, really excited to see what people think about it.

Federico Ramallo (14:37) That’s amazing. I mean, I’m using RubyLLM on my project and it’s so elegantly built that I mean, we love it. Yeah. So thank you for those contributions. I think it’s an important contribution for the Ruby community.

Carmine (14:53) Thank you. I think the key there is to build stuff for yourself. Because I didn’t think about, I want to build it for a specific person and, you know, it has to work in that way, perhaps, but I’m not sure because I never lived that experience. I built it for me, right? And I wanted to have that kind of code inside my projects. And so it has to look…

Federico Ramallo (15:10) you

Carmine (15:16) like you’re almost not using it, right? So I think one of the most beautiful designs are the designs that disappear.

You the, never think about opening a door, you know, has a handle, right? And the handle has to have like a specific motion, right? And if you put the handle in the wrong direction, you may never open the door because the handle is in the way of the rest of the wall, you know, like all these different things that we don’t think about. This is, I think where design gets beautiful. and yeah, that’s kind of the sensibility that I wanted to bring, just because I wanted to use it myself.

Federico Ramallo (15:40) the

Right. Yeah, I I tried other LLM packages, if you like, but they were designed to follow a specific workflow. So it didn’t give you the freedom that RubyLLM gives you. Basically, it’s a building block and use it as you want, right? Here are the basic building blocks. It’s up to you how you put them together, right?

Carmine (16:15) Yeah. I think the key there was to build an interface on top of the already existing APIs and try to simplify the complicated things of those APIs in one single API that works for all of them. And it has a much nicer naming, in my opinion. It has all the little things taken care of without you having to remember

I don’t know, complicated data structures or complicated workflows or having to import classes that don’t make any sense. So, you know, there is no like human message class, for example, that exists, for example, in Lanchain. You know, you simply do a chat and then you ask something to the LLM on that chat instance in RubyLLM.

Federico Ramallo (17:00) Right.

Carmine (17:11) You don’t have to have knowledge of how to, I don’t know, create a new data structure for having an image inside a message. That’s something that we do ourselves, right? So if you want to do that, the syntax is ask, then with your prompt, and then there is a parameter called width, and you just add your file name in there. And it could also be a URL.

Federico Ramallo (17:34) the attachment.

Carmine (17:39) And we figure out if it’s a URL or if it’s a file. We download it if it needs to. We download it if it doesn’t need to. We figure out the MIME type, and we send it correctly without you having to remember that you have to convert it in base64 and figure out the MIME type yourself and put it inside a draconian, weird data structure. So yeah, because I want to focus on building the product. I don’t want to focus on what is OpenAI’s

Federico Ramallo (17:56) the

Right.

Carmine (18:06) structure for making a call with an image.

Federico Ramallo (18:10) Right, right, and having the chat model and what was the other one? Conversation. ⁓ I don’t remember the names right now, but it was very easy to expand those models and album logic, application logic into it. And then being able to, what we’ve done is we connected those chats to.

Carmine (18:17) Mm.

Federico Ramallo (18:29) we’re ⁓ running interviews and we are using LLMs to go through the transcript of the interviews, To assess whether that person, to summarize it, to assess whether that person is a good fit or not for the position, right? So we’re going through different stages of analysis of the interview, right?

And it was very easy to ⁓ make the chat and then make the connection with our interview object and say, this interview has this chat, so whatever you want to ask something, go to this chat. So we kind of very easily, just using Ray’s model, we keep the context of the conversation.

Carmine (19:10) That’s awesome. Yeah. That’s what it’s built for.

Federico Ramallo (19:14) Right. And in chat with work, are you using res backend, RubyLLM gem? ⁓ Can you tell us a little more of that without talking about anything confidential, right?

Carmine (19:21) Yeah.

No worries, I’m happy to share. So it’s mostly vanilla Rails, actually. So it’s Rails 8.1. I use Outwire actually for the streaming, which is also what I use for the chat UI in RubyLLM. And I found it to be very easy to use, very integrated with Rails as Rails is in general.

The only difference actually from vanilla rails is what I use for background jobs because I use a combination of Solid Q and async job. So I use Solid Q for the recurring jobs and then async job for all of the LLM jobs and anything that calls an API, including like, you know, sending emails and stuff like that. And the reason is that, well, with Solid Q you have a maximum number of workers.

Federico Ramallo (19:56) Right.

Carmine (20:13) And this maximum number of workers, these workers, when they’re all LLM chats and streaming tokens in the background, they’re really not doing anything else than simply waiting from WebSocket. So it is kind of like using too much, too many of your resources for not so much benefit. Instead, we have a beautiful

⁓ ecosystem of ⁓ async gems actually in Ruby and if people are familiar with Python and async.io for example or async await keywords in for example JavaScript and Node.js they know what I’m talking about so in Ruby we don’t need to specify async and await you know inside our code

In Ruby, we can simply write Ruby code just as before, but then whenever yields that IO, the Ruby interpreter knows already, and it will actually yield to the next fiber. So this is how we call them in Ruby. Each single concurrent piece of software. It’s not a thread.

Federico Ramallo (21:20) Yeah, it’s a

better than threats, Ruby approach, I call it. Yeah. Because it’s not threats. Yes, it’s another thing. Yeah.

Carmine (21:27) Exactly. So

a thread has a different context. So it needs to save its entire context from the CPU in memory, you know, so that ⁓ it can switch between threads because they’re preemptible, right? So it means that the kernel can actually say enough, now you can switch to this other thread, right? And that’s how you keep this, you know, facade of like everything is working at the same time.

in maybe even a single core CPU, right? Otherwise, you would need to wait for one thing to finish and then another thing. And so the kernel does that in order to have this fake parallelism ⁓ if it has only one core. If it has multiple cores, it’s true parallelism, but not in Ruby because we have the global interpreter lock in Ruby. And therefore,

Federico Ramallo (22:06) Right.

Carmine (22:16) ⁓ even like

It doesn’t fully use the amount of cores and CPUs that you have on your CPU. So how do we deal with that? Well, threads are still okay in general for doing network calls because they’re still preemptible. So the kernel actually switches between all the Ruby threads and everything works fine. But fibers are lot more efficient.

So there is ⁓ quite a gigantic speed up in terms of ⁓ context switch efficiency, the shared memory, not RAM necessarily, but the virtual memory that is used for each thread, I think it’s around eight megabytes in Ruby. And for fibers, I think it’s 24 kilobytes. So we’re talking about…

Federico Ramallo (23:07) Hahaha.

Carmine (23:07) completely

different orders of magnitude here. And that translates into faster requests and a lot more throughput and all of that. But the most important part is that there is another background job processor called async job that is built on top of fibers that actually doesn’t require a max worker setting. So that means that

You can potentially also hurt yourself really badly in terms of the amount of fibers at the same time that you’re running. But you can also set it very, very at a very large number and still be okay because the RAM requirements are pretty low. there are no… So the context switching happens within the Ruby process. So that’s why it’s really, really fast.

Federico Ramallo (23:36) You

Carmine (23:55) and it is collaborative, so each single fiber needs to yield to the other fibers. But when IO happens, know, Ruby is actually really good at knowing that because it knows it from the interpreter itself, and so it switches automatically to the next fiber. So it’s a beautiful thing that works really, really quickly. It doesn’t take much in order to switch thanks to…

all the interfaces and rails and how these things are built. So it’s kind of scalability for almost free. So this is the only change.

Federico Ramallo (24:27) Interesting. ⁓

it’s lower memory usage than Threads, lower memory usage than Solid Q, right? And for the use case of chats where you have these short lives async responses, you can have more async jobs running at the same time without affecting the performance of the web application.

Carmine (24:50) Yeah,

to make it less abstract, basically imagine what’s happening inside each one of these background jobs. So you have your block, like rubyllm.chat.ask, do chunk, and then you have inside that block, chunk.content, for example, right? Like you’re maybe sending it to your UI through Outwire. So what happens there is that ⁓ Ruby’s waiting for 99,

point, I don’t know how much, percent of the time, just to receive like the next token. Because for CPUs, time is a lot more stretched than for us, right? So we experience things in seconds, maybe sometimes your reaction times are, what, 100 milliseconds or something like this? In 100 milliseconds, the CPU is doing, I don’t know how many millions of calculations, if not.

probably billions of calculations, right? Like it’s an insane number. So all this time is just waiting around. That’s definitely not efficient, right? Instead with fibers, what’s happening is that it does the IO call of like, I’m waiting for IO. And as soon as it does that, the Ruby interpreter switches to the next fiber that needs to do something. So your CPU usage is still pretty low.

Federico Ramallo (25:46) the

Carmine (26:11) And it’s exactly the right amount of CPU usage that should be done, right? That is actually necessary for the computation. So it’s a beautiful concept also in that sense.

Federico Ramallo (26:23) It’s a, I love the word you use, beautiful concept. It’s a beautiful implementation. It’s a, you know, when you see it working, it’s like this, you know, music to your ears, right? It’s a, you know, you see the concert, you know, the, you know, metaphorical concert, right? But when you see it working, it’s so beautiful, right? ⁓

Carmine (26:43) Yeah, I’ve had the exact same epiphany when I saw the first time this kind of concept implemented in code and I saw it in C and I saw it in university, right? So in the network course, we actually had to implement a select poll loop, which is kind of similar to what’s happening inside, you know, a fiber implementation. So basically in C, you can have a loop

Federico Ramallo (26:55) Bye.

Carmine (27:10) across all of the different sockets that you’re listening from or, you know, sending data to. And the EPOL and now the IO U-Ring, which is a newer implementation of that in Linux, basically they are IO multiplexer system calls where you can feed multiple file descriptors in there. And file descriptors can also be not only just files that you open, but also sockets.

Federico Ramallo (27:38) Are

you all right?

Carmine (27:38) Right? Yeah.

So you can send and receive data from multiple files at the same time or multiple sockets at the same time. And it will only return when there is actually something to give you. So it’s waiting there. And it’s waiting at 0 % CPU. It’s not doing anything.

Federico Ramallo (27:55) Right.

Carmine (28:00) And then it just returns after that. And then you can process things and you can process, you know, very quickly because of the CPU and then just, you know, return to zero CPU usage and no, pretty much no, no other, you know, occupation of, of memory. don’t need to track of all of these file descriptors. Whenever you send data is basically going through the kernel and the kernel does the sending of the data synchronously. You know, it’s, it’s a beautiful, beautiful thing. So also.

You can configure Ruby to use IOU Ring in order to do IOU multiplexing as well and that changes the game as well. I think it’s through the Fiber scheduler. I may need to double check that.

Federico Ramallo (28:43) That’s very interesting. I mean, I’ve done calls to socket files, not files, virtual files on Linux. It’s amazing how that works. And you can do, I’ve done it with serial inputs from USB, RS232.

inputs and then I’ve done it with, there was something else I’ve done that was interesting. yeah, SSH socket forwarding. So you’re accessing an input that it’s on another computer. Of course it takes longer, right? But it simulates as if it was local, right? And it’s beautiful, yeah.

Carmine (29:07) Mmm.

Federico Ramallo (29:19) Very interesting. What you’re saying is that we’re using something similar here on async, right? With fibers.

Carmine (29:26) Yeah, so

my stack is basically like Vanilla Rails because I believe that Vanilla Rails is plenty. the rest is async job for background jobs. And actually, I’m not even using async ⁓ cable. I’m using the default cable implementation from Rails, ⁓ action cable.

Federico Ramallo (29:34) it

Right.

Carmine (29:54) ⁓ using Redis just because I found it to be a little bit more reliable at times and maybe that I need to you know investigate a little bit more and file an issue to be honest to Samo So not no shade to him or anything It’s just that you know this was the quickest way to to get something working and in production without trying to fiddle with it too much But it you know it’s pretty standard vanilla rails

And I have to say the performance is amazing. I’m using 0 % CPU pretty much at all times, even with multiple people talking to LLMs. So I’m really happy with the stack. Not only it’s beautiful, but it’s also super performant. And it handles I.O. really, really well thanks to Async. So fantastic.

Federico Ramallo (30:24) Hahaha

Amazing. So, yeah, I I agree that less is more for this type of use cases. Yeah. And for achieving high performance. I mean, the more higher you go on the framework, the easier it is to build stuff, but you also have a lot of overhead because they’re trying to cover all use cases, right? So, if you can go to the lower on the stack, you can gain a lot of…

performance, right?

Carmine (31:13) Yeah,

well, I actually have a bit of a take on this. So to me, it’s about the right level of complexity and abstraction that can get you to have really, really good performance without losing the human side. And I think it is a bit harder to achieve than most things. But I think in ⁓ Rails, we’re doing quite well. In Async, the API of Async,

is actually quite beautiful. You just have an async block, and then you create tasks, because it’s async do task, and then task dot, I don’t remember exactly how to call a task, but you can basically define a task, and it will start executing, and then you can wait it later with task.wait. I have some examples even on rubyllm.com for genetic workflows that use async.

I think what we need is to figure out exactly what is the right level of abstraction for things. It’s not necessarily that, you know, now we have like a higher level of abstraction, therefore, performance will be terrible. I think if we are able to figure out what is the intersection of the two and not make too many obstructions that are unnecessary.

but also have a good idea of what the human needs, I think we can get it right. And I think it’s kind of what we’re trying to do all the time in software engineering.

Federico Ramallo (32:43) Right, it’s finding that beautiful balance of all the trade-offs we have, all the beautiful tools that we have, right? Because if you go on performance-wise, then we will all be coding on C, right? But then the reasons we want to code in Ruby, know, there’s a trade-off of performance, but we can build software so much faster, right? And then if you go to a higher level, I used to work with four generation coding language, is a…

Carmine (32:46) Yeah.

Yeah.

Federico Ramallo (33:12) no code, low code frameworks, you know, from, I don’t know, 10 years ago or 20. you know, you have this high level of framework that, you know, you have so much complexity that you lose a lot of performance, right?

Carmine (33:31) Yeah. I also think that we should generally skew or I prefer to skew towards something that is readable and is beautiful for the human rather than performant. And I think that’s probably very well accepted in the Ruby community. but I’ve seen code that is unbelievably horrible. That will work extremely well.

And yet, I think that the amount of time that we spend reviewing this code is way more expensive than the amount of time that that code, generally speaking, at least for web applications, I know that there are other things that need to work really, really quickly, like game engines, anything that is super low level in the system, like kernels. You don’t want to make a kernel in Ruby. It actually wouldn’t work.

Federico Ramallo (34:21) You

Carmine (34:25) But when you’re doing something that doesn’t require necessarily that level of performance at all times, definitely prefer the readability over everything else.

Federico Ramallo (34:37) Right, yeah, I completely agree. I used to write this obscure code that was so compact, beautiful, and whatnot. And then I would have to review it a month or two months later. And I would ask, who was the monster that wrote this code? And then I would check with the hit blame, it was me. So yeah.

Carmine (34:52) But

You probably are really clever when you made it, right? That’s a beautiful thing. They make a code golf competition because of that. It’s a beautiful feeling. Yeah.

Federico Ramallo (35:03) Yeah, yeah, yeah.

Yeah, I mean, and you feel so great, you know? Yeah,

yeah, yeah. You feel so great, but then you realize you’re shooting yourself to the foot. yeah.

Carmine (35:15) Yeah,

yeah. And sometimes the simplicity is really where it’s at. And it is also surprisingly complex to do simple things, right? Who was the one who said that? I think it was the author of the Petit Prince, the small prince that said, perfection is achieved not when…

there’s nothing more to add, but there is nothing more to take away. And I think that that’s so beautiful. That’s exactly, I think, the type of aesthetic that the Ruby community has, that the Ruby language has, that makes me come back even after 15 years.

Federico Ramallo (35:41) Right.

Right, right. Yeah, I mean, you can have some love interest with other languages here and there, but then you come back to your true love because you realize how beautiful it is to call it Ruby, right?

Carmine (36:09) Yeah, exactly.

Federico Ramallo (36:11) Amazing. So tell us what is the coolest use case of Chat with Work.

Carmine (36:18) the coolest. I don’t know. think the users will probably do a better job at finding what’s the coolest. But I can tell you a couple that are pretty interesting. using it for onboarding, for example, it’s a big one because oftentimes in onboarding, the people that come in in a company, they start to ask a lot of questions, or at least they want to ask a lot of questions. And oftentimes they feel like…

I don’t want to disturb the new people. I’m new here. I want to make the best impression. But then they delve into the documentation. Maybe the documentation is too long and complicated. Or maybe there is none. There’s no documentation. There’s only code. And all this code is maybe without comments. So there is a lot of problems during onboarding that are simply solved by having like,

Federico Ramallo (36:53) Thank

Carmine (37:03) a co-worker that never complains and never goes to your bus and says how annoying you are because you ask too many questions. So I think Chatquinworks is exactly that, right? You can ask whatever questions you want, as many as you want them. you can also ask questions that you may find, that you may think that they would be a little bit stupid or like people may think that, why do you even ask this question? There’s no problem with that.

Federico Ramallo (37:09) Ha ha ha

Carmine (37:30) So I think that’s one of the use cases that I’m pretty excited about and You know pretty excited to see the companies that are gonna use it for that people that told me that they used it for Tax purposes so to figure out What they have to pay to the government, you know, because it can go and search through all of your receipts and

Federico Ramallo (37:46) you

Carmine (37:49) I will give you then even tables if you want to, they can be translated into CSV and so all of these use cases, I even use it myself actually for that. One use case that I found so unbelievably mind-blowing was to read some contracts and by the way contracts that were like 300 pages, okay? So not stuff that were easy to read or easy to follow or anything.

Federico Ramallo (38:09) Wow.

Carmine (38:14) in order to find certain information. Especially being a founder of a company, I see a couple of contracts like that. And, you know, it’s so useful to have that information in like a couple of minutes at the maximum, you know, even a couple of seconds, most of the time.

Federico Ramallo (38:34) Right.

And it keeps that context stored so you can ask further down the road. Go back to that contract and ask another question.

Carmine (38:41) Exactly.

Exactly, exactly. And then it can also cross-reference things within all of your other files or work accounts. So, yeah, I found it useful also for myself.

Federico Ramallo (38:59) Amazing. the chat with work is it’s a conversational agent. Are you planning to add some workflow automation? Can it send emails on your behalf?

Carmine (39:11) So every chat that you have in Chat with Work runs in the background anyway, right? Because it’s a background job in Rails. So you could fire off like a complicated query with like 15 different things to have. And it actually has a to-do tool in order to keep track of all of the things that it needs to do. And so it actually writes it to-dos for itself and checks it off whenever it’s done. So it has that already.

⁓ And you can close your laptop, close your phone, switch applications totally fine. I’ve noticed that with ChatGPT and Cloud sometimes, you have to keep the chats running, at least that was the case back in the day. I think now they’re doing it slightly better. Otherwise, it wouldn’t save the chat if there was no client actually connected at the time. So that’s the workflow.

Federico Ramallo (39:52) Bye.

that’s bad.

Carmine (40:00) let’s say parts, in terms of sending emails, not yet. It’s something that I really want to implement soon. It will come out when I will integrate also Gmail and Google Calendar, which I think is a really good addition, because I know that a lot of people want to check their emails really quickly and respond in a really professional manner. And that takes a long time. Or do a new email based on whatever work context they have.

And I want to also add another feature pretty soon, which will be basically a crone job. you can ask the you can ask chat with work to create like a new thing that it needs to do at a specific time and it will do it by itself. So we’ll spawn a new chat and it will do that thing. And I think it would be pretty cool when, for example, every morning

you can ask it to go through the things that you have to do today in your calendar and you know, look at your emails, maybe the most recent ones and look at something in JIRA, for example, that is assigned to you and something else on Google Drive and then give you like a summary of the day, for example, and then like clear out your, I don’t know, Google tasks or todoist and put down like

this is what you need to do today. Stuff like that, I think, will be super powerful. unfortunately, right now, it’s all in my head. But I really want to have this because I want to have it also for myself.

Federico Ramallo (41:24) Right.

Right, right, because you have all the potential to do that, right? You have the LLM, you have the integration, so it’s just connecting with the email, right?

Carmine (41:44) Yeah, exactly. The beauty of Chat with Work is that the core system is pretty solid. You just need to add new integrations and then the value just skyrockets. The more integrations you add, the more it’s useful. For example, I use Todoist for my to-dos. And one of the things that I find really annoying is sometimes go through my today

Federico Ramallo (41:45) with Jim.

Carmine (42:13) List of to-do’s and clear it out especially given the new direction that I want to take you know today on the next week, right and because oftentimes, you know when I don’t think I’m gonna fit that to do I Put it to the next day right and by postponing it and then have these days with like 20 to-do’s that don’t make any sense and they are not aligned to the direction So it would be nice to have an AI that could go through all of those

Federico Ramallo (42:38) the

Carmine (42:41) I could tell, here’s the direction that I want to have this week or like today, right? And find me the to-dos that are about that and put them into my today list and prioritize them correctly. I think having something like this combined with it knows what you’re working on. It can search things. It can see your emails. It can see your calendar. I think it would be just mind blowing.

Federico Ramallo (43:07) Amazing, I’m looking forward to what you take, work with Chat Next, because Chat with Work Next, because I think that’s going to be amazing. I think it’s important that you build the core first, and then you start adding more integration. think that approach makes more sense for me.

Carmine (43:24) Yeah, right now it’s free actually, so if people want to try it out, they can just go to the website, sign up for the waitlist, and I can give an account pretty quickly.

Federico Ramallo (43:35) Great, great, yeah, I’d love to try it out. ⁓ So we’re running out of time. I truly appreciated you being here today. Any final remarks before we wrap it up?

Carmine (43:40) Sounds good.

I want to say that I think Ruby has been a little bit slept on recently. I think it’s just picking up again thanks to know Rails 8, even Rails 7, know, Artwire and I think it deserves a second look if people haven’t tried Ruby, Rails and I think this is the right time to come back in because

Honestly, the ecosystem is great. The community has been amazing. It’s been super supportive all the time. Just really great people that they just want to, you know, see new cool things happen and make new cool things. You know, it’s just a community of builders that they do things in a very specific and crafty way. And yeah, I think it’s also it has the tools to also do AI apps.

So you’re not left behind So why not give it a try?

Federico Ramallo (44:48) Yeah, I’ve been amazed by how much the community, I’ve been very involved in the SFRuby community, has been picked up the last year, amazing. with the tool you built, RubyLLM, that allow us to now integrate more with LLM agents. Now Rails 8.1 has ⁓ AI first features as well, and it’s catching up towards that. And I think that with those two,

see much more cooler projects coming up in the next year or so.

Carmine (45:20) I

bet.

Federico Ramallo (45:23) Carmine, thank you very much for joining us today.

Carmine (45:26) Thank you very much for having me. It’s been a pleasure.

Presented by Density Labs. We help mid-market companies ship AI to production, not demos. New: Agentic AI, explained from production — what an AI agent actually is, and when a workflow ships instead.
Don't miss it

Listen on your favorite app