WEBVTT

00:00:00.001 --> 00:00:01.860
Do your applications call a lot of APIs?

00:00:01.860 --> 00:00:04.560
Maybe you have a bunch of microservices driving your app.

00:00:04.560 --> 00:00:08.240
You probably don't have the crazy combinatorial explosion

00:00:08.240 --> 00:00:10.400
that Zapier does for connecting APIs.

00:00:10.400 --> 00:00:13.480
They have millions of users automating things

00:00:13.480 --> 00:00:15.080
with thousands of APIs.

00:00:15.080 --> 00:00:16.060
It's pretty crazy.

00:00:16.060 --> 00:00:17.580
And they're doing it all with Python.

00:00:17.580 --> 00:00:21.060
Join me and Brian Helmig, the CTO and co-founder of Zapier,

00:00:21.060 --> 00:00:23.220
as we discuss how they pull this off with Python.

00:00:23.220 --> 00:00:26.100
This is Talk Python To Me, episode 199,

00:00:26.100 --> 00:00:28.700
recorded January 21st, 2019.

00:00:28.700 --> 00:00:45.140
Welcome to Talk Python To Me, a weekly podcast on Python,

00:00:45.140 --> 00:00:48.120
the language, the libraries, the ecosystem, and the personalities.

00:00:48.120 --> 00:00:50.040
This is your host, Michael Kennedy.

00:00:50.040 --> 00:00:52.180
Follow me on Twitter, where I'm @mkennedy.

00:00:52.180 --> 00:00:54.520
Keep up with the show and listen to past episodes

00:00:54.520 --> 00:00:55.920
at talkpython.fm.

00:00:55.920 --> 00:00:58.360
And follow the show on Twitter via at Talk Python.

00:00:59.100 --> 00:01:01.860
This episode is brought to you by Linode and Ting.

00:01:01.860 --> 00:01:03.960
Check out what they're offering during their segments.

00:01:03.960 --> 00:01:05.260
It really helps support the show.

00:01:05.260 --> 00:01:07.420
Brian, welcome to Talk Python.

00:01:07.420 --> 00:01:08.260
Thank you, thank you.

00:01:08.260 --> 00:01:08.960
I'm excited to be here.

00:01:08.960 --> 00:01:10.060
I'm excited to have you here.

00:01:10.060 --> 00:01:13.700
It's so cool to have a look inside a company like Zapier

00:01:13.700 --> 00:01:16.080
and all the interesting ways you're using Python,

00:01:16.080 --> 00:01:18.000
and especially some of the scalability

00:01:18.000 --> 00:01:19.880
and sort of interoperability stuff you got going on

00:01:19.880 --> 00:01:22.360
is like next level stuff you got there.

00:01:22.360 --> 00:01:22.900
Yeah, yeah.

00:01:22.900 --> 00:01:24.180
It's some really cool stuff.

00:01:24.180 --> 00:01:24.720
It's really fun.

00:01:24.720 --> 00:01:25.520
Yeah, awesome.

00:01:25.520 --> 00:01:27.280
Now, before we get into all that, though,

00:01:27.280 --> 00:01:28.740
let's start with your story.

00:01:28.740 --> 00:01:29.940
How did you get into programming in Python?

00:01:29.940 --> 00:01:32.960
I got into programming mostly, I want to say,

00:01:32.960 --> 00:01:34.860
early university years, right?

00:01:34.860 --> 00:01:36.540
So kind of getting into that,

00:01:36.540 --> 00:01:37.820
hmm, I want to start some startups.

00:01:37.820 --> 00:01:39.960
I want to kind of create some businesses online.

00:01:39.960 --> 00:01:41.800
And I was big into music,

00:01:41.800 --> 00:01:44.560
so I actually did like online guitar lessons for a while

00:01:44.560 --> 00:01:46.300
and needed to build a site around that.

00:01:46.300 --> 00:01:49.560
And it just kind of all expanded from that.

00:01:49.560 --> 00:01:51.240
But I never trained it like formally.

00:01:51.240 --> 00:01:54.300
I just literally like got addicted to doing it

00:01:54.300 --> 00:01:55.420
like day in and day out.

00:01:55.420 --> 00:01:57.320
And then all throughout college,

00:01:57.320 --> 00:01:59.660
like that's basically like all you could find me doing

00:01:59.660 --> 00:02:00.840
was like building things

00:02:00.840 --> 00:02:02.720
and creating all these little side projects

00:02:02.720 --> 00:02:04.540
and little businesses that didn't really work.

00:02:04.540 --> 00:02:05.100
Where's Brian?

00:02:05.100 --> 00:02:06.300
He's in the computer lab, man.

00:02:06.300 --> 00:02:08.380
He's down there working on something.

00:02:08.380 --> 00:02:08.920
That's cool.

00:02:08.920 --> 00:02:10.280
I really like it.

00:02:10.280 --> 00:02:11.480
It's like you learn programming

00:02:11.480 --> 00:02:12.540
because you have these ideas.

00:02:12.540 --> 00:02:13.820
And you're like, well, programming is,

00:02:13.820 --> 00:02:16.360
you know, it's the hammer I need to build my idea, right?

00:02:16.360 --> 00:02:18.100
The hammer, the saw, and whatever.

00:02:18.280 --> 00:02:18.780
Yeah, exactly.

00:02:18.780 --> 00:02:21.440
And then you, I mean, you learn all the more formal stuff,

00:02:21.440 --> 00:02:23.500
like after having like practical,

00:02:23.500 --> 00:02:25.040
like applications for it.

00:02:25.040 --> 00:02:27.300
And for me, that always just worked better for,

00:02:27.300 --> 00:02:28.460
I mean, same thing for music.

00:02:28.460 --> 00:02:30.660
Like I learned like the licks and all the cool things.

00:02:30.660 --> 00:02:32.760
And then I'd learn like the theory of why it works.

00:02:32.760 --> 00:02:36.220
And that was always much more satisfying to me,

00:02:36.220 --> 00:02:36.900
like as a person.

00:02:36.900 --> 00:02:38.340
So I found it worked well.

00:02:38.340 --> 00:02:38.960
Oh, that's great.

00:02:38.960 --> 00:02:40.580
So did you start out with Python

00:02:40.580 --> 00:02:43.060
or did they have you doing C++?

00:02:43.060 --> 00:02:46.020
Or where did you start when you're in college?

00:02:46.260 --> 00:02:48.340
With those sites like the WordPresses

00:02:48.340 --> 00:02:50.200
and the Joomla's and the Drupal's and stuff,

00:02:50.200 --> 00:02:51.180
it was a little bit of PHP.

00:02:51.180 --> 00:02:54.860
But once I found Python and particularly Django

00:02:54.860 --> 00:02:56.780
back in the very early days of Django,

00:02:56.780 --> 00:02:58.200
I was like addicted to that.

00:02:58.200 --> 00:02:59.840
And that was really, I mean,

00:02:59.840 --> 00:03:01.720
I would say really Django was like the thing

00:03:01.720 --> 00:03:03.860
that got me into the Python ecosystem

00:03:03.860 --> 00:03:05.320
and got me stuck on it.

00:03:05.320 --> 00:03:07.520
And it's funny, Zapier's built on Django

00:03:07.520 --> 00:03:08.640
and I've spent a lot of time

00:03:08.640 --> 00:03:10.600
in the Django ecosystem since then.

00:03:10.600 --> 00:03:11.560
Yeah, that's really cool.

00:03:11.560 --> 00:03:12.860
It's just like you found it

00:03:12.860 --> 00:03:14.760
and it's still serving you well.

00:03:14.920 --> 00:03:16.200
You know, I think that's one of the things

00:03:16.200 --> 00:03:18.920
that's super interesting about Python in general.

00:03:18.920 --> 00:03:23.080
And I think of Python as a full spectrum language, right?

00:03:23.080 --> 00:03:24.900
There's languages that are really good

00:03:24.900 --> 00:03:27.440
for getting you started to build something simple,

00:03:27.440 --> 00:03:28.960
but then they kind of top out

00:03:28.960 --> 00:03:31.000
before you can go like pro with them.

00:03:31.000 --> 00:03:33.940
And then there's pro languages like Java.net C++,

00:03:33.940 --> 00:03:35.760
where it's like you'll start there.

00:03:35.760 --> 00:03:37.560
You start with all the complexity.

00:03:37.560 --> 00:03:39.560
And Python's one of those few ones

00:03:39.560 --> 00:03:40.860
that you start easy,

00:03:41.000 --> 00:03:42.540
but as you need more complexity,

00:03:42.540 --> 00:03:45.120
you can start to bring in those features of the language,

00:03:45.120 --> 00:03:47.080
but they're not forced on you from the beginning.

00:03:47.080 --> 00:03:47.440
Right.

00:03:47.440 --> 00:03:50.140
And the industry support for Python's like outrageous.

00:03:50.140 --> 00:03:52.380
Like a lot of these like more niche sort of things,

00:03:52.380 --> 00:03:53.640
which are kind of fun and cool,

00:03:53.640 --> 00:03:56.460
or like they just don't have as much like adoption

00:03:56.460 --> 00:03:57.380
throughout the industry.

00:03:57.380 --> 00:03:59.200
And when you look at like, you know,

00:03:59.200 --> 00:04:01.760
employment opportunities and ease of starting

00:04:01.760 --> 00:04:04.040
and what the ecosystem looks like community,

00:04:04.040 --> 00:04:07.420
like Python's really hard to beat in both a practical

00:04:07.420 --> 00:04:09.900
and I also think it's a really well-designed,

00:04:09.900 --> 00:04:11.360
nicely done language as well.

00:04:11.360 --> 00:04:13.820
So you kind of like, it's firing on all cylinders.

00:04:13.820 --> 00:04:15.080
It's really quite incredible.

00:04:15.080 --> 00:04:15.640
Yeah, absolutely.

00:04:15.640 --> 00:04:16.560
I totally agree with you.

00:04:16.560 --> 00:04:17.460
All right.

00:04:17.460 --> 00:04:21.640
So let's talk about just really quickly your role day to day,

00:04:21.640 --> 00:04:23.960
you know, just so folks know where you're coming from, right?

00:04:23.960 --> 00:04:26.260
So right now you're the CTO of Zapier, right?

00:04:26.260 --> 00:04:26.700
Correct.

00:04:26.700 --> 00:04:27.320
Yeah, yeah.

00:04:27.320 --> 00:04:27.800
I'm CTO.

00:04:27.800 --> 00:04:30.860
I was one of three founders and we've grown,

00:04:30.860 --> 00:04:34.260
man, it's Zapier is a little over seven years old now.

00:04:34.260 --> 00:04:36.200
So we've grown from just us three,

00:04:36.200 --> 00:04:39.140
Wade, Mike and myself to 200 people.

00:04:39.140 --> 00:04:40.980
So obviously the things I'm doing day to day

00:04:40.980 --> 00:04:42.600
are a lot different than they used to be.

00:04:42.600 --> 00:04:44.360
It used to be a lot of hacking

00:04:44.360 --> 00:04:47.240
and then it quickly turned into a lot of hiring.

00:04:47.240 --> 00:04:50.500
And that's really been where a lot of my time has been.

00:04:50.500 --> 00:04:52.340
You know, some of the cool things are like,

00:04:52.340 --> 00:04:53.640
once you get to certain scales,

00:04:53.640 --> 00:04:56.180
you can start to really hire amazing,

00:04:56.180 --> 00:04:59.120
amazing people to take over different slices

00:04:59.120 --> 00:05:00.380
who are way better than you.

00:05:00.380 --> 00:05:02.660
And we recently did something similar.

00:05:02.660 --> 00:05:04.220
We just hired a VP of engineering

00:05:04.220 --> 00:05:06.580
who I'm hoping will be able to kind of take us

00:05:06.580 --> 00:05:09.660
to that next level for organizational and hiring

00:05:09.660 --> 00:05:11.840
and all this stuff that's so critically important

00:05:11.840 --> 00:05:12.880
to like building a team.

00:05:12.880 --> 00:05:14.920
And maybe I can spend a little more time

00:05:14.920 --> 00:05:17.720
on the code side and the product and architecture side.

00:05:17.720 --> 00:05:19.200
So I'm really excited in 2019

00:05:19.200 --> 00:05:20.440
to spend a bit more time on that.

00:05:20.440 --> 00:05:20.880
That's awesome.

00:05:20.880 --> 00:05:21.920
A little bit back to your roots.

00:05:21.920 --> 00:05:22.540
Yeah, yeah.

00:05:22.540 --> 00:05:23.300
No, it'll be really,

00:05:23.300 --> 00:05:24.280
it's going to be really fun.

00:05:24.460 --> 00:05:24.940
I'm really excited.

00:05:24.940 --> 00:05:26.720
Yeah, I think in the early days,

00:05:26.720 --> 00:05:29.460
if it's the three of you starting a company,

00:05:29.460 --> 00:05:32.420
you all have to do so many things that you just,

00:05:32.420 --> 00:05:36.140
you are unprepared and unqualified to do, right?

00:05:36.140 --> 00:05:37.160
Like, you're like, all right,

00:05:37.160 --> 00:05:38.900
who's going to do accounting and taxes?

00:05:38.900 --> 00:05:39.720
You're like, wait a minute.

00:05:39.720 --> 00:05:41.080
Nobody knows about this.

00:05:41.080 --> 00:05:43.140
Who's going to do, you know, deployment?

00:05:43.140 --> 00:05:44.700
Like, well, we've never deployed it.

00:05:44.700 --> 00:05:46.580
Like, you know, there's just so many things,

00:05:46.580 --> 00:05:48.240
but now you can find somebody who's like,

00:05:48.240 --> 00:05:49.640
say, super good at DevOps

00:05:49.640 --> 00:05:51.040
and you don't have to worry about that.

00:05:51.040 --> 00:05:52.420
And that's a big transition, right?

00:05:52.420 --> 00:05:53.100
Yeah, it is.

00:05:53.100 --> 00:05:54.200
And you kind of, you know,

00:05:54.200 --> 00:05:55.280
whenever you're just starting out,

00:05:55.280 --> 00:05:57.380
you can kind of get away with the mess, right?

00:05:57.380 --> 00:05:59.200
Like if you mess up a deploy,

00:05:59.200 --> 00:06:01.620
it's like, well, only 10 people were using your site.

00:06:01.620 --> 00:06:02.840
So no one noticed, you know,

00:06:02.840 --> 00:06:04.180
you have little things like that,

00:06:04.180 --> 00:06:05.420
that really help.

00:06:05.420 --> 00:06:06.340
And same thing.

00:06:06.340 --> 00:06:08.180
I mean, you mentioned like accountant hiring

00:06:08.180 --> 00:06:10.140
and like, you're not doing so much of it.

00:06:10.180 --> 00:06:11.660
So if you're not world-class at it,

00:06:11.660 --> 00:06:13.620
you know, you can kind of get away with it.

00:06:13.620 --> 00:06:15.540
But at the heart of it,

00:06:15.540 --> 00:06:16.860
like you got to build that product

00:06:16.860 --> 00:06:18.140
that really connects to people.

00:06:18.140 --> 00:06:20.380
And if you do that well in the beginning,

00:06:20.380 --> 00:06:21.640
the rest kind of comes

00:06:21.640 --> 00:06:23.300
and you can get amazing people

00:06:23.300 --> 00:06:24.160
who know all the,

00:06:24.160 --> 00:06:26.160
know how to build a great deployment system,

00:06:26.160 --> 00:06:28.840
know how to run taxes in 50 different states,

00:06:28.840 --> 00:06:30.220
know how to do all this other stuff.

00:06:30.220 --> 00:06:31.260
So yeah, it changes.

00:06:31.260 --> 00:06:32.300
Yeah, yeah, I'm sure.

00:06:32.300 --> 00:06:33.520
All right, cool.

00:06:33.520 --> 00:06:35.060
So we talked a little bit about it.

00:06:35.060 --> 00:06:36.380
You work at Zapier and stuff,

00:06:36.380 --> 00:06:39.880
but you know, I'm sure most folks listening

00:06:39.880 --> 00:06:41.260
have more or less heard of it,

00:06:41.260 --> 00:06:42.980
but maybe they don't really know.

00:06:42.980 --> 00:06:43.700
They're like, oh, I think that's

00:06:43.700 --> 00:06:45.320
some kind of online startup thing.

00:06:45.320 --> 00:06:46.520
Tell us what is Zapier.

00:06:46.520 --> 00:06:48.100
Yeah, so you can think of Zapier

00:06:48.100 --> 00:06:49.920
as sort of the glue between

00:06:49.920 --> 00:06:52.340
all the different SaaS services out there.

00:06:52.340 --> 00:06:53.540
So if you use Gmail,

00:06:53.540 --> 00:06:56.380
if you use, especially like Google Sheets,

00:06:56.380 --> 00:06:59.440
if you use things like Dropbox or Slack,

00:06:59.440 --> 00:07:00.800
like all these different services

00:07:00.800 --> 00:07:02.780
that people use on a day-to-day basis,

00:07:02.780 --> 00:07:05.140
they have data in them

00:07:05.140 --> 00:07:06.880
and you want to trigger on that data

00:07:06.880 --> 00:07:08.760
and do other things and other services.

00:07:09.000 --> 00:07:11.660
Zapier is that like mechanism that does that,

00:07:11.660 --> 00:07:13.760
which is very much, you know,

00:07:13.760 --> 00:07:15.060
I think of it a little bit like,

00:07:15.060 --> 00:07:16.200
you remember all the,

00:07:16.200 --> 00:07:17.360
and I guess there still exists,

00:07:17.360 --> 00:07:19.520
some of the languages like Scratch

00:07:19.520 --> 00:07:21.400
who are kind of those visual programming

00:07:21.400 --> 00:07:22.840
and they never really caught on,

00:07:22.840 --> 00:07:24.120
but they kind of were like,

00:07:24.120 --> 00:07:25.940
oh, we're going to give the power of automation

00:07:25.940 --> 00:07:29.260
and the power of coding to the masses, right?

00:07:29.260 --> 00:07:29.580
Yeah.

00:07:29.580 --> 00:07:31.540
It was always, it's an awesome goal,

00:07:31.540 --> 00:07:33.660
but it was always really difficult.

00:07:33.660 --> 00:07:35.560
And I think we're kind of doing that

00:07:35.560 --> 00:07:37.220
and kind of coming in through the back door.

00:07:37.680 --> 00:07:39.020
So you can do these cool things

00:07:39.020 --> 00:07:40.560
where when you, you know,

00:07:40.560 --> 00:07:42.420
star a message in Slack,

00:07:42.420 --> 00:07:44.760
you can add it to your to-do app

00:07:44.760 --> 00:07:46.640
and you can choose one of, you know,

00:07:46.640 --> 00:07:49.100
a dozen to-do apps that are supported on Zapier.

00:07:49.100 --> 00:07:50.100
And then you can think,

00:07:50.100 --> 00:07:53.280
oh, well, if I say like super important

00:07:53.280 --> 00:07:54.260
in that message,

00:07:54.260 --> 00:07:55.640
I had an extra filter

00:07:55.640 --> 00:07:59.000
and I send a message to this room in Slack

00:07:59.000 --> 00:07:59.960
or that room in Slack,

00:07:59.960 --> 00:08:01.600
maybe, or I send, you know,

00:08:01.600 --> 00:08:03.300
my colleague a DM,

00:08:03.480 --> 00:08:05.200
like you can start to build these like workflows.

00:08:05.200 --> 00:08:07.400
And that's really the power of Zapier

00:08:07.400 --> 00:08:08.320
is that you can kind of start

00:08:08.320 --> 00:08:10.280
to string these actions together

00:08:10.280 --> 00:08:12.160
and do some really complex stuff

00:08:12.160 --> 00:08:13.480
that normally couldn't do

00:08:13.480 --> 00:08:15.280
unless you had a fleet of engineers

00:08:15.280 --> 00:08:18.040
to like custom build this bespoke software.

00:08:18.040 --> 00:08:18.760
This is interesting.

00:08:18.760 --> 00:08:20.860
So, you know, you talked about Scratch

00:08:20.860 --> 00:08:22.700
and some of these other like edgy block

00:08:22.700 --> 00:08:23.920
type of application.

00:08:23.920 --> 00:08:24.420
Right.

00:08:24.520 --> 00:08:25.380
I'm not going to call it application,

00:08:25.380 --> 00:08:27.220
but programming frameworks

00:08:27.220 --> 00:08:28.460
that are these visual things.

00:08:28.460 --> 00:08:28.640
Right.

00:08:28.640 --> 00:08:32.240
And I think the idea of those is not terrible.

00:08:32.240 --> 00:08:33.380
I think the problem is

00:08:33.380 --> 00:08:34.800
they work at too low of level.

00:08:34.800 --> 00:08:35.480
Right.

00:08:35.480 --> 00:08:36.140
They're like,

00:08:36.140 --> 00:08:37.800
you issue a print statement,

00:08:37.800 --> 00:08:38.920
you do a for loop.

00:08:38.920 --> 00:08:39.640
You, I mean,

00:08:39.640 --> 00:08:41.860
like they literally work almost like line by line

00:08:41.860 --> 00:08:42.880
as you would with text.

00:08:42.880 --> 00:08:44.440
Whereas what you guys have is like

00:08:44.440 --> 00:08:46.300
an email came into Gmail

00:08:46.300 --> 00:08:48.480
and that's like an integration with an API

00:08:48.480 --> 00:08:50.880
and OAuth and like tons of other stuff.

00:08:50.880 --> 00:08:51.920
And then, you know,

00:08:51.960 --> 00:08:53.860
you've condensed it down to the right size

00:08:53.860 --> 00:08:55.260
of the draggy droppy thing.

00:08:55.260 --> 00:08:56.180
You know what I mean?

00:08:56.180 --> 00:08:57.280
So it's like,

00:08:57.280 --> 00:08:58.340
there's a few blocks,

00:08:58.340 --> 00:08:59.580
not 50,000 blocks,

00:08:59.580 --> 00:09:00.500
which makes no sense.

00:09:00.500 --> 00:09:00.900
Yeah.

00:09:00.900 --> 00:09:02.760
And you get away from the idea of like

00:09:02.760 --> 00:09:05.320
trying to teach people control structures.

00:09:05.320 --> 00:09:05.880
Right.

00:09:05.880 --> 00:09:08.300
And how data structures work

00:09:08.300 --> 00:09:10.180
and like all this stuff is like

00:09:10.180 --> 00:09:12.340
really heady stuff.

00:09:12.340 --> 00:09:13.280
Like once you get it,

00:09:13.280 --> 00:09:15.080
it's fine and it doesn't bother you.

00:09:15.080 --> 00:09:16.420
But like until you get it,

00:09:16.420 --> 00:09:18.060
it's another world, right?

00:09:18.060 --> 00:09:19.860
It's completely foreign.

00:09:19.860 --> 00:09:21.520
And we avoid that.

00:09:21.600 --> 00:09:23.400
And we try to keep it just simple

00:09:23.400 --> 00:09:23.880
to like,

00:09:23.880 --> 00:09:25.120
oh, I get a new email

00:09:25.120 --> 00:09:27.100
and I add a message to Slack.

00:09:27.100 --> 00:09:27.820
Like, got it.

00:09:27.820 --> 00:09:29.360
Like I can connect those two together.

00:09:29.360 --> 00:09:31.960
And that's always like the beginning point.

00:09:31.960 --> 00:09:32.640
And then I think

00:09:32.640 --> 00:09:34.560
the really powerful stuff comes

00:09:34.560 --> 00:09:36.160
where you have a team in there

00:09:36.160 --> 00:09:37.560
and they're like building zaps together

00:09:37.560 --> 00:09:39.620
or they're adding their own

00:09:39.620 --> 00:09:40.900
like little flavors of,

00:09:40.900 --> 00:09:42.380
oh, I want an extra,

00:09:42.380 --> 00:09:43.700
you know, filter here.

00:09:43.700 --> 00:09:45.280
Only do it if this matches

00:09:45.280 --> 00:09:47.440
or add an extra step to this

00:09:47.440 --> 00:09:48.580
and don't just send it to Slack,

00:09:48.580 --> 00:09:49.120
you know,

00:09:49.120 --> 00:09:50.340
send it to my ToDo app

00:09:50.340 --> 00:09:51.560
or send it to this,

00:09:51.560 --> 00:09:52.760
send it to my CRM.

00:09:52.760 --> 00:09:54.020
Like we have lots of business folks

00:09:54.020 --> 00:09:55.100
and marketers who are doing

00:09:55.100 --> 00:09:56.420
all this like cool stuff as well.

00:09:56.420 --> 00:09:56.900
So this is,

00:09:56.900 --> 00:09:58.260
this is not for like,

00:09:58.260 --> 00:09:59.680
only for engineers.

00:09:59.680 --> 00:10:00.360
We do have some,

00:10:00.360 --> 00:10:01.700
some of my favorite stuff to do

00:10:01.700 --> 00:10:03.560
is like you can literally embed Python

00:10:03.560 --> 00:10:04.440
into these workflows,

00:10:04.440 --> 00:10:05.460
which of course like

00:10:05.460 --> 00:10:07.400
is very topical for this podcast.

00:10:07.400 --> 00:10:08.300
I love it.

00:10:08.300 --> 00:10:10.740
But this is for like marketers as well.

00:10:10.740 --> 00:10:11.960
So they can build these things.

00:10:11.960 --> 00:10:13.880
This is for real estate agents

00:10:13.880 --> 00:10:14.560
who have,

00:10:14.560 --> 00:10:15.060
you know,

00:10:15.060 --> 00:10:15.820
form software

00:10:15.820 --> 00:10:17.080
and they want to like trigger off

00:10:17.080 --> 00:10:18.200
of people submitting that

00:10:18.200 --> 00:10:19.200
and get e-signatures

00:10:19.200 --> 00:10:20.880
and like all of this stuff

00:10:20.880 --> 00:10:22.240
is like in this ecosystem.

00:10:22.240 --> 00:10:23.840
So it's not just engineers

00:10:23.840 --> 00:10:25.640
or devs that use this.

00:10:25.640 --> 00:10:27.480
It's kind of regular folks,

00:10:27.480 --> 00:10:27.780
right?

00:10:27.780 --> 00:10:28.820
People who are just trying

00:10:28.820 --> 00:10:29.680
to get work done, right?

00:10:29.680 --> 00:10:30.100
It's cool.

00:10:30.100 --> 00:10:30.660
And you can bring,

00:10:30.660 --> 00:10:32.840
bring the level down a little bit.

00:10:32.840 --> 00:10:33.780
You don't have to be,

00:10:33.780 --> 00:10:34.440
you know,

00:10:34.440 --> 00:10:36.420
if you're kind of good with computers,

00:10:36.420 --> 00:10:37.480
but you're not a developer,

00:10:37.480 --> 00:10:37.800
right?

00:10:37.800 --> 00:10:38.700
Like this could be something

00:10:38.700 --> 00:10:39.340
you could maybe

00:10:39.340 --> 00:10:41.520
really make what,

00:10:41.520 --> 00:10:43.000
maybe like a developer would go,

00:10:43.000 --> 00:10:44.220
I'm just going to write an app

00:10:44.220 --> 00:10:45.180
that'll just call this API

00:10:45.180 --> 00:10:45.980
than this and write.

00:10:45.980 --> 00:10:46.440
But like,

00:10:46.440 --> 00:10:47.600
there's so many people who,

00:10:47.600 --> 00:10:49.260
even if they could write that,

00:10:49.260 --> 00:10:50.040
they're not going to say,

00:10:50.040 --> 00:10:52.320
deploy it as some kind

00:10:52.320 --> 00:10:53.460
of background process

00:10:53.460 --> 00:10:54.240
in like on Linux

00:10:54.240 --> 00:10:55.180
and put it in the cloud.

00:10:55.180 --> 00:10:56.400
Like they're just not going to do that.

00:10:56.400 --> 00:10:56.940
Yeah.

00:10:56.940 --> 00:10:57.260
So yeah,

00:10:57.260 --> 00:10:57.840
this is great.

00:10:57.840 --> 00:10:58.220
Yeah.

00:10:58.220 --> 00:10:58.440
Yeah.

00:10:58.440 --> 00:10:59.120
And you think about,

00:10:59.120 --> 00:11:00.260
that's a great example.

00:11:00.260 --> 00:11:01.760
It's like we often get engineers

00:11:01.760 --> 00:11:02.760
or devs who are like,

00:11:02.760 --> 00:11:04.080
I really don't want to build

00:11:04.080 --> 00:11:05.360
that thing you just asked me to build.

00:11:05.360 --> 00:11:06.480
I'm just going to use Zapier

00:11:06.480 --> 00:11:08.280
because if you think of like,

00:11:08.340 --> 00:11:09.540
oh, I got to pull this service

00:11:09.540 --> 00:11:10.380
and now I have to come up

00:11:10.380 --> 00:11:11.580
with this stateful store

00:11:11.580 --> 00:11:12.680
of which things I've seen

00:11:12.680 --> 00:11:13.380
and haven't seen,

00:11:13.380 --> 00:11:15.400
I got to deploy it to like,

00:11:15.400 --> 00:11:15.840
I don't know,

00:11:15.840 --> 00:11:17.120
maybe we'll put it on a Heroku.

00:11:17.120 --> 00:11:17.960
Maybe we'll like,

00:11:17.960 --> 00:11:19.280
being a DevOps person,

00:11:19.280 --> 00:11:19.840
we'll get it still,

00:11:19.840 --> 00:11:20.040
you know,

00:11:20.040 --> 00:11:21.500
like it just starts to spider

00:11:21.500 --> 00:11:22.680
into this whole thing.

00:11:22.680 --> 00:11:23.780
Whereas like with Zap,

00:11:23.780 --> 00:11:24.740
you just like create a trigger,

00:11:24.740 --> 00:11:25.380
create this,

00:11:25.380 --> 00:11:26.580
and then you can hand it off

00:11:26.580 --> 00:11:27.160
to the marketer.

00:11:27.160 --> 00:11:27.860
You can hand it off

00:11:27.860 --> 00:11:29.040
to your colleague

00:11:29.040 --> 00:11:30.300
and they can just dig into it.

00:11:30.300 --> 00:11:30.720
So that's,

00:11:30.720 --> 00:11:31.940
that's a powerful pattern.

00:11:31.940 --> 00:11:32.440
Exactly.

00:11:32.440 --> 00:11:33.620
It's also like,

00:11:33.620 --> 00:11:35.660
I think this is a good idea

00:11:35.660 --> 00:11:36.740
to build this little integration,

00:11:36.740 --> 00:11:37.860
but I don't want

00:11:37.860 --> 00:11:38.440
another puppy

00:11:38.440 --> 00:11:39.460
that I have to take

00:11:39.460 --> 00:11:40.180
for a walk and maintain.

00:11:40.180 --> 00:11:40.640
I didn't want to,

00:11:40.640 --> 00:11:41.320
I don't want a thing

00:11:41.320 --> 00:11:42.120
to care for.

00:11:42.120 --> 00:11:43.840
So if I build it myself,

00:11:43.840 --> 00:11:44.640
it's my problem.

00:11:44.640 --> 00:11:45.500
If I build it here

00:11:45.500 --> 00:11:46.140
and hand it off,

00:11:46.140 --> 00:11:47.060
like you guys,

00:11:47.060 --> 00:11:47.860
that could be your problem.

00:11:47.860 --> 00:11:48.500
You'll keep it running

00:11:48.500 --> 00:11:49.360
if the API changes.

00:11:49.360 --> 00:11:50.040
Yeah, we do.

00:11:50.040 --> 00:11:51.500
And there's a lot of things

00:11:51.500 --> 00:11:52.660
that change in the API world

00:11:52.660 --> 00:11:53.720
that we stay on top of.

00:11:53.720 --> 00:11:54.440
So it just kind of,

00:11:54.440 --> 00:11:56.300
it just takes that whole layer

00:11:56.300 --> 00:11:58.820
of like what's going on away

00:11:58.820 --> 00:11:59.920
because we have,

00:11:59.920 --> 00:12:01.020
and I'm sure we'll get into,

00:12:01.020 --> 00:12:02.040
we have tons of tooling

00:12:02.040 --> 00:12:03.100
that like watches this.

00:12:03.100 --> 00:12:03.300
Yeah, yeah, yeah.

00:12:03.300 --> 00:12:03.980
It's really cool.

00:12:04.140 --> 00:12:05.060
I definitely want to talk

00:12:05.060 --> 00:12:05.780
about that because,

00:12:05.780 --> 00:12:06.320
you know,

00:12:06.320 --> 00:12:07.340
you have thousands

00:12:07.340 --> 00:12:08.200
of integrations

00:12:08.200 --> 00:12:09.200
and these integrations

00:12:09.200 --> 00:12:10.060
integrate together,

00:12:10.060 --> 00:12:10.940
which is even more

00:12:10.940 --> 00:12:11.820
like, you know,

00:12:11.820 --> 00:12:12.960
combinatorially insane.

00:12:12.960 --> 00:12:14.520
So that's going to be fun.

00:12:14.520 --> 00:12:15.340
And I want to talk about that,

00:12:15.340 --> 00:12:16.360
but let's just talk briefly

00:12:16.360 --> 00:12:17.660
about this at a high level

00:12:17.660 --> 00:12:18.160
while we're talking

00:12:18.160 --> 00:12:19.040
about Zapier.

00:12:19.040 --> 00:12:19.560
You know,

00:12:19.560 --> 00:12:20.360
a lot of folks,

00:12:20.360 --> 00:12:21.240
they get up

00:12:21.240 --> 00:12:22.360
and they get in the car

00:12:22.360 --> 00:12:23.480
and they drive

00:12:23.480 --> 00:12:25.000
through angry drivers

00:12:25.000 --> 00:12:26.440
and traffic for 30 minutes.

00:12:26.440 --> 00:12:26.940
Right.

00:12:26.940 --> 00:12:27.660
And they all have to live

00:12:27.660 --> 00:12:28.860
around their company

00:12:28.860 --> 00:12:29.620
and they go to work, right?

00:12:29.660 --> 00:12:31.140
But as developers

00:12:31.140 --> 00:12:32.020
and tech companies

00:12:32.020 --> 00:12:32.920
and things like that,

00:12:32.920 --> 00:12:33.160
right?

00:12:33.160 --> 00:12:34.100
Like a lot of times,

00:12:34.100 --> 00:12:34.840
even if you're sitting

00:12:34.840 --> 00:12:35.460
next to somebody,

00:12:35.460 --> 00:12:36.020
you're working

00:12:36.020 --> 00:12:37.840
in asynchronous modes,

00:12:37.840 --> 00:12:39.540
you're making a GitHub issue,

00:12:39.540 --> 00:12:40.400
you're doing a PR,

00:12:40.400 --> 00:12:41.160
you're throwing a message

00:12:41.160 --> 00:12:41.660
in Slack,

00:12:41.660 --> 00:12:42.320
you're like,

00:12:42.320 --> 00:12:43.180
there's no reason

00:12:43.180 --> 00:12:43.620
you've got to sit

00:12:43.620 --> 00:12:44.320
next to the person, right?

00:12:44.320 --> 00:12:45.120
So that's kind of what

00:12:45.120 --> 00:12:46.720
you guys decided as well.

00:12:46.720 --> 00:12:47.920
And with your 200 people,

00:12:47.920 --> 00:12:49.080
you're more or less

00:12:49.080 --> 00:12:50.120
100% remote, right?

00:12:50.120 --> 00:12:50.680
That's correct.

00:12:50.680 --> 00:12:51.660
Yeah, 100% remote.

00:12:51.660 --> 00:12:53.020
We don't have a single office.

00:12:53.020 --> 00:12:55.080
We're not geographically bound.

00:12:55.080 --> 00:12:56.780
We have people in,

00:12:56.780 --> 00:12:57.560
I'm going to say,

00:12:57.560 --> 00:12:58.620
I think it's like 18

00:12:58.620 --> 00:12:59.680
or 19 different countries

00:12:59.680 --> 00:13:00.640
right now that work

00:13:00.640 --> 00:13:01.300
for Zapier.

00:13:01.300 --> 00:13:02.480
And we've been that

00:13:02.480 --> 00:13:03.440
since the very beginning.

00:13:03.440 --> 00:13:05.760
So we started 100% distributed.

00:13:05.760 --> 00:13:07.080
We've been distributed

00:13:07.080 --> 00:13:08.540
throughout the entire time.

00:13:08.540 --> 00:13:09.680
So every single person,

00:13:09.680 --> 00:13:10.620
it's funny,

00:13:10.620 --> 00:13:11.700
like basically everyone

00:13:11.700 --> 00:13:12.260
we've hired,

00:13:12.260 --> 00:13:15.280
we had not met in person, right?

00:13:15.280 --> 00:13:16.460
There's like a few exceptions

00:13:16.460 --> 00:13:17.080
to that rule,

00:13:17.080 --> 00:13:18.740
but like everyone we've hired

00:13:18.740 --> 00:13:20.620
has been just like a Zoom call

00:13:20.620 --> 00:13:21.400
or a Skype call

00:13:21.400 --> 00:13:22.460
to kind of do the interview

00:13:22.460 --> 00:13:24.720
or interacting over email

00:13:24.720 --> 00:13:26.100
or interacting over,

00:13:26.100 --> 00:13:26.480
you know,

00:13:26.480 --> 00:13:28.160
text communications in some way,

00:13:28.160 --> 00:13:29.780
which really mimics the way

00:13:29.780 --> 00:13:31.340
that most of us work anyways,

00:13:31.340 --> 00:13:31.880
right?

00:13:31.880 --> 00:13:33.680
That's been just kind of

00:13:33.680 --> 00:13:35.300
a core part of Zapier

00:13:35.300 --> 00:13:36.000
since day one.

00:13:36.000 --> 00:13:36.780
I think that's really,

00:13:36.780 --> 00:13:38.500
it's pretty exciting, right?

00:13:38.500 --> 00:13:38.860
I mean,

00:13:38.860 --> 00:13:40.540
there's certainly drawbacks

00:13:40.540 --> 00:13:41.660
to working from home, right?

00:13:41.660 --> 00:13:41.940
You know,

00:13:41.940 --> 00:13:43.800
people can get a little bit lonely.

00:13:43.800 --> 00:13:44.960
You have to be a little more

00:13:44.960 --> 00:13:46.060
self-directed, I think,

00:13:46.060 --> 00:13:48.040
because some people see

00:13:48.040 --> 00:13:48.840
working from home

00:13:48.840 --> 00:13:49.840
means I have no boss.

00:13:49.840 --> 00:13:51.380
No boss means I can just do

00:13:51.380 --> 00:13:52.240
whatever the heck I want.

00:13:52.240 --> 00:13:53.660
Like if I want to just watch football

00:13:53.660 --> 00:13:54.780
for the second half of the day,

00:13:54.780 --> 00:13:55.320
I'm doing that.

00:13:55.320 --> 00:13:57.380
Like those types of people

00:13:57.380 --> 00:13:58.180
don't thrive,

00:13:58.180 --> 00:14:00.240
but I feel like a lot of developers

00:14:00.240 --> 00:14:01.500
and technical folks

00:14:01.500 --> 00:14:03.500
are pretty driven anyway.

00:14:03.500 --> 00:14:03.860
Yeah.

00:14:03.860 --> 00:14:04.680
And if they have a place

00:14:04.680 --> 00:14:05.880
for a proper outlet

00:14:05.880 --> 00:14:06.440
that's really,

00:14:06.440 --> 00:14:07.840
they feel like they can contribute to,

00:14:07.840 --> 00:14:08.940
like it's pretty easy

00:14:08.940 --> 00:14:09.600
to work from home,

00:14:09.600 --> 00:14:09.940
honestly,

00:14:09.940 --> 00:14:10.560
as a developer.

00:14:10.780 --> 00:14:11.520
Yeah, I think so too.

00:14:11.520 --> 00:14:12.420
And, you know,

00:14:12.420 --> 00:14:13.100
everything you're,

00:14:13.100 --> 00:14:13.820
everything,

00:14:13.820 --> 00:14:15.380
all the artifacts you're creating

00:14:15.380 --> 00:14:16.760
in a tech company,

00:14:16.760 --> 00:14:17.860
like you're writing code,

00:14:17.860 --> 00:14:19.160
you're fixing bugs,

00:14:19.160 --> 00:14:20.120
you're working on features.

00:14:20.120 --> 00:14:20.620
It's all,

00:14:20.620 --> 00:14:22.320
like the output's like all there.

00:14:22.320 --> 00:14:24.500
You can see it either shows up

00:14:24.500 --> 00:14:25.800
in the repo or it doesn't.

00:14:25.800 --> 00:14:27.140
It either lands on the site

00:14:27.140 --> 00:14:27.900
or it doesn't.

00:14:27.900 --> 00:14:29.240
And so you can,

00:14:29.240 --> 00:14:30.680
it's not that complicated

00:14:30.680 --> 00:14:32.440
to like track the work.

00:14:32.440 --> 00:14:34.200
I often get folks who are,

00:14:34.200 --> 00:14:35.620
tend to be a little bit more,

00:14:35.620 --> 00:14:36.960
especially in the early days of Zap,

00:14:36.960 --> 00:14:37.760
you're very skeptical

00:14:37.760 --> 00:14:39.320
about the idea of like remote.

00:14:39.460 --> 00:14:40.260
Like how do you know people

00:14:40.260 --> 00:14:41.820
are doing their work?

00:14:41.820 --> 00:14:42.420
And how do you,

00:14:42.420 --> 00:14:44.520
like that has not played out

00:14:44.520 --> 00:14:46.560
to be the biggest problem for us.

00:14:46.560 --> 00:14:47.940
Many of the problems around,

00:14:47.940 --> 00:14:48.680
and you mentioned like

00:14:48.680 --> 00:14:49.440
these are trade-offs,

00:14:49.440 --> 00:14:50.960
like a lot of the challenges

00:14:50.960 --> 00:14:52.020
you get into

00:14:52.020 --> 00:14:53.460
are just challenges

00:14:53.460 --> 00:14:55.740
that you hit in a normal company.

00:14:55.740 --> 00:14:57.060
You just hit them sooner, right?

00:14:57.060 --> 00:14:58.700
Like that communication challenge

00:14:58.700 --> 00:14:59.820
doesn't happen,

00:14:59.820 --> 00:15:00.240
you know,

00:15:00.240 --> 00:15:01.620
when you're in the hundreds

00:15:01.620 --> 00:15:02.580
of like employees.

00:15:02.580 --> 00:15:03.760
It happens when you're

00:15:03.760 --> 00:15:05.380
in the dozens of employees, right?

00:15:05.380 --> 00:15:06.560
Where everybody's off doing

00:15:06.560 --> 00:15:07.920
all this like cool stuff

00:15:07.920 --> 00:15:09.060
and it starts to get hard

00:15:09.060 --> 00:15:10.000
to coordinate, right?

00:15:10.000 --> 00:15:11.040
So we had to invest

00:15:11.040 --> 00:15:12.320
in coordination

00:15:12.320 --> 00:15:13.300
and communication

00:15:13.300 --> 00:15:15.040
a lot earlier in the org

00:15:15.040 --> 00:15:15.920
because you couldn't do that

00:15:15.920 --> 00:15:17.760
implicitly by picking it up

00:15:17.760 --> 00:15:18.800
around the water cooler,

00:15:18.800 --> 00:15:19.700
so to say, right?

00:15:19.700 --> 00:15:21.020
So that's always been

00:15:21.020 --> 00:15:22.180
a big focus for us

00:15:22.180 --> 00:15:22.880
in the early days

00:15:22.880 --> 00:15:24.160
was like what's breaking now

00:15:24.160 --> 00:15:26.080
that probably wouldn't break

00:15:26.080 --> 00:15:26.940
until, you know,

00:15:26.940 --> 00:15:27.460
we were double

00:15:27.460 --> 00:15:28.560
or triple the size

00:15:28.560 --> 00:15:29.440
in a normal company.

00:15:30.120 --> 00:15:31.600
So what are some of the tools

00:15:31.600 --> 00:15:33.000
and things you put in place?

00:15:33.000 --> 00:15:33.560
You know, to me,

00:15:33.560 --> 00:15:34.200
it feels like

00:15:34.200 --> 00:15:36.040
distributed teams 2018

00:15:36.040 --> 00:15:37.620
is 10 times easier

00:15:37.620 --> 00:15:38.800
than distributed teams

00:15:38.800 --> 00:15:41.320
2006, 2008,

00:15:41.320 --> 00:15:42.580
but still like

00:15:42.580 --> 00:15:43.480
there's a lot of tools

00:15:43.480 --> 00:15:43.980
to pick from.

00:15:43.980 --> 00:15:45.220
Like what's important part

00:15:45.220 --> 00:15:46.240
of that whole structure there?

00:15:46.240 --> 00:15:47.280
I mean, they're the same tools

00:15:47.280 --> 00:15:48.620
I think a lot of companies

00:15:48.620 --> 00:15:49.040
are using.

00:15:49.040 --> 00:15:50.100
I mean, they're the GitHubs,

00:15:50.100 --> 00:15:50.560
right?

00:15:50.560 --> 00:15:51.860
They're the Slacks.

00:15:51.860 --> 00:15:53.080
We use Zoom

00:15:53.080 --> 00:15:53.980
for like calls.

00:15:53.980 --> 00:15:55.420
We do so many video calls,

00:15:55.420 --> 00:15:56.720
constantly hopping on calls

00:15:56.720 --> 00:15:58.360
to like chat over stuff.

00:15:58.560 --> 00:15:59.620
We've even built

00:15:59.620 --> 00:16:01.880
a couple like internal tools

00:16:01.880 --> 00:16:03.000
that are custom to us.

00:16:03.000 --> 00:16:03.540
So we've built

00:16:03.540 --> 00:16:05.340
an internal tool called Async

00:16:05.340 --> 00:16:06.900
modeled around the idea

00:16:06.900 --> 00:16:08.140
of asynchronous communication,

00:16:08.140 --> 00:16:08.840
right?

00:16:08.840 --> 00:16:09.820
Where, you know,

00:16:09.820 --> 00:16:11.060
you look at something like Slack,

00:16:11.060 --> 00:16:12.360
it's very synchronous, right?

00:16:12.360 --> 00:16:13.880
Like you drop information in,

00:16:13.880 --> 00:16:15.500
it scrolls away and it's gone.

00:16:15.500 --> 00:16:16.180
It's not gone,

00:16:16.180 --> 00:16:17.700
but it's like basically gone.

00:16:17.700 --> 00:16:19.300
It feels ephemeral, right?

00:16:19.300 --> 00:16:21.140
It does definitely feel ephemeral, right?

00:16:21.140 --> 00:16:22.760
It's hard to keep permanent actions

00:16:22.760 --> 00:16:23.680
that you need to do

00:16:23.680 --> 00:16:25.440
like somewhere in your Slack history.

00:16:25.440 --> 00:16:26.500
Yeah, that's a poor,

00:16:26.500 --> 00:16:27.400
it's a poor idea.

00:16:27.400 --> 00:16:28.340
You want to push that out.

00:16:28.340 --> 00:16:29.840
So what we've done

00:16:29.840 --> 00:16:31.380
is created this tool called Async

00:16:31.380 --> 00:16:32.580
and you can kind of think of it

00:16:32.580 --> 00:16:35.620
like WordPress meets Reddit

00:16:35.620 --> 00:16:37.720
meets Twitter kind of a thing.

00:16:37.720 --> 00:16:40.520
So it's basically a blog mechanism

00:16:40.520 --> 00:16:42.780
that has some structured ways

00:16:42.780 --> 00:16:43.620
to describe, for example,

00:16:43.620 --> 00:16:45.180
we require each post

00:16:45.180 --> 00:16:46.540
have like a TLDR, right?

00:16:46.540 --> 00:16:47.340
Like where you can,

00:16:47.340 --> 00:16:49.340
under a hundred words

00:16:49.340 --> 00:16:51.520
or less, give or take,

00:16:51.520 --> 00:16:52.320
kind of like summarize

00:16:52.320 --> 00:16:54.100
what your decision is

00:16:54.100 --> 00:16:56.020
that's enclosed in that Async post.

00:16:56.020 --> 00:16:56.900
Man, I love it.

00:16:56.960 --> 00:16:58.260
That's such a good idea

00:16:58.260 --> 00:16:59.980
because then you can tell

00:16:59.980 --> 00:17:00.380
do you need,

00:17:00.380 --> 00:17:01.060
how much attention

00:17:01.060 --> 00:17:02.260
you need to pay to it

00:17:02.260 --> 00:17:03.640
and like just an email,

00:17:03.640 --> 00:17:04.840
like that would be a great

00:17:04.840 --> 00:17:06.700
inter-office communication way

00:17:06.700 --> 00:17:07.540
because I mean,

00:17:07.540 --> 00:17:09.080
I personally get so much email

00:17:09.080 --> 00:17:10.480
that I'll periodically

00:17:10.480 --> 00:17:11.040
have to take,

00:17:11.040 --> 00:17:11.260
you know,

00:17:11.260 --> 00:17:12.140
eight hour days

00:17:12.140 --> 00:17:13.180
and just answer email

00:17:13.180 --> 00:17:14.840
just so it doesn't get too bad.

00:17:14.840 --> 00:17:15.480
And it's like,

00:17:15.480 --> 00:17:17.360
those were those little short vets?

00:17:17.360 --> 00:17:18.540
Like that would help sometimes.

00:17:18.540 --> 00:17:19.040
That's awesome.

00:17:19.040 --> 00:17:19.540
I like it.

00:17:19.620 --> 00:17:20.280
Yeah, it really would.

00:17:20.280 --> 00:17:22.300
And we've also added things

00:17:22.300 --> 00:17:23.280
like depending on

00:17:23.280 --> 00:17:24.300
how many people view it

00:17:24.300 --> 00:17:25.680
or comment or like it

00:17:25.680 --> 00:17:27.080
or interact with it,

00:17:27.080 --> 00:17:27.880
it gets hotter.

00:17:27.880 --> 00:17:30.000
Like it's a very like Reddit style

00:17:30.000 --> 00:17:31.500
or Hacker News style thing.

00:17:31.500 --> 00:17:31.880
Yeah, yeah.

00:17:31.880 --> 00:17:33.200
Which helps like surface

00:17:33.200 --> 00:17:34.620
just important information.

00:17:34.620 --> 00:17:36.040
So earlier this year,

00:17:36.040 --> 00:17:37.280
Wade posted a whole bunch

00:17:37.280 --> 00:17:37.880
of like essays

00:17:37.880 --> 00:17:38.680
on like what we're trying

00:17:38.680 --> 00:17:39.500
to do in 2019

00:17:39.500 --> 00:17:41.260
and everybody was interacting

00:17:41.260 --> 00:17:42.160
and like diving in

00:17:42.160 --> 00:17:42.920
and chatting about them

00:17:42.920 --> 00:17:43.500
and they'd popped

00:17:43.500 --> 00:17:44.300
right to the top.

00:17:44.620 --> 00:17:45.800
So you don't even have to like

00:17:45.800 --> 00:17:47.940
really work super hard

00:17:47.940 --> 00:17:48.800
to get that information.

00:17:48.800 --> 00:17:49.500
You just kind of hit

00:17:49.500 --> 00:17:50.900
the homepage of Async

00:17:50.900 --> 00:17:52.220
and you get a flavor

00:17:52.220 --> 00:17:53.020
of what's going on

00:17:53.020 --> 00:17:53.460
in the company.

00:17:53.460 --> 00:17:54.780
You can read those TLDRs

00:17:54.780 --> 00:17:55.820
and you get a good idea.

00:17:55.820 --> 00:17:56.820
You can click in,

00:17:56.820 --> 00:17:58.120
you can go deeper if you want,

00:17:58.120 --> 00:17:59.340
you can interact.

00:17:59.340 --> 00:18:01.040
So this is something,

00:18:01.040 --> 00:18:02.160
as an example of something

00:18:02.160 --> 00:18:03.540
we built internally for this,

00:18:03.540 --> 00:18:05.020
but it's not crazy software, right?

00:18:05.020 --> 00:18:06.220
It's not super complicated.

00:18:06.220 --> 00:18:07.640
This is something that

00:18:07.640 --> 00:18:09.520
in conjunction with other tools

00:18:09.520 --> 00:18:10.260
like the classic,

00:18:10.260 --> 00:18:10.740
like, yeah,

00:18:10.740 --> 00:18:12.220
like we use lots of Google apps

00:18:12.220 --> 00:18:12.900
and then the GitHub

00:18:12.900 --> 00:18:14.080
and the Elysians

00:18:14.080 --> 00:18:14.820
and the Jira's

00:18:14.820 --> 00:18:15.500
and all that stuff.

00:18:15.500 --> 00:18:17.220
So we do do some custom stuff.

00:18:17.220 --> 00:18:18.420
Yeah, that sounds really awesome

00:18:18.420 --> 00:18:19.700
and I think it's great.

00:18:19.700 --> 00:18:21.760
You know, I've worked for 10 years

00:18:21.760 --> 00:18:23.020
for a company that was remote

00:18:23.020 --> 00:18:24.340
and we had people

00:18:24.340 --> 00:18:25.140
all over the world

00:18:25.140 --> 00:18:27.140
and there are definitely trade-offs,

00:18:27.140 --> 00:18:28.620
but I really felt like

00:18:28.620 --> 00:18:30.220
the people I was working with

00:18:30.220 --> 00:18:32.140
were some of the very best people

00:18:32.140 --> 00:18:33.960
because they were chosen

00:18:33.960 --> 00:18:36.520
from the population of the world,

00:18:36.520 --> 00:18:37.880
not from the population

00:18:37.880 --> 00:18:39.620
of the town I happen to be in,

00:18:39.620 --> 00:18:40.740
which maybe is a small town

00:18:40.740 --> 00:18:41.380
or whatever, right?

00:18:41.380 --> 00:18:42.960
Like, how has that either been

00:18:42.960 --> 00:18:44.300
like a positive or negative for you?

00:18:44.300 --> 00:18:45.400
I've seen like a lot of tension

00:18:45.400 --> 00:18:46.440
between some companies

00:18:46.440 --> 00:18:46.860
are like, oh,

00:18:46.860 --> 00:18:48.020
we have to have somebody local

00:18:48.020 --> 00:18:49.520
because it's super important

00:18:49.520 --> 00:18:52.000
we have this like sort of control

00:18:52.000 --> 00:18:53.480
or like view over them

00:18:53.480 --> 00:18:54.480
and interaction with them,

00:18:54.480 --> 00:18:55.000
but I don't know

00:18:55.000 --> 00:18:56.240
that that's always the best.

00:18:56.240 --> 00:18:57.180
No, I don't think so.

00:18:57.180 --> 00:18:58.360
We believe,

00:18:58.360 --> 00:19:00.480
and we've seen it in reality,

00:19:00.480 --> 00:19:02.200
we believe that like talent

00:19:02.200 --> 00:19:04.280
is like evenly distributed

00:19:04.280 --> 00:19:04.980
throughout the world,

00:19:04.980 --> 00:19:06.380
but opportunity isn't, right?

00:19:06.600 --> 00:19:07.820
So in a large way,

00:19:07.820 --> 00:19:09.900
we see this as an incredible opportunity

00:19:09.900 --> 00:19:11.820
that even just like talk about America,

00:19:11.820 --> 00:19:13.460
a small town in America, right?

00:19:13.460 --> 00:19:14.960
And you have an amazing engineer

00:19:14.960 --> 00:19:15.700
that lives there.

00:19:15.700 --> 00:19:17.300
They live there because they have family

00:19:17.300 --> 00:19:18.580
and it's a great cost of life

00:19:18.580 --> 00:19:20.240
and they love where they're at.

00:19:20.240 --> 00:19:22.480
The opportunities as an engineer

00:19:22.480 --> 00:19:24.380
are likely pretty slim.

00:19:24.380 --> 00:19:25.860
It's one of those opportunities

00:19:25.860 --> 00:19:27.660
where those amazing folks,

00:19:27.660 --> 00:19:29.240
those really talented folks

00:19:29.240 --> 00:19:30.200
can actually contribute

00:19:30.200 --> 00:19:30.960
at the level

00:19:30.960 --> 00:19:32.620
that they can contribute at.

00:19:32.620 --> 00:19:34.020
That's pretty special.

00:19:34.240 --> 00:19:35.360
Like that's really, really hard to do

00:19:35.360 --> 00:19:37.140
when everybody's geographically located

00:19:37.140 --> 00:19:38.160
and you require someone

00:19:38.160 --> 00:19:39.700
sit there in an office

00:19:39.700 --> 00:19:42.100
that just wouldn't really like scale out.

00:19:42.100 --> 00:19:43.320
So for us,

00:19:43.320 --> 00:19:45.020
we think of it as

00:19:45.020 --> 00:19:47.300
something that is good for business,

00:19:47.300 --> 00:19:48.260
but also just really good

00:19:48.260 --> 00:19:49.120
for people as well.

00:19:49.120 --> 00:19:50.520
It's just a better way to work.

00:19:50.520 --> 00:19:51.640
It's a better way to live.

00:19:51.640 --> 00:19:52.720
You can live where you want.

00:19:52.720 --> 00:19:54.300
You can have a better,

00:19:54.300 --> 00:19:56.060
like just look at like the cost of living

00:19:56.060 --> 00:19:56.780
for your family,

00:19:56.780 --> 00:19:57.420
for everything.

00:19:57.420 --> 00:19:59.240
It's just so much better

00:19:59.240 --> 00:20:00.040
in every way.

00:20:00.040 --> 00:20:01.660
And you just have to like work

00:20:01.660 --> 00:20:03.640
through the little challenges

00:20:03.640 --> 00:20:04.360
that pop up

00:20:04.360 --> 00:20:05.360
in a remote environment

00:20:05.360 --> 00:20:06.400
and it really helps

00:20:06.400 --> 00:20:07.940
to be 100% distributed.

00:20:07.940 --> 00:20:10.320
I think when you get that mix thing,

00:20:10.320 --> 00:20:11.840
yeah, it gets a little trickier.

00:20:11.840 --> 00:20:12.800
The mix is tricky

00:20:12.800 --> 00:20:14.440
because you got the insiders

00:20:14.440 --> 00:20:15.360
who are at the office

00:20:15.360 --> 00:20:16.200
and they don't necessarily

00:20:16.200 --> 00:20:18.500
fully trust the remote workers,

00:20:18.500 --> 00:20:19.580
but maybe the remote workers

00:20:19.580 --> 00:20:20.220
are really talented

00:20:20.220 --> 00:20:21.380
so they have to work with them.

00:20:21.380 --> 00:20:22.240
But there's always

00:20:22.240 --> 00:20:23.780
these little undercurrents

00:20:23.780 --> 00:20:24.380
of weirdness.

00:20:24.380 --> 00:20:25.720
Like I've been in those situations

00:20:25.720 --> 00:20:26.540
as well.

00:20:28.540 --> 00:20:30.240
This portion of Talk Python To Me

00:20:30.240 --> 00:20:31.600
is brought to you by Linode.

00:20:31.600 --> 00:20:33.080
Are you looking for hosting

00:20:33.080 --> 00:20:34.200
that's fast, simple,

00:20:34.200 --> 00:20:35.320
and incredibly affordable?

00:20:35.320 --> 00:20:37.180
Well, look past that bookstore

00:20:37.180 --> 00:20:38.200
and check out Linode

00:20:38.200 --> 00:20:39.560
at talkpython.fm

00:20:39.560 --> 00:20:40.440
slash Linode.

00:20:40.440 --> 00:20:42.320
That's L-I-N-O-D-E.

00:20:42.320 --> 00:20:44.480
Plans start at just $5 a month

00:20:44.480 --> 00:20:45.680
for a dedicated server

00:20:45.680 --> 00:20:46.740
with a gig of RAM.

00:20:46.740 --> 00:20:48.120
They have 10 data centers

00:20:48.120 --> 00:20:48.960
across the globe,

00:20:48.960 --> 00:20:50.180
so no matter where you are

00:20:50.180 --> 00:20:51.320
or where your users are,

00:20:51.320 --> 00:20:52.780
there's a data center for you.

00:20:52.780 --> 00:20:53.760
Whether you want to run

00:20:53.760 --> 00:20:54.620
a Python web app,

00:20:54.620 --> 00:20:55.900
host a private Git server,

00:20:56.140 --> 00:20:57.280
or just a file server,

00:20:57.280 --> 00:20:58.900
you'll get native SSDs

00:20:58.900 --> 00:20:59.780
on all the machines,

00:20:59.780 --> 00:21:00.800
a newly upgraded

00:21:00.800 --> 00:21:02.480
200 gigabit network,

00:21:02.480 --> 00:21:04.440
24-7 friendly support

00:21:04.440 --> 00:21:05.260
even on holidays,

00:21:05.260 --> 00:21:06.320
and a seven-day

00:21:06.320 --> 00:21:07.160
money-back guarantee.

00:21:07.160 --> 00:21:08.180
Need a little help

00:21:08.180 --> 00:21:08.820
with your infrastructure?

00:21:08.820 --> 00:21:10.160
They even offer

00:21:10.160 --> 00:21:11.220
professional services

00:21:11.220 --> 00:21:11.960
to help you with

00:21:11.960 --> 00:21:13.080
architecture, migrations,

00:21:13.080 --> 00:21:13.560
and more.

00:21:13.560 --> 00:21:14.920
Do you want a dedicated server

00:21:14.920 --> 00:21:15.960
for free for the next

00:21:15.960 --> 00:21:16.520
four months?

00:21:16.520 --> 00:21:17.400
Just visit

00:21:17.400 --> 00:21:18.620
talkpython.fm

00:21:18.620 --> 00:21:19.580
slash Linode.

00:21:19.580 --> 00:21:22.260
You were just talking about

00:21:22.260 --> 00:21:23.420
having a company retreat

00:21:23.420 --> 00:21:23.940
in New Orleans,

00:21:23.940 --> 00:21:25.320
and the company I worked for

00:21:25.320 --> 00:21:26.240
before when I was

00:21:26.240 --> 00:21:26.760
working remotely

00:21:26.760 --> 00:21:27.760
before I started my own.

00:21:27.760 --> 00:21:29.700
Certainly, we had the same

00:21:29.700 --> 00:21:32.220
challenges of how do you connect,

00:21:32.220 --> 00:21:33.820
and so having some kind

00:21:33.820 --> 00:21:35.220
of yearly or bi-yearly

00:21:35.220 --> 00:21:36.320
get-together physically,

00:21:36.320 --> 00:21:37.180
and also you talked

00:21:37.180 --> 00:21:37.660
about Zoom.

00:21:37.660 --> 00:21:39.200
The video aspect

00:21:39.200 --> 00:21:40.980
of the Zoom and Skype

00:21:40.980 --> 00:21:42.260
actually makes a big difference,

00:21:42.260 --> 00:21:42.640
I think.

00:21:42.640 --> 00:21:43.300
It really does,

00:21:43.300 --> 00:21:44.680
and the internet connections

00:21:44.680 --> 00:21:45.700
are getting so good now

00:21:45.700 --> 00:21:47.060
that that video connection

00:21:47.060 --> 00:21:48.580
can feel very real,

00:21:48.580 --> 00:21:49.580
can feel very,

00:21:49.580 --> 00:21:50.320
like you can interact,

00:21:50.320 --> 00:21:51.420
you can see someone's body language,

00:21:51.420 --> 00:21:52.820
so you do get that.

00:21:52.920 --> 00:21:53.860
Yeah, you and I are talking,

00:21:53.860 --> 00:21:55.280
and it's almost as if we're

00:21:55.280 --> 00:21:56.120
sitting across the table

00:21:56.120 --> 00:21:56.580
from each other.

00:21:56.580 --> 00:21:57.700
It basically is good.

00:21:57.700 --> 00:21:58.880
Yeah, it works really well.

00:21:58.880 --> 00:22:00.660
So we found it to be

00:22:00.660 --> 00:22:02.280
exceptionally good.

00:22:02.280 --> 00:22:03.580
Yes, I do think having

00:22:03.580 --> 00:22:04.840
the visual interaction

00:22:04.840 --> 00:22:05.560
is important,

00:22:05.560 --> 00:22:06.700
like video calls,

00:22:06.700 --> 00:22:07.940
but then periodically

00:22:07.940 --> 00:22:09.580
these actual get-togethers,

00:22:09.580 --> 00:22:09.980
right?

00:22:09.980 --> 00:22:11.100
Yes, the retreats.

00:22:11.360 --> 00:22:12.880
Yeah, like these retreats,

00:22:12.880 --> 00:22:14.680
I always look forward to them

00:22:14.680 --> 00:22:15.340
because it was like

00:22:15.340 --> 00:22:16.520
these people I really liked

00:22:16.520 --> 00:22:17.980
and I would have more of a work.

00:22:17.980 --> 00:22:19.060
Like you wouldn't hang out

00:22:19.060 --> 00:22:19.460
on Skype.

00:22:19.460 --> 00:22:19.840
You'd be like,

00:22:19.840 --> 00:22:20.480
hey, I'm just,

00:22:20.480 --> 00:22:21.260
what are you up to, man?

00:22:21.260 --> 00:22:22.180
Let's hang out on Zoom, right?

00:22:22.180 --> 00:22:23.100
Like that's kind of weird,

00:22:23.100 --> 00:22:24.320
but you would have these meetings.

00:22:24.320 --> 00:22:25.540
So this is your chance

00:22:25.540 --> 00:22:26.420
to be more friendly

00:22:26.420 --> 00:22:28.040
with like your coworkers, right?

00:22:28.040 --> 00:22:29.720
So I think it's a good combo.

00:22:29.720 --> 00:22:30.740
I think it works really well.

00:22:30.740 --> 00:22:31.360
Yeah, I do too.

00:22:31.360 --> 00:22:32.940
And when it comes to the retreats,

00:22:32.940 --> 00:22:34.380
we've done those

00:22:34.380 --> 00:22:35.260
since the early days.

00:22:35.320 --> 00:22:36.300
I remember our first retreat

00:22:36.300 --> 00:22:37.900
was seven people

00:22:37.900 --> 00:22:41.860
and it's grown up to 185

00:22:41.860 --> 00:22:42.720
or 190 people.

00:22:42.720 --> 00:22:43.840
I think we're at the last retreat,

00:22:43.840 --> 00:22:46.540
which brings about a whole set of,

00:22:46.540 --> 00:22:46.960
you know,

00:22:46.960 --> 00:22:48.340
unique logistics challenge,

00:22:48.340 --> 00:22:49.680
but we found them

00:22:49.680 --> 00:22:50.680
to be really, really useful

00:22:50.680 --> 00:22:52.320
to kind of help set the stage

00:22:52.320 --> 00:22:52.740
for the stuff

00:22:52.740 --> 00:22:53.560
that we want to talk about.

00:22:53.560 --> 00:22:54.340
So you get that,

00:22:54.340 --> 00:22:54.800
you know,

00:22:54.800 --> 00:22:56.140
one of the cool things is,

00:22:56.140 --> 00:22:56.680
at least for me,

00:22:56.680 --> 00:22:58.360
is when you're in an office,

00:22:58.360 --> 00:23:00.360
you kind of are pretty much

00:23:00.360 --> 00:23:01.720
like flatline energy level.

00:23:01.720 --> 00:23:02.520
Like it's just kind of

00:23:02.520 --> 00:23:03.140
day in, day out.

00:23:03.140 --> 00:23:04.420
It's what you do every day.

00:23:04.760 --> 00:23:05.580
When you meet the team,

00:23:05.580 --> 00:23:06.260
you get them together.

00:23:06.260 --> 00:23:08.040
For us, it's like twice a year.

00:23:08.040 --> 00:23:09.300
That energy level's

00:23:09.300 --> 00:23:09.800
through the roof.

00:23:09.800 --> 00:23:10.920
Everyone's really excited

00:23:10.920 --> 00:23:11.660
to see each other.

00:23:11.660 --> 00:23:12.960
You're diving into things.

00:23:12.960 --> 00:23:14.220
You're hacking on stuff.

00:23:14.220 --> 00:23:14.640
You're going,

00:23:14.640 --> 00:23:16.440
like there's some really cool stuff

00:23:16.440 --> 00:23:17.680
that comes out as a result.

00:23:17.680 --> 00:23:19.120
So you get a little bit

00:23:19.120 --> 00:23:20.280
of the best of both worlds

00:23:20.280 --> 00:23:21.520
where you get to go back.

00:23:21.520 --> 00:23:22.700
You get to be in your space.

00:23:22.700 --> 00:23:24.060
You get to like zone in.

00:23:24.060 --> 00:23:25.060
You get to like have

00:23:25.060 --> 00:23:26.420
your kind of flow state,

00:23:26.420 --> 00:23:27.840
but you also get to have

00:23:27.840 --> 00:23:29.100
that really high energy

00:23:29.100 --> 00:23:30.460
connecting with people,

00:23:30.460 --> 00:23:31.580
spending time with them,

00:23:31.580 --> 00:23:33.060
which works really well.

00:23:33.060 --> 00:23:34.520
And we try to emulate,

00:23:34.520 --> 00:23:36.360
some of that serendipity things.

00:23:36.360 --> 00:23:37.200
Like we've used,

00:23:37.200 --> 00:23:38.240
there's this product

00:23:38.240 --> 00:23:40.400
called Donut for Slack

00:23:40.400 --> 00:23:41.900
and it will like pair you up

00:23:41.900 --> 00:23:42.420
with folks.

00:23:42.420 --> 00:23:43.880
So we have these like two by,

00:23:43.880 --> 00:23:45.740
two people like pairings

00:23:45.740 --> 00:23:46.700
that happen every week,

00:23:46.700 --> 00:23:47.820
three people pairings

00:23:47.820 --> 00:23:48.820
that happen every week.

00:23:48.820 --> 00:23:50.260
And they just let you get together

00:23:50.260 --> 00:23:51.720
and just chat about whatever.

00:23:51.720 --> 00:23:52.560
And you get matched up

00:23:52.560 --> 00:23:53.680
with random folks on the team.

00:23:53.680 --> 00:23:54.560
So you get a little bit

00:23:54.560 --> 00:23:55.600
of that as well.

00:23:55.600 --> 00:23:56.040
Oh, nice.

00:23:56.040 --> 00:23:56.980
And throw in little jokes

00:23:56.980 --> 00:23:57.680
or just stuff

00:23:57.680 --> 00:23:59.080
just for more personal things.

00:23:59.080 --> 00:23:59.520
Yeah, yeah,

00:23:59.520 --> 00:24:00.160
you definitely do.

00:24:00.260 --> 00:24:00.980
And you get to hear

00:24:00.980 --> 00:24:01.720
a little bit about

00:24:01.720 --> 00:24:02.660
what people are up to

00:24:02.660 --> 00:24:03.900
and like, you know,

00:24:03.900 --> 00:24:04.740
hear about their family

00:24:04.740 --> 00:24:05.640
and hear about this

00:24:05.640 --> 00:24:06.240
or hear about that.

00:24:06.240 --> 00:24:07.580
And it's those sorts

00:24:07.580 --> 00:24:08.860
of unstructured conversations

00:24:08.860 --> 00:24:10.420
that kind of bring out

00:24:10.420 --> 00:24:11.460
that humanness,

00:24:11.460 --> 00:24:12.140
which, you know,

00:24:12.140 --> 00:24:13.760
you do lose a little bit of

00:24:13.760 --> 00:24:14.660
when you're remote.

00:24:14.660 --> 00:24:16.140
So we often have like advice

00:24:16.140 --> 00:24:17.920
for folks to try to plan

00:24:17.920 --> 00:24:18.940
one day of your week

00:24:18.940 --> 00:24:20.100
where you go to a coffee shop

00:24:20.100 --> 00:24:21.260
or you go somewhere

00:24:21.260 --> 00:24:22.480
just to get out

00:24:22.480 --> 00:24:23.320
and move around.

00:24:23.320 --> 00:24:24.240
And, you know,

00:24:24.240 --> 00:24:25.060
some people don't need that.

00:24:25.060 --> 00:24:26.060
Some people need more of that.

00:24:26.060 --> 00:24:27.040
And just be aware

00:24:27.040 --> 00:24:27.880
of that for yourself

00:24:27.880 --> 00:24:28.880
because you're not often

00:24:28.880 --> 00:24:30.020
going to get that directly

00:24:30.020 --> 00:24:31.260
from working on Slack

00:24:31.260 --> 00:24:32.200
or something like that all day.

00:24:32.200 --> 00:24:33.420
I think that's great advice.

00:24:33.420 --> 00:24:34.360
Like people can go

00:24:34.360 --> 00:24:35.100
kind of stir crazy.

00:24:35.100 --> 00:24:36.240
Like I work 100%

00:24:36.240 --> 00:24:37.500
from my home office

00:24:37.500 --> 00:24:38.860
or somewhere else, right?

00:24:38.860 --> 00:24:39.700
Everyone I work with

00:24:39.700 --> 00:24:41.480
is some kind of contractor

00:24:41.480 --> 00:24:42.620
or author or something

00:24:42.620 --> 00:24:43.480
who's also not

00:24:43.480 --> 00:24:44.780
in any form of office with me.

00:24:44.780 --> 00:24:46.680
I know all the coffee shops around,

00:24:46.680 --> 00:24:47.580
especially in the summer,

00:24:47.580 --> 00:24:48.340
you know,

00:24:48.340 --> 00:24:50.140
and sometimes hit the libraries,

00:24:50.140 --> 00:24:51.060
but just getting out

00:24:51.060 --> 00:24:52.060
that makes a big difference.

00:24:52.060 --> 00:24:54.700
So I guess one more question

00:24:54.700 --> 00:24:55.460
that people out there

00:24:55.460 --> 00:24:57.160
might find interesting

00:24:57.160 --> 00:24:59.260
and maybe they will more so

00:24:59.260 --> 00:25:00.100
after what we talk about

00:25:00.100 --> 00:25:00.760
in just a moment,

00:25:00.760 --> 00:25:01.460
but it seems like

00:25:01.460 --> 00:25:02.220
it fits better here

00:25:02.220 --> 00:25:04.200
is they're out there listening.

00:25:04.200 --> 00:25:04.520
They're like,

00:25:04.520 --> 00:25:04.700
you know,

00:25:04.700 --> 00:25:07.220
I have this Java thing I'm doing

00:25:07.220 --> 00:25:08.240
and I'm not really super happy.

00:25:08.240 --> 00:25:09.400
I love a Python job.

00:25:09.400 --> 00:25:10.920
You guys are pretty much

00:25:10.920 --> 00:25:12.280
doing tons of Python

00:25:12.280 --> 00:25:13.900
and they could work

00:25:13.900 --> 00:25:14.560
from where they are.

00:25:14.560 --> 00:25:15.100
Are you hiring?

00:25:15.100 --> 00:25:16.040
Yeah, we're doing

00:25:16.040 --> 00:25:17.320
a lot of hiring in 2019.

00:25:17.320 --> 00:25:18.640
We've been really fortunate

00:25:18.640 --> 00:25:19.680
that, you know,

00:25:19.680 --> 00:25:20.620
we've talked about this publicly.

00:25:20.620 --> 00:25:21.700
Zapier has been profitable

00:25:21.700 --> 00:25:22.860
for years and years

00:25:22.860 --> 00:25:24.160
and we've been growing

00:25:24.160 --> 00:25:25.660
at a really respectable pace

00:25:25.660 --> 00:25:27.100
and we have a lot

00:25:27.100 --> 00:25:28.380
of ambitions for 2019.

00:25:28.380 --> 00:25:29.880
A lot of cool stuff

00:25:29.880 --> 00:25:30.560
we got to build.

00:25:30.560 --> 00:25:31.360
So yeah,

00:25:31.360 --> 00:25:32.620
we're 100% hiring.

00:25:32.620 --> 00:25:33.620
We're looking for folks

00:25:33.620 --> 00:25:35.040
who have Python background,

00:25:35.040 --> 00:25:36.480
have JavaScript background.

00:25:36.480 --> 00:25:37.760
We're going to be hiring

00:25:37.760 --> 00:25:38.800
slightly different,

00:25:38.800 --> 00:25:39.020
you know,

00:25:39.020 --> 00:25:39.880
on the manager track,

00:25:39.880 --> 00:25:40.620
we're going to be hiring folks

00:25:40.620 --> 00:25:41.640
on that side as well,

00:25:41.640 --> 00:25:42.460
which we kind of think of

00:25:42.460 --> 00:25:43.620
as like a different skill set.

00:25:43.620 --> 00:25:44.780
We're also hiring

00:25:44.780 --> 00:25:45.720
like security folks.

00:25:45.720 --> 00:25:46.480
We're hiring like

00:25:46.480 --> 00:25:46.900
test automation,

00:25:46.900 --> 00:25:47.820
you name it.

00:25:47.820 --> 00:25:49.560
We're hiring all the things

00:25:49.560 --> 00:25:50.340
in 2019.

00:25:50.340 --> 00:25:51.700
Lots of cool stuff.

00:25:51.740 --> 00:25:51.920
All right.

00:25:51.920 --> 00:25:52.220
Awesome.

00:25:52.220 --> 00:25:52.540
Well,

00:25:52.540 --> 00:25:53.400
people can,

00:25:53.400 --> 00:25:54.600
I'm sure there's a career page

00:25:54.600 --> 00:25:55.580
at zapier.com,

00:25:55.580 --> 00:25:55.740
right?

00:25:55.740 --> 00:25:56.820
Slash jobs.

00:25:56.820 --> 00:25:56.980
Yeah.

00:25:56.980 --> 00:25:58.220
Zapier.com slash jobs

00:25:58.220 --> 00:25:59.060
and we got them all on there.

00:25:59.060 --> 00:25:59.300
All right.

00:25:59.300 --> 00:25:59.560
Awesome.

00:25:59.560 --> 00:26:00.660
Nice.

00:26:00.660 --> 00:26:00.900
All right.

00:26:00.900 --> 00:26:01.560
So let's dig into

00:26:01.560 --> 00:26:02.360
some of the technology

00:26:02.360 --> 00:26:03.360
because I think there's

00:26:03.360 --> 00:26:04.220
two sides of things

00:26:04.220 --> 00:26:05.400
that are super interesting here.

00:26:05.400 --> 00:26:06.020
One,

00:26:06.020 --> 00:26:07.380
you've got

00:26:07.380 --> 00:26:08.680
your infrastructure

00:26:08.680 --> 00:26:10.060
and just the amount

00:26:10.060 --> 00:26:11.680
of people running jobs

00:26:11.680 --> 00:26:13.640
and triggered actions

00:26:13.640 --> 00:26:14.300
on your site

00:26:14.300 --> 00:26:14.860
is really,

00:26:14.860 --> 00:26:15.300
really interesting.

00:26:15.300 --> 00:26:15.880
There's so much

00:26:15.880 --> 00:26:16.500
happening there.

00:26:16.760 --> 00:26:17.680
And then also

00:26:17.680 --> 00:26:18.660
you're calling

00:26:18.660 --> 00:26:20.160
thousands of APIs

00:26:20.160 --> 00:26:21.640
and these APIs

00:26:21.640 --> 00:26:22.820
are not totally stable

00:26:22.820 --> 00:26:23.560
and all sorts of stuff.

00:26:23.560 --> 00:26:24.840
So let's dig into that

00:26:24.840 --> 00:26:25.220
a little bit.

00:26:25.220 --> 00:26:26.040
Like maybe just tell us

00:26:26.040 --> 00:26:26.400
real quick,

00:26:26.400 --> 00:26:27.280
like what kind of tech

00:26:27.280 --> 00:26:27.860
is involved

00:26:27.860 --> 00:26:29.040
and things along that line.

00:26:29.040 --> 00:26:29.800
We've tried to keep it

00:26:29.800 --> 00:26:30.380
pretty simple

00:26:30.380 --> 00:26:31.280
because we have plenty

00:26:31.280 --> 00:26:31.860
of complexity

00:26:31.860 --> 00:26:33.040
when it comes out

00:26:33.040 --> 00:26:33.660
on the other side

00:26:33.660 --> 00:26:34.760
with talking to APIs

00:26:34.760 --> 00:26:36.020
and some of the

00:26:36.020 --> 00:26:37.560
interesting combinations

00:26:37.560 --> 00:26:38.320
users make.

00:26:38.320 --> 00:26:39.660
So for us,

00:26:39.660 --> 00:26:40.200
we're Python.

00:26:40.200 --> 00:26:41.020
I mentioned earlier,

00:26:41.020 --> 00:26:41.860
we're Django based.

00:26:41.860 --> 00:26:42.580
So we're still using

00:26:42.580 --> 00:26:43.480
a lot of the ORM,

00:26:43.480 --> 00:26:44.060
a lot of the kind

00:26:44.060 --> 00:26:45.020
of standard tooling

00:26:45.020 --> 00:26:46.040
that comes with Django,

00:26:46.040 --> 00:26:47.500
a lot of the caching bits,

00:26:47.500 --> 00:26:48.660
a lot of the session bits,

00:26:48.660 --> 00:26:49.740
all that stuff

00:26:49.740 --> 00:26:50.480
we still use

00:26:50.480 --> 00:26:51.380
really, really heavily.

00:26:51.380 --> 00:26:52.260
What kind of database

00:26:52.260 --> 00:26:53.180
back in are you guys

00:26:53.180 --> 00:26:54.040
talking to with that ORM?

00:26:54.040 --> 00:26:54.460
Yeah, yeah.

00:26:54.460 --> 00:26:55.500
We're talking to MySQL

00:26:55.500 --> 00:26:56.140
right now.

00:26:56.140 --> 00:26:56.920
We're starting to kind

00:26:56.920 --> 00:26:57.460
of shard off

00:26:57.460 --> 00:26:58.000
and we've done

00:26:58.000 --> 00:26:59.100
and not sharding

00:26:59.100 --> 00:27:00.320
in the sense of like

00:27:00.320 --> 00:27:01.640
sharding over

00:27:01.640 --> 00:27:02.760
consistent sharding

00:27:02.760 --> 00:27:03.280
over IDs

00:27:03.280 --> 00:27:04.000
or anything like that,

00:27:04.000 --> 00:27:05.000
but like functional sharding

00:27:05.000 --> 00:27:06.400
where we try to extract

00:27:06.400 --> 00:27:06.980
this service

00:27:06.980 --> 00:27:08.260
from kind of the monolith

00:27:08.260 --> 00:27:08.760
and say,

00:27:08.760 --> 00:27:09.200
okay, well,

00:27:09.200 --> 00:27:10.140
now this is an opportunity.

00:27:10.140 --> 00:27:10.900
Maybe we'll use

00:27:10.900 --> 00:27:12.000
a more specialized database.

00:27:12.000 --> 00:27:13.080
Either maybe we'll

00:27:13.080 --> 00:27:13.640
stay relational

00:27:13.640 --> 00:27:14.520
and we'll use Postgres

00:27:14.520 --> 00:27:15.240
or upgrade

00:27:15.240 --> 00:27:15.820
the MySQL

00:27:15.820 --> 00:27:16.440
to something

00:27:16.440 --> 00:27:17.360
a little different

00:27:17.360 --> 00:27:18.280
or maybe we'll use

00:27:18.280 --> 00:27:19.120
some sort of NoSQL

00:27:19.120 --> 00:27:19.760
or specialized

00:27:19.760 --> 00:27:21.600
read and write patterns

00:27:21.600 --> 00:27:22.380
that make that

00:27:22.380 --> 00:27:23.400
use case even better.

00:27:23.400 --> 00:27:24.320
So for that,

00:27:24.320 --> 00:27:25.140
we're generally,

00:27:25.140 --> 00:27:25.520
I mean,

00:27:25.520 --> 00:27:26.300
we're looking at like

00:27:26.300 --> 00:27:27.040
mostly like

00:27:27.040 --> 00:27:28.120
vanilla Python

00:27:28.120 --> 00:27:29.460
like on the back end,

00:27:29.460 --> 00:27:31.140
the workflow engine side,

00:27:31.140 --> 00:27:31.560
right?

00:27:31.760 --> 00:27:32.680
which is probably,

00:27:32.680 --> 00:27:32.700
which is probably,

00:27:32.700 --> 00:27:33.720
you think of like

00:27:33.720 --> 00:27:34.600
that big behemoth

00:27:34.600 --> 00:27:35.060
that's running

00:27:35.060 --> 00:27:35.720
in the background

00:27:35.720 --> 00:27:36.640
doing all this

00:27:36.640 --> 00:27:37.420
like crazy stuff,

00:27:37.420 --> 00:27:38.560
talking to all these APIs,

00:27:38.560 --> 00:27:39.740
kind of your little robots

00:27:39.740 --> 00:27:40.700
running around the internet

00:27:40.700 --> 00:27:42.360
and that's all like Python

00:27:42.360 --> 00:27:43.840
and that's usually doing

00:27:43.840 --> 00:27:44.780
a lot of,

00:27:44.780 --> 00:27:45.220
I mean,

00:27:45.220 --> 00:27:46.140
you think of like celery,

00:27:46.140 --> 00:27:47.140
we use a ton of celery,

00:27:47.140 --> 00:27:47.440
right?

00:27:47.440 --> 00:27:48.420
We use a ton of that

00:27:48.420 --> 00:27:49.960
and we use RabbitMQ

00:27:49.960 --> 00:27:51.540
for a lot of the message

00:27:51.540 --> 00:27:52.900
passing between that.

00:27:52.900 --> 00:27:54.780
We're still using Django

00:27:54.780 --> 00:27:55.980
on the HTTP front,

00:27:55.980 --> 00:27:56.400
I mentioned.

00:27:56.840 --> 00:27:58.440
we use a lot of

00:27:58.440 --> 00:27:59.800
just pretty like vanilla

00:27:59.800 --> 00:28:01.760
like ingest for like webhooks.

00:28:01.760 --> 00:28:03.220
Like I know we do a lot of pulling,

00:28:03.220 --> 00:28:04.840
which is a lot of back end stuff,

00:28:04.840 --> 00:28:06.300
but we also pull in a lot of webhooks.

00:28:06.300 --> 00:28:07.160
So this is great

00:28:07.160 --> 00:28:08.960
when services send us those webhooks

00:28:08.960 --> 00:28:10.580
and let us know about things changing.

00:28:10.580 --> 00:28:10.900
Right.

00:28:10.900 --> 00:28:12.520
Webhooks have to be basically

00:28:12.520 --> 00:28:14.300
the best possible outcome,

00:28:14.300 --> 00:28:14.560
right?

00:28:14.560 --> 00:28:16.500
Because something like an email

00:28:16.500 --> 00:28:17.380
or an action happens

00:28:17.380 --> 00:28:19.300
and that service tells you

00:28:19.300 --> 00:28:20.240
rather than just

00:28:20.240 --> 00:28:21.060
you got anything for me,

00:28:21.060 --> 00:28:21.800
you got anything for me,

00:28:21.800 --> 00:28:22.620
you got anything for me.

00:28:22.620 --> 00:28:23.240
Yeah, yeah, yeah.

00:28:23.240 --> 00:28:23.700
That's,

00:28:23.700 --> 00:28:24.140
and that's,

00:28:24.140 --> 00:28:24.460
it's huge.

00:28:24.460 --> 00:28:25.440
We did a big analysis

00:28:25.440 --> 00:28:26.780
and we actually even shared

00:28:26.780 --> 00:28:28.160
and try to get more partners

00:28:28.160 --> 00:28:30.080
on board with like webhooks

00:28:30.080 --> 00:28:31.100
and what we call rest hooks,

00:28:31.100 --> 00:28:31.820
which is just a way

00:28:31.820 --> 00:28:33.240
to subscribe to webhooks.

00:28:33.240 --> 00:28:34.800
Because I think for a while,

00:28:34.800 --> 00:28:35.760
especially in the early days

00:28:35.760 --> 00:28:36.340
of webhooks,

00:28:36.340 --> 00:28:36.880
it was like,

00:28:36.880 --> 00:28:37.500
hey user,

00:28:37.500 --> 00:28:38.880
please copy this URL

00:28:38.880 --> 00:28:40.040
into this other service.

00:28:40.040 --> 00:28:40.420
And then,

00:28:40.420 --> 00:28:41.960
whereas like now that we have

00:28:41.960 --> 00:28:42.520
rest APIs,

00:28:42.520 --> 00:28:43.700
like we can just post

00:28:43.700 --> 00:28:44.720
to a subscription

00:28:44.720 --> 00:28:46.020
or a webhook endpoint,

00:28:46.020 --> 00:28:47.300
it'll create a webhook

00:28:47.300 --> 00:28:48.620
and send you those events

00:28:48.620 --> 00:28:49.680
and then you can tear it down.

00:28:49.680 --> 00:28:51.020
So we've done a lot there

00:28:51.020 --> 00:28:51.520
and we've done,

00:28:51.520 --> 00:28:53.140
and we did a bunch of analysis

00:28:53.140 --> 00:28:53.960
in the early days

00:28:53.960 --> 00:28:54.720
and it's something like

00:28:54.720 --> 00:28:56.540
66 times more efficient,

00:28:56.720 --> 00:28:56.960
like,

00:28:56.960 --> 00:28:58.480
because like on average,

00:28:58.480 --> 00:29:00.480
you're asking hundreds of times

00:29:00.480 --> 00:29:01.120
for new data

00:29:01.120 --> 00:29:02.180
and there's nothing there.

00:29:02.180 --> 00:29:03.140
And then the one time

00:29:03.140 --> 00:29:03.620
there is,

00:29:03.620 --> 00:29:03.860
right?

00:29:03.860 --> 00:29:04.200
Yeah.

00:29:04.200 --> 00:29:04.940
Just super,

00:29:04.940 --> 00:29:05.800
super wasteful.

00:29:05.800 --> 00:29:07.420
So we try to push towards

00:29:07.420 --> 00:29:08.140
like webhooks

00:29:08.140 --> 00:29:09.420
and event-driven sorts of things

00:29:09.420 --> 00:29:10.140
as much as we can.

00:29:10.140 --> 00:29:10.500
Yes.

00:29:10.500 --> 00:29:11.580
So you go to these partners,

00:29:11.580 --> 00:29:11.980
you're like,

00:29:11.980 --> 00:29:13.420
we would like to not call you

00:29:13.420 --> 00:29:14.720
100,000 times a day.

00:29:14.720 --> 00:29:15.120
Yes.

00:29:15.120 --> 00:29:15.900
Could we make it

00:29:15.900 --> 00:29:16.780
so we just call you

00:29:16.780 --> 00:29:18.180
100 or 50 or 1,000

00:29:18.180 --> 00:29:19.420
or whatever the right number is?

00:29:19.420 --> 00:29:19.620
Yeah.

00:29:19.620 --> 00:29:19.880
Yep,

00:29:19.880 --> 00:29:20.300
exactly.

00:29:20.300 --> 00:29:21.820
And some partners

00:29:21.820 --> 00:29:22.920
are really like into that

00:29:22.920 --> 00:29:24.480
and they have like some services

00:29:24.480 --> 00:29:26.320
and some endpoints set up

00:29:26.320 --> 00:29:27.760
to kind of create those

00:29:27.760 --> 00:29:29.100
webhooks and subscriptions

00:29:29.100 --> 00:29:29.880
and some don't.

00:29:29.880 --> 00:29:31.680
And in those cases,

00:29:31.680 --> 00:29:32.500
we do fall back

00:29:32.500 --> 00:29:34.220
kind of that polling architecture.

00:29:34.220 --> 00:29:35.120
But yeah,

00:29:35.120 --> 00:29:36.060
we really like it

00:29:36.060 --> 00:29:37.720
when partners do add those.

00:29:38.020 --> 00:29:38.460
I'm sure.

00:29:38.460 --> 00:29:39.760
So I feel like

00:29:39.760 --> 00:29:41.020
this asynchronous,

00:29:41.020 --> 00:29:41.680
cueing,

00:29:41.680 --> 00:29:42.440
message passing,

00:29:42.440 --> 00:29:44.780
message bust type of world

00:29:44.780 --> 00:29:46.120
must be pretty important

00:29:46.120 --> 00:29:46.640
for you guys.

00:29:46.640 --> 00:29:46.920
Like,

00:29:46.920 --> 00:29:47.660
you know,

00:29:47.660 --> 00:29:49.420
a new trigger has come in

00:29:49.420 --> 00:29:50.220
from like a new Gmail,

00:29:50.220 --> 00:29:51.100
but then you want to talk

00:29:51.100 --> 00:29:51.600
to Dropbox.

00:29:51.600 --> 00:29:51.820
Like,

00:29:51.820 --> 00:29:52.420
you don't necessarily

00:29:52.420 --> 00:29:53.160
want to block that up.

00:29:53.160 --> 00:29:53.360
You're like,

00:29:53.360 --> 00:29:53.580
okay,

00:29:53.580 --> 00:29:53.820
well,

00:29:53.820 --> 00:29:54.720
kick off a message.

00:29:54.720 --> 00:29:54.940
Like,

00:29:54.940 --> 00:29:55.920
you need to take this thing

00:29:55.920 --> 00:29:56.300
from Gmail

00:29:56.300 --> 00:29:57.460
and move it over to Dropbox

00:29:57.460 --> 00:29:58.340
when you have a moment.

00:29:58.340 --> 00:29:58.820
All right.

00:29:58.820 --> 00:29:59.780
And just sort of pass it

00:29:59.780 --> 00:30:00.300
down the flow.

00:30:00.300 --> 00:30:01.180
You want to talk a little bit

00:30:01.180 --> 00:30:02.500
about when that happens

00:30:02.500 --> 00:30:03.320
and like how that helps?

00:30:03.320 --> 00:30:03.620
Yeah.

00:30:03.620 --> 00:30:03.880
I mean,

00:30:03.880 --> 00:30:04.820
if you go into Zapier

00:30:04.820 --> 00:30:05.640
and you go into

00:30:05.640 --> 00:30:06.280
build a Zap,

00:30:06.280 --> 00:30:07.060
like a workflow,

00:30:07.060 --> 00:30:08.500
you'll see multiple steps.

00:30:08.500 --> 00:30:09.300
Maybe it's a,

00:30:09.300 --> 00:30:10.940
I'll use a starring,

00:30:10.940 --> 00:30:12.200
a message in Slack,

00:30:12.200 --> 00:30:13.160
and then you add it to,

00:30:13.160 --> 00:30:13.780
let's say,

00:30:13.780 --> 00:30:14.280
Todoist,

00:30:14.280 --> 00:30:14.600
right?

00:30:14.600 --> 00:30:16.280
Those are two distinct steps

00:30:16.280 --> 00:30:17.280
that we've broken apart

00:30:17.280 --> 00:30:17.960
on the back end.

00:30:17.960 --> 00:30:19.520
And on the back end,

00:30:19.520 --> 00:30:20.620
they're stored in kind of

00:30:20.620 --> 00:30:21.520
a self-relational,

00:30:21.520 --> 00:30:22.340
sort of a tree.

00:30:22.340 --> 00:30:23.180
You can kind of think of it

00:30:23.180 --> 00:30:24.100
as a tree.

00:30:24.100 --> 00:30:25.000
We try not to,

00:30:25.000 --> 00:30:26.360
there's no real ways

00:30:26.360 --> 00:30:28.640
to do cyclical,

00:30:28.640 --> 00:30:29.160
right?

00:30:29.160 --> 00:30:30.420
Sorts of like things

00:30:30.420 --> 00:30:31.560
because you get into,

00:30:31.560 --> 00:30:32.220
now you're into

00:30:32.220 --> 00:30:33.060
control flow stuff

00:30:33.060 --> 00:30:33.440
and that's,

00:30:33.440 --> 00:30:33.660
you know,

00:30:33.660 --> 00:30:34.360
a little bit crazy.

00:30:34.360 --> 00:30:35.460
For most users.

00:30:35.460 --> 00:30:36.860
Recursion with drag and drop,

00:30:36.860 --> 00:30:37.260
probably not.

00:30:37.260 --> 00:30:37.680
Yeah, yeah.

00:30:37.680 --> 00:30:38.480
It gets tricky.

00:30:38.480 --> 00:30:39.660
So we avoid that.

00:30:39.660 --> 00:30:41.120
So you can kind of think of this

00:30:41.120 --> 00:30:41.540
as like,

00:30:41.540 --> 00:30:42.920
that's a two-step Zap,

00:30:42.920 --> 00:30:43.960
Slack,

00:30:43.960 --> 00:30:44.740
Todoist,

00:30:44.740 --> 00:30:46.980
and we just pull that data

00:30:46.980 --> 00:30:47.900
out of Slack,

00:30:47.900 --> 00:30:49.340
we pass it on to the next one

00:30:49.340 --> 00:30:50.180
and we have a whole like

00:30:50.180 --> 00:30:51.000
templating system

00:30:51.000 --> 00:30:51.700
that kind of like

00:30:51.700 --> 00:30:53.080
passes in that data

00:30:53.080 --> 00:30:54.080
into the inputs

00:30:54.080 --> 00:30:54.920
of the next step

00:30:54.920 --> 00:30:55.860
in a particular way

00:30:55.860 --> 00:30:57.240
and users can define that

00:30:57.240 --> 00:30:57.900
however they want,

00:30:57.900 --> 00:30:58.540
which is kind of this

00:30:58.540 --> 00:30:59.480
cool customizability.

00:30:59.480 --> 00:31:00.480
So you can think of

00:31:00.480 --> 00:31:02.000
that task would say,

00:31:02.000 --> 00:31:02.580
you know,

00:31:02.580 --> 00:31:03.080
the message

00:31:03.080 --> 00:31:04.040
and maybe the time

00:31:04.040 --> 00:31:04.760
and who like

00:31:04.760 --> 00:31:05.680
actually made that

00:31:05.680 --> 00:31:06.760
message in Slack

00:31:06.760 --> 00:31:07.620
and you put that all

00:31:07.620 --> 00:31:09.160
in the description

00:31:09.160 --> 00:31:10.660
field for

00:31:10.660 --> 00:31:11.900
Todoist action,

00:31:11.900 --> 00:31:12.900
which would be maybe

00:31:12.900 --> 00:31:14.140
create a task or something

00:31:14.140 --> 00:31:15.240
or a to-do item.

00:31:15.240 --> 00:31:17.480
So that would trigger on

00:31:17.480 --> 00:31:18.200
and push down

00:31:18.200 --> 00:31:19.740
to a totally separate step

00:31:19.740 --> 00:31:20.540
that's going through

00:31:20.540 --> 00:31:22.020
RabbitMQ in that case.

00:31:22.020 --> 00:31:23.520
And then once that,

00:31:23.520 --> 00:31:25.720
you call into Todoist

00:31:25.720 --> 00:31:26.620
and you're complete with that,

00:31:26.620 --> 00:31:27.320
you get a 200,

00:31:27.320 --> 00:31:28.380
everything's hunky-dory.

00:31:28.380 --> 00:31:29.940
You look for any other

00:31:29.940 --> 00:31:30.700
children you have

00:31:30.700 --> 00:31:31.260
and in that case,

00:31:31.260 --> 00:31:31.920
you have nothing

00:31:31.920 --> 00:31:33.280
and you insert

00:31:33.280 --> 00:31:34.480
no child task

00:31:34.480 --> 00:31:34.920
and you're done.

00:31:34.920 --> 00:31:36.140
This app is finished running.

00:31:36.140 --> 00:31:37.300
That's pretty much

00:31:37.300 --> 00:31:37.940
kind of the workflow

00:31:37.940 --> 00:31:38.460
and you can see

00:31:38.460 --> 00:31:39.300
how that would expand

00:31:39.300 --> 00:31:39.960
and you could have

00:31:39.960 --> 00:31:40.760
dozens of steps

00:31:40.760 --> 00:31:41.500
and it walks down

00:31:41.500 --> 00:31:42.540
through a dozen steps

00:31:42.540 --> 00:31:43.760
until it gets to the last one.

00:31:43.760 --> 00:31:44.860
Nothing to do,

00:31:44.860 --> 00:31:45.560
so it's finished.

00:31:45.560 --> 00:31:45.960
Yeah, yeah.

00:31:45.960 --> 00:31:46.900
How do you deal with

00:31:46.900 --> 00:31:48.120
like the poison message

00:31:48.120 --> 00:31:49.180
equivalent, right?

00:31:49.180 --> 00:31:50.720
So like the third step

00:31:50.720 --> 00:31:51.500
is I want to call

00:31:51.500 --> 00:31:52.440
the Todoist API

00:31:52.440 --> 00:31:53.120
and I'm a big fan

00:31:53.120 --> 00:31:53.960
of Todoist by the way,

00:31:53.960 --> 00:31:54.940
but you know,

00:31:54.940 --> 00:31:55.640
maybe that day

00:31:55.640 --> 00:31:56.540
the Todoist API

00:31:56.540 --> 00:31:57.180
is down

00:31:57.180 --> 00:31:58.340
for like two hours

00:31:58.340 --> 00:31:59.160
and you're like,

00:31:59.160 --> 00:31:59.460
well,

00:31:59.460 --> 00:32:00.900
do you like

00:32:00.900 --> 00:32:02.180
throw it back in the queue?

00:32:02.180 --> 00:32:02.640
Do you put it

00:32:02.640 --> 00:32:03.280
in some other place

00:32:03.280 --> 00:32:04.580
like we're going to get to this

00:32:04.580 --> 00:32:05.840
maybe when things are better?

00:32:05.840 --> 00:32:07.300
Because I'm sure you're like,

00:32:07.300 --> 00:32:08.380
there's probably an API

00:32:08.380 --> 00:32:09.220
permanently

00:32:09.220 --> 00:32:11.380
at any moment in the day

00:32:11.380 --> 00:32:12.720
there's one of your APIs

00:32:12.720 --> 00:32:13.260
that is like

00:32:13.260 --> 00:32:14.480
not behaving that great,

00:32:14.480 --> 00:32:14.780
right?

00:32:14.780 --> 00:32:15.700
That you got to interact with.

00:32:15.700 --> 00:32:16.260
There's so many.

00:32:16.260 --> 00:32:16.860
Yeah, definitely.

00:32:16.860 --> 00:32:18.220
And there's a couple ways

00:32:18.220 --> 00:32:19.120
that we handle that.

00:32:19.120 --> 00:32:20.500
So we do a ton,

00:32:20.500 --> 00:32:21.900
since we do so many requests

00:32:21.900 --> 00:32:23.260
and we log all these requests

00:32:23.260 --> 00:32:24.440
and we track all these requests

00:32:24.440 --> 00:32:25.620
just for understanding

00:32:25.620 --> 00:32:27.080
the health of APIs.

00:32:27.080 --> 00:32:28.420
When we see one

00:32:28.420 --> 00:32:29.260
starting to fail,

00:32:29.260 --> 00:32:30.500
we see if it's failing

00:32:30.500 --> 00:32:31.360
for a lot of users

00:32:31.360 --> 00:32:32.460
or if it's just one user.

00:32:32.460 --> 00:32:33.320
If it's just one user,

00:32:33.320 --> 00:32:34.080
that's an error.

00:32:34.080 --> 00:32:35.940
Maybe, you know,

00:32:35.940 --> 00:32:37.360
something about the

00:32:37.360 --> 00:32:38.600
to-do item

00:32:38.600 --> 00:32:39.200
they were adding

00:32:39.200 --> 00:32:40.620
is actually invalid, right?

00:32:40.620 --> 00:32:40.900
Right.

00:32:40.900 --> 00:32:41.980
They deleted the project

00:32:41.980 --> 00:32:42.880
they're trying to add it to

00:32:42.880 --> 00:32:43.600
or whatever, right?

00:32:43.600 --> 00:32:44.340
Yeah, exactly.

00:32:44.340 --> 00:32:46.020
It could be anything like that

00:32:46.020 --> 00:32:47.780
and that's a user-specific thing.

00:32:47.780 --> 00:32:48.860
So that would pop up

00:32:48.860 --> 00:32:49.380
as an error.

00:32:49.380 --> 00:32:50.080
We'd email them,

00:32:50.080 --> 00:32:50.520
hey, heads up,

00:32:50.520 --> 00:32:51.460
something funny is going on

00:32:51.460 --> 00:32:51.920
with your Zap.

00:32:51.920 --> 00:32:53.440
Click here to kind of learn more.

00:32:53.800 --> 00:32:54.460
But if it's something

00:32:54.460 --> 00:32:55.020
that's happening

00:32:55.020 --> 00:32:56.660
across a high cardinality

00:32:56.660 --> 00:32:57.280
of users,

00:32:57.280 --> 00:32:58.320
a bunch of different users

00:32:58.320 --> 00:32:58.940
are hitting this,

00:32:58.940 --> 00:32:59.680
now we know,

00:32:59.680 --> 00:33:01.200
okay, something looks

00:33:01.200 --> 00:33:02.080
a little fishy here.

00:33:02.080 --> 00:33:03.040
And at that point,

00:33:03.040 --> 00:33:04.500
we'll start to hold things back

00:33:04.500 --> 00:33:05.440
and periodically

00:33:05.440 --> 00:33:07.100
like kind of let them through

00:33:07.100 --> 00:33:07.860
to see,

00:33:07.860 --> 00:33:09.040
do we have things going

00:33:09.040 --> 00:33:09.520
from, you know,

00:33:09.520 --> 00:33:10.520
maybe a 403,

00:33:10.520 --> 00:33:11.300
we're getting like

00:33:11.300 --> 00:33:12.720
nonstop 403s,

00:33:12.720 --> 00:33:13.480
someone shipped a bug

00:33:13.480 --> 00:33:14.260
and da-da-da.

00:33:14.260 --> 00:33:15.460
It's a mess.

00:33:15.460 --> 00:33:16.960
And we'll retry those

00:33:16.960 --> 00:33:18.700
until we start to see 200s

00:33:18.700 --> 00:33:19.320
and then we'll let

00:33:19.320 --> 00:33:20.380
the rest of them go.

00:33:20.380 --> 00:33:21.600
We'll try to trickle them out

00:33:21.600 --> 00:33:22.760
until we see them clear up.

00:33:23.080 --> 00:33:23.900
And that's a really

00:33:23.900 --> 00:33:25.620
common pattern for us.

00:33:25.620 --> 00:33:26.040
And we have,

00:33:26.040 --> 00:33:26.480
I mean,

00:33:26.480 --> 00:33:27.500
we've invested a lot

00:33:27.500 --> 00:33:29.080
in just trying to understand

00:33:29.080 --> 00:33:30.200
when APIs go down

00:33:30.200 --> 00:33:31.760
because I joke that we're like

00:33:31.760 --> 00:33:33.380
an edge case catching machine

00:33:33.380 --> 00:33:33.940
for the internet

00:33:33.940 --> 00:33:35.340
and anything that will go wrong,

00:33:35.340 --> 00:33:37.240
we will find out about it

00:33:37.240 --> 00:33:37.800
in some way.

00:33:37.800 --> 00:33:38.900
So we have to have all this

00:33:38.900 --> 00:33:40.720
like really intelligent monitoring

00:33:40.720 --> 00:33:41.840
to kind of stop that

00:33:41.840 --> 00:33:42.380
from happening,

00:33:42.380 --> 00:33:44.280
really keep it from impacting users

00:33:44.280 --> 00:33:45.020
or at least like

00:33:45.020 --> 00:33:46.840
give them the awareness

00:33:46.840 --> 00:33:47.140
that,

00:33:47.140 --> 00:33:47.280
hey,

00:33:47.280 --> 00:33:47.620
heads up,

00:33:47.620 --> 00:33:49.260
there's some internet stuff

00:33:49.260 --> 00:33:49.920
going on.

00:33:50.080 --> 00:33:50.240
you know,

00:33:50.240 --> 00:33:51.620
maybe AWS is having

00:33:51.620 --> 00:33:52.660
some sort of an outage

00:33:52.660 --> 00:33:53.580
and look at all these services

00:33:53.580 --> 00:33:54.520
that are 503.

00:33:54.520 --> 00:33:56.680
And we can kind of tie that together.

00:33:56.680 --> 00:33:56.960
Yeah.

00:33:56.960 --> 00:33:57.860
Cross your fingers

00:33:57.860 --> 00:34:00.680
and hope that a US East 1A

00:34:00.680 --> 00:34:01.320
doesn't go down.

00:34:01.320 --> 00:34:01.980
Right.

00:34:01.980 --> 00:34:02.300
Yeah.

00:34:02.360 --> 00:34:03.680
Like how much stuff runs

00:34:03.680 --> 00:34:05.320
on the Virginia data center

00:34:05.320 --> 00:34:05.840
of AWS.

00:34:05.840 --> 00:34:06.580
So what?

00:34:06.580 --> 00:34:06.940
Yeah.

00:34:06.940 --> 00:34:07.860
A lot of ours does.

00:34:07.860 --> 00:34:09.340
And we can often tell when,

00:34:09.340 --> 00:34:10.700
like if we see any funniness

00:34:10.700 --> 00:34:11.300
with AWS,

00:34:11.300 --> 00:34:12.580
we can always just go look

00:34:12.580 --> 00:34:13.780
at our like partner dash

00:34:13.780 --> 00:34:16.980
partner status health dashboard

00:34:16.980 --> 00:34:18.240
and see if anyone else

00:34:18.240 --> 00:34:19.100
is having issues.

00:34:19.100 --> 00:34:20.100
And if it's just us,

00:34:20.100 --> 00:34:20.320
it's like,

00:34:20.320 --> 00:34:20.600
okay,

00:34:20.600 --> 00:34:21.500
so we must be doing

00:34:21.500 --> 00:34:22.160
something funny.

00:34:22.160 --> 00:34:23.380
But if everybody's

00:34:23.380 --> 00:34:24.220
like having issues,

00:34:24.220 --> 00:34:24.540
we're like,

00:34:24.540 --> 00:34:24.860
okay,

00:34:24.860 --> 00:34:26.360
so Amazon is having an issue

00:34:26.360 --> 00:34:27.460
and they haven't quite updated

00:34:27.460 --> 00:34:28.460
their status page yet.

00:34:28.460 --> 00:34:28.720
Right.

00:34:28.720 --> 00:34:29.360
Exactly.

00:34:29.360 --> 00:34:30.440
You're like a little bit

00:34:30.440 --> 00:34:31.440
of a canary on that.

00:34:31.600 --> 00:34:32.220
Yeah, definitely.

00:34:32.220 --> 00:34:33.680
Interesting.

00:34:33.680 --> 00:34:37.480
This portion of Talk Python

00:34:37.480 --> 00:34:38.760
is brought to you by Ting.

00:34:38.760 --> 00:34:40.100
Let me tell you about Ting,

00:34:40.100 --> 00:34:41.140
a new mobile service

00:34:41.140 --> 00:34:42.080
available in the US

00:34:42.080 --> 00:34:43.400
that's targeted developers

00:34:43.400 --> 00:34:45.460
and other technically savvy folks.

00:34:45.460 --> 00:34:46.420
First of all,

00:34:46.420 --> 00:34:47.340
their average customer

00:34:47.340 --> 00:34:49.000
only pays $23 a month,

00:34:49.000 --> 00:34:50.380
but they're no discount provider.

00:34:50.380 --> 00:34:52.160
Their service runs over T-Mobile's

00:34:52.160 --> 00:34:54.200
and Sprint's fast nationwide network.

00:34:54.200 --> 00:34:55.920
If you don't use that much data

00:34:55.920 --> 00:34:57.280
because you're usually on Wi-Fi

00:34:57.280 --> 00:34:58.260
like many of you are,

00:34:58.260 --> 00:34:59.440
then Ting will save you

00:34:59.440 --> 00:35:00.080
a ton of cash.

00:35:00.080 --> 00:35:00.960
But don't worry,

00:35:01.080 --> 00:35:01.680
you can still use

00:35:01.680 --> 00:35:02.820
as much data as you like

00:35:02.820 --> 00:35:04.520
for just $10 per gig.

00:35:04.520 --> 00:35:05.380
One mobile feature

00:35:05.380 --> 00:35:06.200
I use all the time

00:35:06.200 --> 00:35:06.820
is tethering.

00:35:06.820 --> 00:35:07.520
And with Ting,

00:35:07.520 --> 00:35:09.480
you get unlimited tethering

00:35:09.480 --> 00:35:10.640
at the same data rate

00:35:10.640 --> 00:35:11.340
with your account.

00:35:11.340 --> 00:35:12.860
$6 a month for a phone line,

00:35:12.860 --> 00:35:13.860
$10 a gig,

00:35:13.860 --> 00:35:15.280
$3 a month for text

00:35:15.280 --> 00:35:16.020
if you usually chat

00:35:16.020 --> 00:35:17.220
over iMessage or WhatsApp.

00:35:17.220 --> 00:35:18.380
Think about it,

00:35:18.380 --> 00:35:19.040
no contracts

00:35:19.040 --> 00:35:20.020
and super clear

00:35:20.020 --> 00:35:21.100
and fair billing.

00:35:21.100 --> 00:35:23.420
Visit python.ting.com,

00:35:23.420 --> 00:35:26.160
that's python.ting.com,

00:35:26.560 --> 00:35:27.860
and check out their savings calculator.

00:35:27.860 --> 00:35:29.020
Enter your usage

00:35:29.020 --> 00:35:30.460
and see exactly what you'd pay.

00:35:30.460 --> 00:35:31.460
Use that link

00:35:31.460 --> 00:35:33.020
and you'll get a $25 credit

00:35:33.020 --> 00:35:34.260
to try them as well.

00:35:34.260 --> 00:35:36.020
That's python.ting.com

00:35:36.020 --> 00:35:36.960
or just click the link

00:35:36.960 --> 00:35:37.480
in the show notes.

00:35:39.480 --> 00:35:40.800
I guess it sounds like

00:35:40.800 --> 00:35:41.860
you host a lot of your stuff

00:35:41.860 --> 00:35:42.480
at AWS

00:35:42.480 --> 00:35:43.760
and you probably don't have

00:35:43.760 --> 00:35:45.100
like a big in-house data center.

00:35:45.100 --> 00:35:46.320
Like that made more sense

00:35:46.320 --> 00:35:47.700
if you have a big office

00:35:47.700 --> 00:35:48.480
and like part of it

00:35:48.480 --> 00:35:49.260
could be the data center.

00:35:49.260 --> 00:35:50.160
But if you have no office,

00:35:50.160 --> 00:35:51.900
like who's going to offer up

00:35:51.900 --> 00:35:52.520
their bedroom

00:35:52.520 --> 00:35:53.200
to get fiber

00:35:53.200 --> 00:35:54.340
and like cooling

00:35:54.340 --> 00:35:55.200
and like,

00:35:55.200 --> 00:35:55.540
all right,

00:35:55.540 --> 00:35:56.380
that just doesn't make sense.

00:35:56.380 --> 00:35:57.580
So are you running AWS?

00:35:57.580 --> 00:35:59.340
Where's your services hosted?

00:35:59.340 --> 00:36:00.400
We're predominantly AWS.

00:36:00.400 --> 00:36:02.000
We have a lot US East,

00:36:02.000 --> 00:36:02.440
of course,

00:36:02.440 --> 00:36:03.860
but we also have a couple things

00:36:03.860 --> 00:36:04.540
that fail over

00:36:04.540 --> 00:36:05.820
to multiple different regions.

00:36:05.820 --> 00:36:06.700
So yeah,

00:36:06.700 --> 00:36:06.900
I mean,

00:36:06.900 --> 00:36:08.400
we've just leaned into AWS

00:36:08.400 --> 00:36:09.300
since I think the early,

00:36:09.380 --> 00:36:10.360
I think maybe we did

00:36:10.360 --> 00:36:11.740
like Linode or Linode

00:36:11.740 --> 00:36:12.840
back in the early days

00:36:12.840 --> 00:36:13.540
for a hot minute

00:36:13.540 --> 00:36:14.820
and then that went over

00:36:14.820 --> 00:36:16.500
to AWS since then.

00:36:16.500 --> 00:36:17.260
We try to use

00:36:17.260 --> 00:36:18.720
some of the managed services

00:36:18.720 --> 00:36:19.640
where we can.

00:36:19.640 --> 00:36:21.440
So you're looking at the RDSs

00:36:21.440 --> 00:36:22.500
and the Elastic Caches

00:36:22.500 --> 00:36:23.820
and of course,

00:36:23.820 --> 00:36:25.320
like the ELBs and ALBs

00:36:25.320 --> 00:36:26.160
that exist out there,

00:36:26.160 --> 00:36:27.060
tons of S3.

00:36:27.060 --> 00:36:28.420
So we try to lean on

00:36:28.420 --> 00:36:29.480
some of the managed services

00:36:29.480 --> 00:36:30.180
where we can

00:36:30.180 --> 00:36:31.480
to just knock down

00:36:31.480 --> 00:36:32.320
the amount of like

00:36:32.320 --> 00:36:32.760
deep,

00:36:32.760 --> 00:36:33.680
intricate knowledge

00:36:33.680 --> 00:36:34.400
we have to have

00:36:34.400 --> 00:36:35.360
about like Postgres

00:36:35.360 --> 00:36:36.320
or MySQL

00:36:36.320 --> 00:36:37.380
or whatever, right?

00:36:37.380 --> 00:36:37.580
Yeah,

00:36:37.580 --> 00:36:38.540
let them do the operational

00:36:38.540 --> 00:36:39.120
bits of that.

00:36:39.280 --> 00:36:39.800
Interesting.

00:36:39.800 --> 00:36:41.140
So to me,

00:36:41.140 --> 00:36:42.160
it feels like the cloud,

00:36:42.160 --> 00:36:44.160
especially AWS

00:36:44.160 --> 00:36:44.940
and Azure

00:36:44.940 --> 00:36:45.660
and Google,

00:36:45.660 --> 00:36:46.980
those three clouds

00:36:46.980 --> 00:36:47.880
feel like that's

00:36:47.880 --> 00:36:48.660
the new lock-in,

00:36:48.660 --> 00:36:49.300
right?

00:36:49.300 --> 00:36:50.360
And I don't necessarily

00:36:50.360 --> 00:36:51.640
mean that in a bad way,

00:36:51.640 --> 00:36:52.020
right?

00:36:52.020 --> 00:36:53.520
Like when you

00:36:53.520 --> 00:36:54.800
take full advantage

00:36:54.800 --> 00:36:55.420
of a platform,

00:36:55.420 --> 00:36:56.860
you get all of the features

00:36:56.860 --> 00:36:57.300
of it, right?

00:36:57.300 --> 00:36:58.180
Like you could treat

00:36:58.180 --> 00:37:00.620
AWS as a fancy Linux

00:37:00.620 --> 00:37:02.300
hosting environment,

00:37:02.300 --> 00:37:03.080
right?

00:37:03.080 --> 00:37:04.580
Or you could use

00:37:04.580 --> 00:37:05.400
all the databases

00:37:05.400 --> 00:37:06.480
and all the files.

00:37:06.480 --> 00:37:08.020
all of the APIs

00:37:08.020 --> 00:37:08.660
and really get

00:37:08.660 --> 00:37:09.380
a lot more out of it,

00:37:09.380 --> 00:37:09.860
but then you're

00:37:09.860 --> 00:37:10.600
kind of permanently

00:37:10.600 --> 00:37:11.240
stuck to it.

00:37:11.240 --> 00:37:11.880
Like how do you guys

00:37:11.880 --> 00:37:12.680
think about like

00:37:12.680 --> 00:37:13.560
lock-in and cloud

00:37:13.560 --> 00:37:14.060
and all that?

00:37:14.060 --> 00:37:15.060
We kind of like

00:37:15.060 --> 00:37:15.800
tread the line

00:37:15.800 --> 00:37:16.700
a little bit in between.

00:37:16.700 --> 00:37:18.120
So all of our workloads

00:37:18.120 --> 00:37:19.240
that you think of

00:37:19.240 --> 00:37:20.300
or a large majority

00:37:20.300 --> 00:37:20.920
of our workloads

00:37:20.920 --> 00:37:21.580
that you think of

00:37:21.580 --> 00:37:22.780
just like running tasks

00:37:22.780 --> 00:37:24.080
and performing

00:37:24.080 --> 00:37:24.760
these actions

00:37:24.760 --> 00:37:25.480
for users,

00:37:25.480 --> 00:37:26.500
like they're running

00:37:26.500 --> 00:37:27.980
pretty bare bones

00:37:27.980 --> 00:37:28.980
like EC2 instances.

00:37:28.980 --> 00:37:29.580
We found that

00:37:29.580 --> 00:37:30.860
that generally has

00:37:30.860 --> 00:37:32.380
the best performance

00:37:32.380 --> 00:37:33.100
characteristics.

00:37:33.200 --> 00:37:34.040
we have the most

00:37:34.040 --> 00:37:35.080
kind of control over it.

00:37:35.080 --> 00:37:36.040
So in that case,

00:37:36.040 --> 00:37:36.820
like it's not really

00:37:36.820 --> 00:37:38.420
like locked in a whole lot.

00:37:38.420 --> 00:37:39.540
We're starting to lean

00:37:39.540 --> 00:37:40.600
into things that are

00:37:40.600 --> 00:37:41.280
like open source

00:37:41.280 --> 00:37:42.460
orchestration frameworks,

00:37:42.460 --> 00:37:43.600
the classic Kubernetes

00:37:43.600 --> 00:37:44.440
like transition

00:37:44.440 --> 00:37:45.200
that I think a lot

00:37:45.200 --> 00:37:45.640
of companies

00:37:45.640 --> 00:37:46.700
are like trying to do now.

00:37:46.700 --> 00:37:47.840
Again, we're talking

00:37:47.840 --> 00:37:48.820
about pretty open source

00:37:48.820 --> 00:37:50.320
standard sort of a thing,

00:37:50.320 --> 00:37:51.720
which we really like,

00:37:51.720 --> 00:37:53.000
but we're also not afraid

00:37:53.000 --> 00:37:54.120
that on an occasion

00:37:54.120 --> 00:37:55.360
using some of these

00:37:55.360 --> 00:37:56.160
specialized services,

00:37:56.160 --> 00:37:57.260
if it makes our lives

00:37:57.260 --> 00:37:58.340
a lot better,

00:37:58.340 --> 00:37:59.160
we'll use it.

00:37:59.160 --> 00:38:00.700
Like RDS is a great example

00:38:00.700 --> 00:38:01.880
of kind of them

00:38:01.880 --> 00:38:02.560
splitting the middle.

00:38:02.740 --> 00:38:04.080
like it's standard MySQL.

00:38:04.080 --> 00:38:05.400
So in the future,

00:38:05.400 --> 00:38:06.040
if you decide

00:38:06.040 --> 00:38:07.380
you want to like swap out,

00:38:07.380 --> 00:38:08.640
it's not the end of the world,

00:38:08.640 --> 00:38:10.280
but you don't have to worry

00:38:10.280 --> 00:38:11.160
about it in the meantime,

00:38:11.160 --> 00:38:11.480
right?

00:38:11.480 --> 00:38:12.380
You get all the goodies

00:38:12.380 --> 00:38:13.440
kind of a little bit,

00:38:13.440 --> 00:38:14.780
certainly not for free,

00:38:14.780 --> 00:38:16.280
but with less work

00:38:16.280 --> 00:38:17.180
on your side

00:38:17.180 --> 00:38:17.840
and I can focus

00:38:17.840 --> 00:38:18.380
on the product.

00:38:18.380 --> 00:38:19.060
So we've definitely

00:38:19.060 --> 00:38:20.120
leaned into that a lot.

00:38:20.120 --> 00:38:21.800
We haven't done a whole lot

00:38:21.800 --> 00:38:23.580
of like hyper specialized stuff.

00:38:23.580 --> 00:38:24.840
Maybe the only thing

00:38:24.840 --> 00:38:26.020
I think that we do a lot of

00:38:26.020 --> 00:38:28.380
is use a ton of AWS Lambda.

00:38:28.380 --> 00:38:29.440
In fact,

00:38:29.440 --> 00:38:31.880
like back in the early days,

00:38:31.880 --> 00:38:33.820
we built our own version

00:38:33.820 --> 00:38:35.020
of AWS Lambda.

00:38:35.020 --> 00:38:35.780
It was,

00:38:35.780 --> 00:38:36.800
I forget what we called it,

00:38:36.800 --> 00:38:37.460
but where we could

00:38:37.460 --> 00:38:39.100
more securely run

00:38:39.100 --> 00:38:40.760
a bunch of

00:38:40.760 --> 00:38:42.760
partner provided scripts

00:38:42.760 --> 00:38:44.320
and user provided scripts.

00:38:44.320 --> 00:38:45.440
That way they could do

00:38:45.440 --> 00:38:46.380
this kind of Python

00:38:46.380 --> 00:38:47.260
and his app thing,

00:38:47.260 --> 00:38:48.040
or they could like

00:38:48.040 --> 00:38:48.940
stand up their own

00:38:48.940 --> 00:38:49.680
partner apps.

00:38:49.680 --> 00:38:51.420
So this allows partners

00:38:51.420 --> 00:38:52.860
to kind of deploy code

00:38:52.860 --> 00:38:53.320
to us,

00:38:53.320 --> 00:38:54.400
to talk to APIs

00:38:54.400 --> 00:38:55.420
and integrate with

00:38:55.420 --> 00:38:56.000
any of our,

00:38:56.000 --> 00:38:56.380
you know,

00:38:56.380 --> 00:38:58.260
1400 different apps

00:38:58.260 --> 00:38:59.420
that was running

00:38:59.420 --> 00:39:00.920
on our own little flavor.

00:39:00.920 --> 00:39:02.040
And then as soon as AWS

00:39:02.040 --> 00:39:02.640
came along,

00:39:02.640 --> 00:39:02.920
it was like,

00:39:02.920 --> 00:39:03.220
actually,

00:39:03.220 --> 00:39:04.000
we got this

00:39:04.000 --> 00:39:05.240
and it's way better.

00:39:05.240 --> 00:39:06.260
We immediately

00:39:06.260 --> 00:39:07.420
swapped it all over

00:39:07.420 --> 00:39:09.040
to that as fast as we could.

00:39:09.040 --> 00:39:10.580
So we do use things

00:39:10.580 --> 00:39:11.060
like that,

00:39:11.060 --> 00:39:12.160
but even that has been

00:39:12.160 --> 00:39:13.260
commoditized by,

00:39:13.260 --> 00:39:14.400
to a large degree.

00:39:14.400 --> 00:39:14.720
I mean,

00:39:14.720 --> 00:39:15.600
both Google

00:39:15.600 --> 00:39:17.000
and Microsoft's

00:39:17.000 --> 00:39:17.820
cloud offerings

00:39:17.820 --> 00:39:18.720
have,

00:39:18.720 --> 00:39:19.040
you know,

00:39:19.040 --> 00:39:19.720
the serverless

00:39:19.720 --> 00:39:20.420
sort of vibe

00:39:20.420 --> 00:39:21.140
going on too.

00:39:21.140 --> 00:39:22.640
So it's kind of interesting.

00:39:23.640 --> 00:39:24.640
we've tried to

00:39:24.640 --> 00:39:25.740
balance it

00:39:25.740 --> 00:39:26.480
on the whole

00:39:26.480 --> 00:39:27.400
to where we can

00:39:27.400 --> 00:39:28.120
focus more time

00:39:28.120 --> 00:39:28.720
on the product,

00:39:28.720 --> 00:39:30.380
but not go like

00:39:30.380 --> 00:39:31.440
too hardcore,

00:39:31.440 --> 00:39:32.980
use really specialized stuff.

00:39:32.980 --> 00:39:33.560
Right, right.

00:39:33.560 --> 00:39:35.320
It's that kind of stuff

00:39:35.320 --> 00:39:36.000
that lets you do

00:39:36.000 --> 00:39:36.520
what you're doing

00:39:36.520 --> 00:39:38.260
on a 200 person team

00:39:38.260 --> 00:39:39.220
instead of a 500

00:39:39.220 --> 00:39:40.520
or a thousand person team,

00:39:40.520 --> 00:39:40.680
right?

00:39:40.680 --> 00:39:41.700
There's not like a fleet

00:39:41.700 --> 00:39:42.840
of database engineers

00:39:42.840 --> 00:39:45.200
and other infrastructure people

00:39:45.200 --> 00:39:46.160
and yeah, right.

00:39:46.160 --> 00:39:46.580
It's like,

00:39:46.580 --> 00:39:47.760
they're really big benefits

00:39:47.760 --> 00:39:48.100
to this.

00:39:48.100 --> 00:39:48.920
And I kind of do

00:39:48.920 --> 00:39:49.440
the same thing.

00:39:49.440 --> 00:39:50.220
Like there's certain things

00:39:50.220 --> 00:39:50.520
where like,

00:39:50.520 --> 00:39:50.780
okay,

00:39:50.780 --> 00:39:51.920
that's really not

00:39:51.920 --> 00:39:52.680
available elsewhere

00:39:52.680 --> 00:39:54.060
or so much more work.

00:39:54.060 --> 00:39:54.600
I'm going to just,

00:39:54.600 --> 00:39:54.960
you know,

00:39:54.960 --> 00:39:55.980
plug into that API

00:39:55.980 --> 00:39:56.600
or this API,

00:39:56.600 --> 00:39:57.160
but yeah,

00:39:57.160 --> 00:39:57.720
definitely.

00:39:57.720 --> 00:39:58.180
Yeah.

00:39:58.180 --> 00:40:00.000
So you did talk

00:40:00.000 --> 00:40:00.840
about calling

00:40:00.840 --> 00:40:02.460
a few APIs

00:40:02.460 --> 00:40:04.460
and if you're doing

00:40:04.460 --> 00:40:05.080
that with Python,

00:40:05.080 --> 00:40:06.480
like the most common

00:40:06.480 --> 00:40:07.220
way to do that

00:40:07.220 --> 00:40:08.420
probably is the request,

00:40:08.420 --> 00:40:09.280
the module by Kenneth,

00:40:09.280 --> 00:40:09.520
right?

00:40:09.520 --> 00:40:09.780
Right.

00:40:09.780 --> 00:40:10.580
Are you guys using

00:40:10.580 --> 00:40:11.400
requests for all this?

00:40:11.400 --> 00:40:12.320
How's this work?

00:40:12.320 --> 00:40:12.680
Yeah.

00:40:12.680 --> 00:40:12.880
Yeah.

00:40:12.880 --> 00:40:13.540
We use requests,

00:40:13.540 --> 00:40:14.800
but we use a bunch

00:40:14.800 --> 00:40:15.340
of our own.

00:40:15.340 --> 00:40:15.640
I mean,

00:40:15.640 --> 00:40:16.540
the great thing about requests

00:40:16.540 --> 00:40:17.620
is how like extensible

00:40:17.620 --> 00:40:18.000
it is.

00:40:18.000 --> 00:40:18.940
Like you can swap in

00:40:18.940 --> 00:40:20.060
and out your own

00:40:20.060 --> 00:40:21.600
HTTP adapters.

00:40:21.600 --> 00:40:22.300
And then from there,

00:40:22.340 --> 00:40:23.100
you can swap out

00:40:23.100 --> 00:40:23.920
almost everything.

00:40:23.920 --> 00:40:25.580
So we have custom

00:40:25.580 --> 00:40:26.720
DNS resolvers.

00:40:26.720 --> 00:40:27.760
We have custom

00:40:27.760 --> 00:40:29.100
request adapters

00:40:29.100 --> 00:40:30.560
or HTTP adapters.

00:40:30.560 --> 00:40:31.760
We have custom like

00:40:31.760 --> 00:40:33.120
response and request types

00:40:33.120 --> 00:40:34.520
that all kind of encapsulate

00:40:34.520 --> 00:40:35.700
some of the behaviors

00:40:35.700 --> 00:40:36.380
and the logging

00:40:36.380 --> 00:40:37.140
and the monitoring

00:40:37.140 --> 00:40:38.040
that we want to have.

00:40:38.040 --> 00:40:38.820
And we have like

00:40:38.820 --> 00:40:39.660
different classes.

00:40:39.660 --> 00:40:40.740
Give us some concrete

00:40:40.740 --> 00:40:41.080
examples.

00:40:41.080 --> 00:40:41.340
Like,

00:40:41.340 --> 00:40:42.320
so you have a custom

00:40:42.320 --> 00:40:42.860
DNS thing.

00:40:42.860 --> 00:40:43.240
Is that like,

00:40:43.240 --> 00:40:44.180
so you can do better

00:40:44.180 --> 00:40:45.420
caching and not like,

00:40:45.420 --> 00:40:46.120
like make the calls

00:40:46.120 --> 00:40:46.500
faster?

00:40:46.500 --> 00:40:47.460
Like what's the idea there?

00:40:47.460 --> 00:40:48.920
The idea there is

00:40:48.920 --> 00:40:49.540
if you,

00:40:49.540 --> 00:40:50.400
for us,

00:40:50.400 --> 00:40:51.500
like we want to be able

00:40:51.500 --> 00:40:53.040
to have a lot of kind

00:40:53.040 --> 00:40:54.400
of control over what

00:40:54.400 --> 00:40:56.240
DNS services we have

00:40:56.240 --> 00:40:58.680
with which like adapter

00:40:58.680 --> 00:40:59.240
we're using.

00:40:59.240 --> 00:40:59.700
For example,

00:40:59.700 --> 00:41:00.640
we use requests for

00:41:00.640 --> 00:41:01.700
internal communications,

00:41:01.700 --> 00:41:02.880
which is like a different

00:41:02.880 --> 00:41:04.700
DNS sort of provider.

00:41:04.700 --> 00:41:06.040
And then when it comes

00:41:06.040 --> 00:41:07.360
to like user outbound

00:41:07.360 --> 00:41:08.060
user stuff,

00:41:08.060 --> 00:41:09.520
we would want to use

00:41:09.520 --> 00:41:10.620
either like the Google

00:41:10.620 --> 00:41:12.800
8.8.8.8 or maybe

00:41:12.800 --> 00:41:14.540
like open DNS or even

00:41:14.540 --> 00:41:15.280
maybe some sort of a

00:41:15.280 --> 00:41:16.340
custom thing for a user.

00:41:16.340 --> 00:41:17.600
So in those cases,

00:41:17.600 --> 00:41:18.260
we want to be able

00:41:18.260 --> 00:41:19.280
to swap that out.

00:41:19.280 --> 00:41:20.660
And that's a fairly

00:41:20.660 --> 00:41:21.340
low level.

00:41:21.340 --> 00:41:21.700
I mean,

00:41:21.700 --> 00:41:23.340
it's kind of automagically

00:41:23.340 --> 00:41:24.540
done for you a lot of times.

00:41:24.540 --> 00:41:25.260
But if you want to

00:41:25.260 --> 00:41:25.900
control that,

00:41:25.900 --> 00:41:26.760
you have to kind of

00:41:26.760 --> 00:41:27.500
start digging into

00:41:27.500 --> 00:41:28.760
the HTTP adapters

00:41:28.760 --> 00:41:29.700
and intercept some of

00:41:29.700 --> 00:41:30.440
the connections that are

00:41:30.440 --> 00:41:31.760
opening and kind of

00:41:31.760 --> 00:41:32.560
like all this other stuff.

00:41:32.560 --> 00:41:33.100
And you have the

00:41:33.100 --> 00:41:34.200
opportunity to do that

00:41:34.200 --> 00:41:35.600
with requests.

00:41:35.600 --> 00:41:36.440
And, you know,

00:41:36.440 --> 00:41:37.560
a really specific example,

00:41:37.560 --> 00:41:38.560
we talked a lot about

00:41:38.560 --> 00:41:40.120
this monitoring bit.

00:41:40.120 --> 00:41:41.400
So we have

00:41:41.400 --> 00:41:42.900
different libraries

00:41:42.900 --> 00:41:43.940
that you can like,

00:41:43.940 --> 00:41:44.520
or sorry,

00:41:44.520 --> 00:41:45.440
different like interfaces

00:41:45.440 --> 00:41:46.120
that you can basically

00:41:46.120 --> 00:41:46.840
attach and say,

00:41:46.840 --> 00:41:47.400
hey, this is my

00:41:47.400 --> 00:41:48.720
Salesforce session.

00:41:48.720 --> 00:41:50.060
And it'll start to do

00:41:50.060 --> 00:41:50.780
all the logging

00:41:50.780 --> 00:41:53.200
for like this public API

00:41:53.200 --> 00:41:54.840
to the proper spots for you.

00:41:54.840 --> 00:41:55.580
So you don't have to like

00:41:55.580 --> 00:41:57.260
worry so much about like,

00:41:57.260 --> 00:41:57.940
oh, am I doing

00:41:57.940 --> 00:41:58.900
the right logging here?

00:41:58.900 --> 00:41:59.380
Am I doing,

00:41:59.380 --> 00:42:00.780
and it'll do all this stuff

00:42:00.780 --> 00:42:01.340
where it like kind of

00:42:01.340 --> 00:42:02.240
cleans up the secrets

00:42:02.240 --> 00:42:03.040
out of it.

00:42:03.040 --> 00:42:03.760
And it does the

00:42:03.760 --> 00:42:04.600
proper truncating.

00:42:04.600 --> 00:42:05.240
So we're not like

00:42:05.240 --> 00:42:06.540
dumping like 50 megs

00:42:06.540 --> 00:42:07.740
to the logging service.

00:42:07.740 --> 00:42:09.180
And it does all this stuff.

00:42:09.180 --> 00:42:09.560
The logs are full again.

00:42:09.560 --> 00:42:10.040
Yeah.

00:42:10.040 --> 00:42:10.560
That you,

00:42:10.560 --> 00:42:12.040
you kind of forget that.

00:42:12.040 --> 00:42:12.840
Oh yeah, yeah, yeah.

00:42:12.840 --> 00:42:13.520
You got to remember

00:42:13.520 --> 00:42:14.740
to do that through

00:42:14.740 --> 00:42:15.820
a very familiar interface

00:42:15.820 --> 00:42:16.920
that you can just pop on

00:42:16.920 --> 00:42:17.680
to, you know,

00:42:17.680 --> 00:42:19.340
Python requests dot,

00:42:19.340 --> 00:42:19.600
you know,

00:42:19.600 --> 00:42:20.640
read the docs dot,

00:42:20.640 --> 00:42:21.020
you know,

00:42:21.020 --> 00:42:22.740
org and read all about

00:42:22.740 --> 00:42:23.900
exactly what it's doing.

00:42:23.900 --> 00:42:25.100
It's so much easier

00:42:25.100 --> 00:42:26.900
to onboard new employees,

00:42:26.900 --> 00:42:28.060
new engineers on,

00:42:28.060 --> 00:42:29.780
and you can kind of extend

00:42:29.780 --> 00:42:30.920
and get kind of the best

00:42:30.920 --> 00:42:32.060
of the community,

00:42:32.060 --> 00:42:33.560
the best of tools

00:42:33.560 --> 00:42:34.400
that exist out there.

00:42:34.400 --> 00:42:35.420
So that's kind of way

00:42:35.420 --> 00:42:36.540
we've approached using

00:42:36.540 --> 00:42:37.680
like things like requests.

00:42:37.680 --> 00:42:38.980
And it's been really

00:42:38.980 --> 00:42:39.500
quite,

00:42:39.500 --> 00:42:40.480
quite useful for us

00:42:40.480 --> 00:42:41.400
and very successful.

00:42:41.400 --> 00:42:42.260
It's a great library.

00:42:42.260 --> 00:42:43.260
I'm wondering if,

00:42:43.260 --> 00:42:43.500
you know,

00:42:43.500 --> 00:42:44.200
there's some of these

00:42:44.200 --> 00:42:45.700
integrations that are,

00:42:45.700 --> 00:42:46.980
they basically have

00:42:46.980 --> 00:42:48.500
really nice prebuilt

00:42:48.500 --> 00:42:49.360
Python packages.

00:42:49.360 --> 00:42:50.900
And some of them

00:42:50.900 --> 00:42:51.560
are just like,

00:42:51.560 --> 00:42:52.960
here's an HTTP endpoint,

00:42:52.960 --> 00:42:54.400
knock yourself out

00:42:54.400 --> 00:42:55.180
with whatever tech,

00:42:55.180 --> 00:42:55.980
right?

00:42:55.980 --> 00:42:56.340
So,

00:42:56.340 --> 00:42:56.860
you know,

00:42:56.860 --> 00:42:57.520
like for example,

00:42:57.520 --> 00:42:57.880
GitHub,

00:42:57.880 --> 00:43:00.420
there's like GitHub packages

00:43:00.420 --> 00:43:02.140
that you can use in Python.

00:43:02.140 --> 00:43:03.980
Do you ever use those

00:43:03.980 --> 00:43:04.500
or you're like,

00:43:04.500 --> 00:43:05.440
it's better for us

00:43:05.440 --> 00:43:06.940
to just stay separate

00:43:06.940 --> 00:43:08.580
at HTTP access level?

00:43:08.580 --> 00:43:09.040
Yeah,

00:43:09.040 --> 00:43:10.620
we've gone to the HTTP level.

00:43:10.620 --> 00:43:12.400
Those libraries are awesome,

00:43:12.400 --> 00:43:13.440
especially for,

00:43:13.440 --> 00:43:14.220
if you want to just

00:43:14.220 --> 00:43:15.260
spin something up quick,

00:43:15.260 --> 00:43:17.140
but we've gotten so good

00:43:17.140 --> 00:43:17.820
at talking,

00:43:17.820 --> 00:43:19.320
like we talk to REST APIs.

00:43:19.320 --> 00:43:20.040
We're good at that.

00:43:20.040 --> 00:43:20.920
We've done it a lot,

00:43:20.920 --> 00:43:21.220
right?

00:43:21.220 --> 00:43:22.220
It's kind of our bread and butter.

00:43:22.220 --> 00:43:23.760
So we want to like talk to that

00:43:23.760 --> 00:43:25.000
and have kind of the control

00:43:25.000 --> 00:43:25.480
over that.

00:43:25.780 --> 00:43:27.420
So we used to do

00:43:27.420 --> 00:43:28.120
a little bit of that

00:43:28.120 --> 00:43:28.840
in the early days.

00:43:28.840 --> 00:43:29.720
And then we got to the point

00:43:29.720 --> 00:43:30.500
where observability

00:43:30.500 --> 00:43:31.500
became tricky.

00:43:31.500 --> 00:43:33.140
Some of them used

00:43:33.140 --> 00:43:34.280
things like requests

00:43:34.280 --> 00:43:35.180
behind the scenes.

00:43:35.180 --> 00:43:36.300
Some of them used

00:43:36.300 --> 00:43:37.820
HTTP lib too.

00:43:37.820 --> 00:43:39.020
Some of them just use

00:43:39.020 --> 00:43:40.200
like the built in,

00:43:40.200 --> 00:43:41.220
like everyone was doing

00:43:41.220 --> 00:43:41.860
different stuff.

00:43:41.860 --> 00:43:42.980
And then you had to like rewrite

00:43:42.980 --> 00:43:44.080
how your observability

00:43:44.080 --> 00:43:45.220
and your monitoring worked.

00:43:45.220 --> 00:43:46.100
So for us,

00:43:46.100 --> 00:43:47.520
it just became hard to do.

00:43:47.520 --> 00:43:48.820
So if you're talking

00:43:48.820 --> 00:43:50.000
to lots and lots of APIs

00:43:50.000 --> 00:43:50.580
like this,

00:43:50.580 --> 00:43:51.560
it really does help

00:43:51.560 --> 00:43:52.940
to kind of standardize

00:43:52.940 --> 00:43:53.920
your interface on that.

00:43:53.920 --> 00:43:54.160
Yeah,

00:43:54.160 --> 00:43:55.280
it seems like it must have been

00:43:55.280 --> 00:43:56.440
like almost a dependency,

00:43:56.440 --> 00:43:58.440
a dependency hell of a sort.

00:43:58.440 --> 00:43:59.100
Like if you're like,

00:43:59.100 --> 00:43:59.640
we're going to have

00:43:59.640 --> 00:44:00.880
500 different packages

00:44:00.880 --> 00:44:02.100
and those packages

00:44:02.100 --> 00:44:03.080
might go out of favor

00:44:03.080 --> 00:44:04.240
and then they're not

00:44:04.240 --> 00:44:05.060
quite up to date

00:44:05.060 --> 00:44:06.320
or there's like a breaking change.

00:44:06.320 --> 00:44:07.680
Like there's just so many layers,

00:44:07.680 --> 00:44:07.920
right?

00:44:07.920 --> 00:44:08.460
And you're just like,

00:44:08.460 --> 00:44:09.520
let's just do the same

00:44:09.520 --> 00:44:09.960
for everything.

00:44:09.960 --> 00:44:10.160
Yeah.

00:44:10.220 --> 00:44:11.720
that's really where we kind of landed.

00:44:11.720 --> 00:44:13.760
That was through some like learning,

00:44:13.760 --> 00:44:14.960
like especially in the early days,

00:44:14.960 --> 00:44:16.040
we did do a couple of those

00:44:16.040 --> 00:44:17.820
like kind of like those libraries

00:44:17.820 --> 00:44:18.360
that you can just,

00:44:18.360 --> 00:44:18.540
you know,

00:44:18.540 --> 00:44:19.940
pip install MailChimp,

00:44:19.940 --> 00:44:20.280
right?

00:44:20.280 --> 00:44:21.020
Yeah,

00:44:21.020 --> 00:44:21.400
exactly.

00:44:21.400 --> 00:44:21.940
We're good.

00:44:21.940 --> 00:44:22.500
We're good.

00:44:22.500 --> 00:44:22.720
Yeah.

00:44:22.720 --> 00:44:23.340
Do this.

00:44:23.380 --> 00:44:23.900
They did help.

00:44:23.900 --> 00:44:25.440
And a lot of them are also,

00:44:25.440 --> 00:44:26.320
funny enough,

00:44:26.320 --> 00:44:29.400
they're built on little odd behaviors

00:44:29.400 --> 00:44:30.800
that seem fine in isolation.

00:44:30.800 --> 00:44:32.000
But when you're running,

00:44:32.000 --> 00:44:32.860
you know,

00:44:32.860 --> 00:44:33.340
something like,

00:44:33.340 --> 00:44:34.780
like what we do,

00:44:34.780 --> 00:44:36.120
it doesn't really fit.

00:44:36.120 --> 00:44:36.640
For example,

00:44:36.640 --> 00:44:37.840
some of these libraries,

00:44:37.840 --> 00:44:38.840
you'll just import,

00:44:38.840 --> 00:44:40.320
like let's say MailChimp.

00:44:40.420 --> 00:44:40.700
and then,

00:44:40.700 --> 00:44:41.080
you know,

00:44:41.080 --> 00:44:42.080
on the global object,

00:44:42.080 --> 00:44:43.500
do MailChimp.API key

00:44:43.500 --> 00:44:44.940
and just set your API key there,

00:44:44.940 --> 00:44:46.940
which you never know

00:44:46.940 --> 00:44:48.100
which user's API key

00:44:48.100 --> 00:44:48.820
you're going to use.

00:44:48.820 --> 00:44:49.120
Yeah.

00:44:49.120 --> 00:44:49.920
When you're us,

00:44:49.920 --> 00:44:51.320
like that kind of like,

00:44:51.320 --> 00:44:51.840
you look at that

00:44:51.840 --> 00:44:52.100
and you're like,

00:44:52.100 --> 00:44:52.220
oh,

00:44:52.220 --> 00:44:52.680
that doesn't,

00:44:52.680 --> 00:44:53.780
that doesn't really work.

00:44:53.780 --> 00:44:54.600
Like I want to create

00:44:54.600 --> 00:44:55.700
like a MailChimp session,

00:44:55.700 --> 00:44:56.380
you know what I mean?

00:44:56.380 --> 00:44:56.980
So like.

00:44:56.980 --> 00:44:58.780
Anytime you're doing multi-tenancy,

00:44:58.780 --> 00:44:59.980
like those little gotchas

00:44:59.980 --> 00:45:01.620
are super scary.

00:45:01.620 --> 00:45:02.320
You're like,

00:45:02.320 --> 00:45:03.400
why did I just expose

00:45:03.400 --> 00:45:04.960
all of this other customer's data

00:45:04.960 --> 00:45:05.360
or something,

00:45:05.360 --> 00:45:05.640
right?

00:45:05.640 --> 00:45:05.940
Yep,

00:45:05.940 --> 00:45:06.300
exactly.

00:45:06.300 --> 00:45:07.800
So that's why having control

00:45:07.800 --> 00:45:08.800
over that layer

00:45:08.800 --> 00:45:10.100
and being really particular

00:45:10.100 --> 00:45:11.680
about like when you're opening

00:45:11.680 --> 00:45:12.840
and creating new sessions

00:45:12.840 --> 00:45:14.520
or you're reusing them or not,

00:45:14.520 --> 00:45:15.680
you want that control.

00:45:15.680 --> 00:45:17.000
So that's where we've

00:45:17.000 --> 00:45:17.900
kind of landed for that

00:45:17.900 --> 00:45:18.980
and it works pretty well.

00:45:18.980 --> 00:45:19.480
And you know,

00:45:19.480 --> 00:45:20.320
when I was talking about

00:45:20.320 --> 00:45:21.640
the AWS Lambda side,

00:45:21.640 --> 00:45:22.440
a lot of that's

00:45:22.440 --> 00:45:23.880
on the JavaScript side.

00:45:23.880 --> 00:45:24.940
So we do provide

00:45:24.940 --> 00:45:26.960
maybe not the perfect equivalent

00:45:26.960 --> 00:45:27.980
to Python requests

00:45:27.980 --> 00:45:29.120
on the platform,

00:45:29.120 --> 00:45:30.040
what we call our platform

00:45:30.040 --> 00:45:31.200
like CLI and SDK,

00:45:31.200 --> 00:45:33.400
like that has like

00:45:33.400 --> 00:45:35.040
a similarly inspired

00:45:35.040 --> 00:45:35.740
sort of a thing.

00:45:35.740 --> 00:45:36.540
So use our,

00:45:36.540 --> 00:45:37.300
in our case,

00:45:37.300 --> 00:45:38.360
it's like the Z object

00:45:38.360 --> 00:45:39.360
that has a request

00:45:39.360 --> 00:45:40.400
method on it.

00:45:40.400 --> 00:45:41.300
If you use that,

00:45:41.300 --> 00:45:42.360
then you get all

00:45:42.360 --> 00:45:43.560
the magical like logging

00:45:43.560 --> 00:45:44.140
and you get all

00:45:44.140 --> 00:45:45.720
the magical like introspection

00:45:45.720 --> 00:45:46.460
on the calls

00:45:46.460 --> 00:45:47.040
that you're doing.

00:45:47.040 --> 00:45:48.380
So it supports that.

00:45:48.380 --> 00:45:50.060
And if you break out of that,

00:45:50.060 --> 00:45:50.980
maybe you have your own

00:45:50.980 --> 00:45:52.780
little like JavaScript SDK

00:45:52.780 --> 00:45:54.420
for talking to your own service,

00:45:54.420 --> 00:45:56.100
you'll lose a little bit of that.

00:45:56.100 --> 00:45:57.260
And in that case,

00:45:57.260 --> 00:45:58.140
like it'll be harder

00:45:58.140 --> 00:45:59.600
for us to debug your services

00:45:59.600 --> 00:46:00.980
or help users out.

00:46:01.460 --> 00:46:03.480
So we do try to encourage folks

00:46:03.480 --> 00:46:05.480
to use that kind of standard thing,

00:46:05.480 --> 00:46:06.520
both inside Zapier,

00:46:06.520 --> 00:46:06.880
obviously,

00:46:06.880 --> 00:46:08.140
but also outside of Zapier.

00:46:08.140 --> 00:46:09.640
So when partners are like interacting,

00:46:09.640 --> 00:46:10.460
working with us,

00:46:10.460 --> 00:46:11.320
we also provide some.

00:46:11.320 --> 00:46:12.100
Yeah, interesting.

00:46:12.100 --> 00:46:13.640
So you talked earlier

00:46:13.640 --> 00:46:15.180
about this asynchronous message

00:46:15.180 --> 00:46:16.520
passing and queues

00:46:16.520 --> 00:46:17.800
and whatnot and celery.

00:46:17.800 --> 00:46:19.140
And that's really important

00:46:19.140 --> 00:46:20.580
for scalability.

00:46:20.580 --> 00:46:21.820
But another huge,

00:46:21.820 --> 00:46:23.260
huge scalability booster

00:46:23.260 --> 00:46:24.500
is some sort of

00:46:24.500 --> 00:46:27.140
asynchronous web handling,

00:46:27.140 --> 00:46:27.460
right?

00:46:27.520 --> 00:46:29.200
like G event or async and await,

00:46:29.200 --> 00:46:30.140
asyncio,

00:46:30.140 --> 00:46:31.140
all those kinds of things.

00:46:31.140 --> 00:46:32.340
Does that show up anywhere?

00:46:32.340 --> 00:46:34.360
We have experimented a bit with it.

00:46:34.360 --> 00:46:36.600
This is like one of those classic,

00:46:36.600 --> 00:46:38.500
like you try it out

00:46:38.500 --> 00:46:39.460
and then you run the numbers

00:46:39.460 --> 00:46:40.720
and see how it like,

00:46:40.720 --> 00:46:41.320
how it like,

00:46:41.320 --> 00:46:42.120
how much does it save you?

00:46:42.120 --> 00:46:43.280
How much headache does it add?

00:46:43.280 --> 00:46:44.960
How much more complex is it, right?

00:46:44.960 --> 00:46:45.700
Yeah, exactly.

00:46:45.700 --> 00:46:47.300
And we tried this maybe,

00:46:47.300 --> 00:46:49.040
I'm going to say two years ago

00:46:49.040 --> 00:46:50.140
with G event.

00:46:50.140 --> 00:46:52.060
It was right on the line,

00:46:52.060 --> 00:46:53.440
but probably at that time,

00:46:53.440 --> 00:46:55.440
it just wasn't a good enough

00:46:55.440 --> 00:46:56.520
move for us to like

00:46:56.520 --> 00:46:57.820
transition over to it.

00:46:57.820 --> 00:46:59.160
So we actually abandoned

00:46:59.160 --> 00:46:59.920
using G event

00:46:59.920 --> 00:47:00.940
and we're still using

00:47:00.940 --> 00:47:02.020
like pretty like

00:47:02.020 --> 00:47:02.780
straightforward,

00:47:02.780 --> 00:47:04.240
synchronous like Python,

00:47:04.240 --> 00:47:05.600
which is right now

00:47:05.600 --> 00:47:06.660
we're still transitioning

00:47:06.660 --> 00:47:08.420
to Python 3 at the moment,

00:47:08.420 --> 00:47:10.120
making good headway on it.

00:47:10.120 --> 00:47:12.360
But a lot of the,

00:47:12.360 --> 00:47:12.680
you know,

00:47:12.680 --> 00:47:13.800
asyncio you mentioned,

00:47:13.800 --> 00:47:14.860
like a lot of that

00:47:14.860 --> 00:47:16.240
adds tons of complexity

00:47:16.240 --> 00:47:17.060
to your code.

00:47:17.060 --> 00:47:18.420
G event does the same thing.

00:47:18.420 --> 00:47:19.240
There's all these like

00:47:19.240 --> 00:47:19.980
little extra things

00:47:19.980 --> 00:47:20.660
you got to remember.

00:47:20.660 --> 00:47:21.660
And Python,

00:47:21.660 --> 00:47:22.160
I think,

00:47:22.160 --> 00:47:23.360
hands you a gun

00:47:23.360 --> 00:47:24.180
that's very loaded

00:47:24.180 --> 00:47:25.280
when it comes to like

00:47:25.280 --> 00:47:26.000
async stuff.

00:47:26.460 --> 00:47:27.960
So it is a little bit tricky

00:47:27.960 --> 00:47:29.280
and that's not to say

00:47:29.280 --> 00:47:29.800
there's,

00:47:29.800 --> 00:47:30.220
I mean,

00:47:30.220 --> 00:47:30.980
there are other languages

00:47:30.980 --> 00:47:32.520
that do a really nice job

00:47:32.520 --> 00:47:33.100
with async,

00:47:33.100 --> 00:47:34.100
but even like something

00:47:34.100 --> 00:47:35.180
like JavaScript,

00:47:35.180 --> 00:47:35.960
I think still,

00:47:35.960 --> 00:47:37.360
you get a loaded gun,

00:47:37.360 --> 00:47:37.680
right?

00:47:37.680 --> 00:47:38.620
So it just adds

00:47:38.620 --> 00:47:39.620
this layer of complexity

00:47:39.620 --> 00:47:40.940
that I don't think

00:47:40.940 --> 00:47:41.760
was worth it for us

00:47:41.760 --> 00:47:42.440
at the time.

00:47:42.440 --> 00:47:43.580
I think there's some cool

00:47:43.580 --> 00:47:44.360
things we can probably do

00:47:44.360 --> 00:47:44.900
in 2019

00:47:44.900 --> 00:47:46.080
to get back to that

00:47:46.080 --> 00:47:46.980
and that's through

00:47:46.980 --> 00:47:49.400
moving more services

00:47:49.400 --> 00:47:50.980
behind like an IO boundary,

00:47:50.980 --> 00:47:52.740
just a regular HTTP boundary.

00:47:52.940 --> 00:47:54.060
so less thing is happening

00:47:54.060 --> 00:47:55.620
like in the process itself

00:47:55.620 --> 00:47:57.020
and is sitting across

00:47:57.020 --> 00:47:58.320
a very easily

00:47:58.320 --> 00:47:59.660
async boundary

00:47:59.660 --> 00:48:00.500
where you're talking

00:48:00.500 --> 00:48:01.180
over a socket

00:48:01.180 --> 00:48:01.660
or something.

00:48:01.660 --> 00:48:02.700
I think if we start

00:48:02.700 --> 00:48:03.820
to move more workloads

00:48:03.820 --> 00:48:04.440
over there

00:48:04.440 --> 00:48:05.160
and we have like

00:48:05.160 --> 00:48:06.640
kind of this clean interface,

00:48:06.640 --> 00:48:08.040
the Geovent equation

00:48:08.040 --> 00:48:09.220
will quickly tip

00:48:09.220 --> 00:48:10.080
in the other direction.

00:48:10.340 --> 00:48:11.260
so I'm excited

00:48:11.260 --> 00:48:12.460
to maybe look at that again

00:48:12.460 --> 00:48:13.340
in 2019.

00:48:13.340 --> 00:48:13.860
But yeah,

00:48:13.860 --> 00:48:14.520
we gave it a good,

00:48:14.520 --> 00:48:16.140
we gave it the old college try

00:48:16.140 --> 00:48:17.980
and it was a bit of a bear

00:48:17.980 --> 00:48:19.320
and it was about a wash

00:48:19.320 --> 00:48:21.080
and maybe it would have saved us,

00:48:21.080 --> 00:48:21.400
you know,

00:48:21.400 --> 00:48:23.100
10 or 15%

00:48:23.100 --> 00:48:24.480
on our infrastructure costs

00:48:24.480 --> 00:48:25.180
because you still had

00:48:25.180 --> 00:48:25.960
tons of locking

00:48:25.960 --> 00:48:27.780
and database connection stuff

00:48:27.780 --> 00:48:28.620
that you had to deal with

00:48:28.620 --> 00:48:29.800
that was still kind of

00:48:29.800 --> 00:48:31.020
put like some limits

00:48:31.020 --> 00:48:31.760
on what you could do.

00:48:31.760 --> 00:48:32.700
But I'm excited

00:48:32.700 --> 00:48:34.200
to play with it in 2019

00:48:34.200 --> 00:48:34.800
because I think

00:48:34.800 --> 00:48:35.220
we could probably

00:48:35.220 --> 00:48:36.220
drive our costs down

00:48:36.220 --> 00:48:38.320
by if we do it really well

00:48:38.320 --> 00:48:39.820
by 30 or 40%.

00:48:39.820 --> 00:48:40.940
And now that's starting

00:48:40.940 --> 00:48:42.280
to be appreciable amounts

00:48:42.280 --> 00:48:42.620
of money.

00:48:42.620 --> 00:48:43.180
Like before,

00:48:43.180 --> 00:48:44.640
that was not that much.

00:48:44.640 --> 00:48:45.900
So now I think

00:48:45.900 --> 00:48:46.340
it would probably

00:48:46.340 --> 00:48:47.360
be getting closer

00:48:47.360 --> 00:48:47.980
to worth it.

00:48:47.980 --> 00:48:49.780
It's that complexity trade-off

00:48:49.780 --> 00:48:50.620
and at some point

00:48:50.620 --> 00:48:52.440
when it's $50,000 a month,

00:48:52.440 --> 00:48:52.720
you're like,

00:48:52.720 --> 00:48:53.060
you know what?

00:48:53.060 --> 00:48:54.460
We're going to just

00:48:54.460 --> 00:48:55.060
bite the bullet

00:48:55.060 --> 00:48:56.420
and solve this complexity problem

00:48:56.420 --> 00:48:57.380
and, you know,

00:48:57.380 --> 00:48:58.620
give everyone a raise

00:48:58.620 --> 00:48:59.380
or whatever, right?

00:48:59.380 --> 00:49:00.200
Yeah.

00:49:00.200 --> 00:49:01.400
In those cases, yeah.

00:49:01.400 --> 00:49:01.620
High-world people.

00:49:01.620 --> 00:49:02.500
Yeah, yeah.

00:49:02.500 --> 00:49:03.380
And that's, I mean,

00:49:03.380 --> 00:49:03.880
you know,

00:49:03.880 --> 00:49:04.420
you mentioned that

00:49:04.420 --> 00:49:06.040
we also do like profit sharing.

00:49:06.040 --> 00:49:06.940
So there's like

00:49:06.940 --> 00:49:08.000
there's like a lot of incentive

00:49:08.000 --> 00:49:09.280
to do some of these

00:49:09.280 --> 00:49:10.600
like cool cost-saving things.

00:49:10.600 --> 00:49:11.880
But when you're measuring,

00:49:11.880 --> 00:49:12.320
you know,

00:49:12.320 --> 00:49:13.340
and this is getting away

00:49:13.340 --> 00:49:14.440
from maybe the Python side,

00:49:14.440 --> 00:49:15.200
but you're getting into

00:49:15.200 --> 00:49:16.020
like the business side

00:49:16.020 --> 00:49:16.300
of like,

00:49:16.300 --> 00:49:17.160
well, we could get a,

00:49:17.160 --> 00:49:18.440
we could trade a dollar

00:49:18.440 --> 00:49:19.380
of cost savings

00:49:19.380 --> 00:49:20.600
for $2 of revenue.

00:49:20.600 --> 00:49:22.040
Like, you know,

00:49:22.040 --> 00:49:23.340
do you go for the revenue?

00:49:23.340 --> 00:49:24.220
Because it opens up

00:49:24.220 --> 00:49:25.180
more opportunities

00:49:25.180 --> 00:49:26.280
later on,

00:49:26.280 --> 00:49:27.540
serving more customers.

00:49:27.540 --> 00:49:28.820
So you're always,

00:49:28.820 --> 00:49:29.020
I'd go for the revenue.

00:49:29.020 --> 00:49:30.160
Yeah, we're always like,

00:49:30.160 --> 00:49:30.840
I'd go for the revenue, man.

00:49:30.940 --> 00:49:32.100
Yeah, we're the same way.

00:49:32.100 --> 00:49:32.980
Like we've been,

00:49:32.980 --> 00:49:33.340
you know,

00:49:33.340 --> 00:49:33.900
really fortunate

00:49:33.900 --> 00:49:35.620
that the product itself

00:49:35.620 --> 00:49:36.260
really connects

00:49:36.260 --> 00:49:37.160
with all these users.

00:49:37.160 --> 00:49:38.200
So for us,

00:49:38.200 --> 00:49:39.420
like expanding that

00:49:39.420 --> 00:49:39.820
is really,

00:49:39.820 --> 00:49:40.540
really interesting.

00:49:40.540 --> 00:49:41.180
Right.

00:49:41.180 --> 00:49:41.960
Well, that's a whole,

00:49:41.960 --> 00:49:42.880
that's actually basically

00:49:42.880 --> 00:49:43.780
a good,

00:49:43.780 --> 00:49:45.100
it has analogies to like,

00:49:45.100 --> 00:49:45.960
why do you even choose

00:49:45.960 --> 00:49:47.040
Python at all, right?

00:49:47.040 --> 00:49:48.100
Like you could write this

00:49:48.100 --> 00:49:48.680
in C++,

00:49:48.680 --> 00:49:50.740
mostly with wrapping it

00:49:50.740 --> 00:49:51.560
in Java or something,

00:49:51.560 --> 00:49:53.420
and you could save money

00:49:53.420 --> 00:49:54.700
on infrastructure, right?

00:49:54.700 --> 00:49:55.400
But the rate

00:49:55.400 --> 00:49:56.580
at which you generate features

00:49:56.580 --> 00:49:58.180
and you make users delighted

00:49:58.180 --> 00:49:59.340
would be slower.

00:49:59.340 --> 00:50:00.940
And, you know,

00:50:00.940 --> 00:50:02.380
it's like people say

00:50:02.380 --> 00:50:03.680
Python is slow

00:50:03.680 --> 00:50:04.840
and you guys are doing

00:50:04.840 --> 00:50:05.460
incredible stuff.

00:50:05.460 --> 00:50:06.300
I don't actually think

00:50:06.300 --> 00:50:06.680
that's true.

00:50:06.680 --> 00:50:07.380
I think it's really,

00:50:07.380 --> 00:50:08.080
I think it's like,

00:50:08.080 --> 00:50:08.780
it's complicated.

00:50:08.780 --> 00:50:09.900
It's more like the right answer.

00:50:09.900 --> 00:50:11.500
But at the same time,

00:50:11.500 --> 00:50:11.820
it's,

00:50:11.820 --> 00:50:13.780
that does not say,

00:50:13.780 --> 00:50:14.300
talk about,

00:50:14.300 --> 00:50:16.060
well, Python is fast

00:50:16.060 --> 00:50:17.400
for features, right?

00:50:17.400 --> 00:50:18.180
Which is pretty awesome.

00:50:18.180 --> 00:50:19.000
That is pretty awesome.

00:50:19.000 --> 00:50:20.360
And you're looking at

00:50:20.360 --> 00:50:22.200
companies that are

00:50:22.200 --> 00:50:23.000
generally selling

00:50:23.000 --> 00:50:24.760
like a digital good.

00:50:24.760 --> 00:50:25.960
The margins are really good.

00:50:26.040 --> 00:50:27.060
So you have that headroom.

00:50:27.060 --> 00:50:27.860
Like you're not getting

00:50:27.860 --> 00:50:29.240
squeezed down to

00:50:29.240 --> 00:50:31.180
exactly some super tight thing

00:50:31.180 --> 00:50:31.600
where you're like,

00:50:31.600 --> 00:50:32.800
oh, we have to rewrite this

00:50:32.800 --> 00:50:33.120
and see,

00:50:33.120 --> 00:50:34.240
we have to like really

00:50:34.240 --> 00:50:35.220
go super low level

00:50:35.220 --> 00:50:35.680
and get that,

00:50:35.680 --> 00:50:37.000
eat that performance out.

00:50:37.000 --> 00:50:37.320
Right.

00:50:37.320 --> 00:50:38.400
You're not General Motors

00:50:38.400 --> 00:50:40.420
at 6% margin, right?

00:50:40.420 --> 00:50:41.040
Yeah.

00:50:41.040 --> 00:50:41.440
You're,

00:50:41.440 --> 00:50:42.040
you're doing,

00:50:42.040 --> 00:50:42.680
you got more room

00:50:42.680 --> 00:50:43.400
to play with, right?

00:50:43.400 --> 00:50:44.600
That equation may change.

00:50:44.600 --> 00:50:46.040
Let's say you're the,

00:50:46.040 --> 00:50:47.040
I'm going to say

00:50:47.040 --> 00:50:48.100
some of these like

00:50:48.100 --> 00:50:49.620
security cam software

00:50:49.620 --> 00:50:50.920
that exists out there, right?

00:50:50.920 --> 00:50:51.700
Maybe you do like

00:50:51.700 --> 00:50:53.120
this cool little hardware.

00:50:53.120 --> 00:50:53.680
Like we get,

00:50:53.680 --> 00:50:54.500
we sell the hardware

00:50:54.500 --> 00:50:55.360
and we give away like

00:50:55.360 --> 00:50:56.380
the free tier

00:50:56.380 --> 00:50:57.340
and you have like

00:50:57.340 --> 00:50:58.880
a more complex business model.

00:50:58.880 --> 00:51:00.300
And now you may care

00:51:00.300 --> 00:51:01.880
a lot about those margins

00:51:01.880 --> 00:51:03.140
and Python may not work for you.

00:51:03.140 --> 00:51:03.600
And in that case,

00:51:03.600 --> 00:51:04.940
yeah, it's too slow, right?

00:51:04.940 --> 00:51:05.740
Right, right, right.

00:51:05.740 --> 00:51:07.300
It's very context specific.

00:51:07.300 --> 00:51:07.840
For us,

00:51:07.840 --> 00:51:08.720
it's not too slow

00:51:08.720 --> 00:51:09.740
because the value

00:51:09.740 --> 00:51:10.860
we can create with it

00:51:10.860 --> 00:51:11.340
is, you know,

00:51:11.340 --> 00:51:12.220
orders of magnitude

00:51:12.220 --> 00:51:13.920
higher than the effort

00:51:13.920 --> 00:51:14.840
that goes into it.

00:51:14.840 --> 00:51:16.160
And that changes

00:51:16.160 --> 00:51:17.980
depending on the business

00:51:17.980 --> 00:51:18.740
and the margins

00:51:18.740 --> 00:51:19.620
and the context.

00:51:20.080 --> 00:51:20.520
for us,

00:51:20.520 --> 00:51:21.500
it's been awesome

00:51:21.500 --> 00:51:22.360
and it's been really,

00:51:22.360 --> 00:51:22.980
really fun.

00:51:22.980 --> 00:51:23.740
But that's not to say

00:51:23.740 --> 00:51:24.640
that there's maybe

00:51:24.640 --> 00:51:25.700
not cool opportunities

00:51:25.700 --> 00:51:26.200
to use.

00:51:26.200 --> 00:51:27.140
Maybe see,

00:51:27.140 --> 00:51:28.400
or maybe for us

00:51:28.400 --> 00:51:29.060
might be like more

00:51:29.060 --> 00:51:30.060
like Golang stuff.

00:51:30.060 --> 00:51:30.720
And if you choose

00:51:30.720 --> 00:51:31.560
to rewrite some

00:51:31.560 --> 00:51:32.620
kind of like core

00:51:32.620 --> 00:51:33.760
tier zero services

00:51:33.760 --> 00:51:34.440
in that

00:51:34.440 --> 00:51:35.340
to eke out a bit

00:51:35.340 --> 00:51:36.000
more performance,

00:51:36.000 --> 00:51:37.380
but still use Python

00:51:37.380 --> 00:51:38.200
for a lot of the

00:51:38.200 --> 00:51:39.020
product facing

00:51:39.020 --> 00:51:40.400
and things that you're

00:51:40.400 --> 00:51:40.860
going to be touching

00:51:40.860 --> 00:51:41.880
on a day-to-day basis

00:51:41.880 --> 00:51:43.340
and iterating for users,

00:51:43.340 --> 00:51:44.600
it's not one and a

00:51:44.600 --> 00:51:45.540
done kind of a thing

00:51:45.540 --> 00:51:46.280
either these days.

00:51:46.280 --> 00:51:46.780
Yeah, yeah.

00:51:47.060 --> 00:51:48.080
Well, one of the things

00:51:48.080 --> 00:51:49.720
that seems like

00:51:49.720 --> 00:51:51.040
there's probably a place

00:51:51.040 --> 00:51:52.240
somewhere for this to fit,

00:51:52.240 --> 00:51:53.160
but it might cross

00:51:53.160 --> 00:51:54.780
the complexity threshold

00:51:54.780 --> 00:51:55.840
on the other direction

00:51:55.840 --> 00:51:57.000
and make it not worthwhile.

00:51:57.000 --> 00:51:58.020
But, you know,

00:51:58.020 --> 00:51:59.000
like with Cython,

00:51:59.000 --> 00:52:00.340
you could take

00:52:00.340 --> 00:52:01.140
the little bits

00:52:01.140 --> 00:52:02.200
that are slow,

00:52:02.200 --> 00:52:03.440
write that in Cython

00:52:03.440 --> 00:52:04.120
and then use

00:52:04.120 --> 00:52:04.900
the no gill

00:52:04.900 --> 00:52:06.900
block in Cython

00:52:06.900 --> 00:52:08.220
and achieve a ton

00:52:08.220 --> 00:52:08.940
of concurrency

00:52:08.940 --> 00:52:11.240
and CPU speed

00:52:11.240 --> 00:52:12.220
with, you know,

00:52:12.220 --> 00:52:12.860
changing like

00:52:12.860 --> 00:52:13.800
20 lines of code

00:52:13.800 --> 00:52:14.200
potentially.

00:52:14.200 --> 00:52:15.140
Like, have you explored

00:52:15.140 --> 00:52:15.540
any of that?

00:52:15.540 --> 00:52:16.120
We have done

00:52:16.120 --> 00:52:16.720
a little bit of that,

00:52:16.800 --> 00:52:17.380
especially in some

00:52:17.380 --> 00:52:18.020
of our like

00:52:18.020 --> 00:52:19.280
ancillary services.

00:52:19.280 --> 00:52:20.400
A good example is

00:52:20.400 --> 00:52:22.640
we have a email parser

00:52:22.640 --> 00:52:23.280
which kind of lets you

00:52:23.280 --> 00:52:24.080
tag emails

00:52:24.080 --> 00:52:24.540
and then we'll try

00:52:24.540 --> 00:52:25.860
to extract pieces of that.

00:52:25.860 --> 00:52:27.460
And we've done

00:52:27.460 --> 00:52:28.360
quite a bit of stuff

00:52:28.360 --> 00:52:29.040
where we've tried

00:52:29.040 --> 00:52:30.340
to optimize that engine,

00:52:30.340 --> 00:52:31.120
but like it's just

00:52:31.120 --> 00:52:31.680
pure Python.

00:52:31.680 --> 00:52:32.660
It's just doing

00:52:32.660 --> 00:52:33.540
a bunch of like

00:52:33.540 --> 00:52:34.480
string slicing

00:52:34.480 --> 00:52:35.780
and comparison stuff

00:52:35.780 --> 00:52:36.860
and you can wrap

00:52:36.860 --> 00:52:37.680
that up in Cython.

00:52:37.680 --> 00:52:38.660
Cython was a thing

00:52:38.660 --> 00:52:39.960
that we actually used.

00:52:39.960 --> 00:52:40.840
We ended up

00:52:40.840 --> 00:52:41.760
rewriting a little bit

00:52:41.760 --> 00:52:42.040
of it,

00:52:42.040 --> 00:52:42.900
like some of the core

00:52:42.900 --> 00:52:43.980
pieces in C++

00:52:43.980 --> 00:52:45.360
to speed it up.

00:52:45.360 --> 00:52:45.800
But again,

00:52:46.120 --> 00:52:47.100
a very kind of niche,

00:52:47.100 --> 00:52:48.560
very specific use case

00:52:48.560 --> 00:52:49.420
which is really

00:52:49.420 --> 00:52:50.720
how you should be

00:52:50.720 --> 00:52:51.700
thinking about performance

00:52:51.700 --> 00:52:53.240
is you should make it work

00:52:53.240 --> 00:52:54.800
and then if you need to,

00:52:54.800 --> 00:52:55.240
right,

00:52:55.240 --> 00:52:56.120
make it fast

00:52:56.120 --> 00:52:57.200
and use the tools

00:52:57.200 --> 00:52:57.900
at your disposal

00:52:57.900 --> 00:52:59.320
and Cython was one of those.

00:52:59.320 --> 00:53:00.600
And we had pretty good

00:53:00.600 --> 00:53:01.160
success with it.

00:53:01.160 --> 00:53:01.660
So I do think

00:53:01.660 --> 00:53:03.020
it's a realistic option.

00:53:03.180 --> 00:53:04.280
Yeah, I've seen some really good

00:53:04.280 --> 00:53:05.380
outcomes from that as well

00:53:05.380 --> 00:53:05.900
and I think it's

00:53:05.900 --> 00:53:06.700
pretty interesting, right?

00:53:06.700 --> 00:53:08.080
It's like when you look

00:53:08.080 --> 00:53:09.560
at a huge code base,

00:53:09.560 --> 00:53:10.880
there's usually a couple

00:53:10.880 --> 00:53:12.140
of spots that if you could

00:53:12.140 --> 00:53:13.840
unlock the performance

00:53:13.840 --> 00:53:15.220
on just those little bits,

00:53:15.220 --> 00:53:16.280
actually that's where

00:53:16.280 --> 00:53:17.280
most of the problem is, right?

00:53:17.280 --> 00:53:17.840
That's where most

00:53:17.840 --> 00:53:18.940
of the latency is.

00:53:18.940 --> 00:53:19.900
Yep, 100%.

00:53:19.900 --> 00:53:20.920
And there's some

00:53:20.920 --> 00:53:22.660
really cool posts out there.

00:53:22.660 --> 00:53:23.320
I think Instagram

00:53:23.320 --> 00:53:24.440
engineering did some

00:53:24.440 --> 00:53:25.140
where they would use

00:53:25.140 --> 00:53:25.980
like the C profile

00:53:25.980 --> 00:53:27.020
module

00:53:27.020 --> 00:53:28.020
and then measure

00:53:28.020 --> 00:53:28.980
CPU ticks

00:53:28.980 --> 00:53:29.820
for like all the

00:53:29.820 --> 00:53:30.840
different stuff that they did

00:53:30.840 --> 00:53:31.920
so they could really get

00:53:31.920 --> 00:53:33.000
like instead of like

00:53:33.000 --> 00:53:34.060
wall clock time

00:53:34.060 --> 00:53:35.140
which can be like,

00:53:35.140 --> 00:53:36.720
oh, we blocked on this,

00:53:36.720 --> 00:53:37.620
we waited on this

00:53:37.620 --> 00:53:38.540
and you get a different

00:53:38.540 --> 00:53:39.780
like look at the code.

00:53:39.780 --> 00:53:40.540
You can do some

00:53:40.540 --> 00:53:41.420
really cool stuff

00:53:41.420 --> 00:53:42.240
with Python that

00:53:42.240 --> 00:53:43.440
I don't know if a lot

00:53:43.440 --> 00:53:44.640
of folks are like aware

00:53:44.640 --> 00:53:45.660
of like the just

00:53:45.660 --> 00:53:47.040
the level that you can go

00:53:47.040 --> 00:53:48.140
just like straight Python

00:53:48.140 --> 00:53:49.420
and get like really,

00:53:49.420 --> 00:53:50.580
really high performance stuff.

00:53:50.580 --> 00:53:51.600
There's a lot of cool

00:53:51.600 --> 00:53:52.780
tricks in headroom

00:53:52.780 --> 00:53:53.940
and the language itself.

00:53:53.940 --> 00:53:55.100
So I think we got

00:53:55.100 --> 00:53:56.020
a lot of headroom

00:53:56.020 --> 00:53:56.920
when it comes to like

00:53:56.920 --> 00:53:58.280
Python and Zapier.

00:53:58.280 --> 00:53:59.960
We're definitely doubling down

00:53:59.960 --> 00:54:00.920
on using Python

00:54:00.920 --> 00:54:02.780
in 2019 and beyond.

00:54:02.780 --> 00:54:03.540
And the conversion

00:54:03.540 --> 00:54:04.560
from legacy Python

00:54:04.560 --> 00:54:05.600
to modern Python

00:54:05.600 --> 00:54:06.540
is it's underway?

00:54:06.540 --> 00:54:07.300
Yeah, it's underway.

00:54:07.300 --> 00:54:08.100
Yeah, we've got

00:54:08.100 --> 00:54:09.320
we're running all of our

00:54:09.320 --> 00:54:10.140
like test,

00:54:10.140 --> 00:54:11.280
all of our tests run

00:54:11.280 --> 00:54:12.160
in both Python 2

00:54:12.160 --> 00:54:12.960
and Python 3

00:54:12.960 --> 00:54:13.820
and have been

00:54:13.820 --> 00:54:14.500
for a little while.

00:54:14.500 --> 00:54:15.640
So really what we got

00:54:15.640 --> 00:54:16.300
to figure out now

00:54:16.300 --> 00:54:17.740
is just make

00:54:17.740 --> 00:54:18.940
make that transition

00:54:18.940 --> 00:54:20.080
in like production

00:54:20.080 --> 00:54:20.780
and make sure

00:54:20.780 --> 00:54:21.520
that we don't break

00:54:21.520 --> 00:54:22.820
any like caches

00:54:22.820 --> 00:54:23.640
or behaviors

00:54:23.640 --> 00:54:24.480
or things like that.

00:54:24.480 --> 00:54:25.420
So figure out a good way

00:54:25.420 --> 00:54:26.400
to try doing some

00:54:26.400 --> 00:54:27.000
canaries

00:54:27.000 --> 00:54:27.880
and all this stuff.

00:54:27.880 --> 00:54:28.420
That's like kind of

00:54:28.420 --> 00:54:29.180
the next step for us.

00:54:29.180 --> 00:54:30.220
Like we're right there.

00:54:30.220 --> 00:54:30.660
That's exciting.

00:54:30.660 --> 00:54:32.240
You're on the cusp of it.

00:54:32.240 --> 00:54:32.420
Yeah.

00:54:32.420 --> 00:54:32.700
Yep.

00:54:32.700 --> 00:54:33.000
Yep.

00:54:33.000 --> 00:54:33.600
I suspect

00:54:33.600 --> 00:54:35.120
in the next couple months

00:54:35.120 --> 00:54:35.960
we'll probably be running

00:54:35.960 --> 00:54:37.400
Python 3 in production.

00:54:37.400 --> 00:54:38.180
So pretty exciting.

00:54:38.180 --> 00:54:38.460
Sweet.

00:54:38.460 --> 00:54:39.020
Yeah.

00:54:39.020 --> 00:54:40.160
the one place I've heard

00:54:40.160 --> 00:54:41.380
really scary stuff in

00:54:41.380 --> 00:54:42.800
is around caching

00:54:42.800 --> 00:54:44.560
and pickles, right?

00:54:44.560 --> 00:54:45.400
People take objects

00:54:45.400 --> 00:54:46.420
and they just pickle them up

00:54:46.420 --> 00:54:47.120
and cache them

00:54:47.120 --> 00:54:48.140
rather than doing

00:54:48.140 --> 00:54:49.440
like a JSON 2

00:54:49.440 --> 00:54:50.240
from sort of

00:54:50.240 --> 00:54:50.920
intermediate thing

00:54:50.920 --> 00:54:51.540
and then boom

00:54:51.540 --> 00:54:52.160
like, you know,

00:54:52.160 --> 00:54:53.360
a different CPython

00:54:53.360 --> 00:54:53.820
grabs it.

00:54:53.820 --> 00:54:54.340
It looks different.

00:54:54.340 --> 00:54:54.960
Yep.

00:54:54.960 --> 00:54:55.780
That can cause

00:54:55.780 --> 00:54:56.400
a lot of trouble.

00:54:56.400 --> 00:54:57.360
All sorts of badness

00:54:57.360 --> 00:54:57.760
breaks out.

00:54:57.760 --> 00:54:58.740
We try to avoid pickle

00:54:58.740 --> 00:54:59.600
as much as we can

00:54:59.600 --> 00:55:00.540
but for some stuff

00:55:00.540 --> 00:55:01.300
like the convenience

00:55:01.300 --> 00:55:02.560
is just so nice

00:55:02.560 --> 00:55:04.240
like just throw anything in,

00:55:04.240 --> 00:55:04.460
right?

00:55:04.560 --> 00:55:06.420
So we try to avoid

00:55:06.420 --> 00:55:07.580
and we try to do

00:55:07.580 --> 00:55:08.840
JSON serialization

00:55:08.840 --> 00:55:09.720
as much as possible

00:55:09.720 --> 00:55:10.160
but yeah,

00:55:10.160 --> 00:55:11.400
that is a tricky thing

00:55:11.400 --> 00:55:12.900
around deploying

00:55:12.900 --> 00:55:15.020
between two and three

00:55:15.020 --> 00:55:16.000
and testing them

00:55:16.000 --> 00:55:17.180
and it just makes it

00:55:17.180 --> 00:55:18.900
really operationally complex.

00:55:18.900 --> 00:55:20.160
So that's something

00:55:20.160 --> 00:55:20.680
that, you know,

00:55:20.680 --> 00:55:21.440
I think is sometimes

00:55:21.440 --> 00:55:22.160
overlooked whenever

00:55:22.160 --> 00:55:22.980
people think about

00:55:22.980 --> 00:55:24.240
transitioning their code base

00:55:24.240 --> 00:55:24.780
to Python.

00:55:24.780 --> 00:55:25.300
Right, right.

00:55:25.300 --> 00:55:26.160
You got to be careful there.

00:55:26.160 --> 00:55:27.080
That's cool.

00:55:27.080 --> 00:55:27.720
All right.

00:55:27.720 --> 00:55:29.320
Well, this has been

00:55:29.320 --> 00:55:30.400
such a super interesting

00:55:30.400 --> 00:55:31.220
look inside.

00:55:31.220 --> 00:55:31.640
Let's have to hear

00:55:31.640 --> 00:55:32.300
what you guys are doing

00:55:32.300 --> 00:55:33.400
and they're really

00:55:33.400 --> 00:55:34.460
neat use case.

00:55:35.120 --> 00:55:35.700
There's a couple

00:55:35.700 --> 00:55:36.080
other questions

00:55:36.080 --> 00:55:36.560
I'm going to ask you

00:55:36.560 --> 00:55:37.340
before I let you go though.

00:55:37.340 --> 00:55:37.640
Sure.

00:55:37.640 --> 00:55:38.380
Even though we're running

00:55:38.380 --> 00:55:39.160
a little low on time.

00:55:39.160 --> 00:55:39.640
First of all,

00:55:39.640 --> 00:55:40.300
like what's it like

00:55:40.300 --> 00:55:41.640
being the CTO of,

00:55:41.640 --> 00:55:41.960
you know,

00:55:41.960 --> 00:55:43.300
a big tech company

00:55:43.300 --> 00:55:43.740
like this?

00:55:43.740 --> 00:55:44.740
There must be a lot

00:55:44.740 --> 00:55:45.840
of plate spinning,

00:55:45.840 --> 00:55:46.560
a lot of things to do

00:55:46.560 --> 00:55:47.280
but I bet it's fun.

00:55:47.280 --> 00:55:48.340
Yeah, it's really fun

00:55:48.340 --> 00:55:49.220
and you know,

00:55:49.220 --> 00:55:50.820
the role has kind of changed

00:55:50.820 --> 00:55:52.560
and I feel like one thing,

00:55:52.560 --> 00:55:53.760
the journey that I went on

00:55:53.760 --> 00:55:55.020
from early CTO

00:55:55.020 --> 00:55:56.480
all the way to now

00:55:56.480 --> 00:55:57.400
which was doing,

00:55:57.400 --> 00:55:58.600
wearing a lot of the hats

00:55:58.600 --> 00:56:00.240
is probably a really common one

00:56:00.240 --> 00:56:00.760
but it's different

00:56:00.760 --> 00:56:02.040
for a lot of folks.

00:56:02.040 --> 00:56:03.640
Like I talk to a lot of CTOs

00:56:03.640 --> 00:56:04.380
to try to figure out

00:56:04.380 --> 00:56:05.860
like what is a CTO

00:56:05.860 --> 00:56:06.860
in like a tech company?

00:56:06.860 --> 00:56:07.760
I talked to maybe

00:56:07.760 --> 00:56:08.780
a dozen different people

00:56:08.780 --> 00:56:09.460
and I got a dozen

00:56:09.460 --> 00:56:10.200
different answers

00:56:10.200 --> 00:56:11.180
so it's really like

00:56:11.180 --> 00:56:12.920
a very personal journey

00:56:12.920 --> 00:56:13.580
and like what does

00:56:13.580 --> 00:56:14.240
a company need

00:56:14.240 --> 00:56:14.920
sort of a thing

00:56:14.920 --> 00:56:15.980
so for me,

00:56:15.980 --> 00:56:16.740
it's been definitely

00:56:16.740 --> 00:56:17.780
a part of like discovery

00:56:17.780 --> 00:56:18.580
as well

00:56:18.580 --> 00:56:20.260
but also for me,

00:56:20.260 --> 00:56:21.120
it always comes back

00:56:21.120 --> 00:56:22.200
to what does a product do?

00:56:22.200 --> 00:56:22.880
Like I really,

00:56:22.880 --> 00:56:24.000
like the product resonates

00:56:24.000 --> 00:56:25.460
with me like as an engineer

00:56:25.460 --> 00:56:27.020
like giving people

00:56:27.020 --> 00:56:28.340
the power of engineers

00:56:28.340 --> 00:56:29.180
to do all this stuff

00:56:29.180 --> 00:56:30.080
even though they don't know

00:56:30.080 --> 00:56:30.820
they're kind of like

00:56:30.820 --> 00:56:31.740
building automations

00:56:31.740 --> 00:56:32.420
and the same things

00:56:32.420 --> 00:56:33.040
that we would do,

00:56:33.360 --> 00:56:34.160
you're still giving them

00:56:34.160 --> 00:56:34.640
that power

00:56:34.640 --> 00:56:35.540
and that's really exciting

00:56:35.540 --> 00:56:35.940
to me

00:56:35.940 --> 00:56:36.940
so I'm excited

00:56:36.940 --> 00:56:38.060
to spend a lot more time

00:56:38.060 --> 00:56:38.540
in that

00:56:38.540 --> 00:56:39.580
and then diving

00:56:39.580 --> 00:56:40.480
into the architecture

00:56:40.480 --> 00:56:41.840
and the scaling issues

00:56:41.840 --> 00:56:43.900
that a service like Zapier has

00:56:43.900 --> 00:56:44.360
is really,

00:56:44.360 --> 00:56:45.260
really exciting for me.

00:56:45.260 --> 00:56:45.780
So yeah,

00:56:45.780 --> 00:56:46.880
that's a fun part of software

00:56:46.880 --> 00:56:47.640
to think about, right?

00:56:47.640 --> 00:56:48.040
Yeah,

00:56:48.040 --> 00:56:48.500
you know,

00:56:48.500 --> 00:56:49.320
so being a CTO

00:56:49.320 --> 00:56:49.900
at a company

00:56:49.900 --> 00:56:50.700
like this

00:56:50.700 --> 00:56:51.640
is really exciting.

00:56:52.140 --> 00:56:53.060
I'm also just like

00:56:53.060 --> 00:56:54.180
really excited

00:56:54.180 --> 00:56:55.480
to be hiring like engineers

00:56:55.480 --> 00:56:56.640
that are like better than me

00:56:56.640 --> 00:56:57.840
when it comes to all this

00:56:57.840 --> 00:56:58.540
like deep,

00:56:58.540 --> 00:56:59.300
interesting stuff

00:56:59.300 --> 00:56:59.940
so we have like,

00:56:59.940 --> 00:57:00.800
we have some core

00:57:00.800 --> 00:57:01.920
like Django contributors

00:57:01.920 --> 00:57:03.080
and they're like amazing

00:57:03.080 --> 00:57:04.200
to like dive into

00:57:04.200 --> 00:57:05.480
and like learn about

00:57:05.480 --> 00:57:06.440
some of this stuff

00:57:06.440 --> 00:57:07.580
that we use every day

00:57:07.580 --> 00:57:08.420
and that's always

00:57:08.420 --> 00:57:09.220
really exciting

00:57:09.220 --> 00:57:10.360
so it's really humbling

00:57:10.360 --> 00:57:11.300
at the same time

00:57:11.300 --> 00:57:12.620
so it's just a really fun,

00:57:12.620 --> 00:57:13.600
I mean it's super fun,

00:57:13.600 --> 00:57:14.520
it's super fulfilling,

00:57:14.520 --> 00:57:15.580
we have a lot

00:57:15.580 --> 00:57:16.520
that we want to do

00:57:16.520 --> 00:57:18.260
so I feel like

00:57:18.260 --> 00:57:19.320
I gotta get back

00:57:19.320 --> 00:57:20.000
to work too.

00:57:20.000 --> 00:57:20.860
I'm sure.

00:57:20.860 --> 00:57:21.680
Alright,

00:57:21.680 --> 00:57:22.860
another one is

00:57:22.860 --> 00:57:24.320
just a couple real quick,

00:57:24.320 --> 00:57:25.080
what are your favorite

00:57:25.080 --> 00:57:25.620
automations?

00:57:25.620 --> 00:57:27.020
Some of my favorite ones

00:57:27.020 --> 00:57:27.840
they have a little

00:57:27.840 --> 00:57:29.320
Python sprinkled into them

00:57:29.320 --> 00:57:30.420
so those are some

00:57:30.420 --> 00:57:31.620
of my favorites

00:57:31.620 --> 00:57:32.460
especially whenever

00:57:32.460 --> 00:57:33.300
I want to do something

00:57:33.300 --> 00:57:33.840
that's kind of

00:57:33.840 --> 00:57:34.500
a little bit funky

00:57:34.500 --> 00:57:34.960
and weird

00:57:34.960 --> 00:57:35.580
and I don't want to

00:57:35.580 --> 00:57:37.400
deploy any extra code

00:57:37.400 --> 00:57:38.300
like I'll often

00:57:38.300 --> 00:57:38.840
like write like

00:57:38.840 --> 00:57:39.640
a Python step.

00:57:39.640 --> 00:57:40.900
A really specific one

00:57:40.900 --> 00:57:41.680
that I've done

00:57:41.680 --> 00:57:42.620
because I've been running

00:57:42.620 --> 00:57:43.360
a lot of like

00:57:43.360 --> 00:57:43.980
engineering

00:57:43.980 --> 00:57:44.920
like the meetings

00:57:44.920 --> 00:57:45.780
the all hand

00:57:45.780 --> 00:57:46.540
kinds of things

00:57:46.540 --> 00:57:47.220
and we try to like

00:57:47.220 --> 00:57:47.840
prep

00:57:47.840 --> 00:57:48.600
and have notes

00:57:48.600 --> 00:57:49.060
and kind of

00:57:49.060 --> 00:57:49.440
have a lot

00:57:49.440 --> 00:57:50.280
of the stuff ready

00:57:50.280 --> 00:57:51.660
is I have a schedule

00:57:51.660 --> 00:57:52.580
set up

00:57:52.580 --> 00:57:53.540
and I have a zap

00:57:53.540 --> 00:57:54.240
that triggers off

00:57:54.240 --> 00:57:54.800
of that event

00:57:54.800 --> 00:57:55.320
which is kind of

00:57:55.320 --> 00:57:56.200
a recurring event

00:57:56.200 --> 00:57:57.100
and it goes out

00:57:57.100 --> 00:57:57.960
and it grabs a template

00:57:57.960 --> 00:57:59.020
from Google Docs

00:57:59.020 --> 00:58:00.160
it copies a bunch

00:58:00.160 --> 00:58:01.140
of stuff into that

00:58:01.140 --> 00:58:02.420
into a new Google Doc

00:58:02.420 --> 00:58:03.420
includes a bunch

00:58:03.420 --> 00:58:03.880
of charts

00:58:03.880 --> 00:58:04.280
and a bunch

00:58:04.280 --> 00:58:04.900
of little things

00:58:04.900 --> 00:58:05.440
that we should

00:58:05.440 --> 00:58:06.260
be talking about

00:58:06.260 --> 00:58:07.140
and then goes

00:58:07.140 --> 00:58:08.000
into the Slack room

00:58:08.000 --> 00:58:08.680
and posts it

00:58:08.680 --> 00:58:09.520
and reminds people

00:58:09.520 --> 00:58:10.060
and I have it

00:58:10.060 --> 00:58:10.460
set it up

00:58:10.460 --> 00:58:11.080
with the delay

00:58:11.080 --> 00:58:11.900
so it even

00:58:11.900 --> 00:58:12.600
reminds people

00:58:12.600 --> 00:58:13.320
periodically

00:58:13.320 --> 00:58:14.020
like hey

00:58:14.020 --> 00:58:15.320
two days to go

00:58:15.320 --> 00:58:15.860
make sure you

00:58:15.860 --> 00:58:16.440
add your notes

00:58:16.440 --> 00:58:16.920
to this

00:58:16.920 --> 00:58:17.680
and like meeting

00:58:17.680 --> 00:58:18.300
is coming up

00:58:18.300 --> 00:58:18.820
in an hour

00:58:18.820 --> 00:58:19.980
so it's really

00:58:19.980 --> 00:58:20.560
really helpful

00:58:20.560 --> 00:58:21.240
because a lot

00:58:21.240 --> 00:58:21.760
of times

00:58:21.760 --> 00:58:22.520
many people

00:58:22.520 --> 00:58:23.100
are crazy busy

00:58:23.100 --> 00:58:23.540
obviously

00:58:23.540 --> 00:58:24.520
so I found

00:58:24.520 --> 00:58:25.120
myself going

00:58:25.120 --> 00:58:25.860
around reminding

00:58:25.860 --> 00:58:26.520
folks to get

00:58:26.520 --> 00:58:27.260
that stuff ready

00:58:27.260 --> 00:58:28.220
and this kind

00:58:28.220 --> 00:58:28.900
of just automates

00:58:28.900 --> 00:58:29.520
that away

00:58:29.520 --> 00:58:30.400
and does a lot

00:58:30.400 --> 00:58:30.900
of really cool

00:58:30.900 --> 00:58:31.300
stuff there

00:58:31.300 --> 00:58:32.220
so I have so

00:58:32.220 --> 00:58:32.900
many like zaps

00:58:32.900 --> 00:58:33.280
running

00:58:33.280 --> 00:58:33.860
we have so many

00:58:33.860 --> 00:58:34.740
bots running

00:58:34.740 --> 00:58:35.560
around in Zapier

00:58:35.560 --> 00:58:35.860
too

00:58:35.860 --> 00:58:36.720
like sometimes

00:58:36.720 --> 00:58:37.580
they'll bump

00:58:37.580 --> 00:58:38.340
into each other

00:58:38.340 --> 00:58:38.980
and do crazy

00:58:38.980 --> 00:58:39.540
things

00:58:39.540 --> 00:58:40.620
and it's really

00:58:40.620 --> 00:58:41.500
quite fun

00:58:41.500 --> 00:58:42.920
it's pretty exciting

00:58:42.920 --> 00:58:43.360
that's super

00:58:43.360 --> 00:58:43.600
awesome

00:58:43.600 --> 00:58:44.580
and it has

00:58:44.580 --> 00:58:45.340
this nice

00:58:45.340 --> 00:58:45.920
aspect

00:58:45.920 --> 00:58:46.960
where the

00:58:46.960 --> 00:58:47.500
thing doing

00:58:47.500 --> 00:58:47.980
the reminding

00:58:47.980 --> 00:58:48.720
is not a

00:58:48.720 --> 00:58:49.060
person

00:58:49.060 --> 00:58:49.760
so that person

00:58:49.760 --> 00:58:50.260
doesn't get

00:58:50.260 --> 00:58:50.640
a little bit

00:58:50.640 --> 00:58:51.100
like ah that

00:58:51.100 --> 00:58:51.560
person's a

00:58:51.560 --> 00:58:51.820
nagger

00:58:51.820 --> 00:58:52.220
right

00:58:52.220 --> 00:58:52.720
you don't have

00:58:52.720 --> 00:58:53.080
that aspect

00:58:53.080 --> 00:58:53.520
it's like well

00:58:53.520 --> 00:58:54.140
the bot did it

00:58:54.140 --> 00:58:54.880
like it's you know

00:58:54.880 --> 00:58:55.840
it does it every

00:58:55.840 --> 00:58:56.920
Thursday for our

00:58:56.920 --> 00:58:57.280
Friday meeting

00:58:57.280 --> 00:58:57.820
or whatever right

00:58:57.820 --> 00:58:58.340
yep and it's

00:58:58.340 --> 00:58:58.840
super handy

00:58:58.840 --> 00:58:59.620
and you can go

00:58:59.620 --> 00:59:00.040
in and you can

00:59:00.040 --> 00:59:00.520
adjust it

00:59:00.520 --> 00:59:01.160
so if someone's

00:59:01.160 --> 00:59:02.220
like oh that's

00:59:02.220 --> 00:59:03.360
the way this is

00:59:03.360 --> 00:59:03.960
phrased or you

00:59:03.960 --> 00:59:04.400
didn't include

00:59:04.400 --> 00:59:05.020
this link

00:59:05.020 --> 00:59:05.860
or it'd be great

00:59:05.860 --> 00:59:06.280
if you added

00:59:06.280 --> 00:59:07.380
this data to it

00:59:07.380 --> 00:59:08.360
like it's

00:59:08.360 --> 00:59:08.940
in a team

00:59:08.940 --> 00:59:09.460
account like

00:59:09.460 --> 00:59:10.200
anyone can hop

00:59:10.200 --> 00:59:10.780
in and like

00:59:10.780 --> 00:59:11.340
play with it

00:59:11.340 --> 00:59:12.000
and change it

00:59:12.000 --> 00:59:12.540
and swap it

00:59:12.540 --> 00:59:13.900
out and tweak

00:59:13.900 --> 00:59:14.360
it and we

00:59:14.360 --> 00:59:15.320
always include

00:59:15.320 --> 00:59:15.980
like the link

00:59:15.980 --> 00:59:16.600
to like edit

00:59:16.600 --> 00:59:17.060
this app

00:59:17.060 --> 00:59:17.700
in the messages

00:59:17.700 --> 00:59:18.220
that we send

00:59:18.220 --> 00:59:19.000
around so

00:59:19.000 --> 00:59:19.740
anyone can go

00:59:19.740 --> 00:59:20.280
in and make

00:59:20.280 --> 00:59:20.880
it even better

00:59:20.880 --> 00:59:21.480
and add

00:59:21.480 --> 00:59:22.260
functionality to

00:59:22.260 --> 00:59:22.800
it which is

00:59:22.800 --> 00:59:23.540
a really kind

00:59:23.540 --> 00:59:24.020
of collaborative

00:59:24.020 --> 00:59:24.900
way to build

00:59:24.900 --> 00:59:25.320
some of these

00:59:25.320 --> 00:59:26.300
workflows and

00:59:26.300 --> 00:59:26.880
augment these

00:59:26.880 --> 00:59:27.540
bots that are

00:59:27.540 --> 00:59:28.120
doing stuff

00:59:28.120 --> 00:59:28.500
because like

00:59:28.500 --> 00:59:29.440
you'll see it

00:59:29.440 --> 00:59:30.020
and you'll be

00:59:30.020 --> 00:59:30.540
like oh it'd be

00:59:30.540 --> 00:59:30.960
great if it

00:59:30.960 --> 00:59:31.720
actually included

00:59:31.720 --> 00:59:32.340
this link or

00:59:32.340 --> 00:59:32.820
it said this

00:59:32.820 --> 00:59:33.400
thing and you

00:59:33.400 --> 00:59:33.820
just hop in

00:59:33.820 --> 00:59:34.300
and change it

00:59:34.300 --> 00:59:34.740
it's really

00:59:34.740 --> 00:59:35.460
really fulfilling

00:59:35.460 --> 00:59:36.180
to be able to

00:59:36.180 --> 00:59:36.900
just like see

00:59:36.900 --> 00:59:37.540
something change

00:59:37.540 --> 00:59:38.200
something and then

00:59:38.200 --> 00:59:38.740
next time it

00:59:38.740 --> 00:59:39.780
goes it's

00:59:39.780 --> 00:59:40.380
there's no

00:59:40.380 --> 00:59:41.200
deployment going

00:59:41.200 --> 00:59:41.780
on it's just

00:59:41.780 --> 00:59:42.720
doing it it's

00:59:42.720 --> 00:59:43.140
really cool

00:59:43.140 --> 00:59:43.680
yeah that's

00:59:43.680 --> 00:59:44.820
super how cool

00:59:44.820 --> 00:59:45.580
the singularity

00:59:45.580 --> 00:59:46.220
is near okay

00:59:46.220 --> 00:59:47.880
so the last two

00:59:47.880 --> 00:59:48.560
questions that are

00:59:48.560 --> 00:59:49.420
standard not

00:59:49.420 --> 00:59:50.480
focused just on

00:59:50.480 --> 00:59:51.300
you as if you're

00:59:51.300 --> 00:59:51.560
going to write

00:59:51.560 --> 00:59:52.160
some python code

00:59:52.160 --> 00:59:52.920
what editor do

00:59:52.920 --> 00:59:53.220
you use

00:59:53.220 --> 00:59:54.140
i use visual

00:59:54.140 --> 00:59:55.300
studio code the

00:59:55.300 --> 00:59:56.000
new one i think

00:59:56.000 --> 00:59:57.560
that microsoft's

00:59:57.560 --> 00:59:58.600
new code editor

00:59:58.600 --> 00:59:59.580
like some of their

00:59:59.580 --> 01:00:00.420
philosophies around

01:00:00.420 --> 01:00:01.260
focusing on

01:00:01.260 --> 01:00:02.240
developers has been

01:00:02.240 --> 01:00:02.940
really great

01:00:02.940 --> 01:00:03.460
yielded some

01:00:03.460 --> 01:00:04.180
awesome tools so

01:00:04.180 --> 01:00:04.700
i use that

01:00:04.700 --> 01:00:05.860
and i quite like

01:00:05.860 --> 01:00:06.280
it that's cool

01:00:06.280 --> 01:00:07.100
yeah it's definitely

01:00:07.100 --> 01:00:07.740
got a lot of

01:00:07.740 --> 01:00:08.460
momentum and i think

01:00:08.460 --> 01:00:08.840
they're doing

01:00:08.840 --> 01:00:09.580
nice stuff there

01:00:09.580 --> 01:00:10.580
and then you

01:00:10.580 --> 01:00:11.640
definitely work with

01:00:11.640 --> 01:00:12.360
a ton of

01:00:12.360 --> 01:00:13.600
pypi packages

01:00:13.600 --> 01:00:14.960
maybe one that's

01:00:14.960 --> 01:00:15.780
notable not necessarily

01:00:15.780 --> 01:00:16.660
the most popular but

01:00:16.660 --> 01:00:17.720
people you're like oh

01:00:17.720 --> 01:00:18.360
you should know about

01:00:18.360 --> 01:00:19.040
this have you heard

01:00:19.040 --> 01:00:19.940
of yeah whatever

01:00:19.940 --> 01:00:20.920
i would probably say

01:00:20.920 --> 01:00:21.660
and maybe everyone

01:00:21.660 --> 01:00:22.400
knows about this but

01:00:22.400 --> 01:00:23.160
it was kind of new

01:00:23.160 --> 01:00:24.200
for us for a couple

01:00:24.200 --> 01:00:25.280
months ago the

01:00:25.280 --> 01:00:26.740
python formatter

01:00:26.740 --> 01:00:28.180
black yes really

01:00:28.180 --> 01:00:29.060
really love that so

01:00:29.060 --> 01:00:30.060
we've completely like

01:00:30.060 --> 01:00:31.120
blackified our entire

01:00:31.120 --> 01:00:32.720
code base and it's

01:00:32.720 --> 01:00:33.940
so nice to just like

01:00:33.940 --> 01:00:34.840
not think about that

01:00:34.840 --> 01:00:35.380
because like we

01:00:35.380 --> 01:00:36.280
would always be like oh

01:00:36.280 --> 01:00:36.740
do we want to do

01:00:36.740 --> 01:00:37.580
commas here do we

01:00:37.580 --> 01:00:38.180
want to split these

01:00:38.180 --> 01:00:39.220
lines like it was

01:00:39.220 --> 01:00:40.380
just a thing we

01:00:40.380 --> 01:00:41.800
were i mean we we

01:00:41.800 --> 01:00:42.640
worried about and we

01:00:42.640 --> 01:00:43.860
cared about and you

01:00:43.860 --> 01:00:44.580
know we want our code

01:00:44.580 --> 01:00:45.600
to look great and like

01:00:45.600 --> 01:00:47.100
be easy to read and

01:00:47.100 --> 01:00:48.460
black does an amazing

01:00:48.460 --> 01:00:49.780
job at that so we do

01:00:49.780 --> 01:00:50.740
that and we really

01:00:50.740 --> 01:00:51.660
really like it so if

01:00:51.660 --> 01:00:52.680
folks out there aren't

01:00:52.680 --> 01:00:53.640
using black you should

01:00:53.640 --> 01:00:54.500
check it out it's

01:00:54.500 --> 01:00:55.520
really cool super

01:00:55.520 --> 01:00:56.380
useful so that would

01:00:56.380 --> 01:00:56.720
be mine

01:00:56.720 --> 01:00:57.960
that's great you set

01:00:57.960 --> 01:00:58.580
up as like a pre

01:00:58.580 --> 01:00:59.340
commit hook yeah we

01:00:59.340 --> 01:00:59.900
have it as a pre

01:00:59.900 --> 01:01:00.840
commit hook we have

01:01:00.840 --> 01:01:01.960
all of our ci stuff

01:01:01.960 --> 01:01:02.960
running that checks it

01:01:02.960 --> 01:01:04.260
all and like yeah so

01:01:04.260 --> 01:01:05.480
it's it's a big part of

01:01:05.480 --> 01:01:06.060
our workflow now

01:01:06.060 --> 01:01:06.900
yeah solid that's

01:01:06.900 --> 01:01:08.580
cool all right well

01:01:08.580 --> 01:01:09.620
final call to action

01:01:09.620 --> 01:01:10.880
people are excited about

01:01:10.880 --> 01:01:12.120
this distributed work

01:01:12.120 --> 01:01:13.740
zapier all the tech we

01:01:13.740 --> 01:01:14.880
talked about what do

01:01:14.880 --> 01:01:15.340
you got for them

01:01:15.340 --> 01:01:16.260
check us out if you're

01:01:16.260 --> 01:01:17.540
interested in building

01:01:17.540 --> 01:01:19.000
any of these workflows or

01:01:19.000 --> 01:01:20.120
you have colleagues that

01:01:20.120 --> 01:01:21.160
could benefit from any

01:01:21.160 --> 01:01:21.780
sort of like little

01:01:21.780 --> 01:01:23.120
workflows like this let

01:01:23.120 --> 01:01:24.280
them know i mean we

01:01:24.280 --> 01:01:25.240
can kind of do a little

01:01:25.240 --> 01:01:26.520
bit of anything if you

01:01:26.520 --> 01:01:27.600
use any sass apps we're

01:01:27.600 --> 01:01:28.560
probably got something

01:01:28.560 --> 01:01:29.820
useful for you and

01:01:29.820 --> 01:01:30.540
also if you're looking

01:01:30.540 --> 01:01:32.660
for a new gig and

01:01:32.660 --> 01:01:33.320
you're interested in

01:01:33.320 --> 01:01:34.540
remote work check us

01:01:34.540 --> 01:01:35.640
out not only do we have

01:01:35.640 --> 01:01:36.400
a ton of information

01:01:36.400 --> 01:01:37.600
on how we work like

01:01:37.600 --> 01:01:38.700
we just shared it and

01:01:38.700 --> 01:01:39.640
kind of open source a

01:01:39.640 --> 01:01:41.280
lot of our processes but

01:01:41.280 --> 01:01:42.980
we'd love to maybe work

01:01:42.980 --> 01:01:43.760
with you so we have

01:01:43.760 --> 01:01:44.780
lots of jobs coming up

01:01:44.780 --> 01:01:46.280
in 2019 lots of roles

01:01:46.280 --> 01:01:47.340
so definitely keep your

01:01:47.340 --> 01:01:47.940
eyes out there and you

01:01:47.940 --> 01:01:48.960
can even set up a zap

01:01:48.960 --> 01:01:50.580
that will alert you of

01:01:50.580 --> 01:01:52.080
new jobs that pop up on

01:01:52.080 --> 01:01:53.060
the site and then they

01:01:53.060 --> 01:01:54.360
will send you an email

01:01:54.360 --> 01:01:55.000
or maybe a slack

01:01:55.000 --> 01:01:55.620
message or something

01:01:55.620 --> 01:01:56.980
like that so check that

01:01:56.980 --> 01:01:57.740
out that's pretty meta

01:01:57.740 --> 01:02:01.100
and awesome awesome let

01:02:01.100 --> 01:02:02.260
me ask i guess one more

01:02:02.260 --> 01:02:03.520
follow-up so you talked

01:02:03.520 --> 01:02:04.240
about if people want to

01:02:04.240 --> 01:02:05.400
set up these automations

01:02:05.400 --> 01:02:05.980
that makes a lot of

01:02:05.980 --> 01:02:07.140
sense what if they're

01:02:07.140 --> 01:02:08.620
these folks listening are

01:02:08.620 --> 01:02:09.800
developers at a company

01:02:09.800 --> 01:02:10.540
and they're like why

01:02:10.540 --> 01:02:11.620
doesn't zapier integrate

01:02:11.620 --> 01:02:12.620
with my company and my

01:02:12.620 --> 01:02:13.520
apis like what do they

01:02:13.520 --> 01:02:14.540
do then yeah so we do

01:02:14.540 --> 01:02:16.040
have an open platform so

01:02:16.040 --> 01:02:17.200
anyone can kind of hop on

01:02:17.200 --> 01:02:18.080
and i mean we actually

01:02:18.080 --> 01:02:19.340
have a lot more like

01:02:19.340 --> 01:02:20.820
private apis that people

01:02:20.820 --> 01:02:22.140
have added for their own

01:02:22.140 --> 01:02:23.400
companies it's really

01:02:23.400 --> 01:02:24.240
really straightforward we

01:02:24.240 --> 01:02:25.320
have lots of examples

01:02:25.320 --> 01:02:26.820
you can either build them

01:02:26.820 --> 01:02:29.260
in the browser and just

01:02:29.260 --> 01:02:30.240
kind of post your like

01:02:30.240 --> 01:02:31.320
rest urls and things

01:02:31.320 --> 01:02:32.780
like that and we'll do all

01:02:32.780 --> 01:02:34.520
the magic there or you

01:02:34.520 --> 01:02:35.660
can write a javascript

01:02:35.660 --> 01:02:37.240
node.js package which

01:02:37.240 --> 01:02:38.800
fits just kind of a light

01:02:38.800 --> 01:02:39.940
spec that we have we have

01:02:39.940 --> 01:02:41.140
tons of examples and you

01:02:41.140 --> 01:02:41.860
can expose different

01:02:41.860 --> 01:02:43.020
endpoints and write little

01:02:43.020 --> 01:02:44.520
custom functionality so

01:02:44.520 --> 01:02:45.780
you can say here's this

01:02:45.780 --> 01:02:47.260
json list that shows all

01:02:47.260 --> 01:02:48.560
the most recent leads for

01:02:48.560 --> 01:02:50.480
our company that can turn

01:02:50.480 --> 01:02:51.900
into a trigger and here's

01:02:51.900 --> 01:02:53.180
a post endpoint to create

01:02:53.180 --> 01:02:54.440
a lead and you can define

01:02:54.440 --> 01:02:55.600
what fields go into that

01:02:55.600 --> 01:02:56.800
and then away you go and

01:02:56.800 --> 01:02:57.680
it works with you know

01:02:57.680 --> 01:02:59.640
1400 different apps out

01:02:59.640 --> 01:03:00.720
of the box which is

01:03:00.720 --> 01:03:01.900
really powerful that's

01:03:01.900 --> 01:03:02.980
pretty cool all right

01:03:02.980 --> 01:03:03.640
well this has been a lot

01:03:03.640 --> 01:03:04.400
of fun to talk to you

01:03:04.400 --> 01:03:05.620
about all these ideas so

01:03:05.620 --> 01:03:06.340
much cool stuff you're all

01:03:06.340 --> 01:03:07.240
doing thanks for being on

01:03:07.240 --> 01:03:08.100
the show of course thanks

01:03:08.100 --> 01:03:09.140
michael see ya yeah bye

01:03:09.140 --> 01:03:11.140
this has been another

01:03:11.140 --> 01:03:12.700
episode of talk python to

01:03:12.700 --> 01:03:14.280
me our guest on this

01:03:14.280 --> 01:03:15.980
episode was brian helmig and

01:03:15.980 --> 01:03:17.080
it's been brought to you by

01:03:17.080 --> 01:03:19.680
linode and ting linode is

01:03:19.680 --> 01:03:21.040
your go-to hosting for

01:03:21.040 --> 01:03:21.820
whatever you're building

01:03:21.820 --> 01:03:23.200
with python get four

01:03:23.200 --> 01:03:24.240
months free at talk

01:03:24.240 --> 01:03:25.900
python.fm slash linode

01:03:25.900 --> 01:03:28.980
that's l-i-n-o-d-e ting is

01:03:28.980 --> 01:03:30.140
the fast mobile network

01:03:30.140 --> 01:03:31.380
custom built for technical

01:03:31.380 --> 01:03:33.060
folks use their savings

01:03:33.060 --> 01:03:34.460
calculator to see exactly

01:03:34.460 --> 01:03:35.640
what you'd pay visit

01:03:35.640 --> 01:03:38.240
python.ting.com to get a

01:03:38.240 --> 01:03:39.160
twenty five dollar credit

01:03:39.160 --> 01:03:40.460
and get started without a

01:03:40.460 --> 01:03:42.700
contract want to level up

01:03:42.700 --> 01:03:43.980
your python if you're just

01:03:43.980 --> 01:03:45.280
getting started try my

01:03:45.280 --> 01:03:46.420
python jumpstart by

01:03:46.420 --> 01:03:47.960
building 10 apps course

01:03:47.960 --> 01:03:49.300
or if you're looking for

01:03:49.300 --> 01:03:50.220
something more advanced

01:03:50.220 --> 01:03:51.740
check out our new async

01:03:51.740 --> 01:03:53.340
course that digs into all

01:03:53.340 --> 01:03:54.320
the different types of

01:03:54.320 --> 01:03:55.600
async programming you can do

01:03:55.600 --> 01:03:56.900
in python and of course

01:03:56.900 --> 01:03:58.160
if you're interested in more

01:03:58.160 --> 01:03:59.460
than one of these be sure

01:03:59.460 --> 01:04:00.060
to check out our

01:04:00.060 --> 01:04:01.220
everything bundle it's like

01:04:01.220 --> 01:04:02.180
a subscription that never

01:04:02.180 --> 01:04:03.980
expires be sure to

01:04:03.980 --> 01:04:05.420
subscribe to the show open

01:04:05.420 --> 01:04:06.600
your favorite podcatcher and

01:04:06.600 --> 01:04:07.740
search for python we

01:04:07.740 --> 01:04:08.600
should be right at the top

01:04:08.600 --> 01:04:09.960
you can also find the

01:04:09.960 --> 01:04:11.600
itunes feed at /itunes

01:04:11.600 --> 01:04:12.700
the google play feed at

01:04:12.700 --> 01:04:14.460
/play and the direct

01:04:14.460 --> 01:04:16.600
rss feed at /rss on

01:04:16.600 --> 01:04:18.780
talkpython.fm this is your

01:04:18.780 --> 01:04:20.600
host michael kennedy thanks so

01:04:20.600 --> 01:04:21.700
much for listening i really

01:04:21.700 --> 01:04:22.900
appreciate it now get out

01:04:22.900 --> 01:04:23.660
there and write some python

01:04:23.660 --> 01:04:24.060
code

01:04:24.060 --> 01:04:43.880
you're welcome you're welcome

01:04:43.880 --> 01:05:13.860
Thank you.

