WEBVTT

NOTE
This file was generated by Descript 

00:00:05.050 --> 00:00:06.420
​
Colin: Welcome to Build and Learn.

00:00:06.420 --> 00:00:07.230
My name is Colin.

00:00:07.725 --> 00:00:11.385
CJ: And I'm CJ and we are excited
to sit down with Alan Trive today,

00:00:11.385 --> 00:00:14.235
the founder and CEO of En Groc.

00:00:14.235 --> 00:00:15.165
We're gonna talk about.

00:00:15.365 --> 00:00:17.675
The future of software development.

00:00:17.675 --> 00:00:20.585
We're gonna talk about how Enro is
solving all of your problems and

00:00:20.945 --> 00:00:24.995
abstracting away the tricky parts of
networking and building your application.

00:00:25.265 --> 00:00:28.055
We'll talk about global ingress
and lots of other fun stuff.

00:00:28.115 --> 00:00:29.705
So let's get into the episode.

00:00:31.890 --> 00:00:34.771
Colin: A lot of our clients were
like, Hey, we have Salesforce and we.

00:00:35.270 --> 00:00:38.720
have these new iPhone things that
came out and we want an app that's,

00:00:39.240 --> 00:00:42.450
tying into our C R M and our cms.

00:00:42.450 --> 00:00:45.480
And so it was doing a lot
of, early web hook stuff.

00:00:45.530 --> 00:00:49.220
a lot of pubsub, hubub and like
integrations and getting into

00:00:49.220 --> 00:00:52.750
ultimately what brought me into
Techstars was we were trying to build

00:00:52.810 --> 00:00:54.820
what eventually became like Zapier.

00:00:55.360 --> 00:00:58.300
a little bit more like a SendGrid
for integrations though, or Twilio,

00:00:58.300 --> 00:01:02.190
like you drop us into your code
base and turns out, you have to

00:01:02.190 --> 00:01:05.610
raise a lot of money for people to
want to drop an entire integration

00:01:05.760 --> 00:01:07.650
framework into their code base.

00:01:07.650 --> 00:01:10.980
But, yeah, mostly a lot of the
things that you guys have run into

00:01:10.985 --> 00:01:14.460
with like web hooks.fyi and things
where it's like everyone does this

00:01:14.460 --> 00:01:18.360
differently and so we're gonna
make the one API that standardizes

00:01:18.360 --> 00:01:20.260
all of it and turns out, in 20.

00:01:20.635 --> 00:01:21.565
12 you.

00:01:21.805 --> 00:01:23.905
It just wasn't the same as it is today.

00:01:23.905 --> 00:01:28.285
And now you have like APIs coming
out that are trying to do this again,

00:01:28.825 --> 00:01:32.545
like Merge and Finch and all these
different apps that are going after,

00:01:32.545 --> 00:01:33.980
these are all the payroll APIs.

00:01:33.980 --> 00:01:35.750
Here's one API to do all payroll APIs.

00:01:36.080 --> 00:01:38.730
We were like trying to do all
of them and it was just a lot.

00:01:39.330 --> 00:01:44.670
And I think that's where I, I've been in
the webhooks Google group since whenever,

00:01:44.670 --> 00:01:46.470
at first, whenever Jeff started that.

00:01:46.470 --> 00:01:49.890
So it's I've just been like
on the edges of just watching,

00:01:50.080 --> 00:01:51.640
message passing on the internet.

00:01:51.640 --> 00:01:54.200
Just still the same, still happens still,

00:01:54.790 --> 00:01:56.110
Alan: hasn't changed too much.

00:01:56.110 --> 00:01:56.320
Yeah.

00:01:56.320 --> 00:01:57.100
Do you know Jeff?

00:01:57.660 --> 00:01:58.560
Colin: just a little bit.

00:01:58.590 --> 00:02:02.925
we've got some like shared, co-working
background and web hooks and things,

00:02:02.980 --> 00:02:03.280
Alan: yeah.

00:02:03.280 --> 00:02:04.840
I worked with Jeff back at Twilio.

00:02:05.020 --> 00:02:05.895
yeah, it's interesting.

00:02:05.900 --> 00:02:09.795
That's, it's definitely interesting, what
you're talking about, a building, an API

00:02:09.795 --> 00:02:12.195
that like covers up, a bunch of APIs.

00:02:12.455 --> 00:02:12.745
It's.

00:02:13.012 --> 00:02:17.376
Kind of like the industry creating a
standard or someone in the industry

00:02:17.886 --> 00:02:20.076
trying to create a standard api.

00:02:20.736 --> 00:02:23.166
I'm pretty skeptical of those.

00:02:23.766 --> 00:02:27.526
I think, if you look at technologies like.

00:02:28.861 --> 00:02:32.931
Terraform where it would've been
really easy for them to say there's

00:02:32.931 --> 00:02:38.211
a storage bucket resource and we'll
abstract it over GCP and Azure and aws.

00:02:38.571 --> 00:02:43.041
And they like explicitly chose not to
do it because I think they recognized,

00:02:43.041 --> 00:02:47.231
and I think a lot of other people
have recognized that  it is very, very

00:02:47.231 --> 00:02:50.351
hard to abstract around those APIs.

00:02:50.411 --> 00:02:52.061
It's incredibly hard.

00:02:52.111 --> 00:02:52.501
You'd need

00:02:52.501 --> 00:02:58.101
something to be like almost, purely a
commodity and very little differentiation

00:02:58.131 --> 00:02:59.871
before that thing starts to make sense.

00:03:01.341 --> 00:03:04.521
Colin: and most of those services are
trying to differentiate, and so they all

00:03:04.521 --> 00:03:06.261
come out with what makes them different.

00:03:06.261 --> 00:03:06.591
And then

00:03:06.651 --> 00:03:07.141
Alan: Exactly.

00:03:07.581 --> 00:03:08.461
So you're not aligned.

00:03:08.461 --> 00:03:08.741
right.

00:03:09.636 --> 00:03:12.516
Um, which is, which is
really interesting as well.

00:03:13.186 --> 00:03:15.491
CJ: Even with even with
standards like OAuth, right?

00:03:15.491 --> 00:03:19.481
Like I assume you're running into that
now trying to build like the OAuth

00:03:19.481 --> 00:03:22.451
pieces to the ngrok infrastructures.

00:03:22.451 --> 00:03:23.891
oh yeah, we wanna do OAuth.

00:03:23.891 --> 00:03:26.531
But everyone does it just a little
bit differently with little different

00:03:26.531 --> 00:03:29.801
scopes and a little different, like
data you get back and a little bit of

00:03:29.801 --> 00:03:33.101
different, is it in the header or is
it in like the response or whatever?

00:03:33.151 --> 00:03:35.551
Yeah, just trying to paper
over that seems impossible.

00:03:36.181 --> 00:03:36.841
Alan: Yeah.

00:03:36.931 --> 00:03:40.461
it's interesting, just for those
listening, EDRO, has added some

00:03:40.466 --> 00:03:43.221
recent capabilities where you can
basically put OAuth in front of

00:03:43.281 --> 00:03:45.531
anything that you expose via edro.

00:03:45.531 --> 00:03:48.381
You basically tell it, put
Google in front and it will

00:03:48.771 --> 00:03:50.511
OAuth or redirect you to Google.

00:03:50.511 --> 00:03:50.931
and then back.

00:03:51.381 --> 00:03:54.451
we've implemented a number of
different providers, for OAuth.

00:03:54.511 --> 00:03:57.701
And you're right, that it's
interesting the OAuth spec.

00:03:58.856 --> 00:04:04.046
Is mostly followed by everyone to the
point where like you can pretty much build

00:04:04.046 --> 00:04:05.816
the same thing and it works for everyone.

00:04:06.266 --> 00:04:09.866
The place where all the providers
differ is around things that

00:04:09.871 --> 00:04:13.706
the spec very explicitly says,
this is not our problem, right?

00:04:13.706 --> 00:04:17.316
this is implementation defined,
and so like you go figure it out.

00:04:18.226 --> 00:04:21.346
and so that makes sense that
everyone like has diverged there

00:04:21.346 --> 00:04:22.936
into like slightly different ways.

00:04:23.386 --> 00:04:26.776
And for the identity piece, of course,
like a bunch of folks got together and

00:04:26.776 --> 00:04:31.426
said cool, let's standardize the scopes
and the thing that's returned into what

00:04:31.426 --> 00:04:37.566
has become open, ID connect, on top of
OAuth, but even within the, so like within

00:04:37.566 --> 00:04:40.897
the spec, yes, there are some places
where it definitely differs a little bit.

00:04:41.146 --> 00:04:46.316
the place where we saw the most
deviation from the spec was, air codes.

00:04:46.901 --> 00:04:47.621
Air codes are the

00:04:47.621 --> 00:04:48.911
least well followed thing,

00:04:49.171 --> 00:04:49.831
in the spec.

00:04:51.731 --> 00:04:58.236
They're the place where the spec says what
is correct, or like what is to be expected

00:04:58.446 --> 00:05:00.976
and the least people  actually
implement it correctly.

00:05:01.006 --> 00:05:05.371
Whereas scopes, everyone does a
different thing, but the spec says, You

00:05:05.371 --> 00:05:06.631
can do whatever you want with scopes.

00:05:06.631 --> 00:05:08.351
They're entirely yours to define.

00:05:08.381 --> 00:05:09.161
So that makes sense.

00:05:09.161 --> 00:05:09.491
But the

00:05:09.491 --> 00:05:12.431
air codes are one where the spec
has some opinions and it's still

00:05:12.431 --> 00:05:13.721
not tremendously well followed.

00:05:14.936 --> 00:05:20.426
CJ: I watched some of your talk at
that conference about error handling,

00:05:21.076 --> 00:05:24.716
and I'm curious if this was like part
of it, but basically that like I feel

00:05:24.716 --> 00:05:27.596
like errors are so often just like a.

00:05:28.111 --> 00:05:28.651
a second.

00:05:29.071 --> 00:05:32.576
I don't know, the, it's like a last minute
thing that, yeah, it's an afterthought.

00:05:32.576 --> 00:05:35.006
And Deb's tried to throw it in
like at the last second, oh, let's

00:05:35.011 --> 00:05:36.266
add some air handling or whatever.

00:05:36.926 --> 00:05:40.406
But the reality is that they should
be treated as a first class citizen,

00:05:40.411 --> 00:05:42.936
the same way you're treating a return
type or whatever from any method.

00:05:43.996 --> 00:05:47.286
Alan: it's one of the things that I'm most
proud of about, the internal architecture

00:05:47.286 --> 00:05:49.626
of Enro is our error handling system.

00:05:50.156 --> 00:05:52.936
Every, and I think I talk
about it a little bit at, In

00:05:52.936 --> 00:05:54.406
the talk from that conference.

00:05:54.456 --> 00:05:56.456
but I don't go into,
quite a lot of detail.

00:05:56.456 --> 00:06:00.936
There is every single error that N
Rock returns and every one of them.

00:06:00.936 --> 00:06:02.886
Every, sorry, user facing error.

00:06:02.891 --> 00:06:06.786
Something that we expect a user
to see has a unique error code

00:06:06.876 --> 00:06:08.152
that is defined in we have a.

00:06:08.787 --> 00:06:12.282
Essentially like a big manifest where
every single error that the product

00:06:12.282 --> 00:06:16.622
returns is defined in there, which is
at this point, like thousands, right?

00:06:16.692 --> 00:06:18.342
and so there's a unique code for everyone.

00:06:19.092 --> 00:06:25.092
And our system basically like reads that
manifest and then like code generates

00:06:26.092 --> 00:06:30.372
type safe findings to all the different
languages, that we use internally.

00:06:30.992 --> 00:06:34.657
For folks to spit out, errors
that, use that particular, format.

00:06:35.627 --> 00:06:39.762
it's really meaningful because, those,
the things that are returned are objects

00:06:39.767 --> 00:06:42.642
that are specially annotated, so you
know that they're a user facing air code.

00:06:42.642 --> 00:06:44.732
So all the air handling
can treat them differently.

00:06:45.022 --> 00:06:50.932
There can be special metrics around them
and really, really beneficial from a.

00:06:52.092 --> 00:06:55.107
You know, from a product management
standpoint of like, you can go and

00:06:55.107 --> 00:06:57.507
like into our observability and
you're like, what do people, what's

00:06:57.507 --> 00:06:59.247
the air people hit the most cool.

00:06:59.247 --> 00:07:00.147
we know, right?

00:07:00.147 --> 00:07:02.037
Like we absolutely know
exactly what that is.

00:07:02.037 --> 00:07:04.467
We know the biggest stumbling
block to using the product.

00:07:04.927 --> 00:07:09.862
and so if you think about like growth or
just, user experience, understanding what.

00:07:10.587 --> 00:07:13.197
What people are doing
wrong is, is super helpful.

00:07:13.767 --> 00:07:16.867
the other place where it really,
provides a tremendous amount of benefit

00:07:16.867 --> 00:07:21.977
is, from a customer success, customer
support standpoint of, what we're

00:07:21.982 --> 00:07:26.747
trying to do there is make sure that
when people write in, there's nothing

00:07:26.747 --> 00:07:29.717
more frustrating than getting an error
report where someone's it doesn't work.

00:07:29.747 --> 00:07:33.147
And here's vaguely the error that I
got, and you're like, I can't help you.

00:07:33.177 --> 00:07:36.457
Like I have to like, send you a
bunch of emails to ask you like how

00:07:36.457 --> 00:07:37.957
to duplicate it and please tell me.

00:07:38.327 --> 00:07:38.567
but when

00:07:38.567 --> 00:07:42.527
people send us an air code, we know
exactly like the line of code where

00:07:42.527 --> 00:07:46.282
like they, they encountered the air,
which is really beneficial to getting

00:07:46.282 --> 00:07:47.902
quickly to the root of the problem.

00:07:48.532 --> 00:07:51.232
so couple, couple huge benefits that way.

00:07:51.262 --> 00:07:52.812
And the last one is, really.

00:07:53.782 --> 00:07:56.337
Developers, like when we encount
an air message, like what is the

00:07:56.337 --> 00:07:57.597
first thing that you guys do?

00:07:57.697 --> 00:08:00.577
you copy and paste that thing
into Google and you're like, what?

00:08:00.582 --> 00:08:01.357
What shows up?

00:08:01.407 --> 00:08:04.342
and we wanted those things to
be unique strings that you could

00:08:04.342 --> 00:08:06.832
put into Google that no one
else on the internet would have.

00:08:07.192 --> 00:08:10.432
So you put them into Google and you get
back like our air pages where we can give

00:08:10.432 --> 00:08:13.612
you like the best documentation, tell
you exactly like what went wrong and how

00:08:13.617 --> 00:08:16.462
to help yourself get out of whatever,
you know, area you were encountering.

00:08:17.557 --> 00:08:18.097
Colin: That's awesome.

00:08:18.097 --> 00:08:18.277
Yeah.

00:08:18.277 --> 00:08:23.437
I think a lot of people think of like an
API or software as like having a contract

00:08:23.437 --> 00:08:27.307
and we think about all the things that can
go right, but we don't spend as much time

00:08:27.307 --> 00:08:31.537
thinking about, like you just mentioned,
to the error codes, the contract of

00:08:31.537 --> 00:08:33.157
what happens when something's wrong.

00:08:33.257 --> 00:08:38.027
how do we help write a guide or
even just include the information

00:08:38.027 --> 00:08:40.247
in the error itself on what.

00:08:40.597 --> 00:08:41.287
What is missing?

00:08:41.287 --> 00:08:42.697
What needs to happen next?

00:08:43.127 --> 00:08:46.257
having written lots of APIs, it's
okay, if I'm trying to create

00:08:46.257 --> 00:08:48.447
something, what do we send back?

00:08:48.447 --> 00:08:51.507
If you're missing data, what do
we send back if it's already been

00:08:51.507 --> 00:08:55.557
created, like the, obviously we have
HTTP status codes and things, but even

00:08:55.557 --> 00:08:57.312
those can be, pretty vague at times.

00:08:57.632 --> 00:09:00.582
And you gotta come up with
these like first class.

00:09:00.712 --> 00:09:01.657
Error objects.

00:09:01.687 --> 00:09:04.837
I know some APIs and client libraries
do a really good job of this.

00:09:04.837 --> 00:09:08.947
and it's obviously you guys have a
high, high bar for that developer

00:09:08.947 --> 00:09:10.177
experience when you do that.

00:09:10.667 --> 00:09:11.757
since we're just jumping in here.

00:09:12.872 --> 00:09:15.182
would love to just set the
stage for people who might

00:09:15.182 --> 00:09:16.412
not know what ING Groc is.

00:09:16.412 --> 00:09:18.722
I think most people
aren't familiar with it.

00:09:18.722 --> 00:09:24.162
for things like local ingress for, I
have a rail server running on port 3000

00:09:24.162 --> 00:09:27.487
and I want to op, add that to the web.

00:09:27.487 --> 00:09:29.927
I wanna expose that to,
to receive web hooks.

00:09:29.947 --> 00:09:34.537
Or maybe I want to have a preview app
so that CJ can go hit this endpoint

00:09:34.537 --> 00:09:36.247
and view the app that I'm running.

00:09:36.982 --> 00:09:38.182
But what would you add to that?

00:09:38.182 --> 00:09:40.042
what does enro look like today?

00:09:40.442 --> 00:09:41.882
and what are developers using it for?

00:09:43.087 --> 00:09:44.192
Alan: thanks so much for that intro.

00:09:44.192 --> 00:09:45.277
That's, really helpful.

00:09:45.457 --> 00:09:48.627
yeah, en groc, that's definitely
where En Groc started was, about.

00:09:48.957 --> 00:09:51.597
Where we started was web
hook development and testing.

00:09:51.647 --> 00:09:54.147
I started my professional
career at Twilio, one of the

00:09:54.147 --> 00:09:57.067
companies  on the forefront of
using web hooks to drive behavior.

00:09:57.577 --> 00:10:01.107
And, just, it was a frustrating
experience to develop with, develop

00:10:01.107 --> 00:10:04.107
on that platform if you couldn't
get those web hooks directly to

00:10:04.107 --> 00:10:05.397
things that were running locally.

00:10:06.367 --> 00:10:07.627
over the years, what we.

00:10:07.957 --> 00:10:13.627
What we found and discovered was if
you think more broadly about that

00:10:13.627 --> 00:10:19.627
problem that Enro was solving, Enro
was creating ingress to your local.

00:10:20.247 --> 00:10:21.087
machine, right?

00:10:21.087 --> 00:10:24.867
It was accepting traffic from the internet
and it was routing it to the application

00:10:24.867 --> 00:10:26.217
that was running on your laptop.

00:10:26.547 --> 00:10:30.327
But that's really just one specific
problem in a more general problem,

00:10:30.327 --> 00:10:33.477
which is how do I get traffic from
the internet and send it to my

00:10:33.477 --> 00:10:35.577
application running anywhere, right?

00:10:35.577 --> 00:10:38.337
It could be running on my laptop, it
could be running on my raspberry pie.

00:10:38.487 --> 00:10:43.017
It could be running in a container in a CI
job for 30 minutes, or it could be running

00:10:43.017 --> 00:10:46.817
in production, serving I don't know, all
of reddit.com or whatever it happens to

00:10:46.817 --> 00:10:49.187
be, but like fundamentally the problem.

00:10:49.427 --> 00:10:53.807
Of getting traffic in from the internet
and routing it to your application is the

00:10:53.807 --> 00:10:57.937
same no matter, sorry, it is different,
but the kind of like fundamental primitive

00:10:57.937 --> 00:10:59.952
that you use to do it, is the same.

00:11:00.432 --> 00:11:05.032
in, interestingly, I guess I'll walk
that back a little bit, is that, that,

00:11:05.182 --> 00:11:10.947
what's happening is very similar, but
the tools that developers have, to use

00:11:10.977 --> 00:11:14.217
to actually make it happen in those
like four different scenarios that I

00:11:14.222 --> 00:11:16.977
outlined are all wildly different, right?

00:11:17.037 --> 00:11:21.327
and that's really where we've moved
over time is, to start handling this

00:11:21.332 --> 00:11:24.737
production traffic to being part of
your, production infrastructure, your

00:11:24.737 --> 00:11:29.057
CI infrastructure to create ingress
to your applications no matter when

00:11:29.057 --> 00:11:30.707
or how or where they're running.

00:11:30.712 --> 00:11:32.727
It doesn't matter what
platform or any of that.

00:11:32.777 --> 00:11:36.137
it's very frustrating for developers
to have something that works in

00:11:36.137 --> 00:11:38.597
development and not being able to
take it to production, have to like

00:11:38.597 --> 00:11:41.927
invent something entirely new to get
there, and that's really what we're,

00:11:42.137 --> 00:11:43.337
we're trying to solve for folks.

00:11:44.417 --> 00:11:46.097
CJ: It seems like the messaging.

00:11:46.457 --> 00:11:47.267
That.

00:11:47.387 --> 00:11:51.027
I think a lot of people are still
thinking when they hear Enro, they

00:11:51.027 --> 00:11:54.237
continue to think of like, how do I
build a local tunnel to my machine?

00:11:54.237 --> 00:12:00.297
But I think the key sort of message that
I have heard, like the shift is oh, Enro

00:12:00.327 --> 00:12:02.967
isn't just for local development anymore.

00:12:03.277 --> 00:12:07.647
Like Enro can be used anywhere to do
this global ingress to your application.

00:12:07.647 --> 00:12:12.582
So you can like, Stop worrying about
your whatever reverse proxy solution

00:12:12.582 --> 00:12:14.352
that you're cobbling together instead.

00:12:14.762 --> 00:12:17.602
is that accurate that you could
think of enro maybe the way that I

00:12:17.822 --> 00:12:20.852
think of it as another way to do the
same thing that N Engine X might do.

00:12:21.592 --> 00:12:25.702
And obviously as someone who wants
to spend time building on the

00:12:25.702 --> 00:12:29.902
web, I am not fiddling with devs.

00:12:29.902 --> 00:12:34.377
Like I actually hate N Engine X
just because it's such a pain to, to

00:12:34.437 --> 00:12:39.147
get everything right and, so yeah,
just how can we think about Enoc

00:12:39.447 --> 00:12:41.517
relative to a tool like Engine X?

00:12:42.547 --> 00:12:43.507
Alan: that's a really good intro.

00:12:43.607 --> 00:12:47.322
yeah, what we're calling Enro
is ingress as a service, right?

00:12:47.322 --> 00:12:52.602
It is, it is that piece of getting traffic
into your network, and or into your

00:12:52.602 --> 00:12:57.203
application and basically running it as
a globally distributed service for you.

00:12:57.362 --> 00:12:58.952
you were asking about nGenx.

00:12:58.952 --> 00:13:02.542
It's interesting that is, if you're like
putting applications out on the internet,

00:13:02.542 --> 00:13:04.822
that is certainly a piece, right?

00:13:04.822 --> 00:13:07.782
Where That you're using to
do it, but you often have a

00:13:07.782 --> 00:13:08.952
number of other pieces, right?

00:13:08.952 --> 00:13:12.192
You're layering in front maybe
a content delivery network.

00:13:12.372 --> 00:13:15.852
You're maybe layering in front
some kind of, DDoS protection.

00:13:16.252 --> 00:13:19.372
you may be layering in front,
some kind of like caching proxy.

00:13:20.142 --> 00:13:24.097
You might have an identity aware proxy to
do some piece of authentication for you.

00:13:24.667 --> 00:13:27.097
You often have like layer
four firewall rules.

00:13:27.157 --> 00:13:31.417
You have ips and TLS certificates,
and maybe an integration with Let's

00:13:31.417 --> 00:13:35.317
Encrypt and the list goes on where
you're like, as a, I remember, being,

00:13:35.407 --> 00:13:39.202
baby application developer, like
back in the day and learning, Apache

00:13:39.202 --> 00:13:43.672
and then Engine X to put my web
applications on the internet and just

00:13:43.672 --> 00:13:46.612
being frustrated that it was something
that like I didn't want to learn.

00:13:47.132 --> 00:13:51.437
And I didn't like, it wasn't like core to
the thing that I was doing that I wanted

00:13:51.437 --> 00:13:53.297
to deliver, which was the application.

00:13:53.417 --> 00:13:57.257
And that's really the power is like
we're, enro is talking about collapsing

00:13:57.467 --> 00:14:02.267
all of those into a unified layer that
is tremendously developer friendly for

00:14:02.267 --> 00:14:05.837
you to basically put your application
on and on the internet, in a way that

00:14:05.837 --> 00:14:09.417
you want, secured in the way that
you want, without you having to worry

00:14:09.417 --> 00:14:11.277
about all of those low level pieces.

00:14:12.192 --> 00:14:16.479
The analogy that, we've been using is
that to put applications on the internet.

00:14:16.489 --> 00:14:20.419
you're working with, like the
assembly language of networking.

00:14:20.579 --> 00:14:23.009
you're really working with a lot
of these low level primitives

00:14:23.009 --> 00:14:25.665
like DNS and tcp, and, ips and.

00:14:26.279 --> 00:14:29.129
TLS certificates and things that
as an application developer like

00:14:29.309 --> 00:14:30.899
you don't really care about, right?

00:14:30.899 --> 00:14:35.579
you want a domain with, you know, an HTPs
s certificate in front of it to receive

00:14:35.579 --> 00:14:39.799
the traffic closest to your customers
and maybe enforce some policy, some

00:14:39.799 --> 00:14:41.269
authentication and things like that.

00:14:41.659 --> 00:14:44.959
But the infrastructure run it and
the configuration to it should be.

00:14:45.334 --> 00:14:47.284
A lot simpler than it is right now.

00:14:47.344 --> 00:14:50.864
And we're, what we think we're
doing, at enro is really building

00:14:51.314 --> 00:14:54.914
that high level language to
abstract that, assembly language.

00:14:55.736 --> 00:15:01.066
CJ: I feel like there is a trend in
modern development where it's Let's

00:15:01.066 --> 00:15:05.836
give you these drop-in tools or drop-in
components that replace like a lot of work

00:15:05.836 --> 00:15:07.156
that you otherwise would've had to do.

00:15:07.186 --> 00:15:12.256
So on the, for the Stripe example,
you're getting these embedable payment

00:15:12.256 --> 00:15:15.736
components where you can just drop
in some React component and that will

00:15:16.006 --> 00:15:18.557
give you these secure eye frames that.

00:15:19.216 --> 00:15:23.176
Will handle lots of like validation
and collecting different payment

00:15:23.176 --> 00:15:26.866
method types and localizing, and
it's like offloading a lot of the

00:15:26.866 --> 00:15:29.086
work of collecting payment to Stripe.

00:15:29.446 --> 00:15:34.441
And in this case it's like offloading
a lot of the network level things to

00:15:34.501 --> 00:15:38.096
en groc where you can just install
this agent, set up some connect

00:15:38.096 --> 00:15:40.536
handlers and, it seems like you've got.

00:15:40.546 --> 00:15:42.106
Go and rust.

00:15:42.106 --> 00:15:46.096
And I saw some hints of
maybe JavaScript coming soon.

00:15:46.466 --> 00:15:50.936
so it's a couple of lines that you add
when you're setting up your server that's

00:15:50.936 --> 00:15:55.766
gonna listen and then from there  en rock
will handle abstracting away or offloading

00:15:55.771 --> 00:15:58.286
like all of this other complexity.

00:15:58.676 --> 00:16:04.076
And one of the things that I'm like
curious to double click on is, The, the,

00:16:04.226 --> 00:16:08.546
I think you call them points of presence
maybe, or the global globally distributed

00:16:08.546 --> 00:16:12.716
concept here, and like, how should we
think about that relative to like edge

00:16:12.716 --> 00:16:19.586
functions or Dino deploy or, like having,
yeah, having your, your, your application

00:16:19.586 --> 00:16:24.896
deployed to the edge versus having ingress
happening at the edge and then routing

00:16:24.896 --> 00:16:30.161
that to some server that might be, Living
in Virginia or Washington or something.

00:16:30.381 --> 00:16:31.221
Alan: that's a good question.

00:16:31.411 --> 00:16:31.741
you're right.

00:16:31.741 --> 00:16:33.331
We've built the Go and Rust SDKs.

00:16:33.331 --> 00:16:34.651
We're working on a couple of other ones.

00:16:34.651 --> 00:16:37.531
Those are a more modern way of
using NRO that, I don't think a

00:16:37.531 --> 00:16:40.561
lot of people are familiar with,
where you're basically embedding

00:16:40.566 --> 00:16:42.181
NRO directly into your application.

00:16:42.186 --> 00:16:45.106
You don't have this, if you're like used
to using it, you used to have a separate

00:16:45.106 --> 00:16:48.546
executable that you would download and now
you have a library where you basically,

00:16:49.721 --> 00:16:54.251
Ask and it returns to something that looks
and feels exactly like a socket object.

00:16:54.351 --> 00:16:56.061
but it's not listening on a local port.

00:16:56.061 --> 00:16:58.881
It's listening on all of our global
points of presence all around the world.

00:16:59.811 --> 00:17:03.556
in terms of like how to think about
it versus edge functions, or like

00:17:03.596 --> 00:17:05.806
deploying your application to the edge.

00:17:06.286 --> 00:17:07.366
what I would say is.

00:17:08.146 --> 00:17:11.986
When you're building an application,
sometimes deploying applications

00:17:11.986 --> 00:17:14.826
to the edge makes sense, and
sometimes like having them, not

00:17:14.826 --> 00:17:16.476
deployed to the edge makes sense.

00:17:16.526 --> 00:17:20.016
deploying them to the edge comes with,
basically puts you in the space of as

00:17:20.016 --> 00:17:22.666
soon as you have to talk to storage,
you have the problem of cool, I have a

00:17:22.666 --> 00:17:24.346
globally distributed storage problem.

00:17:24.976 --> 00:17:27.976
r really, I think where
we're going to end up.

00:17:28.661 --> 00:17:30.916
Is, there are two possible futures there.

00:17:31.126 --> 00:17:36.126
One is, one in which like our
storage layers become so good that

00:17:36.131 --> 00:17:39.906
we can run our entire applications
like fully distributed at the edge.

00:17:39.906 --> 00:17:43.476
And like all of the synchronization
problems happen in like this

00:17:43.481 --> 00:17:44.666
global storage layer, right?

00:17:44.806 --> 00:17:48.526
Of what is like the next iteration of
something like spanner and is it good

00:17:48.526 --> 00:17:52.091
enough that We can commoditize it and
give developers really simple APIs

00:17:52.091 --> 00:17:55.871
where they can just call this stuff
anywhere around the world and give

00:17:55.871 --> 00:17:57.881
them, hopefully the right APIs to make.

00:17:57.911 --> 00:18:01.181
Cuz you know, even with a system like
Spanner, you still, the application

00:18:01.186 --> 00:18:04.811
developer is making the, like the kind
of like cap theory trade-offs, right?

00:18:04.811 --> 00:18:05.831
Of do I want consistency?

00:18:05.831 --> 00:18:07.416
Do I want, availability,
partition tolerance.

00:18:08.606 --> 00:18:09.296
that's one world.

00:18:09.576 --> 00:18:15.076
the other is, that we think about
applications being, a little more.

00:18:15.851 --> 00:18:18.876
Amorphous in terms of being able
to be split between an origin

00:18:18.876 --> 00:18:22.956
application and a piece of it that
it, it pushes out to the global edge.

00:18:23.016 --> 00:18:25.446
And like right now, I think a lot of
developers are thinking about those

00:18:25.446 --> 00:18:30.106
in like separate ways, but, one of
the things that we're really excited

00:18:30.111 --> 00:18:33.286
about, things like the End Rock
SDKs allowing you to do is you can

00:18:33.286 --> 00:18:37.486
specify a lot of the configuration
in those SDKs and they get pushed.

00:18:37.881 --> 00:18:38.956
To our global edge.

00:18:39.276 --> 00:18:43.271
and that's something that's like a stark
contrast to like setting things up with

00:18:43.271 --> 00:18:48.031
a technology like engine X or something
like that in that the application in our

00:18:48.031 --> 00:18:50.971
world has control over the edge, right?

00:18:50.971 --> 00:18:54.881
It has a defined API to say, like,
when I come online, like the.

00:18:55.786 --> 00:19:00.596
The reverse proxy, the ingress point
is an extension of the application.

00:19:00.596 --> 00:19:03.896
I have an API to set up and control
that in the way that I want.

00:19:04.456 --> 00:19:08.266
and I think that will get us into a
world where applications, Can push

00:19:08.266 --> 00:19:12.736
configuration and logic, basically
having like pieces of wassom or stuff

00:19:13.036 --> 00:19:16.196
that they're like, yeah, you can execute
this out at the global edge because, it

00:19:16.196 --> 00:19:19.406
doesn't require like stateful handling
or it requires a minimal amount of local

00:19:19.406 --> 00:19:20.966
stateful handling or things like that.

00:19:21.396 --> 00:19:24.576
and so we're we'll end up giving
developers a little bit more of a

00:19:24.576 --> 00:19:27.996
seamless experience where they have the
control to basically decide, this stuff

00:19:27.996 --> 00:19:29.876
runs there and this stuff runs, here.

00:19:30.893 --> 00:19:31.278
CJ: Got it.

00:19:31.684 --> 00:19:35.999
So you could terminate, ssl, and you can
do your authentication checks and you can.

00:19:37.309 --> 00:19:41.894
Do some basic things at the edge, and
then once you've handled that, then

00:19:42.494 --> 00:19:45.464
and when you're ready to talk to the
database, then you could like, all

00:19:45.464 --> 00:19:50.194
right, now we will make the trek,
the tcp trek all the way across the

00:19:50.194 --> 00:19:53.539
internet and talk to the underlying
the underlying application server.

00:19:54.819 --> 00:19:56.404
Alan: Yeah, that, that
may be the right model.

00:19:56.404 --> 00:19:57.394
It may not be the right model.

00:19:57.394 --> 00:20:00.544
it's a little hard to say at,
at this point, but, I think it's

00:20:00.544 --> 00:20:03.654
like one of those two models or
like a hybrid of them where you're

00:20:03.654 --> 00:20:05.484
pushing like some control out there.

00:20:05.594 --> 00:20:07.994
cuz like at the end of the day
you're just making these trade

00:20:07.999 --> 00:20:11.084
offs about, you're just making
distributed systems trade-offs, right?

00:20:11.139 --> 00:20:14.499
Have you guys like, in, in your
development, it sounds like we

00:20:14.504 --> 00:20:16.564
were talking a little bit at the
beginning about, the kind of,

00:20:16.614 --> 00:20:17.784
development that you're doing.

00:20:18.144 --> 00:20:21.584
CJ you said you were doing a lot of kind
of like web application development, a

00:20:21.584 --> 00:20:25.224
lot of, backend stuff, things like Ruby
on Rails, but also some front end pieces.

00:20:25.614 --> 00:20:28.564
And Colin, you said you, you'd been
doing, some similar things as well.

00:20:28.564 --> 00:20:31.244
I'm curious, do both of you like
have that experience of working

00:20:31.244 --> 00:20:34.084
with, with those kind of, of like
setting that stuff up yourselves?

00:20:34.084 --> 00:20:36.484
Or did you end up like working
with other people who would

00:20:36.484 --> 00:20:37.684
set those things up for you?

00:20:38.133 --> 00:20:42.553
Colin: For me it was, usually
I'm the one on a team, like for

00:20:42.583 --> 00:20:43.813
consulting and things like that.

00:20:43.813 --> 00:20:48.373
Before I was at Orbit, it was not
having an infrastructure or DevOps team.

00:20:48.373 --> 00:20:49.903
So I was doing everything myself.

00:20:50.473 --> 00:20:54.553
And you really get to learn and
appreciate like, All the things that

00:20:54.613 --> 00:20:58.303
not only do you have to learn them once,
but you have to learn them for each

00:20:58.303 --> 00:21:02.003
clot provider or each, infrastructure
stack that you're working with.

00:21:02.003 --> 00:21:05.553
So the, and then you end up feeling
like you're learning this stuff over

00:21:05.553 --> 00:21:09.723
again each time, or there's like a small
differentiation that makes this one better

00:21:09.728 --> 00:21:11.493
than the other one that you used to is.

00:21:12.033 --> 00:21:15.513
and so I do like that idea, like
standardizing it cuz we're seeing a lot.

00:21:16.293 --> 00:21:19.653
It'll be interesting to see, like
a lot of things have been being

00:21:19.753 --> 00:21:21.193
automated, I guess is the right word.

00:21:21.193 --> 00:21:24.313
But like with GitHub co-pilot and
LLMs, like everyone's so excited about

00:21:24.318 --> 00:21:27.213
the idea that we're gonna not have
to write every line of code anymore.

00:21:27.213 --> 00:21:28.088
But it's guess what?

00:21:28.088 --> 00:21:32.748
There's now even more infrastructure
and more tools and more stuff in between

00:21:32.748 --> 00:21:37.248
those apps that we have to deal with
there's definitely a lot of tools that

00:21:37.248 --> 00:21:41.838
I'm starting to see that with like
secure data transfer and stuff like that.

00:21:41.838 --> 00:21:43.638
It's I definitely don't
wanna do that myself.

00:21:44.108 --> 00:21:47.468
if you were to build an app like
a WhatsApp today with having like

00:21:47.498 --> 00:21:51.653
end-to-end encryption between two people
talking back and forth, and that might

00:21:51.653 --> 00:21:53.753
be a product someone builds today.

00:21:53.758 --> 00:21:54.623
Like what?

00:21:54.828 --> 00:21:57.138
Tech stack makes sense there.

00:21:57.268 --> 00:21:59.938
it's not quite the same thing that
we're talking about today around local

00:21:59.938 --> 00:22:03.958
tunneling and things like that, but
it is a very similar thing where it's

00:22:03.958 --> 00:22:08.418
let's say GitHub co-pilots helping me
build a chat app with like sockets and

00:22:08.418 --> 00:22:11.298
things like that, you're in, you're
probably building a very insecure.

00:22:11.973 --> 00:22:15.703
chat app to start or, internet
of Insecure things would be.

00:22:15.703 --> 00:22:20.203
The other way to think of it is like a lot
of things get shipped with not a lot of

00:22:20.203 --> 00:22:22.033
thought around the security piece of it.

00:22:22.463 --> 00:22:25.223
and so I'm really excited to
see like what things we can

00:22:25.223 --> 00:22:27.288
do to help automate and read.

00:22:27.898 --> 00:22:31.508
We, approach those things, so
that they don't have to be scary.

00:22:31.508 --> 00:22:34.808
I think, like I try not to do
the DevOps stuff these days.

00:22:35.208 --> 00:22:40.663
I think the jokes of dev, oops, engineer
more than DevOps, its like, what check,

00:22:40.693 --> 00:22:42.643
what one thing did I forget to look at?

00:22:42.643 --> 00:22:47.033
What one, one setting did I forget
that, I'm thinking that I'm secure, but

00:22:47.033 --> 00:22:50.473
like the front door's wide open, even
though I followed like this long list of

00:22:50.893 --> 00:22:53.023
security and ingress, like checklists.

00:22:53.543 --> 00:22:57.523
CJ: to give some people nightmares,
I think Back in the day, I would

00:22:57.523 --> 00:23:01.213
go on Digital Ocean and spin up a
droplet and then just SSH into it and

00:23:01.213 --> 00:23:05.743
manually set up, passenger and engine
X and Apache, like all these things.

00:23:05.743 --> 00:23:08.233
And like immediately
started getting hacked.

00:23:08.893 --> 00:23:11.328
Like just started to get pummeled
by spammers and whatever.

00:23:12.308 --> 00:23:17.048
And then, if we, rewind even further,
I remember setting up, like on Windows

00:23:17.048 --> 00:23:21.558
server, like setting up IIS to like,
open up certain ports so that they can

00:23:21.558 --> 00:23:25.553
like, talk to different applications
and, someone re goes down into the

00:23:25.553 --> 00:23:29.993
basement and restarts the physical
machine that was running Windows server.

00:23:30.353 --> 00:23:32.623
It's okay, we've come
a long way since then.

00:23:32.623 --> 00:23:33.423
And, even back.

00:23:33.903 --> 00:23:36.673
pre this is pre and, en rock.

00:23:36.673 --> 00:23:37.153
I'm sure.

00:23:37.333 --> 00:23:41.833
It was like, oh, if I want to show
someone my local running web application,

00:23:41.833 --> 00:23:46.603
I'm gonna log into my, lo my router
and set up, nat address forwarding

00:23:46.603 --> 00:23:50.443
so that I can like, poke a hole in my
home router so that people can hit my

00:23:50.448 --> 00:23:52.473
machine on, port 80, 80 or whatever.

00:23:52.803 --> 00:23:57.203
So I think y most recently I've
been really depending a lot on

00:23:57.443 --> 00:24:02.423
tools like Heroku and tools like
Versace to manage most of that.

00:24:02.423 --> 00:24:08.088
And like more recently using things like
CloudFlare to provide, these really fancy

00:24:08.808 --> 00:24:13.758
SSL termination things where I can have
wildcard domains and set up all of this,

00:24:14.058 --> 00:24:18.458
I don't know, more advanced infrastructure
for building a platform, but, for the

00:24:18.458 --> 00:24:21.548
most part, yeah, it's been one of those
things where I've been bitten so many

00:24:21.548 --> 00:24:27.838
times by building insecure surfaces that,
I now try to just, stay in my lane and

00:24:27.888 --> 00:24:29.988
build tools closer to the front end.

00:24:29.988 --> 00:24:33.318
Then, then, yeah, I then I thought that
I could back in the day, I dunno, may,

00:24:33.378 --> 00:24:38.089
maybe now I can just drop in en gro
Ruby and, depend on the security and

00:24:38.148 --> 00:24:42.103
let Alan do all the heavy lifting of
figuring out how to not get attacked.

00:24:42.503 --> 00:24:44.233
Alan: that's really what
we want, folks to do.

00:24:44.233 --> 00:24:48.343
We, the reason, the kind of like engineer
that I've been for a very long time, and

00:24:48.343 --> 00:24:52.513
the thing that like really has always
made me excited is about building a.

00:24:53.173 --> 00:24:57.513
Tools and platforms and infrastructure for
developers so that there's nothing more

00:24:57.513 --> 00:25:00.843
exciting than for me than like solving
problems and watching developers like

00:25:00.843 --> 00:25:02.853
never have to deal with them ever again.

00:25:02.963 --> 00:25:07.273
and that's, that ethos is really what
started N Groc and it's what continues it

00:25:07.303 --> 00:25:11.453
today is, how do we take these problems
away, so that, folks don't have to

00:25:11.453 --> 00:25:14.453
like, think about the things that they
definitely don't wanna be thinking about.

00:25:15.623 --> 00:25:15.773
CJ: For

00:25:15.878 --> 00:25:18.878
Colin: Yeah, and a lot of us have
these experiences of tinkering

00:25:18.883 --> 00:25:20.443
and learning and I do wonder.

00:25:20.803 --> 00:25:23.713
Because a lot of these newer tools
make it a little bit harder to tinker.

00:25:23.713 --> 00:25:28.333
Like it's amazing to be able to deploy
to, a render a fly, but you're not

00:25:28.333 --> 00:25:32.633
actually messing with the digital ocean
box like you, were talking about there.

00:25:32.633 --> 00:25:34.673
But where do you then learn these things?

00:25:34.678 --> 00:25:38.573
Because I don't like someone coming
out of a bootcamp might learn the

00:25:38.578 --> 00:25:42.593
application stack, but they're not
necessarily getting a lot of time or

00:25:42.593 --> 00:25:44.603
experience with some of this other stuff.

00:25:44.663 --> 00:25:46.443
And, I haven't seen.

00:25:46.498 --> 00:25:50.968
Too many dev like DevOps boot camps or
security boot camps, things like that.

00:25:50.998 --> 00:25:53.748
cause that would even like a
finishing school for security, right?

00:25:53.758 --> 00:25:58.838
it's something that I would take just to
know what gaps do I have in my knowledge.

00:25:58.838 --> 00:26:02.439
Because very similarly, like anything,
we used to do a lot of WordPress stuff

00:26:02.444 --> 00:26:09.118
and Any website with a slash WP admin
was just going to be added to a list that

00:26:09.118 --> 00:26:10.888
was gonna get attacked at some point.

00:26:11.318 --> 00:26:15.938
and then you start tinkering around with
Apache or Engine X and things like that.

00:26:16.338 --> 00:26:18.683
but you actually could, it's kinda
like tinkering with cars like

00:26:18.688 --> 00:26:21.953
you used to be able to actually
work on your car and today.

00:26:22.108 --> 00:26:24.148
Very difficult to work on your own car.

00:26:24.148 --> 00:26:28.198
And as we get to EVs and things, it's
gonna be near impossible too, especially

00:26:28.198 --> 00:26:33.213
when, those cars are mostly software and,
a whole bunch of batteries, But, it, it'll

00:26:33.213 --> 00:26:36.768
be interesting to see like where this
goes and what sorts of things, change.

00:26:36.788 --> 00:26:39.248
Is there anything that like
you're particularly excited about?

00:26:39.888 --> 00:26:45.078
Alan, as far as like maybe future
looking things or, not necessarily

00:26:45.138 --> 00:26:48.048
add and groc or if there's stuff that
you guys are cooking up over there.

00:26:48.648 --> 00:26:51.218
Alan: Oh man, there's so much
to be excited about today.

00:26:51.378 --> 00:26:54.508
one of the things that's really excited
about is that, it's interesting what

00:26:54.508 --> 00:26:58.548
you said about, folks don't have, they
don't, someone coming out of bootcamp

00:26:58.548 --> 00:27:00.378
may not learn a lot of those things.

00:27:00.978 --> 00:27:01.878
that's true.

00:27:02.738 --> 00:27:03.888
But maybe that's okay.

00:27:04.068 --> 00:27:07.218
Like maybe we're like headed for
a world where really that's okay.

00:27:07.268 --> 00:27:10.988
and if you like rewind a little bit,
you're like, most developers like today

00:27:11.018 --> 00:27:14.918
don't think about like memory management,
but we're all like, that's a nice thing.

00:27:14.998 --> 00:27:17.218
Mo most of us don't really
want to think about that.

00:27:17.318 --> 00:27:20.203
and most of us don't think in
assembly language anymore, and

00:27:20.203 --> 00:27:21.673
like maybe that's okay too.

00:27:22.093 --> 00:27:26.343
so I, I don't know it, there, there
are always these sets of problems that.

00:27:27.658 --> 00:27:31.293
Every, everything in, in software
engineering is a leaky abstraction.

00:27:31.353 --> 00:27:34.293
When your problem gets thorny
enough where you're like, I gotta

00:27:34.293 --> 00:27:37.348
go below, I gotta understand like
the piece underneath and the piece

00:27:37.348 --> 00:27:38.478
underneath and the piece underneath.

00:27:39.148 --> 00:27:43.178
but I think, as the industry has matured
and our tools and our infrastructure

00:27:43.178 --> 00:27:47.198
has gotten better, we have gotten
to a place where you have to get

00:27:47.198 --> 00:27:48.998
into those layers less and less.

00:27:49.028 --> 00:27:50.018
Just because we've gotten.

00:27:50.333 --> 00:27:53.873
We've hardened those under underlying
layers and made the APIs to them so

00:27:53.873 --> 00:27:55.223
much better than they used to be.

00:27:55.733 --> 00:27:59.358
And I'm optimistic that a
lot of this stuff will, move

00:27:59.358 --> 00:28:00.828
in that direction as well.

00:28:00.918 --> 00:28:05.248
And that a lot of the problems that
we solve today of that, you would do

00:28:05.248 --> 00:28:09.858
in like a DevOps finishing school if
one existed, are things that I hope

00:28:09.863 --> 00:28:13.038
the next generation dev developers
like never has to think about.

00:28:13.088 --> 00:28:15.348
and that there, there
are a few of us who like.

00:28:15.713 --> 00:28:18.743
Spend our time there and that, if
people want to like, understand

00:28:18.743 --> 00:28:21.383
those things, just like if someone
like wants to go and understand the

00:28:21.383 --> 00:28:25.643
details of the Linux kernel, they
can, but if they're like building web

00:28:25.643 --> 00:28:29.193
applications, like they shouldn't have
to and we shouldn't expect them to.

00:28:29.463 --> 00:28:30.183
so I don't know.

00:28:30.233 --> 00:28:36.613
I'm optimistic and excited about a future
where, those are, those become details

00:28:36.613 --> 00:28:37.993
that folks don't have to think about.

00:28:37.993 --> 00:28:41.963
So I'm really excited about this,
new generation of, NextGen Heroku

00:28:42.193 --> 00:28:45.223
folks who are thinking about,
applications as a service again.

00:28:45.733 --> 00:28:45.953
and.

00:28:46.828 --> 00:28:47.493
Yeah, I don't know.

00:28:47.543 --> 00:28:48.533
I'm excited about that.

00:28:48.773 --> 00:28:49.733
What else am I excited about?

00:28:49.733 --> 00:28:51.893
There's a lot to be excited
about in software engineering.

00:28:52.263 --> 00:28:55.108
web assembly is certainly an area
that's obviously really exciting.

00:28:55.608 --> 00:28:59.968
obviously LMS and ML in general are, a
really cool area to be excited about too.

00:29:00.028 --> 00:29:01.134
So there's a lot that's going on.

00:29:01.718 --> 00:29:05.738
CJ: One of the things that I've
noticed over the last, probably two

00:29:05.743 --> 00:29:10.088
years-ish, is that there are a lot
of new developers coming online that

00:29:10.088 --> 00:29:13.508
are building with tools like Relet
where they're actually like building

00:29:13.513 --> 00:29:18.408
something in the cloud and running it
in the cloud, and that is where they're.

00:29:18.893 --> 00:29:20.633
Hosting it and deploying
it and everything.

00:29:20.633 --> 00:29:21.983
It's like part of rep.

00:29:22.403 --> 00:29:26.933
And so I'm curious, if you have any
intuition or if you've seen the same

00:29:26.938 --> 00:29:33.648
thing, around like the future of this next
gen of developers and will they just Yeah.

00:29:33.703 --> 00:29:36.913
do we think everything is just gonna
be some cloud-based i d e and you

00:29:36.913 --> 00:29:41.783
just say go, and then it's running
like for you and anyone can use it.

00:29:41.903 --> 00:29:42.293
I don't know.

00:29:42.293 --> 00:29:42.953
Especially like.

00:29:43.778 --> 00:29:47.228
They have that ghost writer, kind of
their version of copilot that's built in.

00:29:47.228 --> 00:29:50.288
So I don't know, there's some really
cool stuff happening over there.

00:29:50.438 --> 00:29:55.148
.
Alan: this is, this is the space of
replica and code spaces and glitch

00:29:55.178 --> 00:29:57.268
and that kind of like set of tools.

00:29:57.958 --> 00:29:58.528
they're exciting.

00:29:58.528 --> 00:30:03.208
in general, I think as an industry we
should be tremendously excited about

00:30:03.568 --> 00:30:07.208
anything that lowers the barrier to
entry to creating new, new software.

00:30:07.308 --> 00:30:09.408
and so in general, like.

00:30:09.708 --> 00:30:11.958
that's what we're doing at Enro
is trying to lower that barrier

00:30:11.958 --> 00:30:14.838
to entry, to like building
applications and getting them online.

00:30:15.318 --> 00:30:19.813
and, really excited that you can use
Enro with platforms like Rep and Glitch

00:30:19.813 --> 00:30:23.383
and things like that to get yourself
this, global ingress with, functionality

00:30:23.388 --> 00:30:24.553
that can push out to the edge.

00:30:25.543 --> 00:30:27.793
But in general, like.

00:30:28.183 --> 00:30:31.633
Anything that lets people like lower
the vari entry and create new software

00:30:31.633 --> 00:30:36.013
and get more people into, to the space
being creative and building new stuff.

00:30:36.223 --> 00:30:38.543
I think, that's one of the things
that's most exciting about our

00:30:38.548 --> 00:30:41.723
industry is getting to see all the
people experimenting with all of

00:30:41.723 --> 00:30:45.073
the new and cool ways that, we could
potentially build software together.

00:30:45.078 --> 00:30:46.278
That's all really exciting to me.

00:30:47.343 --> 00:30:51.588
Colin: Yeah, I think we like to geek out
on the tools and the processes and things,

00:30:51.588 --> 00:30:55.718
but ultimately we're doing all of this to
build like a product for customers, right?

00:30:55.718 --> 00:30:59.368
And so sometimes it's Does the customer
actually know how we're getting

00:30:59.368 --> 00:31:00.778
the web hooks delivered to the app?

00:31:00.838 --> 00:31:01.618
They do not care.

00:31:02.078 --> 00:31:04.088
they just want the outcome, right?

00:31:04.088 --> 00:31:08.783
The, if it's a dog walking app, they,
or, Uber, your Uber driver's showing up.

00:31:08.788 --> 00:31:11.753
Like you want to get a notification
when that's happening and,

00:31:12.393 --> 00:31:13.623
they're not worried about what.

00:31:14.343 --> 00:31:15.873
the infrastructure looks like underneath.

00:31:15.873 --> 00:31:19.873
So I think, we tr we've been thinking
in this show in terms of like, how do

00:31:19.873 --> 00:31:24.223
we build and learn, as developers, like
how do we develop ourselves, not just

00:31:24.623 --> 00:31:28.403
yes we can go learn new languages and
things like that, but it's like, what

00:31:28.408 --> 00:31:31.613
other things are we bringing to the table
and think, like thinking about product

00:31:31.613 --> 00:31:35.963
and the developer experience all the
way down to what error codes do we get?

00:31:36.333 --> 00:31:37.953
You know that's the same for a product.

00:31:37.953 --> 00:31:41.103
if your Uber card just doesn't
show up, you can't just say

00:31:41.108 --> 00:31:42.333
something happened, right?

00:31:42.333 --> 00:31:45.153
It's gotta be like, why
did the car not show up?

00:31:45.603 --> 00:31:46.803
And what can I do about it?

00:31:46.808 --> 00:31:48.183
Who can I reach out to?

00:31:48.553 --> 00:31:52.528
An Airbnb got canceled on me for this
weekend and it was like, You know, you get

00:31:52.528 --> 00:31:55.548
a text that's your Airbnb was canceled,
and then you're like, great, now I gotta

00:31:55.548 --> 00:31:59.748
go, follow the, literally the stack
trace of okay, go click on the link.

00:31:59.748 --> 00:32:02.178
Let's go open Airbnb, let's
go find out what happened.

00:32:02.178 --> 00:32:07.538
And, that is so far removed from whatever
tech stack Airbnb is using under the Hut.

00:32:07.598 --> 00:32:12.408
So, um, definitely as you're listening to
this, remember who you're building for,

00:32:12.408 --> 00:32:15.318
remember what you're building, like what
problem you're trying to solve for, and,

00:32:15.908 --> 00:32:19.943
use tools like incorrect to Get rid of
some of those things, the headaches, or

00:32:19.943 --> 00:32:23.673
at least make them standardized so that,
on the next project you work on, you

00:32:23.673 --> 00:32:25.733
have, a tool that you can reach for sure.

00:32:26.618 --> 00:32:28.628
Alan: Yeah, like I
said, I'm excited about.

00:32:29.238 --> 00:32:32.328
any tools and any infrastructure
that, that make it easier?

00:32:32.358 --> 00:32:36.588
I think they're all like places where gets
more people into software development.

00:32:36.648 --> 00:32:40.158
It means more people
are trying new things.

00:32:40.268 --> 00:32:41.828
we're as an industry, as a.

00:32:42.453 --> 00:32:47.543
A, global populace, like the
speed of innovation is tied to how

00:32:47.543 --> 00:32:51.023
quickly can we experiment, like
how many people can experiment.

00:32:51.413 --> 00:32:54.803
And so as we see like these new
technologies and services that

00:32:55.163 --> 00:32:59.253
lower that cost to experimentation,
we're getting more shots at

00:32:59.253 --> 00:33:01.798
building more new and cool things.

00:33:01.798 --> 00:33:04.778
And that's something that we
should all be really excited about.

00:33:06.118 --> 00:33:06.533
CJ: Totally.

00:33:07.223 --> 00:33:07.343
Yeah.

00:33:07.343 --> 00:33:10.403
I think this also dovetails really
nicely with the whole no-code

00:33:10.403 --> 00:33:11.933
movement, which we've talked a lot.

00:33:12.053 --> 00:33:19.273
And I think, I, when I first thought about
NRO and no code, I thought, oh, there's

00:33:19.273 --> 00:33:22.763
probably not that many people who are,
opening up the terminal and running NRO

00:33:23.003 --> 00:33:26.453
and setting up a local tunnel so they
could do no code stuff because they're

00:33:26.453 --> 00:33:28.103
probably using some application somewhere.

00:33:28.493 --> 00:33:31.678
But the reality is that now
that might be part of their

00:33:31.728 --> 00:33:33.558
stack in some way or another.

00:33:33.668 --> 00:33:36.993
okay, we're, building this no code
thing with bubble, but I need.

00:33:37.348 --> 00:33:37.678
I don't know.

00:33:37.683 --> 00:33:40.053
I need to test something.

00:33:40.593 --> 00:33:42.423
Yeah, I need to test
web hooks or whatever.

00:33:42.423 --> 00:33:45.353
And, there, there was a bunch
of like use cases, I think.

00:33:45.463 --> 00:33:49.913
That I, recently bumped into within groc
too, where I was like, oh, I want to

00:33:49.913 --> 00:33:53.093
test something locally, but it needs to
have hdps s and I don't wanna have to

00:33:53.098 --> 00:33:54.983
figure out how to set up my SSL cert.

00:33:54.983 --> 00:33:57.403
And so I'm just gonna try on in
groc, cuz I know that it gives me

00:33:57.403 --> 00:34:01.813
that Hdps s endpoint that I can
use instead so that I can go verify

00:34:01.813 --> 00:34:03.553
my Apple Pay domain or whatever.

00:34:03.973 --> 00:34:06.253
It's like a test, like some
Apple Pay thing locally.

00:34:06.643 --> 00:34:10.083
So there's, yeah, I think there's, I
dunno, there, there's always gonna be like

00:34:10.083 --> 00:34:13.793
use cases where people who are building
cool stuff are gonna need these tools.

00:34:13.793 --> 00:34:17.303
But yeah, it is a incredibly
exciting time to be alive.

00:34:17.303 --> 00:34:21.983
And I also like every time that GitHub
co-pilot completes anything for me that

00:34:21.983 --> 00:34:26.243
is like non-trivial or more than a line,
I'm just like, whoa, this is so cool.

00:34:26.243 --> 00:34:30.383
still, after a year of using it almost
every day, it's, it still blows my mind.

00:34:30.413 --> 00:34:33.223
And, yeah, I think it is definitely
a really exciting time to be alive.

00:34:33.223 --> 00:34:33.673
For sure.

00:34:34.348 --> 00:34:36.508
Alan: I don't know that I've
talked to anyone who's used

00:34:36.513 --> 00:34:38.188
GitHub co-pilot for a year.

00:34:38.248 --> 00:34:39.778
do you feel faster when you use it?

00:34:40.348 --> 00:34:41.608
CJ: Oh yeah, way faster.

00:34:42.178 --> 00:34:49.598
I think that, so I, I initially
set it up in Neo Vim, so you don't

00:34:49.603 --> 00:34:51.278
just have to use via vias code.

00:34:51.278 --> 00:34:56.348
So if you're using Neo Vim, go download
T Pope's Get Hope co-pilot thing.

00:34:56.348 --> 00:35:00.408
There's a way to set it up, and it
basically com like replaced all of my.

00:35:01.308 --> 00:35:03.318
My sort of dumb auto completion.

00:35:03.808 --> 00:35:08.558
and so now it's, it's very good
and I'm now at the point where

00:35:08.558 --> 00:35:11.618
I'm learning type script and it
helps a ton with type script.

00:35:12.068 --> 00:35:14.888
But circling back to one of your
earlier points about copying and

00:35:14.888 --> 00:35:20.178
pasting errors, like the errors you get
from TypeScript are so they're, yeah.

00:35:20.178 --> 00:35:21.768
They're impossible to understand.

00:35:21.768 --> 00:35:22.638
They're possible to Google.

00:35:22.828 --> 00:35:24.098
They're very challenging.

00:35:24.098 --> 00:35:28.608
So I'm like, I feel like I'm still
on the frustrating part of the

00:35:28.608 --> 00:35:30.228
learning curve with type script, but,

00:35:30.738 --> 00:35:33.168
Colin: Are you getting, you're getting
some type is not a type errors.

00:35:33.213 --> 00:35:33.603
CJ: Yeah.

00:35:33.603 --> 00:35:37.838
Or it's always like something is not
any, you can't assign something to any,

00:35:37.988 --> 00:35:41.413
cuz we, we have it, we have all of the
restrictions cranked, like really high.

00:35:41.683 --> 00:35:46.523
So it has to be, yeah, all the types
have to be very happy with each other.

00:35:46.703 --> 00:35:50.458
And but yeah, co-pilot has been
making all of that much, much faster.

00:35:50.698 --> 00:35:53.428
And when I was at Stripe, we
were working in lots of different

00:35:53.428 --> 00:35:57.208
programming languages, go php, java.net.

00:35:57.508 --> 00:35:58.088
Ruby python.

00:35:58.738 --> 00:36:02.398
It was, we were all over the place
in sw context switching between

00:36:02.398 --> 00:36:05.483
them was sometimes tricky and GitHub
co-pilots like, oh yeah, I know that

00:36:05.488 --> 00:36:06.623
language and I know that language.

00:36:06.623 --> 00:36:10.734
Did I know that last, like, you know,
kind of the, uh, the Rosetta Stone for

00:36:10.739 --> 00:36:14.238
you to sit there and help you through
okay, what is the syntax for this again?

00:36:14.698 --> 00:36:17.788
but yeah, it's made, it's
definitely made me faster for sure.

00:36:18.643 --> 00:36:21.448
Alan: It's, it's again, like another
thing that I'm like really excited

00:36:21.448 --> 00:36:24.888
about because it fits into that same
theme of things that make software

00:36:24.888 --> 00:36:26.418
development more accessible, right?

00:36:26.418 --> 00:36:29.818
Things that give, and for those who
are, those of us who are already like

00:36:29.818 --> 00:36:33.123
more seasoned software developers,
it gives us leverage, right?

00:36:33.393 --> 00:36:36.969
To be able to like, move faster,
and build things that otherwise,

00:36:36.969 --> 00:36:38.439
like maybe would've taken us longer.

00:36:38.439 --> 00:36:40.779
Maybe we have to build a
team to build those things.

00:36:40.839 --> 00:36:45.849
In some ways, a lot of modern software
development is constrained based on the

00:36:45.854 --> 00:36:48.009
complexity of the things that we build.

00:36:48.159 --> 00:36:52.659
And, the complexity of the applications
that we build, sorry, like the

00:36:52.659 --> 00:36:56.109
functionality, like how much stuff
like an application can do is

00:36:56.114 --> 00:36:58.239
constrained by like how complex of a.

00:36:58.629 --> 00:37:00.399
Of like a code base you can manage.

00:37:00.399 --> 00:37:03.729
And we've built, like so many
of our tools are just about

00:37:03.729 --> 00:37:05.559
trying to manage that complexity.

00:37:05.559 --> 00:37:08.859
Like how do we create abstractions so
we can hide some of that complexity

00:37:08.859 --> 00:37:11.169
and not think about it as we like,
deal with the rest of the problem.

00:37:11.739 --> 00:37:15.274
and like software engineering
and management, of like building

00:37:15.274 --> 00:37:19.144
engineering organizations is about
like siloing that complexity like

00:37:19.144 --> 00:37:21.214
within humans and within teams, right?

00:37:21.214 --> 00:37:24.244
Of like, how do we create a team who
can own this like problem so the other

00:37:24.244 --> 00:37:25.624
teams don't have to think about it?

00:37:26.224 --> 00:37:29.869
And technologies like co-pilot are
really exciting because they give

00:37:29.869 --> 00:37:33.409
everyone leverage, which means like
the scope of the things that we can

00:37:33.409 --> 00:37:35.489
all solve together, gets larger.

00:37:35.739 --> 00:37:40.229
if everyone, can work at higher levels
of abstraction, I, I think of it as like

00:37:40.259 --> 00:37:44.545
a kind of like a messy compiler that
doesn't always do the right thing, right?

00:37:44.545 --> 00:37:44.695
Or

00:37:44.695 --> 00:37:48.090
you're like, I have an intention
and you compile it into, machine

00:37:48.090 --> 00:37:49.650
code, but you're not always right.

00:37:50.010 --> 00:37:52.055
Which is, an exciting place to be.

00:37:52.235 --> 00:37:55.595
that we're in this world where
we're getting to where I see the

00:37:55.595 --> 00:37:59.005
scope of the problems that we can
create and tackle, becoming larger.

00:37:59.900 --> 00:38:00.390
CJ: Totally.

00:38:00.590 --> 00:38:03.620
And com combining with the other
tool, like the other LM tools.

00:38:03.620 --> 00:38:05.030
the other day I was, I.

00:38:05.110 --> 00:38:09.280
Just trying to do something with
a bunch of unknowns where I wanted

00:38:09.280 --> 00:38:14.890
to make a video where the video
was explaining a code snippet and

00:38:15.220 --> 00:38:17.410
I wanted all of it to be automated.

00:38:17.470 --> 00:38:20.500
And so I wanted to be able to just
say my input is some code snippet and

00:38:20.500 --> 00:38:24.890
the output is a video that is animated
and it brings in the code snippet.

00:38:24.890 --> 00:38:29.090
It explains what it does with a voiceover
and it shows you like all this stuff.

00:38:29.090 --> 00:38:32.360
Basically, like my job as a developer
graphic as right, and I was like,

00:38:32.420 --> 00:38:34.190
chat G B T, how would I build this?

00:38:34.190 --> 00:38:37.610
like how do I animate this and how
would I animate some code showing up?

00:38:37.610 --> 00:38:40.700
And then it just like starts spitting
out different like python blocks

00:38:41.060 --> 00:38:45.500
using map plot lib and using like
these other animation libraries.

00:38:45.500 --> 00:38:47.180
And then I was like, okay,
and now how do I like.

00:38:48.235 --> 00:38:50.905
describe this and it spits out the
description that you take the description.

00:38:50.905 --> 00:38:52.825
It's okay, now go to some other tool.

00:38:52.830 --> 00:38:54.600
okay, now make this a voiceover.

00:38:54.600 --> 00:38:57.840
It gives you like the AI voiceover,
and then you're able to ki it was

00:38:57.840 --> 00:39:02.160
like an hour of just playing around
in a bunch of spaces that I had

00:39:02.160 --> 00:39:05.445
no idea about, what tools to use
or, how to put things together.

00:39:05.465 --> 00:39:08.655
And just like between GitHub co-pilot.

00:39:09.350 --> 00:39:12.470
Helping write some of the code between
chat, e p t, writing some of the code.

00:39:12.710 --> 00:39:16.070
It went from nothing to having a
prototype in an hour because you can

00:39:16.070 --> 00:39:17.750
just whack at it in different ways.

00:39:17.750 --> 00:39:20.420
And even copying the error
message directly into chat e p t.

00:39:20.420 --> 00:39:23.120
And it will just tell you like,
here's the thing that you got

00:39:23.125 --> 00:39:24.514
wrong, and here's how to fix it.

00:39:24.914 --> 00:39:26.874
And it's been really fun.

00:39:26.974 --> 00:39:31.174
I don't know that style of development,
like chat, G B t is the third

00:39:32.194 --> 00:39:35.404
like pair programmer in the room
with you, has been interesting.

00:39:35.899 --> 00:39:36.229
Alan: Yeah,

00:39:36.274 --> 00:39:37.654
Colin: br brute forest development.

00:39:38.764 --> 00:39:39.484
CJ: exactly.

00:39:39.684 --> 00:39:39.904
Colin: Oh.

00:39:40.279 --> 00:39:41.089
Alan: that's really exciting.

00:39:41.429 --> 00:39:44.519
just all of these tools and ways to
develop are just really exciting cuz

00:39:44.569 --> 00:39:45.889
we're gonna get to see more stuff.

00:39:45.919 --> 00:39:47.509
we're gonna get to build
things more easily.

00:39:47.939 --> 00:39:51.639
no, I'm really excited about building
applications on top of all these things.

00:39:52.599 --> 00:39:53.109
Colin: Absolutely.

00:39:53.109 --> 00:39:56.349
And I think, leverage is a great
place to end this episode on.

00:39:56.349 --> 00:39:59.919
So thanks so much for joining us and
spending time with us today, Alan.

00:39:59.919 --> 00:40:00.729
It's been awesome.

00:40:01.419 --> 00:40:02.229
Alan: It's been a pleasure.

00:40:02.769 --> 00:40:03.409
Thanks for having me.

00:40:04.779 --> 00:40:08.409
CJ: As always, you can head over
to Build and learn.dev to check

00:40:08.409 --> 00:40:09.789
out all the links and resources.

00:40:09.789 --> 00:40:11.379
We'll drop those in
the show notes for you.

00:40:12.129 --> 00:40:13.449
Thanks so much for listening.

00:40:13.454 --> 00:40:15.159
That's all, and we'll see you next time.

00:40:16.584 --> 00:40:17.094
Colin: See ya.