The Laravel Podcast brings you Laravel and PHP development news and discussion.
Matt Stauffer:
Hey and welcome back to Laravel Podcast Season 7. I'm your host Matt Stauffer, CEO of Tighten, and in this season I'll be joined every episode by a member of the Laravel team. Today we are talking to Joe Tannenbaum, the engineering team lead for Open Source at Laravel. Joe, can you say hi, tell us a little about yourself and your role at Laravel.
Joe Tannenbaum:
Sure. As you said, my name is Joe Tannenbaum. I'm the Engineering Team Lead for open source. And my day-to-day just consists of making sure our repos are up to date, PRs are being handled, issues are being handled, and then innovating on new features that we want to add to our packages and projects.
Matt Stauffer:
Yeah, I didn't tell you I was going to be asking this, when I so I maintain ish Valet, I used to really spend a lot of time on it because I've HERD, Valet is just getting like a little bit less attention, which is fine. But at some point Taylor was like, hey, we have some folks who are going to start like looking at our issues and pull requests and everything like that. So how much of maintaining, you know, the issues and discussions and pull requests and all those kind of things. How much is that as your team and how much is Taylor still involved in?
Are you mainly responsible for those things at this point?
Joe Tannenbaum:
For the primary framework, for the main framework, Taylor is still very actively involved and basically the point person on all PRs. For everything else, we have Muir who does triage for us and he does a lot of issue triage and makes sure that our numbers are good and that we're maintaining the state that we, right, exactly.
Matt Stauffer:
Yeah, good merge time and everything like that. Yeah.
Joe Tannenbaum:
So he's very key to the whole process. And then everything else, like our team reviews the PRs, handles issues as much as possible. Taylor is obviously extremely active. I don't think you could rip him away from that if you wanted to, but yeah, he's very active in the open source team. I would call him a key member of our open source team, Taylor Otwell.
Matt Stauffer:
Got it. I mean, it makes sense. And that's how we all want it anyway, right? So.
Joe Tannenbaum:
Yeah, exactly. We want him as hands on as possible. Why not? Yeah.
Matt Stauffer:
Yeah, OK, so before we dive too much about you in Laravel, I want to talk about you. So can you share a little bit about kind of where you're coming from? And eventually I want to kind of get up to the point where we say, well, what what led to you kind of joining with your current role at Laravel? But prior to that, where are from? What got you into programming? Kind of what was your journey to get here?
Joe Tannenbaum:
Sure. I'm probably much more unconventional than most people, I would say.
Matt Stauffer:
Great, I love a good story.
Joe Tannenbaum:
So I come from a very small town in upstate New York called Oneonta. There's two colleges in that town. And when they're in session, the population doubles. Like it's a very small town. So it's a great town. It's a little artsy town. I really love it. It's called the City of the Hills. There's hills everywhere. It's beautiful. It's green.
Matt Stauffer:
Got it.
Joe Tannenbaum:
So I was in the arts very heavily as a kid. So I was doing theater, I was doing dance, I was doing, you know you name it except singing. I thought I could sing. I can't sing. We're working on that. We'll see.
Matt Stauffer:
Okay, cool.
Joe Tannenbaum:
But my dad was very technical. He originally was going to be a computer programmer a very long time ago. He decided I can't sit in a room and stare at a screen all day. So I'm to go into medicine, which is, you know, a completely different thing.
Matt Stauffer:
Yeah, that's a jump.
Joe Tannenbaum:
He maintained his love for programming. So he would sort of hobby program a lot and he was very interested in tech. And so I got absorbed into that and it was sort of a dual passion. I would learn HTML and CSS and JavaScript. And we're talking, not to out my age here, but I'm talking about like early mid nineties. You know, I'm like learning when like internet is like infancy, you know? Yeah.
Matt Stauffer:
Yeah, like CSS is brand new and you're like, we don't have to just put style on the element. Yeah.
Joe Tannenbaum:
Right, right, right. I was working with, I don't know if you remember Angel Fire. Do you remember Angel Fire? Yeah. In GeoCities and all those. Yeah, yeah, yeah.
Matt Stauffer:
Yeah, Angel of Fire and yeah, Geocities, that was the other one I was trying to remember, yes. All right.
Joe Tannenbaum:
So the spark was really that I was making little websites for people on Angel Fire. And then I was like, you can customize this. If you just know a little bit of like custom code, which I didn't even know what it was called back then. CSS wasn't really a thing. So I was, learning like some JavaScript and some like HTML tags, basically. Which eventually led me to PHP because I wanted to know how to like make my own dynamic sites, which is sort of, I don't think, was WordPress even a thing back then? What was I learning? I think I was just like rolling my own mini frameworks with PHP. We'll put that in very heavy quotes. But fast forward. So I'm self-taught all the way through there.
Matt Stauffer:
Yeah. Yeah.
Joe Tannenbaum:
I go to school for acting. I have a BFA in acting. And now, as I like to say, I act like a developer. But my work study job was programming for the theater department. They needed help with their website. So I would, I would program for the theater department. When I got out, all of my friends were waiting tables. I was a freelance web developer. It was way more flexible and I could work less hours and get paid. I mean, depending on what restaurant they were working at, sometimes they were making more than I was, but you know, in general, I could make more doing less as a
Matt Stauffer:
Yup.
Joe Tannenbaum:
freelance web developer. And I realized like, okay, I don't think the acting thing is probably going to work out long-term and transition to full-time web development. And I've just been there ever since. I'm a fully self-taught programmer. You know, I take courses where I can, but like, I don't have a CS degree and I don't, you know, I'm really self-rolled here. So yeah.
Matt Stauffer:
Yeah, I was just talking with a friend who's talking about how industries go through various movements. And at the beginning of the industry, it's the blue sky industry where anybody who can solve this problem is amazing because we're just figuring this out. Then when it becomes a more established one, those who are around the beginning are the gray beards because just by merit of having been there at the beginning, we have a little experience that nobody else does. And I'm like, yeah.
Joe Tannenbaum:
It's all possibilities, right?
Matt Stauffer:
I think having been around when CSS was invented and being writing PHP before WordPress was invented, know, we're gray beards. Don't look at the color of my beard, but we're gray beards purely purely just because we've been around for so long. We've watched it all kind of come about. So, yeah.
Joe Tannenbaum:
Yep. Yep. There's... There's some gray hair. I got some gray hair.
Yeah, yeah. I used to think that not having a CS degree, was like, it was like sort of a chip on my shoulder where I was, I felt like I had to prove myself all the time and it, it felt like a hurdle. Um, but now it feels a little bit like a superpower. I still feel it sometimes, you know, especially when somebody gets like hyper technical and I'm like, I know these concepts. I couldn't put like the words to it or whatever, but,
Matt Stauffer:
Yeah.
Joe Tannenbaum:
I think actually acting school is my superpower in tech because I'm able to communicate and read people and like interact in a way that is sometimes a level up or at least like a, it's a weird little like trick I have in my pocket. Sort of if that makes sense, you know? That's right. Yeah.
Matt Stauffer:
Yeah, yeah, I studied English in college and you know, it's the same thing. It's like we get people, we get communication and we might not know all the technical things, but we've been able to put it together enough to do the job.
Joe Tannenbaum:
Exactly, exactly.
Matt Stauffer:
I love it. Okay, so what was the transition then from kind of like doing this work on your own and starting to get noticed? Was it a gradual thing or was there just like a day where you're like, you know, I'm being reshot to Laravel?
Joe Tannenbaum:
It was kind of gradual. It was gradual and all at once. We'll put it that way. I'd been obviously working in the industry for
Matt Stauffer:
Say more.
Joe Tannenbaum:
You know, as a professional, since making that transition for like almost a decade and part of that had been working nine to fives and part of that had been like freelancing again. And, I had been involved on social media, but I had more like read. I was like kind of a lurker, less of like a poster. And I didn't have like a dev community around me. And that felt bad. Like I would talk to my friends. They were very like patient with me and I'd be like, there's this crazy thing that I did. And my wife was very patient with me.
But nobody, nobody understood it. So they were just like, cool. Yeah, totally.
Matt Stauffer:
Yeah, that's very cool.
Joe Tannenbaum:
Yeah. so I was craving more people to talk shop with, to learn things from, to discuss with. and so I started posting more and one of the things I started posting, I was very interested in like terminal scripts. And so I was posting, creating, there's a, there's a, what's it called? Clack. There's a clack. There's a library called clack in JavaScript. That was a really. It's kind of like prompts for JavaScript. And so I said, like, this is the eternal experience I want for Laravel or for PHP at least. So I'm going to clack and PHP. And so I started posting my progress about it and
Matt Stauffer:
Got it.
Joe Tannenbaum:
Out of the blue, don't I had like, I don't know, 170 followers on Twitter. I have no idea like how it came about. But Taylor messaged me and was like, hey, hey, dude, like you're doing some cool stuff over here. Also, we're legit building this over here, too. But like you keep doing you. I'm just telling you, like weird, same brave brain wave or whatever. And so I was like, I thought I was like tripping. I was like, what is going on? Like, why? How is Taylor DMing me? What's going on?
Matt Stauffer:
huh.
Joe Tannenbaum:
But that was the spark. then once so that ended up being prompts. And then once prompts released, I was doing all these like crazy terminal experiments and just kind of mostly fooling around for fun. But people liked it and it got attention. And then and I had enough of a relationship with Taylor at that time where I said, if you are ever hiring, I think you should hire me. And it was that is not my move ever, ever, ever. But...
Matt Stauffer:
Yeah. Nice. Yeah. You're not that guy. Yeah.
Joe Tannenbaum:
The job market was rough. And I was like, if I were going to like go anywhere and work for somebody else, who would it be? And the only answer was Laravel. I didn't want to work for anybody else. So I was like, all right, let's go. Let's just ask for what we want. And here we are. And so that, kicked off the conversation. Yeah.
Matt Stauffer:
Yeah.
Beautiful. Okay, very cool. So what was your first project? Once you got hired, what was the first thing you worked on? Was it just the mainly open source stuff or was it a specific kind of big chunk?
Joe Tannenbaum:
Um, so I got hired. originally, they were like, you're going to work on Cloud. I was like, great. I'll work on anything. Don't, don't care. Throw them in anything. I'm good. Um, and then day one, they're like, actually you're open source. And I was like, great. Also awesome. Um, so yeah, the, my, my joke right now is like, I was hired as a PHP developer and I've only written TypeScript since I've landed at Laravel. Which.
Matt Stauffer:
Cool. Yeah.
Joe Tannenbaum:
Is fun. Actually, I'm not, know people hate on TypeScript, but like, you know, 95% of it I'm having a really great time with. I think the only 5 % I'm not loving is just like appeasing TypeScript when I know what we're looking at is correct. I was just doing that an hour ago, but, you know, the rest of it, it's like a really good experience. It feels good. Uh, I like it. So I landed day one at Laravel.
Matt Stauffer:
Sure. Yep. Yeah.
Joe Tannenbaum:
Taylor said, you know, after I got acclimated, he said, okay, here's like a dozen things I'm thinking about. Put your things in the pile. Let's mix them all together and prioritize them and see what comes out the other side.
Matt Stauffer:
Nice.
Joe Tannenbaum:
So I did like a week of, brainstorming and research on all of the points that we were thinking about and what floated to the top. two things that floated to the top were the VS code extension and Inertia Two. And so the very first thing I did, let me make sure I'm Think about this. Yeah. The very first thing I did was I sat down and rewrote the core of Inertia, which was my hands were shaking the first three days.
Matt Stauffer:
Wow.
Joe Tannenbaum:
And, you know, we coordinated with Jonathan, Jonathan Renick, who is the is the creator of Inertia. And we said, this is what we want to do with it. But the current state of the library doesn't allow for it. And he said, I'm not precious about anything in there. As long as it works the way it worked before. And you're adding things. Great.
So my first day of that project was staring at the router file. And I had that, was a very long file. And it just sort of like Frankensteined over the years a little bit. And I said, okay, if I wanted to just change this as minimally as possible to put, well, we wanted to do, the only thing we to do was put an async request. Everything about Inertia was synchronous. We wanted to make some things asynchronous.
Matt Stauffer:
Yeah.
Joe Tannenbaum:
I said, okay, how, how little can I change this file to make that happen? So I started sort of like putting little things here and there. It got worse and worse as I went. I said, okay, stop. So I pulled up the fresh file. I had a blank, window for VS code next to me. And I just notated every line of the file. What does this do, because I couldn't, I couldn't even understand necessarily. I was, I hadn't looked at the internals of Inertia before. Right? So like, I just notated every line.
Matt Stauffer:
Gosh.
Joe Tannenbaum:
this does this, this does this, and just made sure that all points were covered. I understood the entire file before completely removing it and starting again.
Matt Stauffer:
Jeez.
Joe Tannenbaum:
And so, yeah, that was the first thing I did was I rewrote the core bit of inertia to handle async requests. And then it just sort of ballooned from there. We had a bunch of other ideas and they all came out of async requests, honestly. Yeah.
Matt Stauffer:
Wow. And it's funny because I always tell people, like, there's no better way to learn like a framework or something than to have to write a book about it. But that's not true. There's no better way to know it than to rewrite it completely from scratch and have to make sure you don't forget anything. Wow.
Joe Tannenbaum:
That's true. Yeah. Because there was some nuance in there that I wasn't even aware of that only expose itself through a little like if statements in the code, right? So this is why source diving is so useful. If you are, and this is what I love about Laravel, it's very source diveable.
Matt Stauffer:
Yeah.
Joe Tannenbaum:
Right. You can, you can kind of command click into it, whatever you want and get to the implementation, especially with the new VS code extension. I'm just saying, you know, jump right in.
Matt Stauffer:
Ding ding ding. We're gonna talk about it in a second.
Joe Tannenbaum:
But yeah, I think this is like source diving to the extreme, right? It's like, I need to understand this cause I'm about to rewrite it. So that's what that was. Yeah.
Matt Stauffer:
Yeah, that's really cool. We've talked often at Tighten and never built it about like building a type or a VS code extension or something that allows you to leave some kind of universally shared annotations on your code. So it like gets shared into a file in the repo. I know Andy Newhouse has been diving or thinking about that idea for ages. So as you're talking about your two side by side, I'm like, huh, Andy might have a point there. So.
Joe Tannenbaum:
That would be like a file that lives there, but the annotations show up inline in the code based on what's in that file. That's kind of great. I love that.
Matt Stauffer:
Yeah. Yeah. Right. And it might be the file might be like SQLite so that you can just kind of directly match it. Who knows what it is. But it's just some some kind of annotations that sync to anybody else who's using the same the same. Yeah. The plug-in.
Joe Tannenbaum:
Strong. Very cool idea.
Matt Stauffer:
So OK. Well I'll make sure that they hear that. So you worked on the inertia project. So you mentioned kind of writing a lot of TypeScript and I want to stay on it for a second. But is VS code VS code plugins in TypeScript as well?
Joe Tannenbaum:
VS Code plugins, you can write technically in any language, but they have an SDK for TypeScript. Like ours is written in TypeScript with a lot of sort of PHP accoutrement around it, but like it's, running a lot of like little hand rolled scripts that collect information about the app, but the, core of it is TypeScript. Yeah. Yeah.
Matt Stauffer:
Okay. Interesting. Okay. So with inertia, when did the 2.0 like actual live version go live? It was really recently, right?
Joe Tannenbaum:
Uh, yeah, it was the end of the last year. We officially stabilized it as 2.0. Yeah. Uh, but the beta came out, think I want to say October 1st ish, something like that. Yeah. Yeah.
Matt Stauffer:
Yeah. Yeah. So were you working at that and the VS code thing in tandem? And if so, I'm curious, what does managing your week between VS code, Inertia, and also the open source responsibilities you have, like, what does it look like? How do you balance those things?
Joe Tannenbaum:
You know, the, the, the real answer that I questioned the very honest answer that I questioned is I'm still figuring that out. There's a lot of balls in the air and, you know, I, I'm not going to lie. Like sometimes I drop a ball and it's okay. You know, I'm, I'm a human being, but.
Matt Stauffer:
Yeah, yeah.
Joe Tannenbaum:
I think we've kept most of the balls in the air. They're all airborne at this point. So at that time, so I basically, the way we divvied it up is I did, I believe if I remember correctly, it was four weeks on Inertia to get it to an initial 2.0 beta release. And then I think I did four weeks on VS code. So this was all in the lead up to Laracon US. And then I think there was a month.
Matt Stauffer:
Okay. Yeah.
Joe Tannenbaum:
buffer of me being like, okay, I'm these two projects. What do we need to do to just get it to a demoable state and make sure that it's, it's, in a good place to be publicly released so that people can start playing with it.
Matt Stauffer:
Got it.
Joe Tannenbaum:
So yeah, it was sort of a month concentration on inertia, a month concentration on VS code, a month that was a mix. Then there was Laracon us. And then I basically just tightened the bolts on all of them at the same time and released them all in October. yeah, double really.
Matt Stauffer:
I can imagine.
Joe Tannenbaum:
Yeah, was. And then on top of that, I think at that point, I had just transitioned to being the lead. So I was trying to figure out, you know, what all of the open source processes were and what was in place. I was kind of documenting a bunch of things. Yeah, so it kind of gets divvied up where a little bit of every day, I'm sort of like scanning through issues and PRs and then I try to get some like core work done as well to move the ball forward on the project. Right now we're in, we're doing work cycles. So we're in a pretty heads down. We have these, you know, five things over the next couple of weeks that we want to accomplish. So that makes it a lot easier. And then we'll do a little like issue PR tech cleanup after that. If that makes sense.
Matt Stauffer:
Okay. Yeah, it does. It's fun learning about how different people in different industries manage their time when there's some things that will never stop being a thing. You know, I remember Taylor would often say, start my day and I don't, you know, stop working on issues until they get down to X, Y or Z. Or some people say I do one hour of open source work every morning and then do the other thing. So it's kind of fun hearing about how you figure out how to balance those things.
Joe Tannenbaum:
Mm-hmm.
Matt Stauffer:
The team is the three of you, right? You, Mior, and Tony.
Joe Tannenbaum:
And Tony, yeah. Yeah.
Matt Stauffer:
Okay, how much of your life is leading and managing other people and how much of your life is doing your things?
Joe Tannenbaum:
So the management style at Laravel is pretty hands off, which I love and was a big selling point on like coming to the company.
Matt Stauffer:
Yeah, not surprised. Yeah. Yeah.
Joe Tannenbaum:
I interviewed with several people in the lead into getting the job and all of them said, we don't babysit, we hire adults, we trust you. it's a very high trust environment and...That's what I love about it. So I have one-on-ones with my guys every two weeks. We have extraneous meetings between if we need to, but my team does not have a lot of meetings and I don't do a lot of high touch management. I just kind of like ping and check in like any questions, how's it going between those two weeks? It's very informal and I trust that they'll come to me if they need something from me or another person on the team to get something done. So the management style is very low touch. There's some extraneous.
Matt Stauffer:
I love it. That's awesome. Yeah.
Joe Tannenbaum:
things like you know as we're doing this work cycle we also need to be kind of like thinking and planning for the next work cycle and what we might want to be thinking about but in terms of like the people management stuff it's extremely high trust and very hands-off and that's the way everybody seems to like it so yeah yeah.
Matt Stauffer:
I'd love to hear that. That's very cool. Okay. So let's wrap up on inertia because I want to jump to VS code. So with inertia, I've never source dived inertia before. I've used it, but I've never gotten a chance to source dive. Is there anything interesting? Because I mean, we could do an entire podcast just about inertia, but because we're short, you know, we only have a little bit. Is there anything that was really interesting that your average Laravel full stack programmer might not know or is there any like did you learn something cool about JavaScript or something cool about was there a trick that you had to lean on some new technology is there kind of any just little sparks in the process of rewriting inertia to where you're like this is a lot of fun I had a really good time with this or I'd never gotten a chance to dive into this type of technology or something.
Joe Tannenbaum:
Yeah, I mean, it was a lot of fun. Refactoring is like this weird internal joy of mine. Like refactoring code makes me so happy and I don't know what it is about my brain that like latches onto it so hard. I think the most surprising thing was that I dove in for the first time and was like, okay, here we go. It's such a thin layer. There's so, there's not a lot of code there. Like the JS of it all is so small actually in reality.
Matt Stauffer:
Yeah.
Joe Tannenbaum:
Which is cool because it's doing a lot of heavy lifting. So you think like, man, we're really negotiating some stuff. Ya know, we're really not really, I mean, we're using Axios to send some stuff back and forth and we're just making sure that like everybody's talking to each other in a way that everybody else knows how to speak. Right. So, yeah, I was, I think the initial surprise was like, there's like nothing here. It's so slim. it's gotten not as slim, but it's, it's largely, you know, we had to add some things in, but...
Matt Stauffer:
Yeah.
Joe Tannenbaum:
The feature that I love the most and learned the most about while we were developing it, so I developed with Jonathan the history encryption feature, which was, we were trying to figure out basically the issue was it was like.
It was a security issue where if you were using Inertia, you logged out of the application, but then you press back, it would restore whatever that data was while the session was alive. So you could basically see things that you weren't supposed to see because you were no longer authenticated because the history cache would just kind of come back. This is more of like a browser level problem, less so a JavaScript problem or an application problem, but it is, you know... It is something we wanted to address and it's something that people brought up a lot. And we tried a couple of different iterations of it, but basically we ended up encrypting the window history so that you could only.
Matt Stauffer:
Hmm.
Joe Tannenbaum:
See it if the encryption key remained the same. So as soon as you had a logout or, or an instance where you wanted to clear the history, we rolled the key and then anything that you had before is no longer visible. And we would refetch from source, which means that the server again became the source of truth and therefore could determine whether they were allowed to see that or not. And we, this was, I, this iteration of it was a Jonathan brainchild. And it was one of those beautiful moments. We would have these very long, like two pole sessions and then he would go. Wait.
Matt Stauffer:
Hahaha!
Joe Tannenbaum:
wait, wait, what if it's this? And I was like, yeah. And then we kind of just kept building on that over. It was like one of those beautiful programming moments where you're both suddenly like, what about, and what about yes and yes and, and it's, and it was just kind of rolled into this. And then it took, I don't know, a day to get the initial prototype up. And he was like, yes, this is it. And I was like, yes, this is it. And it just felt like so good. And there's like some, you know, we, we butted up against some, because as soon as you encrypt something, it becomes much larger than it was before and yada, yada, yada. But I learned a lot about like, because we're just using the encryption stuff built into the browser. There wasn't anything new there. But I was learning a lot about that stuff while we were building it, which was really exciting.
Matt Stauffer:
I'm embarrassed to say I know about all the encryption stuff in the browser because I did my dalliance into NFTs for a little while there and they relieved very heavily and all that.
Joe Tannenbaum:
Oh, there we go.
Matt Stauffer:
So just because I tend on this podcast to pretend I don't know things because it makes a more interesting contrast. I actually have no idea what this one. So this is fun. I'm actually learning. You mentioned when you go back to the previous page, page state it's there on a traditional server in the page. I assume that the back button pulls that page out of the browser's cache and, you know, does their, is that how it works with inertia or is inertia holding onto a page cache?
Joe Tannenbaum:
So inertia holds data. So you can store data in the window history state object. And so you can store basically the page data that hydrates the page in there. And so we listen, like, did they just press back? If so, load up that component and hydrate it so you get that instant response. What's funny is we tested a lot of other apps because we're like,
Matt Stauffer:
Got it. Okay.
Joe Tannenbaum:
How do you know people are doing this? Like what's going on? And like, I think we successfully were able to see stuff on GitHub that we weren't even supposed to see. We were able, I mean, this is not an uncommon problem and it's a tricky beast, but yeah, basically stores page data in the cache and then.
We restored that automatically, but you can't clear cache manually. So you can't clear that window history page state manually. The browser isn't in control of that whole thing. So you can only manipulate state of pages that you are on. And so that was the issue. Yeah. Yeah. It was a tricky one to solve.
Matt Stauffer:
Yeah.
Yeah, that's so interesting.
Joe Tannenbaum:
Yeah. Yeah. It was a tricky one to solve.
Matt Stauffer:
I'm really fascinated in learning the ways that Laravel leads the way. Like one of the things you've mentioned here is you're like, and no shame to GitHub at all. GitHub is amazing, but it's very fun to see moments where we're doing things where, cause I think like in the PHP world, we've got this underdog scrappy mentality of like we're catching up.
Ya know, we, had to catch up to have a good package manager. We had to catch up to OOP. We had to catch up all these things and it's been really enjoyable over the last like five plus years to be like we're leading in some ways. Other people look to us for things and I'm not saying, whoa, is anybody who's got an app that's doing this, but it's really cool for me. And also inertia is not just Laravel project, right? You can use inertia elsewhere, but it's very cool for me to hear you saying like.
We are leading the charge to do this thing that not everybody else is handling well and other people can look to the way we do it as, well, Laravel's got that handled. I'm like, yes, we're doing it, boys.
Joe Tannenbaum:
Well, what's funny is when we were building out that feature, it felt a little niche. We were like, I don't think many people are even thinking about this or using this or considering this, but we should do this. Like this feels like the right thing to do. It feels like an interesting problem to tackle. That feature announcement got probably more buzz than, I mean, certainly more buzz than I was anticipating because people from other ecosystems were like, well,
Well, now what's this over here? Who's do what is history encryption? What are you talking about? And it's not that nobody's ever done it before, but I think we had a novel approach and people noticed. And I think that's that's fun.
Matt Stauffer:
huh. That's cool. I didn't even know that. That's awesome.
Joe Tannenbaum:
It feels it is this underdog mentality and PHP. But I'm starting to feel that less and less like when people are like, what's Laravel? I'm like, you don't know Laravel. You you create like what? Yeah, how is that possible? Yeah, it feels like we're leading the way in a couple fronts, which is really exciting.
Matt Stauffer:
You live under a rock? That's very cool.
I love that. Well, as I always say in this podcast, I could talk about this for ages, but we have to move on to our next topic. And I am very curious about this one as well. VS Code. Throughout the history of being a CTO for the first 11, 12 years of Tighten, people would always say, you're in leadership position. You get to code anymore. I'm like, yeah, I'm a CTO. I'll jump at a project here. I'll work on an episode. I'm a CEO now. CEOs don't get to code.
Joe Tannenbaum:
0 % coding.
Matt Stauffer:
Yeah, I did built with Laravel because it was a very valuable...website to build from a business perspective and because I was like, I want to freaking code something. And then since then I haven't forgotten to code anything. So I haven't gotten to sit down and be like a day to day coder since you released it. but I was a long time holdout, from sublime text and eventually Caleb Porzio and a few other folks convinced me to move to VS code. It was totally a good decision. Love VS code. Love my set up in VS code. and I've just kind of seen the features that you've done there and I'm like drooling and I'm like,
Joe Tannenbaum:
Yeah.
Matt Stauffer:
Despite like cuz I had my time at PHP storm, but the problem is my computer couldn't power PHP storm And it was super slow so I walked away and I you know, whatever but I've always kind of like thought one day I'm gonna get back to that level of code intelligence one day and so I'm... one of the things that's bumming me the most about not writing code day today is not getting to use your VS code extension.
Joe Tannenbaum:
All right, sure. I was like, why aren't you using it? And I forgot that you're a CEO now. So you said it.
Matt Stauffer:
So I just want you to hear that Yeah, no kids are ready to code anymore so can you tell a little bit about the story of like
You said you guys kind of shared a bunch of ideas together and said, you know, this was one of the top priorities, but where did like the inspiration come from and what was your primary goal and motivation in building this feature or this this package?
Joe Tannenbaum:
So when we were having those initial conversations, a lot of the conversation was around like,
How do we ease the on-ramp into the ecosystem, into PHP, into Laravel? And people are already using VS Code. It's a free editor. A lot of people use it. And the experience is not great. Like it wasn't, it wasn't good. There were, you could cobble together anywhere between like six and 10 Laravel VS Code extensions, all of which did a great job on their own, right? But you were like, is this the right one? Where is this intelligence coming from? I always, you know, if something went wrong, I was like, where is the one?
Matt Stauffer:
Yeah. Yeah.
Joe Tannenbaum:
that is popping off right now. And so we wanted something cohesive. We wanted something that we could just say, oh, are you getting started in Laravel and you use VS code? You just need to install this and like, this will get you, you know, minimum 90 % of the way there, hopefully a hundred percent. So we understand that like, you know, something like a PHP storm plus Laravel idea is like gold standard. Like, you know, I don't know if we'll ever get there and we're, we're okay with that. We just want to make the experience better in VS code. And I think we have.
I'll be honest, like I these days do not write a lot of application code, which is so weird because like it used to be all I did. And now I'm like writing a lot of libraries and extensions and things like that, which I love. But I started writing some application code, you know, a couple of weeks ago, cause I'm working on a side project and I forgot I had the extension installed and kept going. How does it know about this? Oh wait. Oh my God. That's me. or this is, you know, it's, and so.
Matt Stauffer:
I did it.
Joe Tannenbaum:
Getting the little auto completions, getting the linking, the linking, the linking is the surprise feature. I added that in because I was like, yeah, sure. I don't know.
Matt Stauffer:
Really? Yeah.
Joe Tannenbaum:
The ability to like navigate your code extremely quickly just by clicking on the thing you're interested in is amazing. And it's like, I'm sure not everybody loves to see those little lines in their thing. I love it. Show them to me all the time. Let's keep clicking through. Because just drilling down, like I'm in a route, I need this blade component, I need this. And you can just get to exactly where we're going so quickly.
Matt Stauffer:
Yeah. Yeah.
Joe Tannenbaum:
Yeah, it's been a blast to work on. went from not knowing anything about writing a VS code extension to having a VS code extension within like a week. So like that was, that was an adventure. But yeah, it's been, it's, it's this real.
Matt Stauffer:
Yeah.
Joe Tannenbaum:
like labor of love now. I love opening it up. I love working on it. I love getting little quick wins, writing little features. It's also nice selfishly to be like, it's annoying or I don't like when this happens and then I can just fix it. I was like, like, for example, last week I had to convert some ENVs to like add them to the V ENVs. And I was like, I
Matt Stauffer:
Fix it.
Joe Tannenbaum:
hate doing this every time. And I don't know why it's so easy. All you're doing is like VT underscore V that thing equals that thing. But I was like, I'm going to fix this right now. And I just wrote a little quick fix that said like, you're, if you're selecting an EV variable, you can just convert them right then and there to VT variables. And I was like, great. I'm just going to fix all my own problems. It's But like that it's, it's great. The feedback we've gotten is very good. I think, uh,
Matt Stauffer:
Brilliant. Jeez. I love that.
Joe Tannenbaum:
The beastly things about it is like the cross platform is very hard. That is like, mean, under understatement of the century is like, you know, you have Mac, you have Windows and then different architectures on each of them. And then are using Docker or using sail or using herd or using valet or using, like, cause we have to run PHP in the background. So there's. Yeah. So PHP is really good at understanding PHP, which is why we're using it at the moment. and.
Matt Stauffer:
Interesting. Oh, I was going to say why are you having to do that?
Joe Tannenbaum:
Instead of like re-architecting Laravel as a framework in TypeScripts and figuring everything out about it, we are just sort of running these quickie little scripts under the hood to like gather information about the app and then shoot that back up to like the extension. So yeah, there's a lot of like variables. It's pretty stabilized at this point. There's a couple of little edge cases here on like people with like quirky setups, but you know, for the most part we're in a good place and the feedback has been good and I'm excited that people are having a better experience.
Matt Stauffer:
So once again, I've seen all the notices about it, but I've never gotten to use it and I've never source dived it. So I get to be honestly curious here. I didn't realize, because the first question I was going to ask you was, what is the, I think they call it, it the AST? You know, there's the language for interacting with like DOM nodes or their equivalents in different languages. And as we built tools at Tighten to try and parse through like...
A class decoration versus a functional, whatever those have always been the most complicated thing to deal with, especially if you're dealing with one that's something that's new that somebody hasn't built like Blade or something like that. And so I imagine that you were spending your whole life trying to teach the system things about that. Just using that kind of AST type parsing when you're running this through PHP is the PHP instantiating it and doing like reflection on these classes or what is PHP doing there?
Joe Tannenbaum:
Okay, so there's two main things that are happening. One is something I call repositories. So like, this is gathering information about your app, which is like, what are all your config values and where do they live? You know, what are your app bindings? What are all your translations? Translations? What do you call it? The dark horse? That was so insane out the gate because like...
Matt Stauffer:
Really?
Joe Tannenbaum:
filament and statomic in these packages have very robust localization. So I was filling these repos and like literally like running out of memory because it was so large the response I was trying to get back. So.
Matt Stauffer:
Oh.
Joe Tannenbaum:
That was a big surprise for me. That's now solved problem. Well, knock on wood, but it's all problem. So that's one part of it. So that's basically in the background booting up your app really quick, gathering some information and bouncing. And then whenever one of these files changes, depending on which file it is, it'll run one of those little scripts again to like, regather the information.
Matt Stauffer:
Got it.
Joe Tannenbaum:
The other part of it is what you're talking about, which is like, I have a file open and like, we need to add linking. We need to add hoverable stuff. We need to, you know, we need to understand what's going on in this file. Now we are not our job. And we said this from the beginning when we were developing the extension is like, we are not going to offer PHP and Tellasense at its full. Like that's somebody else's job. I do not want to do that. And I don't think that's, we, we want to inject the Laravel specific stuff in. We don't want to do PHP as a whole, but.
That makes our job a little bit easier because then we can just be focused on the thing we're actually interested in. Microsoft has a library called the Microsoft fault tolerant PHP parser, which basically means you can give it PHP that's incomplete and it'll parse it into its AST nodes appropriately so that you can still work with the file.
Matt Stauffer:
Nice.
Joe Tannenbaum:
So it's like four editors. So when you fire up the VS Code extension, the first thing it does is it downloads a standalone binary from the repo so that you can run this against any files that you're working with. And it parses the parts that it's interested in. So it basically has like, Is this something I'm interested in? No, yes. And it kind of branches from there. And then feeds back a JSON payload to the editor saying like, these are lines that you're interested in. These are like sections that you're interested in and in why you might be interested in those. And then the TypeScript kind of takes over and starts like offering auto completion or, linking or hovering or diagnostics about those things. So.
Matt Stauffer:
Got it. So you're working within this existing system and hooking into that, not having to do it top down on your own.
Joe Tannenbaum:
I mean, I am right. I'm using a package for the AST parsing part of it, but like it's the, the parser is not insignificant. It was, that was a very, I mean, if you've ever worked with ASTs that rabbit hole goes real, real deep. So yeah, I spent a lot of time on that. That was, that was a big time commitment. Yeah. Yeah.
Matt Stauffer:
Uh-huh.
Matt Stauffer:
Yeah. Okay, and that's what I had imagined. I imagine that was going to be the majority of your work. That does leave me with an interesting question. So if part of this thing is running the app, do you pretty early on handle, what do I do if their app is broken right now and can't instantiate to be able to do that?
Joe Tannenbaum:
Yeah. So, in the beginning we would, so we have these little error pop-ups that say like, Hey, something happened with Laravel extension. Do you want to know about it? Copy the error, whatever. In the beginning, I was doing that for every error. So if your app was fundamentally broken for a second, you were just getting like ding, ding, ding, ding, ding, ding, And people were like, can you, can you please stop that? And I was like, got it. Understood. So at this point, if the app is like fully not booting, I don't show a pop-up. I assume you probably know that and therefore are like working on something, but if it's.
Matt Stauffer:
Yeah.
Joe Tannenbaum:
A problem with my part of the script, something where it errors in the logic that I'm doing, I will show you a pop-up and even then I'm probably going to at this point largely disable that and like just keep logging it so that people can see it, but it's not necessarily in their way. Yeah.
Matt Stauffer:
It's not disruptive. Yeah. Okay.
Joe Tannenbaum:
But yeah, so, so there is a distinction between like this app is non-functional and its current state, which is often when you're developing and, you know, something happened with, with my side of the equation, which you should maybe know about if you're interested. Yeah.
Matt Stauffer:
Yeah, that's fascinating. Now I want to use this even more. I just want to see it in progress.
Joe Tannenbaum:
I mean, I don't want a two by one horn, but it's extremely useful. Like it's really, it's changed the game in VS code for me. Like it's really, it's really good, I think.
Matt Stauffer:
I love that.
I love to hear that. I mean, I've heard only good things about it to be clear.
Joe Tannenbaum:
Well, thank you.
Matt Stauffer:
So we are heading towards end of time and I did have just one last question I wanted to ask you, which is what is next on your plate? Do you know?
Joe Tannenbaum:
Yeah. The current, so we have a lot of inertia stuff coming down the pipeline. The bullet points of that being I teased an inertia infinite scrolling components. Like, I don't know, four years ago at this point, I can't remember when it was, no, was last year I think. No, I'm just, I'm just goofing. No, no, when I was working on the inertia 2.0 stuff, we really wanted to get infinite scrolling to be much easier.
Matt Stauffer:
Back in the summer, okay. I was like, slugger.
Joe Tannenbaum:
I prototyped a component that I put together to make it like extremely easy. Now I need to like solidify that, spread it across React Svelte in Vue and then we're going to get that out the door. So that's coming on the pipeline. We are working on...
Sort of a TypeScript version of Ziggy. Thank you for Ziggy. Ziggy's amazing.
Matt Stauffer:
Okay, yeah.
Joe Tannenbaum:
But we are doing TypeScript route generation. So you can just pull those directly in and then make them all tree shakeable, which we are excited about. And what else? So that's that. We're bringing two factor back into the starter kits, which is essential and good. And we need to do that. And then VS Code is just like.
Matt Stauffer:
Yeah. Yep. Big fan.
Joe Tannenbaum:
a buffet of like a million things we could do. But the priority right now is we're going to get LiveWire and Volt support a little better. It's decent right now. I think it could be better. We want to get the test runner reintegrated. I had to disable that before beta because it wasn't working as consistently and as well as I wanted it to. So we're going to get the test runner back in. Yeah, VS Code, we could go on in infinity. I mean, there's like so there's I have a list like, you know, a mile long of things that we could possibly do. So yeah, it's all...
Matt Stauffer:
Got it.
Joe Tannenbaum:
In my mind, I think one of the gaps when you use inertia is like the intellisense between the two is not amazing. And I would like to improve that story immensely. So we are working on some things there, which is exciting. Yeah.
Matt Stauffer:
Very cool. I love that. I will make sure I get you in touch with the Ziggy folks. I think Jacob is the one who managed it now, but I think he has a TypeScript version, so I'll definitely make sure that I get you in touch already, because it might already exist.
Joe Tannenbaum:
Oh, interesting. Okay. This, this is a Tim McDonald brainchild originally. So this is, you know, it's out there, but you know, it's also good. So it's, you know, I would love to coordinate with somebody and see what's going on and, and yeah, yeah. Yeah. It sounds good.
Matt Stauffer:
Yeah. Good. We'll get them all in touch. I love it. I, it's funny cause, Ziggy, so just a fun story. Ziggy was a Daniel Colborne creation.
Joe Tannenbaum:
I didn't know that. That's awesome.
Matt Stauffer:
And when he was, yeah, he was at, he was at Tighten and he says, got this idea. Do I have your approval to spend time and money on building this? And I said, yeah, you can either do it on your own. You can make it under Tighten. If you do on your own, then you keep running with it forever. If you're doing our Tighten, I pay you to build it. And then we publish it and launch it.
And we had this whole bunch of conversations around like just so you know when you put something out there You're now stuck with this thing for years You don't get to like decide you don't like it. But one of the benefits of doing it with Tighten is that if you leave we're stuck with it, you know.
Joe Tannenbaum:
Yeah, there's a team of people stuck with it at least.
Matt Stauffer:
And that is exactly what it's exactly what happened and it's funny because Jacob who is the primary maintainer for Ziggy right now took it over when Daniel left and then he has since left and gone on his own he's like I want to keep maintaining for Tighten can I do that I was like sure, you know, I'm not gonna yes.
Joe Tannenbaum:
You're like, I'm never going to say no to that. Why would I say no to that? Yeah.
Matt Stauffer:
Yes. And it's an interesting dynamic at Tighten because we always have to be careful of how many things we're maintaining that someone down the road is forced to maintain versus doing their own creativity, you know, and some of them are really fun, like, you know, jigsaw and Ziggy, but I am a prolific creator of just little like one-off throw away things that I'm like, you guys have to maintain. Right.
Joe Tannenbaum:
I love a one trick pony. Yeah, yeah.
Matt Stauffer:
But then I'm like, now I'm making other people maintain them because I'm a CEO. So like I have to, I have to go through and cut the cruft on a pretty regular basis. So, but yeah.
Joe Tannenbaum:
By the way, I saw Ozzy, what is it called? Is it Ozzy?
Matt Stauffer:
Mm-hmm. Yeah. Yeah.
Joe Tannenbaum:
Yeah, I just saw Andy posting about Ozzy, I think that's so cool. Is that open source Ozzy? Okay.
Matt Stauffer:
Thanks. Yeah, it's open source. We originally built it just for ourselves. And then at some point, Spotsy was like, hey, we're using this. And we're like, we should really kind of like make it a little bit better. So we have improved over the years to the point where it's more useful to other people. But yeah, it's open source. So anybody can contribute towards it, fork it, whatever. We use it to primarily understand the health of our open source repos. So it says like, here's that every Friday, it says for every single new repos, here's their kind of health score. And I'm like, if you do nothing else,
Joe Tannenbaum:
Yeah.
Matt Stauffer:
If it's above a certain number, it's debt score. If it's above a certain number, that means you got to catch up on the issues, catch up on the pull requests. And the idea is for people who have dozens or hundreds of projects they're responsible for, you're not going to check everyone every week. So give you something. And then it also makes like a dashboard so you can see all of them in order. You can even kind of like say, for my debt score, my dashboard filter by certain parameters. We're just trying to make it easier for people who've got a lot of open source things to maintain.
Joe Tannenbaum:
So smart, very, very, very cool. I might snag it and try it out a little bit.
Matt Stauffer:
Thanks. Thank you.
Yeah, and I always love when someone gets excited about it because there's always an influx of fun new ideas for us to work on because at some point we're like it does what we need but then somebody else would like I need this and I'm like great give me a task to do you know especially for me. I'm like give me because I think I wrote Ozzy originally but I think somebody else rewrote it as multiple pages I think when I first built it was just a single page somebody rewrote it and so I'm like great an excuse to go source dive in this new version of it and you know and yeah so give me excuses to work on Ozzy I would love it.
Joe Tannenbaum:
Yeah.
Alright, I'll give you lots of excuses. Let's do it.
Matt Stauffer:
Brilliant, brilliant. Well, I'd always say I try to wrap it at 45 minutes, but I do want to ask, is there anything that you hoped we were going to talk about that we didn't get a chance to say?
Joe Tannenbaum:
I think we touched on everything I was hoping to talk about. I think we did the job. Yeah.
Matt Stauffer:
I love it. Brilliant. Go team. Well, it was a pleasure having you and I didn't expect this, but now every single episode of this this season of the podcast, I'm like, well, obviously I'm going to have you back on because normally when I bring people on, it's just sort of like, hey, we're here to talk about one topic. But first of all, you all are fascinating people. And second of all, you're not like six months from now, there will be more interesting things you have done that I'm going to want to talk to you about. So I look forward to having you. Yeah.
Joe Tannenbaum:
Two months from now. Two months from now.
Matt Stauffer:
I look forward to having you back on the podcast hopefully soon. But for now, thank you for sharing all this stuff, making it all sound so fun. And obviously thank you for the great work you're doing on all this open source stuff that we all benefit from.
Joe Tannenbaum:
Thank you so much for having me. I appreciate it.
Matt Stauffer:
Awesome. And rest of you, thanks for hanging out with us. We'll see you next time.