Taylor Otwell, Creator of Laravel
So I want to start with something non
-controversial and ask you tabs or spaces.
Oh, we use spaces in Laravel, but I think
there's merit to the tabs argument, if I'm
being honest.
Yeah.
You know, I have to give it credit.
Yeah, you could be convinced.
Yeah, so when I originally wrote Laravel,
it actually was tabs.
OK.
And, you know, so of course, I guess the
merit I'm referring to is people can kind
of configure what that looks like.
on their machine.
At some point in the PHP ecosystem, there
was sort of a coding standard that was
adopted across the whole ecosystem.
And it gained a ton of traction across
tons of projects.
And it dictated that you use spaces.
And that's when we moved to spaces, sort
of.
They forced our hand, in a sense.
But we were originally tabs.
Interesting.
OK.
And do you miss that?
Did you take advantage of the fact that
you could change what a tab meant?
I actually didn't on my own machine.
But I know that's just one of the things
that people refer to as an advantage of
tabs.
Gotcha.
Yeah, that's fair.
I wonder if people do that at all, or if
that's just an argument that justifies
after the fact some other preference.
Yeah, I'm not sure.
You come from, I think, a Rails
background.
That's a spaces environment, right?
Yeah, I think Ruby's all spaces.
I don't think there's any traction on the
tabs in Ruby land.
But it's that whole like, I do this, but I
respect the other side's argument is how I
feel a little bit about like Vim and
Emacs, for example.
Like I'm a Vim guy, but I got to admit,
Emacs is a great editor.
It's being able to like code your, like
configure your editor and Lisp is badass.
The fact that it's just like a running
Lisp instance is just super cool.
So I respect both sides.
Yeah, and I've never used Emacs.
I've only used Vim.
Vim's not my primary editor, but I'm...
proficient enough to like make changes in
a program if I need to using Vim, if I'm
in like a production server or something.
But yeah, all of my college professors
were big Vim users.
And that's all we used in all of our
classes actually.
So I got a lot of Vim experience then.
Nice.
I feel like people should try it.
Like I think it's worth knowing to
experience like, hey, modal editing is a
thing.
It's kind of a different paradigm than
everybody else.
basically everybody else uses.
I think that's just like worth exposing
yourself to even if it doesn't really
click for you.
Yeah, I agree.
So what is your daily driver now?
What do you what do you code in?
I am in die hard, die hard, loyal to
sublime text still.
Oh, OK.
Which I don't you know, I don't know what
the current state of sublime text is as
far as user adoption, but.
Before like VS code and I mean before VS
code there was like the atom editor from
github I don't know if you remember that
but sure and they kind of VS code came out
and it feels like VS code grabbed a lot of
Sublime text old market share, but sublime
text is just so dang fast.
It's so light feeling You can just fly
around files.
It's so much faster than VS code which I
think even VS code users admit I think the
The downside to Sublime is its package
ecosystem is not nearly as vast as VS
codes is at this point, probably because
you can write things in JavaScript and VS
code, whereas in Sublime Text, you're
writing Python, which maybe is not as
widely known, I guess.
So yeah.
When you say fast, is that like fast to
start, fast to open files?
Like what is fast?
Yeah, both.
Everything.
Okay.
Yeah, fast to start, fast to open files.
just navigating around files even somehow
feels faster within a single file, you
know.
Interesting.
Okay.
Yeah, it's just a pretty sweet little
editor.
And I think it's cool because it's one of
those projects that's written by kind of
one person.
It reminds me of like a roller coaster
tycoon or like Stardew Valley, you know,
or some of these pretty ambitious
projects.
Those are both games, but they were
written by a single developer all the way
through.
and sort of achieved worldwide fame and
success, which is, I think, pretty cool.
And Sublime Text is like that.
Was there going to be some big Sublime
Text rewrite that never happened?
Or am I remembering that right?
There was a long break kind of between
Sublime Text three and four.
And the Sublime Text author, I think his
name is John Skinner, he'll just disappear
for months, you know, and then he'll pop
back out with a huge update.
And there's not a lot of updates in the
meantime, you know of like hey, yep still
working on it.
Here's what I'm doing It's just radio
silence and then boom sublime text 4 and
then that kind of a year like I kind of
get that You know, it's just like I'll be
in my coding cave.
I'm not gonna talk to you Yeah, I like to
imagine he lives on like sort of a
Caribbean Island and just resurfaces every
now and then to Ship an update.
Yeah, he doesn't have any internet.
He just had like every few months takes a
boat to the mainland like upload something
Yeah, exactly.
I thought what are you using?
I mean, so most of it, I'm still Vim.
Like my VimRC is like almost 20 years old
at this point.
Yeah, but yeah, it's just it works for me.
Yeah, I think once you're that invested in
Vim, you know, it's probably hard to
totally.
Yeah, I mean, it's like super, super
sanded down to like be like the way I want
it.
You know, it's like it's really highly
configured and I have a lot of muscle
memory built up and I still feel like.
at least for most of the editing I'm
doing, it feels like the fastest for me to
get code out and to make changes into
files and things like that.
I think there are times where I'm a little
jealous of certain things, like, oh, are
there better debugging tools or
refactoring tools or slightly higher level
things that maybe I'm interested in?
I want to check out Zedd.
That seems pretty cool as an editor.
I don't know if you play with that.
I haven't.
And I actually don't use a lot of those
kind of higher level tools either.
Are you a shortcuts guy?
Are you kind of like arrow keys, just like
doing an old -fashioned way?
Yeah, I use a lot of shortcuts for sure.
I don't use a lot of like high -level
debugging tools like that, you know, like
kind of IDE style debugging tools.
I don't really get into that.
I think because a lot of what I do is
program for the web, and I've actually
found that like early in my career, I
wrote .NET desktop applications.
where the application starts up and it's
sort of like this long -lived process,
right, that has sort of state that is
maintained over hours potentially and
variables and things.
And I find that when I'm writing web
software, you know, any given web request
exists for an order of milliseconds.
And the path through the application is
generally easy to follow from beginning to
end as far as what is happening.
And I just don't feel like it really
requires like...
a step debugger to step through those
kinds of situations very often.
Whereas when I was writing desktop
applications, I used the step debugger and
all of those tools in Visual Studio every
single day because there was this
complicated state in the desktop
application and you kind of need to step
through it or even reverse and see what's
happening when users click certain
buttons.
But I just haven't had that experience on
the web as I haven't found myself reaching
for that.
Yeah, interesting.
It was a trip going from desktop to web.
Yeah, I mean, super different.
But I like writing for the web.
And when I'm referring to the web, I'm
primarily referring to server -side web.
So I'm sure if you're writing heavy client
-side applications, I think those bear
actually more resemblance to desktop
application development than back -end web
development, where a quest is in and out,
done, over.
So yeah, it was a big change.
But I'm...
I enjoy it, you know?
Yeah, totally.
So switching from editors, do you have
thinking about shell?
Do you have a are you a what shell are you
using?
I use that.
Oh, my.
Is it zish?
Yeah, sure.
Zish.
I think.
Yeah, I use that.
I don't configure it all that heavily
other than how it comes out of the box.
I just have like a pretty simple bash
profile that sets up some aliases and
some.
a couple of functions, but I'm not a, I
don't have a ton of customizations, I
would say to my shell.
Do you make heavy use of the functions and
the aliases you write?
Like what do you use it most frequently?
I have a lot for jumping around different
directories on my system.
I have some for like, Sim linking certain
directories so that I can test Laravel,
the framework against like the application
skeleton without kind of involving a
package manager.
I have some related to like SSH -ing into
different things, but I mean nothing too
crazy, pretty basic stuff, I would say.
And then your Sublime Text, similar deal,
not super configured?
No, I have a few packages.
I mean, I kind of like that.
I feel like it's kind of like even on my
iPhone, I tend to try to use like the
native apps, you know?
I try to use notes, try to use music.
So I think that carries over into like my
dev stack where I try not to actually get
into this sort of crazy customization
because I feel like when I start up a new
machine, I just kind of like not having to
do a bazillion different things to get my
sort of like environment configured.
It's just a lot to wrap my head around.
So I like to keep things as simple as
possible in general.
I bet I only have like seven or eight
extensions installed on Sublime Text.
You know, it's pretty simple.
And on the dot, I do have...
basic dot files, but again, nothing crazy,
you know?
Okay.
Nothing super nuts.
No.
Not even a dot file big enough to put in a
GitHub repo.
It doesn't even feel worth doing that.
Yeah, interesting.
And so it seems like maybe that's kind of
a philosophy of yours in some sense.
Yeah, I think, I mean, I'm a minimalist in
general, you know?
I was definitely even more of a minimalist
before, like I got married and had kids.
But still a minimalist, I would say.
And I think that carries over outside of
my personal life.
It definitely carries over into my code
life, into the way I write code, the way I
set up my environment, everything.
And I think it carries into Laravel as
well.
I think I've tried to maintain a sort of
minimalist philosophy as I write Laravel
as well.
Totally.
I watched that documentary that...
somebody made if about Laravel recently
and Yeah, I heard the word minimal a lot
of times that seemed to be like a really
core thing that you cared about Yeah,
yeah, we tried to avoid obviously
complexity at all costs I mean, I think
every programmer would say they like to
try to avoid complexity But yeah, we
definitely I At least try to make that a
priority for sure.
Yeah, so what was how do you given that
everyone wants it?
But I would say minimalism is actually
probably in sort of short supply.
Like, what are you doing that actually
works there?
I mean, just kind of getting into the
nitty gritty of like how I like to write
code.
But great.
I try to keep the code like to me, good
code is just code that is easy to change
and doesn't have a lot of like sort of
like apparatus around it or like.
You know, it's not like this big ornate
cathedral that feels extremely
meticulously designed to be this perfect
creation that will withstand all business
use cases without, without, you know, it
will be able to absorb any use case we
need because it's so flexible and so well
thought out.
And I actually gave a talk a few years ago
where I sort of parroted a quote by, oh,
it's a lady.
I'll have to look up her name after the
podcast and put in the show notes.
But she said, you want your code to be
like Kenny from South Park and not like T
1000 from Terminator.
Disposable, easy to change, you know,
because as much as you can try to like
plan ahead for so many different business
use cases, it just never pans out.
It seems like and that's actually what
leads to a lot of complexity.
I think in code is trying to anticipate
all of these future scenarios.
Whereas if you just keep the
Write like the minimal amount of code you
need now.
And I think there is some balancing to
this.
Like you can't just be sloppy or, you
know, do something totally, you know,
that's just going to cause you a lot of
problems later, be significant tech debt,
but try to write the minimal amount of
code to get the job done well, let's say,
and go from there.
You know, don't try to anticipate every
single business case you might have in the
future on your product and code around
that.
It seems like it could be that like having
an opinion enables minimalism.
Like if you decide like this is how we're
going to do cues in Laravel and like this
is going to be a small API.
Like this is how we do it.
And we're not going to support a bunch of
other things.
And that lets you have a small surface
area and like keep things minimal.
Does that sound right to you?
I think so.
Yeah.
I mean, yes, agree.
If you have opinions, you can keep things
much simpler for sure.
And I think.
Laravel is an opinionated framework in the
sense that it's born out of the Rails
lineage of sort of inspired frameworks,
which Rails being an opinionated framework
written by a pretty opinionated developer.
We definitely follow in those footsteps,
and it makes our life easier to an extent.
So we try to keep things like, as far as
Laravel goes, keep things extendable and
flexible where people can write sort of
third -party packages to...
hook into maybe some interfaces we've
written or contracts we've written in our
queue system.
Like, hey, as long as your queue system
does like a push, a pop, or whatever, you
know, queues do, you can just write your
own driver and support your own queue.
So we try to do that and it helps us keep
the core pretty minimal.
Yeah.
Do you value backwards compatibility a
lot?
Like, do you try really hard to maintain
that or is that like a thing you're
willing to sacrifice for cleanliness?
So...
As Laravel has gotten older, and I
released Laravel in 2011, I value
backwards compatibility more so, the
longer that Laravel is around.
When Laravel was very young, like in 2011,
we made breaking changes all the time,
because there weren't that many users.
Most of them were early adopters that were
sort of used to living on the cutting
edge, and were perfectly willing to have
breaking changes in the name of like
progress and fixing things that kind of
weren't panning out in the framework.
And we were sort of still feeling our way
through.
what we wanted the framework to be like
and what we wanted its personality to be.
Now though, 12 years later with so many
businesses and so many developers using
Laravel, I do feel a greater obligation to
maintain backwards compatibility, mainly
because I know how much it sucks to update
dependencies that are breaking things all
the time.
So we definitely value that.
We do releases once a year and there are
usually some minor breaking changes and I
sort of...
think about it in time.
So in our documentation, we list like
estimated upgrade time.
And I try to keep that like 15 minutes,
you know?
So there's a few breaking changes, but
it's not hours of work or days of work.
And try to try to do things that we can
automate as well.
Yeah.
So does that do you find?
So that basically requires you to get it
kind of right in the first place or?
to have some sort of like compatibility
layer that you insert for people that lets
them not have to change if they don't want
to.
So do you feel like you're...
That sounds right.
So are you investing a ton of effort in
trying to get the initial API correct?
Does that sound like you?
Yeah, I would say so.
I mean, we're definitely very hesitant to
take on new APIs because once we do, you
know, we're committed to that API.
So I definitely think those through a lot
before we adopt them.
And yes, we do try to, like say an API
doesn't pan out or it just kind of like
doesn't feel right.
We do try to develop a new API while
keeping the old one.
So like this, say, I mean, let's just keep
it really simple and say like, I hate this
method name that we named this method.
Like we could obviously just leave the old
method in there.
We'll make a new method.
We'll have the old method just call the
new method and everything sort of works.
We do that actually fairly often if we
want to.
Fix things but not break things.
Nice.
Yeah, we should turn off your automated
reaction things.
I don't if you just saw that.
Yeah, what was that?
This is a new Mac OS feature they turned
on by default.
I think if you click the green camera in
the menu bar, there'll be a little video
thing somewhere.
I see that, reactions.
Oh, I turned it off.
Okay.
You do it per app, by the way, so get used
to doing that.
Wow.
Which is a wild decision.
Yeah, so then...
Yeah, I feel like the I heard interesting
things about like how stripe maintains
their their API or there's all of these
transformations They've written going
basically back to the beginning of time
where it's like you can just be on any
version and they will translate it for you
to get to you where you need to go and
that's just like that that commitment to
To not making programmers go back and
change stuff.
I feel like it's kind of an
underappreciated Bit of work that keeps
your thing popular and appreciated and
loved
Yeah, and one thing I've talked about
actually with with Adam Wathen on this
topic is I don't like people to go
shopping on the framework.
Like if I make a bunch of breaking changes
And I think you can kind of see this Maybe
with like view 2 to view 3 I don't want to
put like view and to negative of spotlight
But when you make a lot of breaking
changes and people sort of have to almost
rewrite it feels like if I'm rewriting
Now there's sort of like a question in my
mind of what should I rewrite it in?
And it's not necessarily going to be the
same thing.
And programmers love a new thing.
They're excited to try the new whatever.
So they'll take that They would love
nothing more than to rewrite the whole app
in an entirely new stack.
Not just rewrite, but rewrite in a new
place.
Yeah, with a new thing.
Absolutely.
So I try not to sort of instigate that
mentality in developers.
Because if we have to rewrite,
Why not rewrite in React or Zvelt or in
Laravel's case, why not rewrite in, you
know, I don't know, Rails or Django or
Next .js or whatever it is.
Yeah.
So is there anything besides trying to get
the initial API right and trying to like
not just like be conscious of breaking
changes that helps you keep avoid that
fate?
A lot of the stuff we do, I would prefer
it to be born out of real world needs.
So like surprisingly, when people
contribute to a framework, they will
contribute things that they actually have
never needed in the real world.
And I think when you do that, that's when
you run kind of the biggest risk of not
getting the API right, right?
Cause it's not really born out of any
application need or any business need that
you actually had in the real world.
And I think that's one thing that benefits
Rails and benefits Laravel quite a bit is
that both of the frameworks,
are sort of extracted out of real world
stuff, whether it be Laravel's queue
system or authorization system.
And like, you know, I saw Rails just came
out with a new solid queue that's sort of
born out of their queue experiments and
sort of database backed queues and also
their new solid cache package.
I think that helps you get the API right,
you know, because you know that the use
case is valid, that the methods make
sense.
So I'm always very hesitant and I've
actually closed PRs on the Laravel
framework that I could tell were sort of
built in a vacuum and they weren't
connected with any sort of real
development need.
They're just sort of cool to have.
I think that's risky.
Is there a smell that you noticed that
those have?
Yes.
So I see them come in, like we'll get,
let's say we get one PR that adds a
feature and it gets merged.
someone will see that it gets merged and
then open a very related PR to add maybe
like a complimentary method or something
that I know for sure they have not had the
need for yet.
They only saw the first PR get merged.
And so they're like, oh, well, it would be
cool actually if we had this too.
And I almost always close those.
Interesting.
I can tell.
I can tell where they're coming from.
I assume there's probably a little bit of
a sense of cache from getting a PR merged
into the framework.
Like do you?
I picture myself as a young developer
seeing that, like, ooh, we added first,
second, and third.
Maybe if I make a PR for fourth, that'll
get in there.
Exactly.
And then I get my name on the contributors
list.
Yeah.
And I get it.
People do get excited about contributing
to big open source projects.
But yeah, that's exactly the kind of PR
I'm referring to.
Gotcha.
Yeah, nice.
I've heard that your comments are a little
bit infamous.
You have a very specific comment style.
I would love for you to opine about
comments.
Yeah, so all of the comments in Laravel
are three lines long and each line is
three characters less than the line before
it and I don't know I honestly don't
remember how or when that started but
eventually it became Kind of a thing and
it felt like I was so invested in it.
I might as well keep going And make every
comment that way from now on
There's actually a pretty funny like stack
exchange post from me.
This is pre Laravel actually I was still a
dotnet developer asking like is it dumb to
care about these sort of aesthetic things
in a code base And most of the answers
were like yeah There actually is better
better things that you could be spending
your time on probably But I don't know it
is sort of like is a small thing that
makes me happy when I go through the code
base and like all the comments are the
Same even though it has no real value but
yeah, it's kind of become just like a
a shtick at this point and we just keep it
up in the code base.
Yeah.
It seems like you have a strong, like,
aesthetic sense or like a sense of craft
and like you care about small details and
things.
Do you feel like that was like, was that a
learned thing?
Like, are people born with that?
Did you pick it up by seeing other people
do it or something?
Like, where did that come from?
Probably a little bit of both.
I definitely picked it up some from seeing
other people do it and not seeing it just
necessarily in programming alone.
Like for example, I used to mow grass when
I was in college and back then my grandpa
would help me actually sometimes.
And after every time we mowed, he would
make me lift the mower up on this like
lift and spray off the whole underside of
the mower before we put it back in the
garage.
So it didn't get any, a single blade of
grass in the garage basically.
And he just sort of had this personality
in general of like, you know, like,
finish the backside of the piece of
furniture, you know, make everything look
good, even if no one's going to see it.
That kind of personality, I guess.
And I did pick up on that and sort of
carry it over into programming in some
sense where if I knew, for example, that
like there was some nasty file took deep
into Laravel that was just gross.
I just like couldn't sleep well at night.
Like I wouldn't want to even use Laravel
at all, you know, because I would know
that deep down in there, it's sort of
like.
Farce and there's this ugly code and I
can't well, how can I build my business on
this piece of trash, you know?
So I think it is a little bit OCD to an
extent in a legitimate sense, but that's
just sort of like It's been a it's been a
good thing for Laravel I guess in the
sense that it's made me really thorough in
terms of the quality of the tool I feel
like this I feel like I I can empathize
with some of this where I think I think
people that create stuff
to create things tend to have this like,
it has to be amazing and like it's trash
otherwise.
And like you just want it to be so perfect
and so good.
And I feel like all of us are just kind of
like, man, it sucks today, but eventually
I'm gonna make it like so good.
Once I get these last few things, it's
just this constant sense of not quite good
enough.
And it can be hard to live with, I think,
because it's not, it doesn't feel, yeah.
Yeah, it can be hard to live that life
sometimes.
when you're focused on the negatives and
like needle things to want all the things
to be perfect.
But I do think it leads to really great
software.
Yeah, I agree.
All right.
Do you do you have a coding hill that you
would die on?
Oh, gosh.
What's an example of a hill?
Like, do you have a hill?
Like all instance methods should be like
one line, Max, maybe three lines if you
are an emergency kind of thing.
Um.
Wouldn't say I have a hill that specific
No, I can't even honestly think of like a
certain hill I would necessarily die on in
that sense I Mean I I think in general We
have a few guidelines that I try to follow
I like to keep methods fairly short I
would say but not necessarily a specific
number of lines of code one thing We also
try to avoid really small thing, but I
think it helps
in terms of code readability is we never
make callers of like a function pass
Boolean flags to change the behavior of
the function.
So basically you don't want to end up with
a function that's like some method name,
open parentheses, false, true, false,
true, true, false, you know?
And it's just like imperceptible from the
outside what any of that means.
So in all of Laravel, you never would have
to pass a Boolean flag to any method.
So the way we work around that, you know,
is usually having another method.
Like, let's say we have a method that
generates a URL.
We have a function called URL.
And maybe sometimes people might be
tempted to put like a Boolean flag if they
want the URL to start with HTTPS instead
of just HTTP, like a secure flag, let's
say.
We would just make like a secure URL
function that requires you not to pass the
Boolean flag.
So we do that throughout Laravel.
But I don't know.
None of them are like...
That's actually probably one of the
strictest rules we have.
I would definitely die on that hill.
Before I would put a Boolean flag in the
Laravel docks, I would rather delete the
project, I feel like.
Nice.
By the way, I think that's a really good
anti -pattern to know about.
The term to Google is control couple.
I remember reading about this...
quite a bit.
It's it's sort of like you're effectively
leaking into all the colors of this
method, the conditional that's in the
method.
You know, it's like, everybody knows I got
a conditional and it looks like this.
And it's like, that's not, you're not
supposed to know that.
That's a secret.
Yeah.
That's true.
Yeah.
Call, call the other.
Yeah.
So, so split them into different methods
and call, call what you actually want is I
think a better approach.
By the way, I just like Google control
couple just to remind myself.
And the first result is the anti pattern
that I was speaking about.
The second one is, are you in a
relationship with a controlling partner?
Nine signs.
It's bad.
And it's bad in a lot of contexts.
Yeah.
So no.
So no control couples allowed in there at
all.
No.
And you know, one thing, if I can bring up
something, I think one thing I find
interesting about clean code.
is how clean code is seen across different
ecosystems.
And you may have some insight into this
because we kind of come from different
ecosystems in a sense.
Yeah.
But like when you say clean code, do you
mean the book or the concept?
I mean, a little bit of both, actually.
So like in the PHP and dot net ecosystems,
clean code as in the book and clean code
as in like the Uncle Bob sense of clean
code, if people have heard of this person
is like super popular.
So.
tons of like tons of directories and
architecture and interfaces around
separating concerns really, you know, a
lot of ceremony around getting all of the
application architecture just right with
all of these boundary layers and how they
interact and things like this.
And it's just like a super popular thing
and in .NET.
And I think that's leaked over into PHP
and maybe Java as well, let's say.
Whereas like in JavaScript and
Even in Ruby, to an extent, I feel like
it's not the same emphasis.
And it's like not the same influence of
the same people has bled into those
ecosystems.
And it creates sort of different
definitions of what clean code means.
Whereas like in PHP and .NET and Java, I
feel like clean code means your code is
separated into different files in the
right way.
And they have the right interfaces.
And...
You know, they're typed the right way.
Whereas like in Ruby, or at least in
Rails, it feels like clean code is sort of
code that reads like prose or is, you
know, like more English, plain English or
something.
And it's not the focus is not so much on
like architectural purity as it is in like
ease, how easy it is to read and, you
know, kind of the syntactic sugar of the
code.
Yes.
Which I find interesting.
Yeah, that is interesting.
The word that popped into my head, it was
like idiomatic.
Yeah.
It feels like languages will have
different idiomatic ways of writing code
that is kind of distilled from the culture
of the people who are writing it in a way.
Like you could certainly write, like the
thing when I think of clean code, I think
of the solid principles, like the capital,
all caps.
And like, I would say...
I bet DHH would be like, yeah, that's not
that interesting.
I'm interested in how the file looks.
I'm a software writer, and I want to write
it like an essay a little bit, and it
should look a certain way and feel a
certain way.
And this thing you're telling me about the
Liskov substitution principle about how
this class should be able to stand up for
that class, I don't really give a shit
about that.
That's not that interesting to me in this
hypothetical world where I'm refactoring
in this certain way and using a class
hierarchy.
And so I think it's.
But I think that resonates that sort of
approach resonates more and maybe like
other o languages that are just just with
different people in them Yeah, and I think
one one place I was going with that is the
salt like take for example the solid
principles of clean code Yeah, which I
think in general are kind of helpful Some
of them are more helpful than others.
I think But I think it can lead to this
sort of
idea that clean code can be boiled down
into like a checklist.
And if I do these things in my code, the
code is going to be good and easy to
maintain.
And it's sort of, I feel like it's almost
a little bit of ironically, a lazy way to
code in the sense that you're, you can
not, you can sort of check out your real
critical thinking and just say like, as
long as I'm doing solid, the code is good
in this very robotic, you know, fashion.
Yeah.
And I think it's sort of chasing a silver
bullet to clean code that maybe isn't as
clear cut as you would like it to be.
And I've seen this a lot when working with
especially younger developers who are just
getting into code and they're kind of
taking code serious, which is good, but
they sort of latch on to sort of these
checklists that they can follow to achieve
clean code.
And I think it lacks a little bit of the
intuition that is needed.
when writing clean code, a little bit of
just like the experience of coding for
years and kind of knowing, hey, typically
when I've written code in this way, it's
gone poorly.
You know, like when I've written code in
this way, it's gone well.
And that's just born out of years of
programming, I think.
It can't be summarized into a checklist.
Yeah, I feel like that's also kind of what
makes coding so hard is like, hey, did I
pick a good architecture for this?
You can't even know that today or this
year.
Yeah, you know, you'll you'll know that
maybe like three years from now when like
you're trying to make these complicated
changes or like new people are coming up
onto the system and trying to understand
how it works and reason about it or it's
it like takes a long time to even get good
feedback from your decisions.
Yeah, it really does.
Yeah, unfortunately, you're making a piece
of a pottery.
You can be like, all right, this is a good
bowl of water.
It's you know, it's watertight.
It didn't fall apart.
And like, yeah, it looks nice.
I did it, you know.
Yeah, but like does did the queue system
turn out well?
Do we pick the right API for this or like
are we gonna regret parts of this later
that we couldn't anticipate?
That's that all comes much further down
the road.
Yeah.
Yep.
How do you feel about testing?
I like testing.
We write.
I write a lot of tests.
Laravel has thousands and thousands of
tests.
I don't do a lot of tests first.
I would say I do a lot of tests during
kind of tests after.
But yeah, huge fan of testing in general
would not be able to ship software
confidently without tests.
I don't think Definitely think it's you
know something that every developer should
learn But yeah have no strong opinion in
terms of like test first or test driven
development, I would say Gotcha went so if
you're what does it look like when you
are?
Tackling a kind of law a large new Project
of some kind you like are you a
prototyper?
Like, do you...
What does this look like?
When do the tests show up?
Okay, well, like, let's take, for example,
like a new package or a new feature in
Laravel.
A lot of what I do first is just go into a
blank text file and start writing kind of
my dream API for what this is going to
look like from the outside in.
So basically, kind of like what the
documentation is going to look like.
What are the examples that are going to be
in the documentation?
And sometimes I even call this, you know,
like documentation -driven development.
I think that helps iron out a lot of the
the warts and like problems in your idea
if you have to write out sort of how
people will use it and I also kind of
carry that over into Say I'm building like
a full app.
I have a whole new product idea I'll build
a UI first And it doesn't have to be like
pretty, you know, I'll just use basic
Let's say tailwind classes to sort of get
some basic shape in place, but I'm
definitely not like, you know
tweaking every drop shadow and every
gradient.
But just to make sure that the user
perspective is correct first.
And I didn't used to be this way.
When I first started programming, I would
do like back and I'm going to build this
whole API first that has no front end.
It's front end agnostic.
And that sounded like really appealing for
some reason to my developer brain.
But I was bitten by that sort of several
times where I would build this big API
that was front end agnostic.
And when I went to write the front end,
there was all these awkward things I
needed to do that the API didn't
accommodate for.
So now I start from the outside and work
my way in both if I'm doing an application
or I'm writing something that's just
purely a Laravel feature, like a package
for Laravel that doesn't have a UI at all.
In that case, I would start with a
documentation level, basically.
Gotcha.
And do you like to have like...
Will you spin up a new Laravel app to try
to use this thing?
Like you make it like a toy example kind
of?
Yes.
Exactly.
I do that every day almost.
I actually just have a blank Laravel app,
you know, ready to go to kind of like a
sketch pad that I can just write, drop an
idea into.
Got it.
And then from that app, you're like
writing calls you wish you had and then
updating the framework to try to support
that.
Yep, exactly.
Nice.
And then once you have it the way you like
it, some of those calls probably become
unit tests on the new functionality.
Yep, then I'll just go back in and fill in
the test and you know ship it out there
pretty much.
Yeah, are you are you?
What was your balance?
Would you say between like kind of lower
level unit tests versus higher level
integration type things?
This is another thing that's changed.
I think over the years Earlier in my
career.
I wrote a lot of low level tests.
They ended up feeling really brittle I
think I think there are certain classes
that like lend themselves well to low
level testing things that are sort of
really like say like you pass in a string,
you get out a string, you pass in an
array, you get out an array.
And they're like these very unit testable
types of classes, like a classic like
calculator class or something like that.
Where I feel like those kinds of things
actually lend themselves well to like low
level testing or even just like test
driven development.
But when I'm building web applications, I
test from like the feature level or like,
I guess you would say the controller level
of like, let's make an actual simulated
HTTP request into this endpoint.
we're actually going to assert that
certain records exist in the database
afterwards.
We're going to assert that a mail was
maybe dispatched to some user or a mail
notification or text message or whatever.
And some of those things might be sort of
like faked.
Like, of course, we might fake like the
actual mail sending.
But in general, the test is very high
level.
I just feel like I get so much more
confidence out of those tests.
And I guess the downside is if something
goes wrong, maybe it's not as granular
what exactly went wrong during the
request.
But in my experience, it's still been very
quick to sort of diagnose what was
happening.
And I just get so much more confidence out
of those tests versus like these very low
level tests that almost start to feel
coupled to the implementation of the code
that they're testing in a way.
And in general, I find that also,
the higher level test helped me achieve
what I consider to be the goal of testing,
which is one, shipping software
confidently that you know works, but then
also two, being able to change the code
without significantly changing the tests.
And I think a lot of people actually get
their tests so coupled to the code because
they are so low level that they're almost
one -to -one in terms of when they change.
And to me, that's like losing one of the
main benefits of even having tests is,
the ability to refactor the code or
improve the code without changing the
tests.
So that's why I kind of prefer, honestly,
high level end -to -end tests.
Gotcha.
Yeah.
I would say my style has moved that way as
well recently.
I was a pretty hardcore TDD practitioner.
So I was like, well, I need a lot of unit
tests to drive the next step in this
process of me writing another method and
changing how that method behaves.
But I had of come to the same conclusion
you did, which is that,
The maintenance burden of tests that are a
bit too low level is really pretty high.
And it just doesn't feel...
I feel like I get way more leverage on the
higher level ones.
Yeah.
And you know, like, I keep bringing up
Adam, but I think Adam Wevin actually has
one of the best testing video courses out
there.
It is a Laravel -based course.
It's a video course with like, I don't
even know how many hours of video.
It's gotta be like 100 hours.
But he does a high -level test, but tests
first.
And I think even if you don't use Laravel
or PHP, it's such an awesome course to
check out because it demonstrates, I
think, how to write tests that aren't
brittle but still write tests first if
that's kind of like what people are
interested in.
I don't know.
I found it super cool.
It actually was very influential, I think,
in my own testing journey in a sense.
Cool.
Nice.
That's test -driven Laravel, I think it's
called.
Yeah.
I remember that that was a beast.
I think I remember talking to him as he
was trying to get like the 80th through
100th video released.
Yeah, yeah, that was a quite a labor.
How often are you looking at like a big
chunk of code that you're trying to
understand?
Does this happen frequently with like
contributions or like picking up a
different library or something?
Is this at least weekly?
I would say I don't know I would go so far
as I daily, but weekly for sure, mainly in
the form of pull request, but also in the
form of code that.
employees here at Laravel have written and
we kind of have a peer review process
where probably other people have looked at
it first and we're kind of getting to the
point as well where I don't scan every
single line of code in our commercial
products.
I'm just gonna be such a bottleneck.
But at the framework level, I actually do
read through every pull request to this
day.
I'm the only one that merges pull requests
into the Laravel framework still.
So I review every single pull request and
of course some of them are pretty
complicated.
And so I would say about once a week I'm
looking at a pretty beefy pull request
that let's say is 20 files changed.
I would consider that kind of like in my
context a pretty big pull request for the
framework and sometimes even more than
that.
How do you do that?
Well, I don't know.
I try to tackle like the hard things
first.
So just in general, not just on this
topic, but if I have something that I'm
trying to tackle, I'll just do the hardest
task first and just get through it.
So I kind of do that with pull requests.
I don't really have any secret other than
just like gritting your teeth and pulling
down the pull request and going through it
kind of file by file.
So first, I'll take like a high level
cursory overview, just like in the GitHub
web interface and kind of get my head
wrapped around.
in general what they're trying to do and
then I'll pull down the pull request
locally go file by file checking them off
on GitHub as I go, you know, making sure
everything looks good renaming variables
refactoring methods if I need to, you
know, things like that.
Interesting.
Okay, so you'll so you'll you're editing
you're making edits here as you go.
Yeah, like maybe pushing to a branch that
is like their changes plus yours kind of
thing and merging that later.
Yep, exactly.
And I will say that like the bigger your
poor request is to Laravel, it has to be
really valuable.
So I'm all about like bang for your buck
poor requests.
So my favorite poor requests are obviously
poor requests that are like two lines
changed, but immense developer value like
added.
Because obviously almost no maintenance
burden, tons of value added for the
hundreds of thousands of people using
Laravel.
Like that's ideal.
The bigger your poor request is,
it has to be really freaking good in terms
of value added because I have to take over
all of the maintenance burden for that
feature going forward.
And it doesn't matter honestly how hard
the person promises that they'll stick
around and maintain the feature.
Just like you have to understand that life
happens, they change careers, maybe
they're in a different language, they're
at a different company and they're not
even using PHP anymore and it's like, hey,
sorry.
I don't remember exactly why we did this,
or I don't even use PHP anymore.
So I just assume that we're maintaining
this forever without any help.
And in that case, the feature has to be
freaking awesome if it's going to be like
20 or 30 files changed in the framework.
Yeah, that makes sense.
Yeah.
Do you care about good commit messages?
Yeah, when we squash things down, yes.
Especially if it's pretty complicated,
what's being added.
I try to add something meaningful in my
own pull requests at least Just to kind of
you know make it easier for people if
they're browsing through and seeing what
changed Mm -hmm And so do you is this
mostly like a description of like a high
-level description of what's what's going
on?
What's part of this this change?
Yeah, pretty much So like we recently
refactored some stuff in Laravel to make
it a little bit slimmer a little bit
easier to onboard
sort of new developers into a little bit
less overwhelming out of the box.
And when I made that change, I actually
wrote a pretty detailed description in the
get commit message of like everything that
changed and why it changed and the
implications of that, because it was a
sort of beefy PR that fundamentally
changed some things in Laravel.
So if the poor request is more, you
there's a lot of kind of moving parts and
a lot of things happening, you know, I'll
write a more detailed message.
If it's a pretty simple change, that's
pretty self -explanatory.
I might not write much of anything.
Right.
Do you draw diagrams or anything as you
work?
Do you keep notes or sketches or anything?
Rarely.
I mean, I can only think of like a handful
of times I might have done that.
There are times I wish I had a whiteboard
next to my desk.
I feel like when I used to have that when
I was like in a cubicle, I used that
actually a lot to sketch out things.
So maybe the fact that I don't sketch out
things is just lack of access to a quick
whiteboard, but...
No, it's not something I really reach for
very often.
I'll more like write, I would say, like a
manifesto of a new feature more than I
would like draw something.
So I might open up Notion, go to a new
document, let's say, you know, new
database feature in Laravel and type up
like a pitch for that feature just to kind
of wrap my head around it and the benefits
and the drawbacks.
I do that more than like drawing diagrams,
I would say.
Gotcha.
Do you feel like there are habits?
that you follow that help you make good
code.
Kent Beck has this great quote, which is,
I think he says something like, I'm an
average programmer with above average
habits.
That's interesting.
Yeah.
I mean, asking a lot of questions as far
as like, why does it have to be this way?
Why does it have to be that way?
You know, challenging assumptions in terms
of what we're building.
Do we actually need this code at all?
I think is a good question to ask.
Totally.
Which is, you know, not probably asked
often enough.
I sort of agree that like I see myself as
a very average developer with, I think my
power in a sense is I have a very low
threshold for like pain, developer pain.
And there are just like certain APIs.
I'm just not willing to stomach.
And I think my threshold is pretty low
compared to other programmers around me
that I see where it's like they're willing
to put up with a little bit more
complexity, a little bit more like
cumbersome APIs and just sort of live with
it and move on with their life.
Whereas in Laravel, I'm just have such a
low threshold for what I'm willing to
tolerate in terms of like cumbersome,
awkward, gross.
unrefined API's are.
And I think that helps a lot keep Laravel
nice and clean and feeling fresh and
enjoyable.
Yeah, I thought that's kind of the secret
of quality is just like caring a little
bit more.
Yeah, I think that just works in almost
everything is like it's not that like I'm
so brilliant programmer or a product
person.
I think it's a little bit more just like
I.
I have low pain tolerance.
Like it's I get more annoyed maybe than
the average person.
Yeah, when things are not awesome.
And so I'm just like, well, can't we just
make it better?
And often the answer is yes.
But you only get to that.
Yes.
If you're like, I find this too annoying.
Like I want you to make it better.
Yeah.
So I've long thought that was sort of one
key to, you know, Laravel success in a
sense.
It's just you.
Yeah.
You not being annoyed.
Yeah.
Being okay with pain.
Yeah.
And I think needing things, you know, I'm
not I don't feel like an exceptionally
gifted computer scientist, you know, I
kind of prefer things to be easy and
digestible.
And, you know, so I tend to try to write
code that way.
I mean, it's probably it's probably better
that you aren't because if you were a
super brilliant programmer, it might be
hard for you to know that you have written
something that is hard to understand or
follow.
Yeah, I agree.
I think I'm an average developer that hits
average developer problems and writes
solutions for the average developer, and
that is a big market.
There's a lot of people there.
Yeah.
Yeah, nice.
So if you think about your...
So maybe you're an average developer, but
let's...
If you think about your programming skill
over time, when was that curve the
steepest?
In terms of when did I improve the most?
Yeah, when were you improving the most and
what were you doing that led to that?
I feel like I made the biggest leap during
my dotnet days when I was working with
some really talented dotnet programmers
that were much smarter than me and had
much more experience than me in building
software.
And I just leveled up like extremely
quickly in that environment, which kind of
sucks because I feel like I'm not in that
environment anymore necessarily.
Yeah.
And I it's just awesome.
If.
early in your career, you can be around a
great team of people that really know what
they're doing.
And not in the sense that like they're,
you know, ivory tower people, but just
they've got a lot of experience building
and maintaining software, and they know
what works, they know what doesn't.
And I just think you can level up so
quickly in that environment.
Yeah, I think if you're a newer programmer
optimizing for the quality of your
teammates is probably the number one thing
like over
product or salary like, oh, I'm super
excited about the app or like I would make
a lot of money.
Okay, fine.
But like, how good are the people on your
team and are they willing to teach you?
That's that's the thing I'll be thinking
about early in my career in particular.
Right?
Yeah.
Did you?
So when these when you were getting better
by working with these more experienced
programmers, what what was the knowledge
transfer like?
Was it happening mostly in code reviews?
Was were you sitting at lunch talking
about this stuff?
Were you pair programming?
It actually was more like in the code in
the code reviews like and I was not a very
good programmer.
I had only been programming for you know,
maybe a year professionally at this time
and obviously making like just you know,
new programmer mistakes or writing things
in a way that maybe I wouldn't write today
and they'd be like, hey, what if we wrote
it like this way?
Or have you thought about like taking this
approach and it would just like click and
be like, oh yeah, that actually is a much
better way to do things.
So it was a lot of that, a lot of just
friendly review and pointers in the code.
And then also looking at how they wrote
code.
Because say I just had a down afternoon
where I didn't really have much to do
because I had wrapped up a project or
whatever.
Then I could just go browse some code and
just see how things worked and see what
people were doing.
Do you ever do that now?
Not really, no.
I don't do that a lot now.
But I did.
definitely do that early in my career just
to kind of like get insight into how
people were tackling different problems.
Yeah, totally.
It's kind of shocking to me how I was
watching in that Laird Mill documentary,
what a big role Ian Lansman played.
I didn't recognize him as kind of like the
daddy that like kind of incubated this
thing and made it happen.
That was really fascinating.
Yeah.
I mean, I think Ian took a pretty big risk
on Laravel, I guess, early days.
I had released Laravel maybe six months
before I got an email from Ian, like, hey,
we build customer support software and we
kind of want to modernize some of our, you
know, PHP code base onto Laravel.
It looks like kind of a cool tool.
Would you want to come work for us and
help us do that?
And Laravel was like not a...
It was not a big thing at all.
Definitely not outside of PHP, but even
within PHP, it was not even in the top,
let's say four or five frameworks that you
might choose to write a new application
in.
So in that sense, it definitely feel like
he was placing a bet on a pretty young
tool.
But what was cool is when I got there, he
actually gave me probably six months to
just work only on Laravel, building out
features that we knew we would need.
Like we knew...
we would need a queue system.
We were handling lots of incoming email,
building a customer support tool.
We needed to really queue a lot of
incoming email for processing later.
We wrote the whole database migration
system.
We improved the ORM a lot.
Tons of stuff that we knew we would need,
I built during those months.
So yeah, I mean, it was a pretty pivotal
moment for the framework.
He's also the one that sort of first
encouraged me to have like a Laricon in
general.
He was like, hey, I think we could do a
conference about this.
about Laravel.
And I was like, man, I don't know.
Like, I don't know if anyone's going to
come to that.
And he was like, you know, even if it's
only like 100 people, we should do it.
It'd be fun.
And that's just kind of how it got
started.
Yeah, that's so cool.
I feel like my takeaway from that was that
it can be so powerful to believe in a
person and a thing and like encourage them
to raise their ambitions a bit.
Yes.
Yeah, agree.
I've done that in the Larval ecosystem
sometimes where I'll see like someone
write something really cool and I'll just
like email them and be like, I just want
to let you know, like this is a pretty
cool thing.
You know, if I can ever be in any
assistance to you, you know, like, let me
know.
Like not any kind of like I'm not looking
for any business deal or anything like
that, but just like if I can like put you
on in any way that helps you, you know,
like, let me know.
Yeah, I think that's really good.
Like, like kind of like watering the seed
a little bit, but it also seems like Ian
watered the seed and also like
told you like this could be bigger.
This can be like a real thing.
This conference can happen.
People could like really love this
framework.
Like it was like raise the ambitions, not
just like support.
I think this is good, but like this can be
more than you think it could.
Yeah, yeah, totally agree.
Because at the time, like when when I was
writing Laravel, the most popular
framework in PHP was a framework called
Symphony and like and also code igniter.
And I was like Laravel will like.
obviously never be his biggest symphony.
Like that's what I was thinking in my
head.
And that was fine.
Like I was just building Laravel for
really for myself, honestly, to build my
own ideas.
But if anyone else used it, that was just
added bonus.
And then once it was his biggest symphony,
it was like, it'll never be as big as
rails, you know, like it'll never reach
that level of like market permeation.
And then eventually sort of basically got
to that point.
So I don't know, just crazy.
But yeah, he did.
kind of seemed to always believe that it
could be much bigger than I did.
Yeah.
So, yeah, I hope people sort of take that
lesson.
I don't think it...
In this case, he gave you a job, so it
literally cost him something.
But I think the raising someone's
ambitions and helping them believe
something could be bigger doesn't usually
directly cost anything, but can have huge
impacts.
Yeah.
So you're one of two people that I talk to
pretty regularly, the one being Adam, who
have...
taken an open source thing and then built
a pretty huge business around it, which is
kind of wild.
And it feels a little bit like the dream.
It's almost like the best sort of freemium
business there is, whereas like the open
source thing is free and then there's paid
things around it.
Yeah.
Any thoughts on like how you pulled that
off?
Because I know you left Ian and you were
like, you're like, all right, I'm going
full time on Laravel.
Did you have a path in front of you when
you did that and knew how you were going
to do it?
When I first wrote Laravel, no, I had no
idea.
And that wasn't even the intention,
honestly.
The goal was to write my own SaaS using
Laravel and start my own business that
way.
And Laravel kind of turned into this meta
business.
But when I first wrote my first commercial
product, which was Laravel Forge, which
was kind of this deployment tool that you
could use to deploy your Laravel apps, I
wrote that and launched it in 2014.
And even in the weeks before it launched,
I was talking to my wife and I was like,
if it just pays our mortgage and our
bills, that'd be awesome.
And we can just have that money for fun
money and whatever.
But within a few weeks, I was actually
making more than I was making at
Userscape.
And soon I was making double what I was
making at Userscape within a couple of
months.
And then it was like, oh boy, this is a
real business at this point.
And that's basically when Ian was like,
look, you can't work here and run your own
full business at this scale.
OK, so we sort of transitioned me out of
userscape at the end of 2014.
But I mean, it was all of it was like a
surprise to me, honestly.
I guess I just underestimated how many
people were going to be interested in that
kind of thing.
And then once that was out, we just kind
of kept building more commercial products
around Laravel and went on to launch, you
know, four or five more things.
Do you ever talk publicly about the
revenue of those things?
I think I have a few times so like a
couple years ago.
I think I had I did a podcast series on my
own podcast of like Building Laravel to
like ten million dollars in sales as like
a solo founder and that was a few years
ago And I mean I think all time Laravel's
an ecosystem has passed like 30 million in
revenue or something like that That's the
commercial products built around open
source.
Yeah, the commercial products.
Yeah and Across all of them.
So we have five forage vapor on voyeur
Nova spark
And all together, I think they've passed
like 30 million lifetime revenue since
2014.
So pretty crazy, honestly, for like an old
source tool.
And we've also done conferences, but
conferences have always been a very
breakeven thing for us.
We've never made any significant money
running events like that.
Yeah.
But it fills the excitement bucket,
though.
Yeah.
That's the only reason it exists is to
just sort of build excitement and goodwill
like in the community.
Yeah.
So I went to the last Lericon, it was
great.
And like the excitement is real.
And like I was talking to some tuple users
there and that like filled me up with just
like that's the in -person interaction
with people that you normally like only
talk to through the internet is like, it's
amazing.
Yeah, I always come away from those events
like super energized, honestly.
And I didn't realize how big, how much I
was missing that during the COVID years.
But when we did our first Lericon since
COVID, which was actually like July of
this year,
I was like, wow, I actually really miss
this a lot.
So I'm glad we got back on that train.
And I'm actually I just signed the
contract for 2024 LaraCon today.
So we'll be we'll be back next year as
well.
Cool.
And so it seems like it sounds like you're
spending a lot of your time focused on
Laravel itself and less on the commercial
products now.
So have you have you freed yourself up
mostly from that?
From a coding perspective, yes.
So what I do is like at the beginning of
each month, I'll write up like a pitch of
all the things I think we should do on the
commercial products and kind of who I
think should work on them.
But honestly, like that, even that is sort
of flexible based on what the employees
are feeling like and what they have an
appetite for.
So I'll write up the high level product
pitches and maybe a few technical details
of like how I think maybe it could work.
But then they're sort of like free to go
implement those things as they see see fit
I mean they know the code base is better
than I do at this point like I actually
wrote every commercial product at Laravel
from start to finish in terms of the 1 .0
version that was initially launched to
customers So I did know the code base is
like top to bottom at one point but over
the years I've of course forgotten them
and now they know more than I do so they
do that and I mainly focus on the open
source stuff and
I mean, on a day -to -day basis, I'm
almost exclusively in our open source code
because I think the framework is sort of
the foundation and centerpiece of the
whole ecosystem.
So I'm really focused on making sure that
stays really well maintained.
And then are the other Laravel core team
members paid as well?
Are they employees of you?
Yeah, so we have 10 employees and they're
all full -time paid employees.
And we actually have two of them that are
really
It's pretty exclusively open source, full
time, salaried, open source people that
help me triage things, help me with the
release process, because we have a lot of
packages these days, and we do weekly
releases, help me with that whole process.
Just make sure things are like running
smoothly.
If there's a really gnarly bug that I
don't have bandwidth to really chase down,
like we have a guy that's just really good
at chasing down hard to find bugs that are
deep into the framework.
So they help with that.
And then the other programmers are
primarily on the commercial products seems
like such a huge advantage if you can make
it so that your Open source project can
have some sort of revenue stream attached
to it That then lets you hire people to
work on the open source project that feeds
the paid thing.
Just like a beautiful flywheel Yeah, I
mean it is a huge huge advantage and I
think there's like
only a few categories of open source
project that actually lend themselves to
this sort of model.
Unfortunately, I think there's so many
important libraries out there that just
never seem to lend themselves to
significant revenue.
But frameworks are definitely one of them
where it feels like you can kind of
leverage this model.
But there are some open source packages
like you have a Excel spreadsheet
manipulator.
package on GitHub.
And it just never seems those kinds of
packages just never seem important as they
are and widely used as they may be.
Never seem to make any significant
revenue, you know, unfortunately through
like donations or whatever.
And people ask me all the time, like, how
did you make open source sustainable?
And I don't feel like I actually made open
source sustainable.
You know, I just built commercial products
around an open source platform.
And to me, that's sort of a little bit of
a different thing than actually making
open source sustainable.
Right.
Right.
It's like open source.
Open source became sort of lead gen for
these paid products that plugged in
nicely.
Yeah.
I don't know very many people at all that
just like maintain open source and make a
couple hundred K a year on GitHub
sponsorships.
That seems like incredibly rare.
Right.
Yeah.
Totally.
Yeah.
Well, if I ever started open source tool,
that will be my goal.
It's something that could get that
flywheel going.
Because man, what?
What a huge advantage to like have all the
incentives aligned.
Like you just like, yeah, I want to hire
more people and pay them to work on this
thing that we happily give away for free
because that generates new customers who
can new potential customers for these paid
products over here that lets us hire more
programmers.
It's just, it's, that's great.
Yeah.
Yeah.
Yeah.
It's been nice.
Cool, man.
Awesome.
Well, thanks for sharing all this
programming wisdom.
That was a great chat.
Yeah, that was a, yeah, it was a fun
conversation.
Covered a lot of ground.
Yeah, we did.
I enjoyed it.
Cool.
Well, thanks.
Thanks.
Thanks for having me.
Yeah, take care.