Build and Learn

In this episode, we're joined by Alan Shreve, the founder and CEO of ngrok, to discuss the future of software development and the emergence of innovative tools that simplify complex tasks -- like ingress. We talk about ngrok's solid approach to error handling, which enhances troubleshooting and user experience by assigning unique codes to each error. The conversation also delves into the evolution of ngrok, an "ingress as a service" platform designed to streamline the setup of web application infrastructure by abstracting complexities of networking, thereby reducing your workload.

We address the challenges in distributed systems and the importance of automating processes, focusing on the role of tools like Heroku, Vercel, and CloudFlare in managing infrastructure and security. We explore the concept of edge computing and globally distributed applications, envisioning two potential futures - one with advanced storage layers handling global distribution and another where applications can split between the origin and the global edge.

The discussion also highlights the shift in the industry away from tasks like memory management and assembly language and the rise of cloud-based tools, which lowers the barrier to entry for new developers. Despite the potential pitfalls of abstraction, like the reduced need for developers to tinker and learn, we see this as a positive development. We wrap by emphasizing the end goal of software development - delivering a product that serves the customer's needs, facilitated by tools that simplify and standardize the development process.

Resources:

Creators & Guests

Host
CJ Avilla
Developer Advocate @StripeDev. Veteran. 📽 https://t.co/2UI0oEAnFK. Building with Ruby, Rails, JavaScript
Host
Colin Loretz
I like to build software and communities. Building software at @orbitmodel 🪐 Coworking at @renocollective 🎙Sharing software learnings on @buildandlearn_
Guest
Alan Shreve
Founder at ngrok.com

What is Build and Learn?

A podcast about software development and developing ourselves as software engineers. Hosted by CJ Avilla and Colin Loretz.


Colin: Welcome to Build and Learn.

My name is Colin.

CJ: And I'm CJ and we are excited
to sit down with Alan Trive today,

the founder and CEO of En Groc.

We're gonna talk about.

The future of software development.

We're gonna talk about how Enro is
solving all of your problems and

abstracting away the tricky parts of
networking and building your application.

We'll talk about global ingress
and lots of other fun stuff.

So let's get into the episode.

Colin: A lot of our clients were
like, Hey, we have Salesforce and we.

have these new iPhone things that
came out and we want an app that's,

tying into our C R M and our cms.

And so it was doing a lot
of, early web hook stuff.

a lot of pubsub, hubub and like
integrations and getting into

ultimately what brought me into
Techstars was we were trying to build

what eventually became like Zapier.

a little bit more like a SendGrid
for integrations though, or Twilio,

like you drop us into your code
base and turns out, you have to

raise a lot of money for people to
want to drop an entire integration

framework into their code base.

But, yeah, mostly a lot of the
things that you guys have run into

with like web hooks.fyi and things
where it's like everyone does this

differently and so we're gonna
make the one API that standardizes

all of it and turns out, in 20.

12 you.

It just wasn't the same as it is today.

And now you have like APIs coming
out that are trying to do this again,

like Merge and Finch and all these
different apps that are going after,

these are all the payroll APIs.

Here's one API to do all payroll APIs.

We were like trying to do all
of them and it was just a lot.

And I think that's where I, I've been in
the webhooks Google group since whenever,

at first, whenever Jeff started that.

So it's I've just been like
on the edges of just watching,

message passing on the internet.

Just still the same, still happens still,

Alan: hasn't changed too much.

Yeah.

Do you know Jeff?

Colin: just a little bit.

we've got some like shared, co-working
background and web hooks and things,

Alan: yeah.

I worked with Jeff back at Twilio.

yeah, it's interesting.

That's, it's definitely interesting, what
you're talking about, a building, an API

that like covers up, a bunch of APIs.

It's.

Kind of like the industry creating a
standard or someone in the industry

trying to create a standard api.

I'm pretty skeptical of those.

I think, if you look at technologies like.

Terraform where it would've been
really easy for them to say there's

a storage bucket resource and we'll
abstract it over GCP and Azure and aws.

And they like explicitly chose not to
do it because I think they recognized,

and I think a lot of other people
have recognized that it is very, very

hard to abstract around those APIs.

It's incredibly hard.

You'd need

something to be like almost, purely a
commodity and very little differentiation

before that thing starts to make sense.

Colin: and most of those services are
trying to differentiate, and so they all

come out with what makes them different.

And then

Alan: Exactly.

So you're not aligned.

right.

Um, which is, which is
really interesting as well.

CJ: Even with even with
standards like OAuth, right?

Like I assume you're running into that
now trying to build like the OAuth

pieces to the ngrok infrastructures.

oh yeah, we wanna do OAuth.

But everyone does it just a little
bit differently with little different

scopes and a little different, like
data you get back and a little bit of

different, is it in the header or is
it in like the response or whatever?

Yeah, just trying to paper
over that seems impossible.

Alan: Yeah.

it's interesting, just for those
listening, EDRO, has added some

recent capabilities where you can
basically put OAuth in front of

anything that you expose via edro.

You basically tell it, put
Google in front and it will

OAuth or redirect you to Google.

and then back.

we've implemented a number of
different providers, for OAuth.

And you're right, that it's
interesting the OAuth spec.

Is mostly followed by everyone to the
point where like you can pretty much build

the same thing and it works for everyone.

The place where all the providers
differ is around things that

the spec very explicitly says,
this is not our problem, right?

this is implementation defined,
and so like you go figure it out.

and so that makes sense that
everyone like has diverged there

into like slightly different ways.

And for the identity piece, of course,
like a bunch of folks got together and

said cool, let's standardize the scopes
and the thing that's returned into what

has become open, ID connect, on top of
OAuth, but even within the, so like within

the spec, yes, there are some places
where it definitely differs a little bit.

the place where we saw the most
deviation from the spec was, air codes.

Air codes are the

least well followed thing,

in the spec.

They're the place where the spec says what
is correct, or like what is to be expected

and the least people actually
implement it correctly.

Whereas scopes, everyone does a
different thing, but the spec says, You

can do whatever you want with scopes.

They're entirely yours to define.

So that makes sense.

But the

air codes are one where the spec
has some opinions and it's still

not tremendously well followed.

CJ: I watched some of your talk at
that conference about error handling,

and I'm curious if this was like part
of it, but basically that like I feel

like errors are so often just like a.

a second.

I don't know, the, it's like a last minute
thing that, yeah, it's an afterthought.

And Deb's tried to throw it in
like at the last second, oh, let's

add some air handling or whatever.

But the reality is that they should
be treated as a first class citizen,

the same way you're treating a return
type or whatever from any method.

Alan: it's one of the things that I'm most
proud of about, the internal architecture

of Enro is our error handling system.

Every, and I think I talk
about it a little bit at, In

the talk from that conference.

but I don't go into,
quite a lot of detail.

There is every single error that N
Rock returns and every one of them.

Every, sorry, user facing error.

Something that we expect a user
to see has a unique error code

that is defined in we have a.

Essentially like a big manifest where
every single error that the product

returns is defined in there, which is
at this point, like thousands, right?

and so there's a unique code for everyone.

And our system basically like reads that
manifest and then like code generates

type safe findings to all the different
languages, that we use internally.

For folks to spit out, errors
that, use that particular, format.

it's really meaningful because, those,
the things that are returned are objects

that are specially annotated, so you
know that they're a user facing air code.

So all the air handling
can treat them differently.

There can be special metrics around them
and really, really beneficial from a.

You know, from a product management
standpoint of like, you can go and

like into our observability and
you're like, what do people, what's

the air people hit the most cool.

we know, right?

Like we absolutely know
exactly what that is.

We know the biggest stumbling
block to using the product.

and so if you think about like growth or
just, user experience, understanding what.

What people are doing
wrong is, is super helpful.

the other place where it really,
provides a tremendous amount of benefit

is, from a customer success, customer
support standpoint of, what we're

trying to do there is make sure that
when people write in, there's nothing

more frustrating than getting an error
report where someone's it doesn't work.

And here's vaguely the error that I
got, and you're like, I can't help you.

Like I have to like, send you a
bunch of emails to ask you like how

to duplicate it and please tell me.

but when

people send us an air code, we know
exactly like the line of code where

like they, they encountered the air,
which is really beneficial to getting

quickly to the root of the problem.

so couple, couple huge benefits that way.

And the last one is, really.

Developers, like when we encount
an air message, like what is the

first thing that you guys do?

you copy and paste that thing
into Google and you're like, what?

What shows up?

and we wanted those things to
be unique strings that you could

put into Google that no one
else on the internet would have.

So you put them into Google and you get
back like our air pages where we can give

you like the best documentation, tell
you exactly like what went wrong and how

to help yourself get out of whatever,
you know, area you were encountering.

Colin: That's awesome.

Yeah.

I think a lot of people think of like an
API or software as like having a contract

and we think about all the things that can
go right, but we don't spend as much time

thinking about, like you just mentioned,
to the error codes, the contract of

what happens when something's wrong.

how do we help write a guide or
even just include the information

in the error itself on what.

What is missing?

What needs to happen next?

having written lots of APIs, it's
okay, if I'm trying to create

something, what do we send back?

If you're missing data, what do
we send back if it's already been

created, like the, obviously we have
HTTP status codes and things, but even

those can be, pretty vague at times.

And you gotta come up with
these like first class.

Error objects.

I know some APIs and client libraries
do a really good job of this.

and it's obviously you guys have a
high, high bar for that developer

experience when you do that.

since we're just jumping in here.

would love to just set the
stage for people who might

not know what ING Groc is.

I think most people
aren't familiar with it.

for things like local ingress for, I
have a rail server running on port 3000

and I want to op, add that to the web.

I wanna expose that to,
to receive web hooks.

Or maybe I want to have a preview app
so that CJ can go hit this endpoint

and view the app that I'm running.

But what would you add to that?

what does enro look like today?

and what are developers using it for?

Alan: thanks so much for that intro.

That's, really helpful.

yeah, en groc, that's definitely
where En Groc started was, about.

Where we started was web
hook development and testing.

I started my professional
career at Twilio, one of the

companies on the forefront of
using web hooks to drive behavior.

And, just, it was a frustrating
experience to develop with, develop

on that platform if you couldn't
get those web hooks directly to

things that were running locally.

over the years, what we.

What we found and discovered was if
you think more broadly about that

problem that Enro was solving, Enro
was creating ingress to your local.

machine, right?

It was accepting traffic from the internet
and it was routing it to the application

that was running on your laptop.

But that's really just one specific
problem in a more general problem,

which is how do I get traffic from
the internet and send it to my

application running anywhere, right?

It could be running on my laptop, it
could be running on my raspberry pie.

It could be running in a container in a CI
job for 30 minutes, or it could be running

in production, serving I don't know, all
of reddit.com or whatever it happens to

be, but like fundamentally the problem.

Of getting traffic in from the internet
and routing it to your application is the

same no matter, sorry, it is different,
but the kind of like fundamental primitive

that you use to do it, is the same.

in, interestingly, I guess I'll walk
that back a little bit, is that, that,

what's happening is very similar, but
the tools that developers have, to use

to actually make it happen in those
like four different scenarios that I

outlined are all wildly different, right?

and that's really where we've moved
over time is, to start handling this

production traffic to being part of
your, production infrastructure, your

CI infrastructure to create ingress
to your applications no matter when

or how or where they're running.

It doesn't matter what
platform or any of that.

it's very frustrating for developers
to have something that works in

development and not being able to
take it to production, have to like

invent something entirely new to get
there, and that's really what we're,

we're trying to solve for folks.

CJ: It seems like the messaging.

That.

I think a lot of people are still
thinking when they hear Enro, they

continue to think of like, how do I
build a local tunnel to my machine?

But I think the key sort of message that
I have heard, like the shift is oh, Enro

isn't just for local development anymore.

Like Enro can be used anywhere to do
this global ingress to your application.

So you can like, Stop worrying about
your whatever reverse proxy solution

that you're cobbling together instead.

is that accurate that you could
think of enro maybe the way that I

think of it as another way to do the
same thing that N Engine X might do.

And obviously as someone who wants
to spend time building on the

web, I am not fiddling with devs.

Like I actually hate N Engine X
just because it's such a pain to, to

get everything right and, so yeah,
just how can we think about Enoc

relative to a tool like Engine X?

Alan: that's a really good intro.

yeah, what we're calling Enro
is ingress as a service, right?

It is, it is that piece of getting traffic
into your network, and or into your

application and basically running it as
a globally distributed service for you.

you were asking about nGenx.

It's interesting that is, if you're like
putting applications out on the internet,

that is certainly a piece, right?

Where That you're using to
do it, but you often have a

number of other pieces, right?

You're layering in front maybe
a content delivery network.

You're maybe layering in front
some kind of, DDoS protection.

you may be layering in front,
some kind of like caching proxy.

You might have an identity aware proxy to
do some piece of authentication for you.

You often have like layer
four firewall rules.

You have ips and TLS certificates,
and maybe an integration with Let's

Encrypt and the list goes on where
you're like, as a, I remember, being,

baby application developer, like
back in the day and learning, Apache

and then Engine X to put my web
applications on the internet and just

being frustrated that it was something
that like I didn't want to learn.

And I didn't like, it wasn't like core to
the thing that I was doing that I wanted

to deliver, which was the application.

And that's really the power is like
we're, enro is talking about collapsing

all of those into a unified layer that
is tremendously developer friendly for

you to basically put your application
on and on the internet, in a way that

you want, secured in the way that
you want, without you having to worry

about all of those low level pieces.

The analogy that, we've been using is
that to put applications on the internet.

you're working with, like the
assembly language of networking.

you're really working with a lot
of these low level primitives

like DNS and tcp, and, ips and.

TLS certificates and things that
as an application developer like

you don't really care about, right?

you want a domain with, you know, an HTPs
s certificate in front of it to receive

the traffic closest to your customers
and maybe enforce some policy, some

authentication and things like that.

But the infrastructure run it and
the configuration to it should be.

A lot simpler than it is right now.

And we're, what we think we're
doing, at enro is really building

that high level language to
abstract that, assembly language.

CJ: I feel like there is a trend in
modern development where it's Let's

give you these drop-in tools or drop-in
components that replace like a lot of work

that you otherwise would've had to do.

So on the, for the Stripe example,
you're getting these embedable payment

components where you can just drop
in some React component and that will

give you these secure eye frames that.

Will handle lots of like validation
and collecting different payment

method types and localizing, and
it's like offloading a lot of the

work of collecting payment to Stripe.

And in this case it's like offloading
a lot of the network level things to

en groc where you can just install
this agent, set up some connect

handlers and, it seems like you've got.

Go and rust.

And I saw some hints of
maybe JavaScript coming soon.

so it's a couple of lines that you add
when you're setting up your server that's

gonna listen and then from there en rock
will handle abstracting away or offloading

like all of this other complexity.

And one of the things that I'm like
curious to double click on is, The, the,

I think you call them points of presence
maybe, or the global globally distributed

concept here, and like, how should we
think about that relative to like edge

functions or Dino deploy or, like having,
yeah, having your, your, your application

deployed to the edge versus having ingress
happening at the edge and then routing

that to some server that might be, Living
in Virginia or Washington or something.

Alan: that's a good question.

you're right.

We've built the Go and Rust SDKs.

We're working on a couple of other ones.

Those are a more modern way of
using NRO that, I don't think a

lot of people are familiar with,
where you're basically embedding

NRO directly into your application.

You don't have this, if you're like used
to using it, you used to have a separate

executable that you would download and now
you have a library where you basically,

Ask and it returns to something that looks
and feels exactly like a socket object.

but it's not listening on a local port.

It's listening on all of our global
points of presence all around the world.

in terms of like how to think about
it versus edge functions, or like

deploying your application to the edge.

what I would say is.

When you're building an application,
sometimes deploying applications

to the edge makes sense, and
sometimes like having them, not

deployed to the edge makes sense.

deploying them to the edge comes with,
basically puts you in the space of as

soon as you have to talk to storage,
you have the problem of cool, I have a

globally distributed storage problem.

r really, I think where
we're going to end up.

Is, there are two possible futures there.

One is, one in which like our
storage layers become so good that

we can run our entire applications
like fully distributed at the edge.

And like all of the synchronization
problems happen in like this

global storage layer, right?

Of what is like the next iteration of
something like spanner and is it good

enough that We can commoditize it and
give developers really simple APIs

where they can just call this stuff
anywhere around the world and give

them, hopefully the right APIs to make.

Cuz you know, even with a system like
Spanner, you still, the application

developer is making the, like the kind
of like cap theory trade-offs, right?

Of do I want consistency?

Do I want, availability,
partition tolerance.

that's one world.

the other is, that we think about
applications being, a little more.

Amorphous in terms of being able
to be split between an origin

application and a piece of it that
it, it pushes out to the global edge.

And like right now, I think a lot of
developers are thinking about those

in like separate ways, but, one of
the things that we're really excited

about, things like the End Rock
SDKs allowing you to do is you can

specify a lot of the configuration
in those SDKs and they get pushed.

To our global edge.

and that's something that's like a stark
contrast to like setting things up with

a technology like engine X or something
like that in that the application in our

world has control over the edge, right?

It has a defined API to say, like,
when I come online, like the.

The reverse proxy, the ingress point
is an extension of the application.

I have an API to set up and control
that in the way that I want.

and I think that will get us into a
world where applications, Can push

configuration and logic, basically
having like pieces of wassom or stuff

that they're like, yeah, you can execute
this out at the global edge because, it

doesn't require like stateful handling
or it requires a minimal amount of local

stateful handling or things like that.

and so we're we'll end up giving
developers a little bit more of a

seamless experience where they have the
control to basically decide, this stuff

runs there and this stuff runs, here.

CJ: Got it.

So you could terminate, ssl, and you can
do your authentication checks and you can.

Do some basic things at the edge, and
then once you've handled that, then

and when you're ready to talk to the
database, then you could like, all

right, now we will make the trek,
the tcp trek all the way across the

internet and talk to the underlying
the underlying application server.

Alan: Yeah, that, that
may be the right model.

It may not be the right model.

it's a little hard to say at,
at this point, but, I think it's

like one of those two models or
like a hybrid of them where you're

pushing like some control out there.

cuz like at the end of the day
you're just making these trade

offs about, you're just making
distributed systems trade-offs, right?

Have you guys like, in, in your
development, it sounds like we

were talking a little bit at the
beginning about, the kind of,

development that you're doing.

CJ you said you were doing a lot of kind
of like web application development, a

lot of, backend stuff, things like Ruby
on Rails, but also some front end pieces.

And Colin, you said you, you'd been
doing, some similar things as well.

I'm curious, do both of you like
have that experience of working

with, with those kind of, of like
setting that stuff up yourselves?

Or did you end up like working
with other people who would

set those things up for you?

Colin: For me it was, usually
I'm the one on a team, like for

consulting and things like that.

Before I was at Orbit, it was not
having an infrastructure or DevOps team.

So I was doing everything myself.

And you really get to learn and
appreciate like, All the things that

not only do you have to learn them once,
but you have to learn them for each

clot provider or each, infrastructure
stack that you're working with.

So the, and then you end up feeling
like you're learning this stuff over

again each time, or there's like a small
differentiation that makes this one better

than the other one that you used to is.

and so I do like that idea, like
standardizing it cuz we're seeing a lot.

It'll be interesting to see, like
a lot of things have been being

automated, I guess is the right word.

But like with GitHub co-pilot and
LLMs, like everyone's so excited about

the idea that we're gonna not have
to write every line of code anymore.

But it's guess what?

There's now even more infrastructure
and more tools and more stuff in between

those apps that we have to deal with
there's definitely a lot of tools that

I'm starting to see that with like
secure data transfer and stuff like that.

It's I definitely don't
wanna do that myself.

if you were to build an app like
a WhatsApp today with having like

end-to-end encryption between two people
talking back and forth, and that might

be a product someone builds today.

Like what?

Tech stack makes sense there.

it's not quite the same thing that
we're talking about today around local

tunneling and things like that, but
it is a very similar thing where it's

let's say GitHub co-pilots helping me
build a chat app with like sockets and

things like that, you're in, you're
probably building a very insecure.

chat app to start or, internet
of Insecure things would be.

The other way to think of it is like a lot
of things get shipped with not a lot of

thought around the security piece of it.

and so I'm really excited to
see like what things we can

do to help automate and read.

We, approach those things, so
that they don't have to be scary.

I think, like I try not to do
the DevOps stuff these days.

I think the jokes of dev, oops, engineer
more than DevOps, its like, what check,

what one thing did I forget to look at?

What one, one setting did I forget
that, I'm thinking that I'm secure, but

like the front door's wide open, even
though I followed like this long list of

security and ingress, like checklists.

CJ: to give some people nightmares,
I think Back in the day, I would

go on Digital Ocean and spin up a
droplet and then just SSH into it and

manually set up, passenger and engine
X and Apache, like all these things.

And like immediately
started getting hacked.

Like just started to get pummeled
by spammers and whatever.

And then, if we, rewind even further,
I remember setting up, like on Windows

server, like setting up IIS to like,
open up certain ports so that they can

like, talk to different applications
and, someone re goes down into the

basement and restarts the physical
machine that was running Windows server.

It's okay, we've come
a long way since then.

And, even back.

pre this is pre and, en rock.

I'm sure.

It was like, oh, if I want to show
someone my local running web application,

I'm gonna log into my, lo my router
and set up, nat address forwarding

so that I can like, poke a hole in my
home router so that people can hit my

machine on, port 80, 80 or whatever.

So I think y most recently I've
been really depending a lot on

tools like Heroku and tools like
Versace to manage most of that.

And like more recently using things like
CloudFlare to provide, these really fancy

SSL termination things where I can have
wildcard domains and set up all of this,

I don't know, more advanced infrastructure
for building a platform, but, for the

most part, yeah, it's been one of those
things where I've been bitten so many

times by building insecure surfaces that,
I now try to just, stay in my lane and

build tools closer to the front end.

Then, then, yeah, I then I thought that
I could back in the day, I dunno, may,

maybe now I can just drop in en gro
Ruby and, depend on the security and

let Alan do all the heavy lifting of
figuring out how to not get attacked.

Alan: that's really what
we want, folks to do.

We, the reason, the kind of like engineer
that I've been for a very long time, and

the thing that like really has always
made me excited is about building a.

Tools and platforms and infrastructure for
developers so that there's nothing more

exciting than for me than like solving
problems and watching developers like

never have to deal with them ever again.

and that's, that ethos is really what
started N Groc and it's what continues it

today is, how do we take these problems
away, so that, folks don't have to

like, think about the things that they
definitely don't wanna be thinking about.

CJ: For

Colin: Yeah, and a lot of us have
these experiences of tinkering

and learning and I do wonder.

Because a lot of these newer tools
make it a little bit harder to tinker.

Like it's amazing to be able to deploy
to, a render a fly, but you're not

actually messing with the digital ocean
box like you, were talking about there.

But where do you then learn these things?

Because I don't like someone coming
out of a bootcamp might learn the

application stack, but they're not
necessarily getting a lot of time or

experience with some of this other stuff.

And, I haven't seen.

Too many dev like DevOps boot camps or
security boot camps, things like that.

cause that would even like a
finishing school for security, right?

it's something that I would take just to
know what gaps do I have in my knowledge.

Because very similarly, like anything,
we used to do a lot of WordPress stuff

and Any website with a slash WP admin
was just going to be added to a list that

was gonna get attacked at some point.

and then you start tinkering around with
Apache or Engine X and things like that.

but you actually could, it's kinda
like tinkering with cars like

you used to be able to actually
work on your car and today.

Very difficult to work on your own car.

And as we get to EVs and things, it's
gonna be near impossible too, especially

when, those cars are mostly software and,
a whole bunch of batteries, But, it, it'll

be interesting to see like where this
goes and what sorts of things, change.

Is there anything that like
you're particularly excited about?

Alan, as far as like maybe future
looking things or, not necessarily

add and groc or if there's stuff that
you guys are cooking up over there.

Alan: Oh man, there's so much
to be excited about today.

one of the things that's really excited
about is that, it's interesting what

you said about, folks don't have, they
don't, someone coming out of bootcamp

may not learn a lot of those things.

that's true.

But maybe that's okay.

Like maybe we're like headed for
a world where really that's okay.

and if you like rewind a little bit,
you're like, most developers like today

don't think about like memory management,
but we're all like, that's a nice thing.

Mo most of us don't really
want to think about that.

and most of us don't think in
assembly language anymore, and

like maybe that's okay too.

so I, I don't know it, there, there
are always these sets of problems that.

Every, everything in, in software
engineering is a leaky abstraction.

When your problem gets thorny
enough where you're like, I gotta

go below, I gotta understand like
the piece underneath and the piece

underneath and the piece underneath.

but I think, as the industry has matured
and our tools and our infrastructure

has gotten better, we have gotten
to a place where you have to get

into those layers less and less.

Just because we've gotten.

We've hardened those under underlying
layers and made the APIs to them so

much better than they used to be.

And I'm optimistic that a
lot of this stuff will, move

in that direction as well.

And that a lot of the problems that
we solve today of that, you would do

in like a DevOps finishing school if
one existed, are things that I hope

the next generation dev developers
like never has to think about.

and that there, there
are a few of us who like.

Spend our time there and that, if
people want to like, understand

those things, just like if someone
like wants to go and understand the

details of the Linux kernel, they
can, but if they're like building web

applications, like they shouldn't have
to and we shouldn't expect them to.

so I don't know.

I'm optimistic and excited about a future
where, those are, those become details

that folks don't have to think about.

So I'm really excited about this,
new generation of, NextGen Heroku

folks who are thinking about,
applications as a service again.

and.

Yeah, I don't know.

I'm excited about that.

What else am I excited about?

There's a lot to be excited
about in software engineering.

web assembly is certainly an area
that's obviously really exciting.

obviously LMS and ML in general are, a
really cool area to be excited about too.

So there's a lot that's going on.

CJ: One of the things that I've
noticed over the last, probably two

years-ish, is that there are a lot
of new developers coming online that

are building with tools like Relet
where they're actually like building

something in the cloud and running it
in the cloud, and that is where they're.

Hosting it and deploying
it and everything.

It's like part of rep.

And so I'm curious, if you have any
intuition or if you've seen the same

thing, around like the future of this next
gen of developers and will they just Yeah.

do we think everything is just gonna
be some cloud-based i d e and you

just say go, and then it's running
like for you and anyone can use it.

I don't know.

Especially like.

They have that ghost writer, kind of
their version of copilot that's built in.

So I don't know, there's some really
cool stuff happening over there.

.
Alan: this is, this is the space of
replica and code spaces and glitch

and that kind of like set of tools.

they're exciting.

in general, I think as an industry we
should be tremendously excited about

anything that lowers the barrier to
entry to creating new, new software.

and so in general, like.

that's what we're doing at Enro
is trying to lower that barrier

to entry, to like building
applications and getting them online.

and, really excited that you can use
Enro with platforms like Rep and Glitch

and things like that to get yourself
this, global ingress with, functionality

that can push out to the edge.

But in general, like.

Anything that lets people like lower
the vari entry and create new software

and get more people into, to the space
being creative and building new stuff.

I think, that's one of the things
that's most exciting about our

industry is getting to see all the
people experimenting with all of

the new and cool ways that, we could
potentially build software together.

That's all really exciting to me.

Colin: Yeah, I think we like to geek out
on the tools and the processes and things,

but ultimately we're doing all of this to
build like a product for customers, right?

And so sometimes it's Does the customer
actually know how we're getting

the web hooks delivered to the app?

They do not care.

they just want the outcome, right?

The, if it's a dog walking app, they,
or, Uber, your Uber driver's showing up.

Like you want to get a notification
when that's happening and,

they're not worried about what.

the infrastructure looks like underneath.

So I think, we tr we've been thinking
in this show in terms of like, how do

we build and learn, as developers, like
how do we develop ourselves, not just

yes we can go learn new languages and
things like that, but it's like, what

other things are we bringing to the table
and think, like thinking about product

and the developer experience all the
way down to what error codes do we get?

You know that's the same for a product.

if your Uber card just doesn't
show up, you can't just say

something happened, right?

It's gotta be like, why
did the car not show up?

And what can I do about it?

Who can I reach out to?

An Airbnb got canceled on me for this
weekend and it was like, You know, you get

a text that's your Airbnb was canceled,
and then you're like, great, now I gotta

go, follow the, literally the stack
trace of okay, go click on the link.

Let's go open Airbnb, let's
go find out what happened.

And, that is so far removed from whatever
tech stack Airbnb is using under the Hut.

So, um, definitely as you're listening to
this, remember who you're building for,

remember what you're building, like what
problem you're trying to solve for, and,

use tools like incorrect to Get rid of
some of those things, the headaches, or

at least make them standardized so that,
on the next project you work on, you

have, a tool that you can reach for sure.

Alan: Yeah, like I
said, I'm excited about.

any tools and any infrastructure
that, that make it easier?

I think they're all like places where gets
more people into software development.

It means more people
are trying new things.

we're as an industry, as a.

A, global populace, like the
speed of innovation is tied to how

quickly can we experiment, like
how many people can experiment.

And so as we see like these new
technologies and services that

lower that cost to experimentation,
we're getting more shots at

building more new and cool things.

And that's something that we
should all be really excited about.

CJ: Totally.

Yeah.

I think this also dovetails really
nicely with the whole no-code

movement, which we've talked a lot.

And I think, I, when I first thought about
NRO and no code, I thought, oh, there's

probably not that many people who are,
opening up the terminal and running NRO

and setting up a local tunnel so they
could do no code stuff because they're

probably using some application somewhere.

But the reality is that now
that might be part of their

stack in some way or another.

okay, we're, building this no code
thing with bubble, but I need.

I don't know.

I need to test something.

Yeah, I need to test
web hooks or whatever.

And, there, there was a bunch
of like use cases, I think.

That I, recently bumped into within groc
too, where I was like, oh, I want to

test something locally, but it needs to
have hdps s and I don't wanna have to

figure out how to set up my SSL cert.

And so I'm just gonna try on in
groc, cuz I know that it gives me

that Hdps s endpoint that I can
use instead so that I can go verify

my Apple Pay domain or whatever.

It's like a test, like some
Apple Pay thing locally.

So there's, yeah, I think there's, I
dunno, there, there's always gonna be like

use cases where people who are building
cool stuff are gonna need these tools.

But yeah, it is a incredibly
exciting time to be alive.

And I also like every time that GitHub
co-pilot completes anything for me that

is like non-trivial or more than a line,
I'm just like, whoa, this is so cool.

still, after a year of using it almost
every day, it's, it still blows my mind.

And, yeah, I think it is definitely
a really exciting time to be alive.

For sure.

Alan: I don't know that I've
talked to anyone who's used

GitHub co-pilot for a year.

do you feel faster when you use it?

CJ: Oh yeah, way faster.

I think that, so I, I initially
set it up in Neo Vim, so you don't

just have to use via vias code.

So if you're using Neo Vim, go download
T Pope's Get Hope co-pilot thing.

There's a way to set it up, and it
basically com like replaced all of my.

My sort of dumb auto completion.

and so now it's, it's very good
and I'm now at the point where

I'm learning type script and it
helps a ton with type script.

But circling back to one of your
earlier points about copying and

pasting errors, like the errors you get
from TypeScript are so they're, yeah.

They're impossible to understand.

They're possible to Google.

They're very challenging.

So I'm like, I feel like I'm still
on the frustrating part of the

learning curve with type script, but,

Colin: Are you getting, you're getting
some type is not a type errors.

CJ: Yeah.

Or it's always like something is not
any, you can't assign something to any,

cuz we, we have it, we have all of the
restrictions cranked, like really high.

So it has to be, yeah, all the types
have to be very happy with each other.

And but yeah, co-pilot has been
making all of that much, much faster.

And when I was at Stripe, we
were working in lots of different

programming languages, go php, java.net.

Ruby python.

It was, we were all over the place
in sw context switching between

them was sometimes tricky and GitHub
co-pilots like, oh yeah, I know that

language and I know that language.

Did I know that last, like, you know,
kind of the, uh, the Rosetta Stone for

you to sit there and help you through
okay, what is the syntax for this again?

but yeah, it's made, it's
definitely made me faster for sure.

Alan: It's, it's again, like another
thing that I'm like really excited

about because it fits into that same
theme of things that make software

development more accessible, right?

Things that give, and for those who
are, those of us who are already like

more seasoned software developers,
it gives us leverage, right?

To be able to like, move faster,
and build things that otherwise,

like maybe would've taken us longer.

Maybe we have to build a
team to build those things.

In some ways, a lot of modern software
development is constrained based on the

complexity of the things that we build.

And, the complexity of the applications
that we build, sorry, like the

functionality, like how much stuff
like an application can do is

constrained by like how complex of a.

Of like a code base you can manage.

And we've built, like so many
of our tools are just about

trying to manage that complexity.

Like how do we create abstractions so
we can hide some of that complexity

and not think about it as we like,
deal with the rest of the problem.

and like software engineering
and management, of like building

engineering organizations is about
like siloing that complexity like

within humans and within teams, right?

Of like, how do we create a team who
can own this like problem so the other

teams don't have to think about it?

And technologies like co-pilot are
really exciting because they give

everyone leverage, which means like
the scope of the things that we can

all solve together, gets larger.

if everyone, can work at higher levels
of abstraction, I, I think of it as like

a kind of like a messy compiler that
doesn't always do the right thing, right?

Or

you're like, I have an intention
and you compile it into, machine

code, but you're not always right.

Which is, an exciting place to be.

that we're in this world where
we're getting to where I see the

scope of the problems that we can
create and tackle, becoming larger.

CJ: Totally.

And com combining with the other
tool, like the other LM tools.

the other day I was, I.

Just trying to do something with
a bunch of unknowns where I wanted

to make a video where the video
was explaining a code snippet and

I wanted all of it to be automated.

And so I wanted to be able to just
say my input is some code snippet and

the output is a video that is animated
and it brings in the code snippet.

It explains what it does with a voiceover
and it shows you like all this stuff.

Basically, like my job as a developer
graphic as right, and I was like,

chat G B T, how would I build this?

like how do I animate this and how
would I animate some code showing up?

And then it just like starts spitting
out different like python blocks

using map plot lib and using like
these other animation libraries.

And then I was like, okay,
and now how do I like.

describe this and it spits out the
description that you take the description.

It's okay, now go to some other tool.

okay, now make this a voiceover.

It gives you like the AI voiceover,
and then you're able to ki it was

like an hour of just playing around
in a bunch of spaces that I had

no idea about, what tools to use
or, how to put things together.

And just like between GitHub co-pilot.

Helping write some of the code between
chat, e p t, writing some of the code.

It went from nothing to having a
prototype in an hour because you can

just whack at it in different ways.

And even copying the error
message directly into chat e p t.

And it will just tell you like,
here's the thing that you got

wrong, and here's how to fix it.

And it's been really fun.

I don't know that style of development,
like chat, G B t is the third

like pair programmer in the room
with you, has been interesting.

Alan: Yeah,

Colin: br brute forest development.

CJ: exactly.

Colin: Oh.

Alan: that's really exciting.

just all of these tools and ways to
develop are just really exciting cuz

we're gonna get to see more stuff.

we're gonna get to build
things more easily.

no, I'm really excited about building
applications on top of all these things.

Colin: Absolutely.

And I think, leverage is a great
place to end this episode on.

So thanks so much for joining us and
spending time with us today, Alan.

It's been awesome.

Alan: It's been a pleasure.

Thanks for having me.

CJ: As always, you can head over
to Build and learn.dev to check

out all the links and resources.

We'll drop those in
the show notes for you.

Thanks so much for listening.

That's all, and we'll see you next time.

Colin: See ya.