WEBVTT

NOTE
This file was generated by Descript 

00:00:02.760 --> 00:00:05.360
mike: Hello and welcome
to APIs you won't hate.

00:00:05.360 --> 00:00:08.390
My name is Mike Fulco, your
host . I'm here today chatting

00:00:08.390 --> 00:00:09.430
with a new friend of mine.

00:00:09.496 --> 00:00:12.096
And we're gonna dive into something
that I think is an interesting topic

00:00:12.096 --> 00:00:14.173
for lots of devs of various flavors.

00:00:14.273 --> 00:00:17.013
And it's something that comes up
for me I think fairly often when I'm

00:00:17.013 --> 00:00:20.148
talking to developers who are sort
of like thrust out into the wild for

00:00:20.148 --> 00:00:21.348
the first time and have gone past.

00:00:22.328 --> 00:00:26.518
I don't know the 100 or 200 level
tutorial experience of building things.

00:00:26.518 --> 00:00:29.614
It's a topic that it comes in handy if
you're building anything that uses dynamic

00:00:29.614 --> 00:00:33.753
information that I'm sure you'll run into
from time to time, especially if you're

00:00:33.793 --> 00:00:37.086
building APIs with information that has
any sort of real time component to it.

00:00:37.086 --> 00:00:39.900
And of course that means the elephant
in the room today is webhooks.

00:00:39.900 --> 00:00:41.660
And so we're here to chat about webhooks.

00:00:41.660 --> 00:00:44.093
I'm talking today to
Tom McConn from S spx.

00:00:44.093 --> 00:00:45.013
Tom, how are you doing today?

00:00:45.063 --> 00:00:45.993
tom: Yeah, I'm great.

00:00:45.993 --> 00:00:46.313
Thank you.

00:00:46.313 --> 00:00:46.993
How about yourself?

00:00:47.533 --> 00:00:48.503
Track 1: I am doing really well.

00:00:48.503 --> 00:00:48.783
Thanks.

00:00:48.783 --> 00:00:48.983
Yeah.

00:00:48.983 --> 00:00:50.383
Thanks for taking the time to talk to me.

00:00:50.464 --> 00:00:53.957
I am gosh, I would say I'm, I'm the
dangerous kind of web hook user in

00:00:53.957 --> 00:00:57.065
that I've consumed them many, many,
many times with reckless disregard

00:00:57.065 --> 00:00:58.425
for my own health and wellbeing.

00:00:58.520 --> 00:01:01.363
And I have lots and lots of
feelings on using web hooks.

00:01:01.363 --> 00:01:03.683
But to be honest with
you, I've never built the.

00:01:04.673 --> 00:01:07.193
Event side of web hooks, the
side that emits web hooks.

00:01:07.228 --> 00:01:10.628
So I've got lots of questions for you
there, but maybe let's take a step

00:01:10.628 --> 00:01:12.228
back first, and let's start with this.

00:01:12.323 --> 00:01:13.803
Can you tell me what Web hooks are?

00:01:13.803 --> 00:01:17.358
Give me like the, the 100 level
description of what a web hook is and

00:01:17.358 --> 00:01:18.758
why someone might be interested in them.

00:01:18.993 --> 00:01:19.483
tom: Yeah.

00:01:19.483 --> 00:01:22.443
You know, th this is a question I'm
always iterating on, so if someone

00:01:22.443 --> 00:01:24.823
from the audience has a better
description, I'm willing to listen.

00:01:24.823 --> 00:01:27.402
I, the way I describe it is
kinda like a reverse api.

00:01:27.572 --> 00:01:31.880
So if an API is you making a request to
a server, you know this a web hook is

00:01:31.880 --> 00:01:33.440
the server making a notification to you.

00:01:33.440 --> 00:01:38.680
So kinda like a server to server po push
notification or like any event emitting.

00:01:39.030 --> 00:01:40.680
Yeah, I give you few versions.

00:01:40.680 --> 00:01:41.760
I hope choose the best one.

00:01:42.570 --> 00:01:43.420
Track 1: Yeah, sure.

00:01:43.420 --> 00:01:44.577
I think, I think that's fair.

00:01:44.577 --> 00:01:47.337
So what are some examples, maybe
common examples where people might

00:01:47.337 --> 00:01:49.937
have run into web hooks or use them
whether they realized it or not?

00:01:50.637 --> 00:01:52.367
tom: Oh, so literally everywhere.

00:01:52.367 --> 00:01:56.326
You know, so like if you've ever used a
product that uses Stripe you've used web

00:01:56.326 --> 00:01:59.886
hooks without realizing it, because that's
usually how Stripe notifies people that

00:01:59.886 --> 00:02:02.986
someone has paid or like an or someone
is delinquent or anything like that.

00:02:02.986 --> 00:02:06.501
You know, when you receive an email
on Gmail, it submits a web hook to

00:02:06.501 --> 00:02:09.661
your c r m or anything like that
to let it know that someone's pay.

00:02:09.711 --> 00:02:12.046
So that sorry that an email was received.

00:02:12.072 --> 00:02:12.792
I mean, literally

00:02:12.792 --> 00:02:15.112
everything I can give you
every interaction that you,

00:02:15.112 --> 00:02:16.312
that happens in synchronously.

00:02:16.877 --> 00:02:17.727
Track 1: Yeah, it's true.

00:02:17.727 --> 00:02:18.727
They are all over the place.

00:02:18.747 --> 00:02:21.824
And I, I think Tom, actually, you just set
a new record for how early in the show.

00:02:21.824 --> 00:02:24.427
I need to give my disclaimer
that I used to work for Stripe

00:02:24.427 --> 00:02:25.667
and I no longer work for Stripe.

00:02:25.667 --> 00:02:27.437
So we're, we're not
associated with Stripe.

00:02:27.507 --> 00:02:29.107
Although obviously no
negative feelings there.

00:02:29.107 --> 00:02:31.445
I just feel like it's one of those
good transparency things that

00:02:31.445 --> 00:02:33.911
us people in the world of Derell
need to do a little more often.

00:02:33.942 --> 00:02:37.182
But yeah, certainly in, in my role working
at Stripe and as an end user of Stripe,

00:02:37.182 --> 00:02:42.207
I've, I've used their WebBook stuff quite
a bit, so, From my perspective and sort of

00:02:42.207 --> 00:02:47.333
from my observations of the way devs learn
and the way devs get things done, it seems

00:02:47.333 --> 00:02:51.053
like webhooks may be a topic that's kind
of intimidating for a lot of developers.

00:02:51.143 --> 00:02:54.259
Can you talk a little bit about why
using webhooks maybe feels hard,

00:02:54.259 --> 00:02:55.699
or is hard, or is challenging?

00:02:56.739 --> 00:02:57.229
tom: Yeah.

00:02:57.229 --> 00:03:00.029
You know, so the people we interact
with a lot are the people sending,

00:03:00.029 --> 00:03:02.229
but let's start with actually
from the people consuming, which I

00:03:02.229 --> 00:03:03.229
think is where you're going with.

00:03:03.849 --> 00:03:07.469
So I think the first thing is,
You know, it's kinda like it's

00:03:07.469 --> 00:03:09.187
something that's incoming, right?

00:03:09.195 --> 00:03:12.395
And that means you need to use a tool
like En Grok or we have a tool as well,

00:03:12.395 --> 00:03:15.515
like six play in order to kinda like
punch through the firewall and actually

00:03:15.515 --> 00:03:16.795
get it to your local development server.

00:03:16.795 --> 00:03:20.075
It's not, it's not one of those things
that you can just make a call from your

00:03:20.235 --> 00:03:21.115
computer and everything just works.

00:03:21.115 --> 00:03:22.615
It kind of requires this initial setup.

00:03:22.615 --> 00:03:27.188
The second thing is, you know, we
spend, you know, all of us are like

00:03:27.208 --> 00:03:31.388
day in, day out building like HDP
services that kind of like follow

00:03:31.388 --> 00:03:32.628
this pattern of like getting a.

00:03:33.468 --> 00:03:34.068
doing some magic.

00:03:34.698 --> 00:03:35.458
making a response.

00:03:35.464 --> 00:03:37.786
And that is like a, you know, a
paradigm that we're really used to.

00:03:37.786 --> 00:03:41.346
But like, kinda like with webhooks,
we don't even know, like, when are

00:03:41.346 --> 00:03:42.546
they coming, why are they coming?

00:03:42.546 --> 00:03:45.226
You know, like we, we have this
kinda like lack of visibility of

00:03:45.226 --> 00:03:46.979
like the trigger that makes it start.

00:03:47.279 --> 00:03:51.309
And then the last thing, which I think is
the most, the most this is another one as

00:03:51.309 --> 00:03:54.789
well, you know, like when you, you need
to validate the signature of web hooks.

00:03:54.789 --> 00:03:56.989
And a lot of frameworks
actually go in the way of that.

00:03:56.989 --> 00:03:58.623
They kinda like pause and re serialize.

00:03:58.623 --> 00:04:03.081
The, the payload, which can, you know,
for, for encryption or for like anything

00:04:03.081 --> 00:04:04.859
with cryptography can mean havoc.

00:04:04.999 --> 00:04:07.699
And then the last part is kinda
like event-driven architectures

00:04:07.760 --> 00:04:09.616
which are just more difficult.

00:04:09.616 --> 00:04:13.046
It's super hard to reason about you know,
knowing when an event actually triggers.

00:04:13.716 --> 00:04:15.766
I mean, I think they're probably
more, but I thought, I think

00:04:15.766 --> 00:04:16.686
those are the main ones.

00:04:17.036 --> 00:04:20.116
Track 1: Yeah, that covers it fairly
well to revisit some of those.

00:04:20.116 --> 00:04:23.750
I think the validating web hook is an
interesting problem and one of those

00:04:23.750 --> 00:04:27.864
things that like, certainly the first few
times I was an end user of web hooks was

00:04:27.864 --> 00:04:29.104
something that I hadn't even considered.

00:04:29.104 --> 00:04:32.460
But from the developer's perspective, the
way you receive an end hook is you open

00:04:32.460 --> 00:04:37.165
up an http endpoint, so some URL that
some service can send a call to, and you.

00:04:37.595 --> 00:04:39.475
Accepting information
through that endpoint.

00:04:39.475 --> 00:04:42.275
So they send, you know, to
the specific URL that you set

00:04:42.275 --> 00:04:43.627
up a packet of information.

00:04:43.647 --> 00:04:47.107
And if you just trust that blindly,
what you're not doing is making

00:04:47.107 --> 00:04:49.067
sure that the right person is
sending you that information.

00:04:49.067 --> 00:04:50.467
So again, it's a public url.

00:04:50.467 --> 00:04:51.227
Anyone can hit it.

00:04:51.227 --> 00:04:52.587
Anyone can send any information there.

00:04:52.647 --> 00:04:55.798
And by coming up with some way
to use encryption to validate who

00:04:55.798 --> 00:04:57.078
is sending you that information.

00:04:57.078 --> 00:05:00.484
You can reject WebBook calls that are
coming from bad actors or crawlers

00:05:00.484 --> 00:05:03.484
or, you know, people who've just
stumbled upon your API endpoint.

00:05:03.498 --> 00:05:06.138
The event-driven architecture one is
really interesting I think as well,

00:05:06.138 --> 00:05:10.576
because especially in a world where
people are Expecting their applications

00:05:10.576 --> 00:05:15.259
to feel a lot more real time and have
this like native mobile app experience

00:05:15.259 --> 00:05:18.179
as the, the default expectation
for just about anything on the web.

00:05:18.179 --> 00:05:21.642
We're very different from, you know, 10
years ago when you were expected to go

00:05:21.642 --> 00:05:23.322
back and refresh a page to see changes.

00:05:23.322 --> 00:05:25.202
That's just not the world
we operate in anymore.

00:05:25.202 --> 00:05:28.490
And driving your UIs updates
through events that come in from

00:05:28.490 --> 00:05:32.330
webhooks on whatever level, however
often that may be, can create that

00:05:32.330 --> 00:05:33.730
dynamic effect quite a bit more.

00:05:34.880 --> 00:05:37.350
So with all that being said, I think
that's some really good background on

00:05:37.350 --> 00:05:40.648
web hooks, and I think that sets the
stage pretty well for, for you, Tom,

00:05:40.648 --> 00:05:41.848
and sort of for where you are right now.

00:05:41.848 --> 00:05:44.408
So tell me about fix and tell
me about what you're working on.

00:05:45.123 --> 00:05:45.613
tom: Yeah.

00:05:45.623 --> 00:05:47.573
So we do web hook sending as a service.

00:05:47.573 --> 00:05:49.848
So essentially we help
companies send webhooks.

00:05:49.861 --> 00:05:52.081
You know, they're kinda like a lot
of, you know, we talked about the

00:05:52.081 --> 00:05:53.441
challenges of receiving webhooks.

00:05:53.911 --> 00:05:55.691
But there are a lot of
challenges with sending them.

00:05:55.991 --> 00:05:59.211
And even in a way, this challenge of
receiving them are also part of the

00:05:59.211 --> 00:06:01.051
challenges of sending them because
you need to understand them well.

00:06:01.051 --> 00:06:02.451
You need to sign correctly.

00:06:02.451 --> 00:06:04.131
And all of those things that
we just covered, you need to do

00:06:04.131 --> 00:06:05.331
it on the sender side as well.

00:06:05.836 --> 00:06:08.956
So we really just turn all of
that into a simple API call.

00:06:09.021 --> 00:06:10.471
Yeah, I think that's that.

00:06:11.451 --> 00:06:12.341
Track 1: Yeah, sure.

00:06:12.341 --> 00:06:12.781
Yeah.

00:06:12.781 --> 00:06:15.588
So how, how long ago did you
start in on this journey?

00:06:15.588 --> 00:06:16.146
When did fix.

00:06:16.177 --> 00:06:16.417
tom: Wow.

00:06:17.137 --> 00:06:17.937
Actually more than two years.

00:06:17.937 --> 00:06:20.257
I was gonna say almost two years, but
more than two years at this point.

00:06:20.355 --> 00:06:20.795
Yeah.

00:06:20.795 --> 00:06:21.555
So a while back,

00:06:22.280 --> 00:06:22.770
Track 1: Sure.

00:06:22.770 --> 00:06:24.548
And so I guess tell me about that.

00:06:24.548 --> 00:06:27.628
How did you identify the need for,
for the, the service to exist?

00:06:27.963 --> 00:06:32.351
tom: yeah, so I had a different you know,
project side, project company, whatever

00:06:32.351 --> 00:06:35.484
you wanna call it at that point that
I actually still running on the side.

00:06:36.734 --> 00:06:39.494
You know, people who kept on asking
us for web hooks, like all the time.

00:06:39.914 --> 00:06:43.694
And we know that A, we don't have the
upfront, like all the upfront costs,

00:06:43.694 --> 00:06:46.054
like all the effort to build it,
we're like, we didn't wanna spend it.

00:06:46.154 --> 00:06:48.374
And then like, the ongoing
effort of like maintaining it,

00:06:48.374 --> 00:06:49.654
that sounded like hell as well.

00:06:49.654 --> 00:06:50.694
So we kinda like skipped that.

00:06:51.084 --> 00:06:54.534
A and then kind of like the last part
of it, which is, you know, we built this

00:06:54.534 --> 00:06:58.014
like beautiful, beautiful p i and we spent
so much time on it, we're not gonna have

00:06:58.014 --> 00:06:59.254
a terrible web hook experience, right?

00:06:59.254 --> 00:07:01.877
So kinda like multiply the first
two estimates by like 3 0 5.

00:07:01.908 --> 00:07:04.108
And kinda like all of that
just meant, meant that we.

00:07:05.223 --> 00:07:06.043
actually built web hooks.

00:07:06.071 --> 00:07:08.671
And I wish I could say at this point,
like, you know, I was smart enough to

00:07:08.671 --> 00:07:11.631
realize that this is a problem that n
needs to be addressed, but I wasn't.

00:07:11.730 --> 00:07:15.570
It took a few months later when
someone asked a silly question about

00:07:15.570 --> 00:07:17.196
web hooks in a slack I'm a member of.

00:07:17.196 --> 00:07:19.501
And I kind of like, well,
this person is smart.

00:07:19.501 --> 00:07:20.221
That doesn't make sense.

00:07:20.221 --> 00:07:23.501
I kind like dug deeper and I realized
she actually didn't wanna understand

00:07:23.741 --> 00:07:25.381
anything, anything of what I was saying.

00:07:25.381 --> 00:07:28.021
All she wanted was to send WebBook
and not have to think about it.

00:07:28.021 --> 00:07:28.701
And I'm kinda like,

00:07:28.701 --> 00:07:28.901
huh.

00:07:29.546 --> 00:07:31.136
If I build it for you, will you pay me?

00:07:31.176 --> 00:07:33.176
She's just like, yeah, and
then someone else chimed in.

00:07:33.176 --> 00:07:34.696
I'm like, huh, maybe there is something.

00:07:34.696 --> 00:07:37.376
I remember I had a problem as
well, so like decided to give

00:07:37.376 --> 00:07:39.256
it a go and everything kind
of like went on from there.

00:07:40.031 --> 00:07:40.521
Track 1: Sure.

00:07:40.521 --> 00:07:40.921
Yeah.

00:07:40.921 --> 00:07:43.921
I mean, maybe that's, that conversation
is exactly the reason that I

00:07:43.921 --> 00:07:46.882
started this podcast by saying I've
never bothered to create WebBook.

00:07:46.882 --> 00:07:47.999
I've only ever consumed them.

00:07:47.999 --> 00:07:51.027
The, the thought of having to do that
honestly is, is a fairly intimidating

00:07:51.027 --> 00:07:53.567
thing because of all the architectural,
this and that, that goes into it.

00:07:53.637 --> 00:07:56.457
One of the things that happens, I think
with the event driven architecture that

00:07:56.457 --> 00:08:00.257
is really tricky is like these web hooks
are asynchronous communications that you.

00:08:00.467 --> 00:08:02.727
The emitter send out
when something happens.

00:08:02.727 --> 00:08:05.543
But as the consumer, you need to think
about, well, what happens if I miss that?

00:08:05.543 --> 00:08:08.663
You know, if someone sends a web hook
and my service is down or off, or

00:08:08.773 --> 00:08:12.183
glitches out, or whatever the case may
be, has that thing gone into the ether?

00:08:12.183 --> 00:08:13.703
Like that's, that's a very intimidating.

00:08:13.834 --> 00:08:16.614
Perspective to have, you know,
something like that going wrong,

00:08:16.614 --> 00:08:19.634
especially when you're dealing with
like finances FinTech, things like that

00:08:19.634 --> 00:08:21.573
missing a deposit or a withdrawal can

00:08:21.923 --> 00:08:24.413
like fully wrangle the books
incorrectly if you want.

00:08:24.413 --> 00:08:25.773
So there's a lot to think about there.

00:08:25.829 --> 00:08:29.379
So your first customers then were,
were developers, were looking to

00:08:29.379 --> 00:08:31.469
send out an emit, emit webhooks.

00:08:31.469 --> 00:08:32.848
What does that look like
from their perspective?

00:08:32.848 --> 00:08:35.608
Are they sending you something
like an open API definition?

00:08:35.675 --> 00:08:36.888
Are they calling a service?

00:08:36.888 --> 00:08:37.488
Are they.

00:08:37.683 --> 00:08:39.763
Self-hosting something
that's fixed stands up.

00:08:39.763 --> 00:08:41.240
What, what is the infrastructure?

00:08:41.535 --> 00:08:43.465
tom: Yeah, so it's kind
of like all of the above.

00:08:43.465 --> 00:08:46.825
We really believe in meeting like
customers where they want to be.

00:08:46.847 --> 00:08:48.980
You know, we have very strong
opinions on how things should be

00:08:48.980 --> 00:08:51.420
done, but that doesn't mean, you
know, we know we are not always right.

00:08:51.420 --> 00:08:52.820
So it's better to kind
of like help people.

00:08:52.887 --> 00:08:56.989
So I mean, like what the, the main
gateway to our service though is

00:08:56.989 --> 00:08:59.629
either R SDKs or H T HTTP requests.

00:08:59.707 --> 00:09:02.747
And people, you know, like
every six integration is kind

00:09:02.747 --> 00:09:03.647
of like two and a half steps.

00:09:03.647 --> 00:09:04.143
So the first

00:09:04.143 --> 00:09:05.663
one is creating a destin.

00:09:06.528 --> 00:09:09.718
So kind of like, you know, whenever a
user signs up to your service, you create

00:09:09.718 --> 00:09:12.678
what we call a consumer application,
and then you send web hooks to that

00:09:12.918 --> 00:09:17.158
location, and then the second API
call is just to send that, you know,

00:09:17.158 --> 00:09:19.918
that web hook to that location kind of
saying like, Hey, an invoice was paid.

00:09:20.553 --> 00:09:23.133
The, these are the details,
just go and send it on.

00:09:23.653 --> 00:09:26.547
As you may have noticed, we actually
didn't, I didn't talk about adding

00:09:26.547 --> 00:09:28.107
the actual HTP endpoint yet.

00:09:28.197 --> 00:09:29.717
For that step, we offer two things.

00:09:29.717 --> 00:09:32.917
Either they use the API to do
it and they can do it, you know,

00:09:32.917 --> 00:09:34.757
like from the front end, from the
backend, whatever they wanna do.

00:09:35.207 --> 00:09:40.734
Or we have like an eye frame that they
can embed in our ui, in their ui, sorry

00:09:40.734 --> 00:09:43.399
in order to let their customers kind,
like, control all of that to kind of

00:09:43.399 --> 00:09:45.119
have like a very, a turnkey solution.

00:09:46.089 --> 00:09:46.789
Two and a half.

00:09:46.817 --> 00:09:47.242
Two and a half.

00:09:47.242 --> 00:09:47.762
API calls,

00:09:48.187 --> 00:09:48.677
Track 1: Yeah.

00:09:48.677 --> 00:09:49.077
Okay.

00:09:49.077 --> 00:09:49.717
It sounds like it.

00:09:49.717 --> 00:09:53.089
I think I've actually used that
iframe service through a clerk I've

00:09:53.089 --> 00:09:55.549
been using clerk for authentication
for, for my new company.

00:09:55.549 --> 00:09:58.103
And it's really interesting
to consume that, right?

00:09:58.103 --> 00:10:00.293
Like I get as a user of clerk.

00:10:00.533 --> 00:10:02.613
There's an embedded
interface from fix there.

00:10:02.613 --> 00:10:05.817
And I think this may be how I
first came across Fix in the Wild.

00:10:06.732 --> 00:10:10.334
but essentially it's an interface that
allows me to define URL endpoints that

00:10:10.334 --> 00:10:13.573
web hooks end up at whether that's
sort of my local host environment

00:10:13.583 --> 00:10:16.767
or you know, pipe two and actual
say production or staging U r L.

00:10:16.791 --> 00:10:19.985
And having worked formally
in the past, For Stripe.

00:10:20.016 --> 00:10:22.536
I think it, it does a pretty good job
of mocking some of the best parts of

00:10:22.536 --> 00:10:26.030
that too, where Stripe has all this
tooling available via CLI, via ID

00:10:26.030 --> 00:10:29.030
integrations and their dashboard and
all these other places where you can

00:10:29.033 --> 00:10:32.986
tell Stripe where you want them to
pipe information to when events happen.

00:10:32.986 --> 00:10:35.862
And I think SPH does that really
well in a way that I hadn't really

00:10:36.062 --> 00:10:39.314
considered as something that a
product developer might want to use.

00:10:40.444 --> 00:10:44.126
So I guess this brings me back to
then What's it like to plan for those?

00:10:44.126 --> 00:10:46.656
Like do you find yourself having
to educate your customers?

00:10:46.926 --> 00:10:51.216
What they, what the ideal sort of user
experience looks like for their consumers?

00:10:51.531 --> 00:10:52.921
tom: Oh, a hundred percent all the time.

00:10:52.921 --> 00:10:56.338
But I think the nice thing is that
they come to us already as experts

00:10:56.338 --> 00:10:57.698
and they realize that we've seen.

00:10:58.583 --> 00:11:00.193
a ton of integrations, both

00:11:00.503 --> 00:11:04.793
ones that follow our best practices, ones
that existed before us, and then they

00:11:04.793 --> 00:11:08.193
migrated to VX and just, you know, like
market research that we do all the time.

00:11:08.675 --> 00:11:12.985
So education is, is less painful than
it has to be because they really are

00:11:12.985 --> 00:11:15.665
coming, like willing and like, you know,
willing to learn and willing to listen.

00:11:15.724 --> 00:11:19.434
But we do get every now and then we
good get into like let's say healthy

00:11:19.754 --> 00:11:21.114
arguments about the right thing to do it.

00:11:21.114 --> 00:11:21.299
Yeah,

00:11:21.299 --> 00:11:22.259
every now and then,

00:11:22.844 --> 00:11:23.334
Track 1: Yeah.

00:11:23.334 --> 00:11:25.214
Developers love a good scholarly debate.

00:11:25.214 --> 00:11:25.814
I don't doubt that

00:11:25.939 --> 00:11:26.909
tom: Yeah, exactly.

00:11:27.014 --> 00:11:30.174
Track 1: that most of your customers
tend to have already had web hooks and

00:11:30.174 --> 00:11:33.614
they're looking to move to a less painful
implementation, or they're creating a

00:11:33.614 --> 00:11:34.934
web hook experience for the first time?

00:11:35.229 --> 00:11:38.609
tom: You know how to say, we see
the whole gradient, so we see both.

00:11:38.609 --> 00:11:41.489
They had a mature implementation
for a few years now, and they're

00:11:41.489 --> 00:11:43.409
like, they've had enough maintaining
it and they wanna switch.

00:11:43.409 --> 00:11:46.289
They've had a terrible implementation
that they kind of hacked together,

00:11:46.289 --> 00:11:49.289
cobbled together for like a few months
and now they're looking to switch.

00:11:49.289 --> 00:11:50.329
And also they just wanna.

00:11:50.984 --> 00:11:51.754
With something.

00:11:51.754 --> 00:11:53.514
So really we see the whole
gradient, hard to say,

00:11:53.514 --> 00:11:54.472
which is Yeah,

00:11:54.822 --> 00:11:55.312
Track 1: sure.

00:11:55.312 --> 00:11:55.512
Yeah.

00:11:55.512 --> 00:11:56.752
I guess I can see the need for both.

00:11:57.282 --> 00:11:57.612
So,

00:11:57.683 --> 00:12:00.613
tell me a little bit about, I guess
then the experience of someone who's

00:12:00.613 --> 00:12:01.973
trying to onboard, onboard to space.

00:12:01.973 --> 00:12:04.573
What's the I guess the
developer story look like?

00:12:05.013 --> 00:12:05.503
tom: yeah.

00:12:05.503 --> 00:12:06.503
So like six customers.

00:12:07.173 --> 00:12:07.593
Track 1: Yes.

00:12:07.593 --> 00:12:07.873
Yeah.

00:12:08.413 --> 00:12:12.643
tom: You know, so, the way I look at
APIs or like in products in general,

00:12:12.643 --> 00:12:15.683
you know, like think I'm not an apple
fanboy by any means, but like think

00:12:15.683 --> 00:12:18.603
of like when you buy a new Apple
device, like a new iPhone, for example.

00:12:18.603 --> 00:12:22.723
You get a box, you open it and you get
a phone, and then you pick it up, you

00:12:22.723 --> 00:12:23.763
turn it on, you start using it, right?

00:12:23.793 --> 00:12:26.163
That is kind of like,
that is the experience.

00:12:26.163 --> 00:12:27.243
You don't read a book before.

00:12:27.243 --> 00:12:31.763
You don't need any of those kind of
things, and we really try to mimic that as

00:12:31.763 --> 00:12:33.781
much as we can in order to make sure that.

00:12:34.276 --> 00:12:36.716
You know, our customers
don't get frustrated before

00:12:36.716 --> 00:12:37.716
they need to understand it.

00:12:37.716 --> 00:12:39.316
And, you know, they can
read the docs afterwards.

00:12:39.369 --> 00:12:42.749
So the first thing when you sign
up, you kind of see essentially like

00:12:42.749 --> 00:12:45.909
a one paragraph that explains what
consumer application are, which I

00:12:45.909 --> 00:12:46.909
explained a moment ago actually.

00:12:46.909 --> 00:12:49.245
I mean, we, I think we went through
the onboarding mentally a moment ago.

00:12:49.295 --> 00:12:53.125
So like the, you know, Yeah, they, we
explained what consumer applications

00:12:53.125 --> 00:12:56.645
are and then we have a Kell command
that they can just copy paste to the.

00:12:57.335 --> 00:12:58.915
And that's their first API call.

00:12:58.915 --> 00:12:59.618
It actually works.

00:12:59.626 --> 00:13:02.419
And then they pro automatically
progress to the second page where

00:13:02.419 --> 00:13:04.139
again, we explain what messages are.

00:13:04.139 --> 00:13:06.739
They copy paste that telco
command and there you go.

00:13:06.739 --> 00:13:10.579
They send the first message and then kind
of like we, we let give them a button to

00:13:10.579 --> 00:13:13.899
move to that embedded ui, or we have a
button to move to the docs and kind of

00:13:13.899 --> 00:13:15.742
like read more about how to create that.

00:13:16.552 --> 00:13:17.042
Track 1: Sure.

00:13:17.042 --> 00:13:18.162
And then they can grow from there.

00:13:18.222 --> 00:13:22.597
And so is your functionality
through six, it's not just done via,

00:13:22.597 --> 00:13:24.317
via like plain CTP calls, right?

00:13:24.317 --> 00:13:26.197
I think you have quite
a few client libraries.

00:13:26.281 --> 00:13:28.141
Can you talk a little bit
about the languages that you.

00:13:29.016 --> 00:13:31.006
tom: Oh, you now I need
to remember all of them.

00:13:31.056 --> 00:13:31.406
So

00:13:31.500 --> 00:13:31.790
I

00:13:31.880 --> 00:13:32.440
Track 1: there's a lot.

00:13:32.580 --> 00:13:33.070
tom: Yeah.

00:13:33.070 --> 00:13:33.550
there's a lot.

00:13:33.550 --> 00:13:36.790
So like Python, we have a version
for both Async Python and Sync,

00:13:36.790 --> 00:13:39.130
Python, JavaScript type script.

00:13:39.145 --> 00:13:41.335
We have one in Java, one for Colin.

00:13:41.335 --> 00:13:44.612
That is actually different because it
uses like you know, async Colin rust.

00:13:44.612 --> 00:13:45.572
I think I mentioned that.

00:13:45.602 --> 00:13:45.892
C.

00:13:47.667 --> 00:13:48.357
I think that's it.

00:13:48.357 --> 00:13:48.797
Oh, Ruby.

00:13:49.717 --> 00:13:50.191
Yeah.

00:13:50.191 --> 00:13:50.711
a few of them.

00:13:50.711 --> 00:13:51.071
Yeah.

00:13:51.211 --> 00:13:54.858
Track 1: There's a lot which to me to, to
my ear, that sounds like it must be quite

00:13:54.858 --> 00:13:56.792
a bit of maintenance challenge as well.

00:13:56.792 --> 00:13:57.072
Right.

00:13:57.072 --> 00:14:00.064
Do you have a pretty large engineering
team working on keeping these libraries

00:14:00.744 --> 00:14:01.844
functioning and well cared for?

00:14:01.844 --> 00:14:02.687
tom: Yes and no.

00:14:02.687 --> 00:14:04.327
So no mostly, no.

00:14:04.327 --> 00:14:07.527
We had like one, two, I think two
of the libraries were contributed

00:14:07.527 --> 00:14:09.567
by the community and we employ a lot

00:14:09.567 --> 00:14:12.266
of tricks in order to like auto generate.

00:14:13.031 --> 00:14:13.959
A big chunk of them.

00:14:13.959 --> 00:14:14.772
But it's still a pain.

00:14:14.824 --> 00:14:16.784
It's still definitely a pain
to like update things, even

00:14:16.784 --> 00:14:18.344
though a lot of it is altered.

00:14:18.344 --> 00:14:18.784
Yeah.

00:14:19.669 --> 00:14:20.159
Track 1: Yeah.

00:14:20.159 --> 00:14:20.639
Yeah.

00:14:20.639 --> 00:14:23.385
I think this is something that API
providers are thinking about more

00:14:23.385 --> 00:14:27.517
and more is you have quite a few, you
know, flavors of consumer these days.

00:14:27.517 --> 00:14:30.397
And especially like, I'm the first
to tell you I'm not a Python expert.

00:14:30.397 --> 00:14:32.997
I can look at some Python
code and, and wrestle my mind

00:14:32.997 --> 00:14:33.896
through what's going on there.

00:14:33.928 --> 00:14:37.288
But it was only fairly recently that
I, I came to understand that like

00:14:37.288 --> 00:14:40.582
Async Python was a challenge and was
something that was sort of a different,

00:14:40.582 --> 00:14:41.742
you know, developer experience.

00:14:41.745 --> 00:14:42.758
So I, I think.

00:14:44.648 --> 00:14:48.178
, having devs on staff write engineers
who, who work for you with you,

00:14:48.178 --> 00:14:50.658
who are able to produce libraries
and all these different flavors is,

00:14:50.658 --> 00:14:51.658
is going to be an important thing.

00:14:51.658 --> 00:14:54.384
And definitely like having community
support is always a good sign too

00:14:54.384 --> 00:14:57.064
when you're getting open source
contributions because people want to

00:14:57.064 --> 00:15:00.224
be able to embed themselves in your,
your product and your ecosphere.

00:15:00.224 --> 00:15:01.224
I think that's really good sign.

00:15:01.864 --> 00:15:02.434
tom: Yeah I

00:15:02.462 --> 00:15:02.935
Track 1: yeah.

00:15:02.935 --> 00:15:03.295
Yeah.

00:15:03.295 --> 00:15:04.215
That's, that's really interesting.

00:15:04.215 --> 00:15:07.043
Are there, so what's the world
look like for fix right now?

00:15:07.043 --> 00:15:08.883
Like what, what's the breadth
of products that you offer?

00:15:08.967 --> 00:15:10.807
tom: You know, so as I said,
it's kind of like an onion.

00:15:10.977 --> 00:15:13.807
So the first thing that we do, we
kinda like, we just make it possible

00:15:13.807 --> 00:15:15.647
or make it easy to send web hooks.

00:15:15.672 --> 00:15:18.810
And then we also have a tool that's
called Slicks play which is both

00:15:18.810 --> 00:15:21.730
like a c l I, kind of like enro,
like, but just very specific.

00:15:21.730 --> 00:15:23.890
I mean, if you want anything
more robust, use Enro.

00:15:23.890 --> 00:15:25.930
But for, it's kind of like
agro, but you know, like a

00:15:25.930 --> 00:15:27.210
quick testing thing with a ui.

00:15:27.308 --> 00:15:29.468
In order to make it
easier for consumers, we.

00:15:30.473 --> 00:15:33.635
A wide range of open source
libraries for verifying web hooks.

00:15:33.635 --> 00:15:36.349
So our customers, and by the way, not
our customers as well, like anyone

00:15:36.349 --> 00:15:38.149
can just use them to sign and verify.

00:15:38.740 --> 00:15:41.680
And it's kinda like just much better than
like trying to reinvent the wheel there.

00:15:42.470 --> 00:15:42.960
Track 1: Sure.

00:15:43.030 --> 00:15:45.170
tom: And then kinda like the
Fixx product, you know, does like

00:15:45.170 --> 00:15:46.326
everything you would want and more.

00:15:46.345 --> 00:15:48.705
It's kinda like all the reach
wise and like manual and

00:15:48.705 --> 00:15:50.265
automatic and like observability.

00:15:50.325 --> 00:15:53.345
And we, we also have something
really cool that we call like

00:15:53.345 --> 00:15:54.265
a payload transformation.

00:15:54.279 --> 00:15:57.419
So we realize like a lot of our
customers, what they do, they receive

00:15:57.419 --> 00:16:00.659
a WebBook, they do something to it,
and then they send it somewhere else.

00:16:01.119 --> 00:16:03.619
And we realize we might as well
let them embed a bit of JavaScript,

00:16:03.619 --> 00:16:06.219
kinda like run it there and,
and, you know, move it forward.

00:16:07.694 --> 00:16:08.764
Track 1: Oh, that's really interesting.

00:16:08.764 --> 00:16:09.004
Yeah.

00:16:09.004 --> 00:16:10.064
So where does that run?

00:16:10.095 --> 00:16:11.175
tom: On our, our environment.

00:16:11.175 --> 00:16:12.175
We use Dino for that.

00:16:12.710 --> 00:16:13.200
Yeah.

00:16:13.200 --> 00:16:16.487
it's kind of isolated like it's,
it is on mini microservice.

00:16:17.717 --> 00:16:18.187
Track 1: Sure.

00:16:18.187 --> 00:16:19.120
That's a really interesting idea.

00:16:19.120 --> 00:16:22.200
Then, then you get a little bit of that
transformation that's sort of offloaded.

00:16:22.222 --> 00:16:22.572
Ha.

00:16:22.572 --> 00:16:26.518
Are you finding yourself wrestling with
implementation of Edge services at all?

00:16:26.518 --> 00:16:28.904
Is that something that you need
to think about as a, a provider?

00:16:28.935 --> 00:16:32.385
tom: Not for us but a lot of customers,
you know, and, and this is kinda like

00:16:32.505 --> 00:16:35.665
adjacent to what you asked, but like a lot
of our customers use those services, which

00:16:35.665 --> 00:16:39.105
again, like going back to what we talked
about with the transforming the payload

00:16:39.105 --> 00:16:41.325
and making it very e hard to verify.

00:16:41.325 --> 00:16:44.512
So we do actually end up, you know,
we have actually, I mean we have

00:16:44.512 --> 00:16:47.392
integrations with Netlify and we're a
cell, but we also have like tutorials

00:16:47.392 --> 00:16:50.032
on how to use how to verify WebBook
for all of these environments.

00:16:50.106 --> 00:16:50.666
Track 1: Right.

00:16:50.666 --> 00:16:51.546
Yeah, actually I saw that.

00:16:51.546 --> 00:16:52.066
I meant to ask.

00:16:52.066 --> 00:16:55.678
So I'm, I'm both a Netlify and Versace
user for, for various purposes and

00:16:55.678 --> 00:16:56.758
various little projects I have.

00:16:56.787 --> 00:16:59.203
I know that they both provide,
I forget the language.

00:16:59.203 --> 00:17:01.643
They use add-ons or
plug-ins or extensions,

00:17:01.963 --> 00:17:03.443
whatever their terminology is.

00:17:03.530 --> 00:17:05.250
But they, they make it pretty easy to add.

00:17:05.259 --> 00:17:06.884
Auxiliary services, right?

00:17:06.884 --> 00:17:09.504
Things that are sort of feature
add-ons for your application.

00:17:09.504 --> 00:17:11.624
And I saw this fix comes
up in both cases there.

00:17:11.691 --> 00:17:14.545
What does that do when, when
I click the ads fix to net?

00:17:15.175 --> 00:17:15.665
tom: Yeah.

00:17:15.665 --> 00:17:19.185
So Netlify is actually not as mature
as our reell integration is fairly new.

00:17:19.715 --> 00:17:22.011
But Inify, it just helps you.

00:17:22.761 --> 00:17:23.651
I think, actually, you know what?

00:17:23.651 --> 00:17:24.171
I don't remember.

00:17:24.201 --> 00:17:27.331
I think it just, at this moment, it just
like helps you with like the verification.

00:17:27.961 --> 00:17:28.251
I

00:17:28.251 --> 00:17:31.211
don't remember what is the extent
is there, but with versa, it also

00:17:31.301 --> 00:17:35.291
creates an environment, fetches and
authentication token puts it in the, you

00:17:35.291 --> 00:17:36.791
know, in the secrets and all of that.

00:17:36.791 --> 00:17:37.004
But just

00:17:37.004 --> 00:17:40.002
Netlify don't, don't have all
of that, all of those APIs yet.

00:17:40.002 --> 00:17:41.175
So we haven't built it fully.

00:17:41.830 --> 00:17:42.320
Track 1: Yeah.

00:17:42.320 --> 00:17:44.640
There's a surprising amount of
manual steps to adding a new

00:17:44.778 --> 00:17:46.018
provider to, to your application.

00:17:46.018 --> 00:17:48.818
And usually the one that catches me
on my first deploy of anything is

00:17:48.818 --> 00:17:51.698
I forget the environment variable
that needs to go somewhere, whether

00:17:51.698 --> 00:17:56.018
it's to my hosting provider or to
CI or, you know, GitHub actions,

00:17:56.293 --> 00:17:56.783
tom: Yeah.

00:17:56.783 --> 00:17:59.623
And, and you know, it's kinda like all
of those things are like, it's, you

00:17:59.623 --> 00:18:02.143
know, silly, what I just described is
like a very simple integration, right.

00:18:02.143 --> 00:18:06.143
But it's kinda like, well if you, you
save people like a few annoying manual

00:18:06.143 --> 00:18:09.679
steps that are gonna like, bite them in
the ass, like you said that is like a,

00:18:09.679 --> 00:18:13.159
you know, a total win for society, A total
win for the development society, at least.

00:18:14.024 --> 00:18:15.034
Track 1: Yeah, absolutely.

00:18:15.034 --> 00:18:17.594
I don't, I don't really have a phrase for
this yet, and I wonder if it's something

00:18:17.594 --> 00:18:20.354
you've thought about, but I feel like
day-to-day in the life of, of someone

00:18:20.674 --> 00:18:23.028
building anything, any engineer at any
company, I feel like there's a moment

00:18:23.028 --> 00:18:26.308
where you reach, like your level of, oh
man, this is one step too far for me.

00:18:26.338 --> 00:18:29.148
Like the mental tax I've
paid to get there is too far.

00:18:29.563 --> 00:18:32.443
Going to take me another day to
get this done, or I need to step

00:18:32.443 --> 00:18:33.441
away from this at some point.

00:18:33.441 --> 00:18:35.983
That, that's something that I've
experienced certainly in, you know,

00:18:35.983 --> 00:18:39.298
like so right now I'm building a company
and, and every day is learning something

00:18:39.298 --> 00:18:42.018
new and applying some sort of new, you
know, integration of things together.

00:18:42.018 --> 00:18:44.847
But I see in a lot of the folks that
I work with as sort of mentors and

00:18:44.877 --> 00:18:46.186
friends who work in the industry as well.

00:18:46.186 --> 00:18:49.665
And I don't hear developer experience
companies talking about a lot, but I think

00:18:49.665 --> 00:18:53.182
that's the ultimate like problem to solve
is if you're able to get rid of those

00:18:53.182 --> 00:18:56.502
little bits of friction from developers
experiences, they sort of love your thing

00:18:56.502 --> 00:18:58.302
more for being easier and easier to use.

00:18:58.392 --> 00:18:58.882
tom: Yeah.

00:18:58.882 --> 00:19:00.202
I mean, I, I couldn't agree more.

00:19:00.202 --> 00:19:01.562
That's, that's why, you know, we don't.

00:19:02.177 --> 00:19:05.907
that that's why like this, the, the curl
command that you copy already has an OR

00:19:05.907 --> 00:19:08.787
token that's temporary for the onboarding,
already has all of those things.

00:19:09.117 --> 00:19:13.627
Because even just telling people, Hey,
replace the OR token here kind of thing.

00:19:13.627 --> 00:19:17.142
It's like already way too much for someone
that doesn't care about your product yet.

00:19:17.602 --> 00:19:18.092
Yeah.

00:19:18.612 --> 00:19:18.972
Track 1: Yeah.

00:19:18.972 --> 00:19:21.532
If, if you really break it down,
there can be quite a few steps to

00:19:21.532 --> 00:19:22.572
getting any of these things done.

00:19:22.572 --> 00:19:25.653
And you know, the ability to compound a
couple of steps behind the button that

00:19:25.653 --> 00:19:28.833
says install on, you know, X provider
is a really nice thing to be able to do.

00:19:28.835 --> 00:19:31.398
So we talked a little bit
about what Fixx does currently.

00:19:31.398 --> 00:19:32.678
What are the things you're
thinking about for the.

00:19:33.688 --> 00:19:34.108
tom: Ooh.

00:19:34.888 --> 00:19:40.928
You know, so like one, one thing that we
are very excited about, and this is, it's

00:19:40.928 --> 00:19:42.088
just like web hooks in general, right?

00:19:42.088 --> 00:19:45.448
I mean, it's not even just web hooks,
you know, like the way, when you think

00:19:45.448 --> 00:19:49.008
about how, you know, like, kind of
like the Unix philosophy of kinda like

00:19:49.008 --> 00:19:50.648
one thing, one tool that does it well.

00:19:51.288 --> 00:19:53.088
and kinda like all the tools
are separated, you kinda like

00:19:53.088 --> 00:19:53.968
concatenate them together.

00:19:54.478 --> 00:19:57.608
I think we reached a point where the
internet is almost kind of like the

00:19:57.808 --> 00:19:59.168
database is the wires kind of thing.

00:19:59.508 --> 00:20:02.088
And we make an action and like we
don't need to persist anything.

00:20:02.088 --> 00:20:05.528
Like a message is being sent there
and they do something and a message

00:20:05.528 --> 00:20:06.648
is sent there and they do something.

00:20:06.648 --> 00:20:10.088
And kind of like all of this, like
workflows and you know, like even see

00:20:10.088 --> 00:20:13.088
it when our product, we use off zero
for authentication, strive for payment

00:20:13.088 --> 00:20:16.271
mail, gun for emails and people use us.

00:20:16.276 --> 00:20:20.276
God ask for web hooks and, you know, clerk
for authentication again and max for video

00:20:20.276 --> 00:20:21.636
and kinda like you have all of those.

00:20:22.206 --> 00:20:26.866
Interactions and what we just wanna
do is we wanna make those reliable,

00:20:27.536 --> 00:20:30.666
more widespread and exactly what
you were referring to earlier.

00:20:30.666 --> 00:20:33.226
Kinda like removing, even like
when the beginning of this chat,

00:20:33.256 --> 00:20:36.466
like removing those like annoying
extra steps that people need to do

00:20:36.466 --> 00:20:40.166
in order to ingest those events, I
think like gonna be a massive win.

00:20:40.166 --> 00:20:42.620
And we kinda like we all just
marching in those directions, making

00:20:42.620 --> 00:20:45.460
it easier to send, more useful to
receive, and easier to receive.

00:20:46.310 --> 00:20:47.120
Track 1: Yeah, sure.

00:20:47.120 --> 00:20:50.417
I think as people who are on, on
teams that build things, I think we

00:20:50.417 --> 00:20:51.737
all benefit from that too, right?

00:20:51.737 --> 00:20:55.645
Like it's, it's always nice to see when
a company's goals align with the better

00:20:55.645 --> 00:20:57.845
need of the, the developer community too.

00:20:57.923 --> 00:21:01.243
You know, you're not putting artificial
tiers in place to, to make more money.

00:21:01.243 --> 00:21:03.763
You are literally making
the process of making these

00:21:03.763 --> 00:21:04.963
implementations better for people.

00:21:04.963 --> 00:21:07.898
And I really like the idea of also
releasing, you know, open source

00:21:07.898 --> 00:21:10.834
tools to help people do it, whether
or not they're embedded in your, your.

00:21:11.549 --> 00:21:12.109
Stack.

00:21:12.112 --> 00:21:15.426
I think that's really one of the things
that I like, especially about the,

00:21:15.426 --> 00:21:18.546
the world of sort of API developer
community stuff too, is like a lot of

00:21:18.546 --> 00:21:21.226
the tooling we work on and a lot of
the people we work with are all working

00:21:21.226 --> 00:21:24.838
with each other and sort of allied
together to, to make our lives easier.

00:21:24.838 --> 00:21:28.318
Cuz ultimately, like we are all successful
when our end users are successful, we're

00:21:28.318 --> 00:21:31.958
not successful because we've, you know,
stomped on the competition necessarily.

00:21:31.958 --> 00:21:34.344
I think that's really one of the
things I like about the world

00:21:34.344 --> 00:21:35.464
we get to live in, I suppose.

00:21:35.809 --> 00:21:36.299
tom: Yeah.

00:21:36.299 --> 00:21:37.558
I mean like the developer.

00:21:37.558 --> 00:21:39.318
It's also like the open source mentality.

00:21:39.668 --> 00:21:40.628
Which is kind of

00:21:40.628 --> 00:21:41.348
like, Yeah.

00:21:41.738 --> 00:21:42.348
it's great.

00:21:42.348 --> 00:21:42.828
I agree.

00:21:43.543 --> 00:21:44.793
Track 1: Yeah, yeah, definitely.

00:21:44.793 --> 00:21:45.353
For sure.

00:21:45.408 --> 00:21:49.261
So I'm, I'm a couple more questions,
I guess, about fix, and I, I want

00:21:49.261 --> 00:21:52.850
to talk a little bit about sort of
your perspective on leading a company

00:21:52.850 --> 00:21:56.382
as well, and especially in, in this
sort of changing atmosphere we've got

00:21:56.382 --> 00:21:57.573
with economic changes and whatnot.

00:21:57.647 --> 00:22:00.587
but I, I, before we get
there, let's, let's do this.

00:22:00.587 --> 00:22:03.721
So I'm really interested in
I guess who, who you think.

00:22:03.780 --> 00:22:04.940
Lemme take a step back.

00:22:04.940 --> 00:22:07.780
Our audience for APIs you won't hate
are all API developers of some flavor.

00:22:08.250 --> 00:22:11.290
Probably they're all API consumers
on some level, and many of them are

00:22:11.490 --> 00:22:14.883
probably writing APIs that require
web hooks to be emitted at some point.

00:22:14.883 --> 00:22:17.142
What do you think is the point where
someone needs to realize that, Hey,

00:22:17.142 --> 00:22:19.942
maybe I should be considering taking
advantage of a service like this.

00:22:19.942 --> 00:22:22.902
Like, how does someone identify,
oh, I should be looking at fix,

00:22:22.902 --> 00:22:24.822
I should be looking at, you know,
whatever's out there in the.

00:22:25.317 --> 00:22:25.807
tom: Yeah.

00:22:26.017 --> 00:22:26.367
So.

00:22:26.867 --> 00:22:29.747
You know this, it's like the eternal
question of like build versus buy.

00:22:29.747 --> 00:22:30.467
And when I say

00:22:30.467 --> 00:22:31.867
buy, I don't even mean like pay money.

00:22:31.867 --> 00:22:33.339
I mean like using an existing product.

00:22:33.370 --> 00:22:37.770
Could be open source, could
be free, you know, develop.

00:22:37.770 --> 00:22:38.850
There's just like so many.

00:22:39.540 --> 00:22:42.381
We don't have that much time on
Earth in general as individuals.

00:22:42.381 --> 00:22:44.341
I know this became a
bit morbid, sorry, but

00:22:45.296 --> 00:22:46.156
Track 1: philosophical.

00:22:46.186 --> 00:22:46.476
I

00:22:46.491 --> 00:22:46.981
tom: Yeah.

00:22:46.981 --> 00:22:48.701
But we, we don't have
a lot of time on earth.

00:22:48.701 --> 00:22:51.301
We don't have a lot of time to
finish those goals that we want.

00:22:51.301 --> 00:22:53.701
And, you know, especially like
early stage startups, all we want

00:22:53.701 --> 00:22:55.501
is to make our customers happy.

00:22:55.751 --> 00:22:56.941
So when it came like.

00:22:57.826 --> 00:23:01.666
you know, the point for us, like,
do we build X or do we use off zero?

00:23:01.916 --> 00:23:03.186
We chose off zero, right?

00:23:03.186 --> 00:23:04.346
Because we, we don't care about those.

00:23:04.346 --> 00:23:06.026
We wanna just give our
customers what they want.

00:23:06.276 --> 00:23:10.866
So I think like, if you are resource
constrained, definitely like you

00:23:10.866 --> 00:23:11.946
need to look at a third party.

00:23:12.045 --> 00:23:14.085
And, you know, you know, you can
always, like, as I said, like

00:23:14.085 --> 00:23:15.365
our libraries are open source.

00:23:15.365 --> 00:23:16.845
You can always switch us out.

00:23:16.876 --> 00:23:19.996
If we don't make you happy, it's our
job to kind of like make sure that

00:23:19.996 --> 00:23:21.236
we keep constantly, make you happy.

00:23:21.327 --> 00:23:25.037
So I, I think the second part is, it's
kind of like when you reach a certain.

00:23:25.737 --> 00:23:28.417
Scale where actually the
maintenance is becoming annoying.

00:23:28.417 --> 00:23:29.897
Like if you look at some of our use

00:23:29.897 --> 00:23:33.597
case, like case studies on the website
you see that, you know, like just

00:23:33.597 --> 00:23:36.197
bringing back, you know, you kinda
like, you've spent all of this kind

00:23:36.197 --> 00:23:39.161
of time convincing these amazing
employee, you know, like team members

00:23:39.161 --> 00:23:41.321
to join the company and work on.

00:23:42.716 --> 00:23:46.196
you know, payments or work on whatever it
is that you're building, and then all of a

00:23:46.196 --> 00:23:49.676
sudden you are sending them off to like a
small team that does infrastructure work.

00:23:49.676 --> 00:23:50.996
They're not gonna be happy about that.

00:23:51.502 --> 00:23:53.622
And they're gonna be, you
know, you're gonna be like a

00:23:53.622 --> 00:23:54.622
lot of like movement there.

00:23:54.622 --> 00:23:56.782
Either they're gonna like leave
the team or join a different team.

00:23:56.782 --> 00:24:00.022
So it's kinda like it becomes this
like core infrastructure that no one

00:24:00.022 --> 00:24:02.022
knows very well and no one cares about.

00:24:02.022 --> 00:24:05.102
So I think the moment you start
realizing it is something you care.

00:24:05.977 --> 00:24:08.187
That's the time to professionalize it.

00:24:08.187 --> 00:24:09.147
Professionalizing it

00:24:09.147 --> 00:24:16.027
either means a dedicated, strong team that
has buy-in to this or outsourcing it, that

00:24:16.027 --> 00:24:17.147
that's the way I look at those things.

00:24:18.017 --> 00:24:18.487
Track 1: Sure.

00:24:18.518 --> 00:24:19.878
I appreciate that quite a bit.

00:24:19.878 --> 00:24:23.558
I both didn't expect this answer to be
quite so philosophical, but also really

00:24:23.558 --> 00:24:27.544
appreciate your ability to, to turn
that into a framework for recognizing

00:24:27.567 --> 00:24:30.127
you know, what the opportunity looks
like and when to, to jump on top of it.

00:24:30.127 --> 00:24:32.107
I think that's actually
pretty sagelike advice there.

00:24:32.183 --> 00:24:33.648
Yeah, Tom, I think that's really great.

00:24:33.709 --> 00:24:35.369
All right, so let's pivot a little bit.

00:24:35.429 --> 00:24:38.829
I'm interested in hearing what your
what the process is, or, sorry,

00:24:38.829 --> 00:24:41.426
not the process, but what it's
like leading in your, your company.

00:24:41.426 --> 00:24:45.138
Like what are you finding are the
challenges of, of growing, of building?

00:24:45.138 --> 00:24:47.796
What are the things that, that
keep you excited about working

00:24:47.796 --> 00:24:49.116
on a, a product like this?

00:24:50.271 --> 00:24:50.761
tom: Yeah.

00:24:51.021 --> 00:24:51.441
Wow.

00:24:51.441 --> 00:24:52.347
That's a big question.

00:24:52.347 --> 00:24:52.686
I really.

00:24:53.746 --> 00:24:55.796
I enjoy almost everything.

00:24:56.327 --> 00:24:59.167
You know, if you look at our
slack, I do a lot of support.

00:24:59.277 --> 00:25:02.127
I enjoy talking to our customers,
and I kind of like seeing what

00:25:02.127 --> 00:25:03.247
they want and what they're asking.

00:25:03.757 --> 00:25:07.367
I enjoy jumping on calls and helping
customers like find out the, the best

00:25:07.647 --> 00:25:08.630
solution for them and what they need.

00:25:08.630 --> 00:25:11.251
Engineering, you know, I've
been coding since I was nine.

00:25:11.321 --> 00:25:13.571
It's still like a soft place in my heart.

00:25:13.687 --> 00:25:14.897
Really just everything.

00:25:14.953 --> 00:25:16.363
What keeps me up at night.

00:25:17.328 --> 00:25:21.398
Is making sure that we build the
right thing for our customers

00:25:21.452 --> 00:25:22.652
which is not very obvious, right?

00:25:22.652 --> 00:25:25.372
I mean, like, there's like one end
of the spectrum, which is like just

00:25:25.372 --> 00:25:26.532
saying yes to whatever they ask for.

00:25:26.532 --> 00:25:27.492
And this, this is a terrible.

00:25:28.452 --> 00:25:29.370
Terrible way of building a product.

00:25:29.370 --> 00:25:32.693
But the other end, which is
like say no all the time, also

00:25:32.693 --> 00:25:33.813
comes with its challenges.

00:25:33.813 --> 00:25:36.133
And it's kinda like you need
to balance both of these.

00:25:36.493 --> 00:25:40.333
Kinda like knowing when to say yes,
when to say no, and while keeping your

00:25:40.533 --> 00:25:43.133
customers happy, because you know, at the
end of the day they're outsourcing this

00:25:43.133 --> 00:25:45.733
huge chunk of the infrastructure to us.

00:25:46.063 --> 00:25:48.213
So like how can we make sure that we're.

00:25:49.153 --> 00:25:54.623
Trusted partner and not this annoying, you
know, brat that always says no, whatever.

00:25:54.623 --> 00:25:57.481
So it's kinda like, it's really
like a tough balance to to keep,

00:25:59.016 --> 00:25:59.986
Track 1: Sure, yeah.

00:25:59.986 --> 00:26:04.370
That's the eternal struggle balancing
needs and, and desires and especially

00:26:04.370 --> 00:26:07.313
demands with like the moment you've
started serving customers, you can

00:26:07.313 --> 00:26:09.673
find out who your louder customers
are and the ones with stronger

00:26:09.673 --> 00:26:12.113
opinions, and that's not always
best for them or for the business.

00:26:12.153 --> 00:26:15.544
But you need to kind of distill that
information into good decisions, you

00:26:15.544 --> 00:26:16.843
know, both for your business and theirs.

00:26:16.843 --> 00:26:17.456
It's a tricky thing.

00:26:17.981 --> 00:26:18.471
tom: Yeah.

00:26:18.781 --> 00:26:21.831
I guess another part as well is kind
of like going back and fixing things.

00:26:21.831 --> 00:26:24.311
So kinda like technical
debt versus marching on,

00:26:24.405 --> 00:26:27.325
Which is especially relevant
for company like hours because

00:26:27.325 --> 00:26:28.125
you know, the moment we.

00:26:28.870 --> 00:26:29.940
Onboard a customer.

00:26:29.940 --> 00:26:33.260
Like, I mean, Microsoft is not a customer,
but when the moment we onboard Microsoft

00:26:33.260 --> 00:26:34.780
as a customer, we're Microsoft Scale.

00:26:34.880 --> 00:26:37.780
And then Amazon is a customer
with Microsoft and Amazon Scale.

00:26:37.780 --> 00:26:38.380
So it's kinda

00:26:38.380 --> 00:26:41.740
like he keeps on like you know, it
keeps on like jumping as like a,

00:26:41.810 --> 00:26:45.040
a, a menacing step function that
we have to always be aware of.

00:26:45.101 --> 00:26:46.381
Track 1: You make it
sound like a horror movie.

00:26:46.611 --> 00:26:47.101
Yeah.

00:26:47.421 --> 00:26:48.301
. Without a doubt.

00:26:48.941 --> 00:26:51.649
So I, I wanna talk about, about
your company's growth then too.

00:26:51.649 --> 00:26:53.452
Are you how big is your
engineering team right now?

00:26:53.463 --> 00:26:55.978
tom: So we are five at the
moment, like five engineers.

00:26:56.458 --> 00:26:56.932
Yeah.

00:26:58.062 --> 00:27:01.154
. 
Track 1: Yeah, that's that's
a, a solidly small team for the

00:27:01.154 --> 00:27:02.085
amount of output you've had.

00:27:02.085 --> 00:27:04.925
Especially like looking at this list
of climate client libraries that you

00:27:04.925 --> 00:27:09.325
rattled off before, you know, to 10 or
15 different flavors of, of spic exist.

00:27:09.325 --> 00:27:10.005
That's really cool.

00:27:10.565 --> 00:27:11.987
Are you expanding, are you hiring for any

00:27:12.027 --> 00:27:12.957
tom: Yeah, we are hiring.

00:27:12.967 --> 00:27:16.336
We, so we just recently raised
around with Andre Howorth and we

00:27:16.336 --> 00:27:19.216
have like, you know, a, a big chunk
of it is like hiring more engineers.

00:27:19.254 --> 00:27:22.821
You know, we we're lucky to have,
you know, like a high output team.

00:27:22.822 --> 00:27:24.955
But I think we can even do even more.

00:27:24.955 --> 00:27:26.695
We just like more people helping out.

00:27:26.726 --> 00:27:27.966
Yeah, very excited about

00:27:27.991 --> 00:27:29.321
Track 1: Yeah, sure.

00:27:29.321 --> 00:27:32.565
And if folks listening to the show
are looking for a job, where's

00:27:32.565 --> 00:27:33.805
the place to go to see your

00:27:34.140 --> 00:27:34.603
tom: Yeah.

00:27:34.603 --> 00:27:36.215
Vx.com/careers.

00:27:36.299 --> 00:27:40.379
But also if you think we should be hiring
you and we don't have an opening email us.

00:27:40.379 --> 00:27:41.669
Anyway happy to chat.

00:27:42.484 --> 00:27:43.054
Track 1: I like that.

00:27:43.054 --> 00:27:43.894
That's solid perspective.

00:27:44.124 --> 00:27:46.882
I will obviously make sure that
there's a link in the show notes too

00:27:46.906 --> 00:27:49.368
to your careers page and, and just,
you know, speak and some of the other

00:27:49.368 --> 00:27:50.268
things we've chatted about here.

00:27:50.299 --> 00:27:51.939
What's the best place to find you, Tom?

00:27:51.939 --> 00:27:54.809
If some of our, our listeners want
to shout at you about web hooks or,

00:27:54.809 --> 00:27:57.369
you know, their thoughts on open
source or whatever the case may be.

00:27:57.415 --> 00:28:01.202
tom: Yeah, I mean, you can email me
directly@tomatvx.com or just we have

00:28:01.202 --> 00:28:03.562
a community slack at vx.com/slack.

00:28:03.692 --> 00:28:05.482
So just jump in, have a chat.

00:28:05.482 --> 00:28:06.122
Happy to

00:28:06.127 --> 00:28:06.797
Track 1: Perfect.

00:28:07.227 --> 00:28:08.117
Yeah, will do.

00:28:08.117 --> 00:28:09.677
I'll, I'll include links to those as well.

00:28:10.322 --> 00:28:12.962
Hopefully we don't fill
your spam coffers too

00:28:12.982 --> 00:28:13.472
tom: Yeah.

00:28:13.722 --> 00:28:14.392
Already

00:28:14.392 --> 00:28:14.672
filled.

00:28:14.672 --> 00:28:15.592
Don't worry, .Yeah.

00:28:16.432 --> 00:28:17.362
Track 1: Yeah, me too.

00:28:17.362 --> 00:28:19.042
I, I can definitely relate to that.

00:28:19.077 --> 00:28:22.837
Something about having an easy name
and then@yourcompanyname.com makes

00:28:22.837 --> 00:28:24.117
it real easy for people to find you.

00:28:24.117 --> 00:28:24.397
I think.

00:28:24.397 --> 00:28:24.677
Yeah.

00:28:24.744 --> 00:28:26.686
Now that I've said that, I'm sure
I made it worse for both of us.

00:28:26.753 --> 00:28:28.613
Tom, thanks so much for coming
to hang out with me today.

00:28:28.613 --> 00:28:30.093
It's been really
interesting talking to you.

00:28:30.093 --> 00:28:33.172
I am looking forward to you obviously
getting the use fix more in the future,

00:28:33.172 --> 00:28:37.005
and I, I will likely end up be being in
your inbox one way or the other, asking

00:28:37.325 --> 00:28:38.895
questions about web fix as things go on.

00:28:38.895 --> 00:28:40.852
We'd love to have you come back
anytime if you're interested

00:28:40.852 --> 00:28:41.715
in talking a little bit more.

00:28:41.715 --> 00:28:42.472
But thanks for joining today.

00:28:42.712 --> 00:28:42.952
I really

00:28:43.112 --> 00:28:43.602
tom: Yeah.

00:28:43.602 --> 00:28:43.922
Thank you.

00:28:43.922 --> 00:28:44.352
It was great.

00:28:44.352 --> 00:28:44.806
Great being here.

00:28:45.070 --> 00:28:45.760
Track 1: Likewise.

00:28:45.760 --> 00:28:46.320
Take care,

00:28:46.515 --> 00:28:47.075
tom: You too.