WEBVTT

NOTE
This file was generated by Descript 

00:00:00.000 --> 00:00:01.620
Track 1: Get my sexy radio voice on.

00:00:02.765 --> 00:00:03.600
Ah, no, I'm

00:00:03.750 --> 00:00:04.635
Quobix: Radio dj.

00:00:05.010 --> 00:00:06.540
Track 1: that was a bad
joke and everyone's upset.

00:00:08.320 --> 00:00:09.370
Hello everybody.

00:00:09.370 --> 00:00:11.560
Welcome to another episode of APIs.

00:00:11.560 --> 00:00:13.510
You won't hate the podcast version.

00:00:13.740 --> 00:00:16.740
And yeah, I'm excited once again.

00:00:16.770 --> 00:00:17.730
I'm running the show.

00:00:17.760 --> 00:00:21.030
No, Mike to help me out, so bear with us.

00:00:21.120 --> 00:00:22.200
I think it's recording.

00:00:22.350 --> 00:00:23.370
I guess you'll find out.

00:00:23.370 --> 00:00:30.160
I, today I am joined by David Shanley who
you may have heard all over the place.

00:00:30.340 --> 00:00:31.180
He's popping up.

00:00:31.255 --> 00:00:33.730
I, I was talking to him at API days.

00:00:34.255 --> 00:00:38.425
In Paris recently and he's made a
whole bunch of really cool tools.

00:00:38.425 --> 00:00:41.430
So David, do you wanna tell
everyone a bit about yourself?

00:00:42.890 --> 00:00:44.030
Quobix: Thank you for having me, Phil.

00:00:44.030 --> 00:00:45.815
Yeah, so my name is Dave Shanley.

00:00:46.215 --> 00:00:47.325
I go by the name of Quos.

00:00:47.735 --> 00:00:49.930
You know, but, you know that's just,
you know, a stupid internet thing.

00:00:49.930 --> 00:00:51.970
But anyway Dave, Dave Shanley.

00:00:52.020 --> 00:00:52.409
I,

00:00:52.424 --> 00:00:53.385
Track 1: I, I called you David.

00:00:53.385 --> 00:00:53.684
Sorry.

00:00:53.689 --> 00:00:57.314
I, I, I go, I, I'm, I'm
posh Now I go too formal.

00:00:57.404 --> 00:00:58.154
That's upsetting.

00:00:58.664 --> 00:00:59.080
Just Dave,

00:00:59.654 --> 00:01:01.874
Quobix: No problem, no problem at all.

00:01:02.214 --> 00:01:07.170
So I'm the founder of Princess Beef
Heavy Industries or PB three, three F.

00:01:07.270 --> 00:01:10.420
You know, it's, it's, it's, it's
shorter to write, but it's just longer

00:01:10.425 --> 00:01:12.310
to say in all, in all of all forms.

00:01:12.880 --> 00:01:13.210
Track 1: What is that?

00:01:13.210 --> 00:01:13.690
name about?

00:01:13.690 --> 00:01:16.420
Tell us some more about that
before you get back to the intro.

00:01:16.435 --> 00:01:18.685
Quobix: Yeah, so actually I was, I
was thinking of, you know, what do

00:01:18.685 --> 00:01:22.315
I call, what do I call, what would I
call myself or would I call my company?

00:01:22.675 --> 00:01:25.595
And it was actually my 2-year-old
daughter, which she was two at the time.

00:01:25.715 --> 00:01:27.365
And she came up, she
used to watch this show.

00:01:27.365 --> 00:01:30.520
It was blaze in the Monster Machines,
which is a show about monster trucks.

00:01:31.059 --> 00:01:33.605
And she said, I wanna watch Princess Beef.

00:01:33.665 --> 00:01:33.964
I'm like.

00:01:34.385 --> 00:01:35.705
What Princess?

00:01:36.064 --> 00:01:40.235
Princess Beef, there's no
mentions of princesses or beef or

00:01:40.235 --> 00:01:41.434
anything like that in the show.

00:01:41.434 --> 00:01:42.784
She just called it Princess Beef.

00:01:42.784 --> 00:01:46.254
So then, you know, actually it was a
little while longer, she said she was

00:01:46.259 --> 00:01:49.224
playing the drums, like toy drums and
she called them the honey drums and

00:01:49.224 --> 00:01:51.594
I put the two together and thought
Princess Beef and the honey drums.

00:01:52.314 --> 00:01:54.054
Isn't that a great name for a band?

00:01:54.804 --> 00:01:55.674
If I was younger?

00:01:55.734 --> 00:01:55.794
You

00:01:55.794 --> 00:01:58.044
know, I thought, I thought,
yeah, may maybe, maybe.

00:01:58.044 --> 00:02:00.114
But then I thought, you know,
it's bit too much for company

00:02:00.114 --> 00:02:01.974
name, but Princess beef and then.

00:02:02.664 --> 00:02:05.184
I looked it up and there's already
a company called Princess Beef.

00:02:05.544 --> 00:02:08.154
They're a ranch in Colorado, I think.

00:02:08.184 --> 00:02:09.654
And they, they, they raise cattle.

00:02:10.074 --> 00:02:12.834
So I thought, well, okay, well
how do I differentiate it?

00:02:13.134 --> 00:02:16.464
And I was thinking back to, you
know, my, my, my nineties roots

00:02:16.565 --> 00:02:20.615
and there was a wonderful company
called Loft Heavy Industries, or.

00:02:20.895 --> 00:02:23.835
10 PHT depends on how you,
you would say the acronym.

00:02:24.105 --> 00:02:27.375
It was a hacker think group hack,
hacker tank think tank type thing.

00:02:27.865 --> 00:02:29.815
And I just love that
heavy industries element.

00:02:29.815 --> 00:02:33.805
And there was like a bunch of skater
companies that had heavy industries on

00:02:33.805 --> 00:02:35.245
there, you know, postpay it to the name.

00:02:35.605 --> 00:02:36.355
I thought, why not?

00:02:36.385 --> 00:02:39.205
Let's, let's go right back to
the nineties and re, you know,

00:02:39.445 --> 00:02:41.035
relive all of this, this joy.

00:02:41.040 --> 00:02:42.895
Anyway, so that's the, that's
the reason why it's called that.

00:02:42.895 --> 00:02:44.965
No, nothing else other than I just, I love

00:02:45.095 --> 00:02:45.690
Track 1: software.

00:02:45.720 --> 00:02:46.650
I like the approach.

00:02:47.010 --> 00:02:50.400
I'm, I'm, I'm apparently trying to do like
the punk version of the Woodland Trust, so

00:02:50.405 --> 00:02:52.140
I like the, the punk version of software.

00:02:52.200 --> 00:02:52.950
Let's, let's do it.

00:02:53.190 --> 00:02:54.090
Keep it interesting.

00:02:54.640 --> 00:02:55.235
Alright, brilliant.

00:02:55.235 --> 00:02:58.265
So I interrupted you, but you were
telling us about a bit more about

00:02:58.265 --> 00:02:59.435
what yourself and what you get up to.

00:03:00.620 --> 00:03:01.070
Quobix: Yes.

00:03:01.100 --> 00:03:02.780
So I'm the f founder of Princess Beef.

00:03:02.830 --> 00:03:05.645
I'm also, you know, that's,
that's what I do by, by night.

00:03:05.915 --> 00:03:08.765
But I also have a full-time
job as a distinguished engineer

00:03:08.765 --> 00:03:10.115
at a company called Splunk.

00:03:10.635 --> 00:03:12.435
If you haven't heard of
it, it's it's like we do.

00:03:12.900 --> 00:03:13.559
Big data.

00:03:13.619 --> 00:03:17.460
We collect all the logs, all the
information, put it into our big index

00:03:17.460 --> 00:03:19.530
and allows you to make sense of it.

00:03:19.530 --> 00:03:22.319
And we build premium applications
on top of that platform.

00:03:22.499 --> 00:03:23.999
So yeah, that's what I do during the day

00:03:23.999 --> 00:03:24.179
and

00:03:24.275 --> 00:03:25.260
Track 1: have heard of them.

00:03:26.234 --> 00:03:28.304
The, that's, it's like a
pretty big deal, right?

00:03:28.905 --> 00:03:31.035
It's like a pretty big
company or how many?

00:03:31.035 --> 00:03:31.364
A few are

00:03:31.440 --> 00:03:33.900
Quobix: Yeah, it's, but there's,
there's, there's about 8,000 people

00:03:33.900 --> 00:03:35.790
in the company, maybe 9,000 now.

00:03:35.840 --> 00:03:36.530
It's pretty large.

00:03:36.530 --> 00:03:41.000
It's actually just been bought, acquired,
well, it hasn't closed yet, but Cisco has

00:03:41.000 --> 00:03:43.310
just purchased it for 27 billion, which

00:03:43.475 --> 00:03:44.075
Track 1: Good lord.

00:03:44.090 --> 00:03:44.630
Quobix: largest.

00:03:44.630 --> 00:03:46.250
Yeah, it's a larger,
large amount of money.

00:03:46.660 --> 00:03:48.580
So yeah, we'll see what
hap what happens with that.

00:03:48.580 --> 00:03:48.790
But

00:03:48.910 --> 00:03:49.899
Track 1: much of that do you get?

00:03:51.235 --> 00:03:53.904
Quobix: 0.0001%

00:03:54.485 --> 00:03:57.905
Track 1: But yeah, there,
there was a number at the end

00:03:57.905 --> 00:03:58.745
of all those zeroes though.

00:03:58.745 --> 00:03:59.795
So there is something, there is

00:03:59.855 --> 00:04:01.475
Quobix: There is some, there
is definitely something.

00:04:01.555 --> 00:04:04.675
But yeah, definitely not what the CEO
is gonna be walking away with for sure.

00:04:05.245 --> 00:04:05.485
Track 1: now.

00:04:05.485 --> 00:04:05.965
Fair.

00:04:06.025 --> 00:04:08.665
Alright, well that's, that's, that's news.

00:04:08.695 --> 00:04:10.345
It's not, it's not bad news, it's news.

00:04:10.805 --> 00:04:11.615
Fantastic.

00:04:12.094 --> 00:04:17.255
And so on the side you are working on
a bunch of really cool stuff and so.

00:04:18.380 --> 00:04:20.240
I, we, we spoke a bit.

00:04:20.240 --> 00:04:23.840
You've been helping out with open API
tools, the website that lists, guess what?

00:04:23.840 --> 00:04:24.979
A bunch of open API I tools.

00:04:24.979 --> 00:04:26.150
I dunno why I expanded on that.

00:04:26.150 --> 00:04:27.200
It's in the name.

00:04:27.229 --> 00:04:28.250
It does what it says on the tin.

00:04:28.590 --> 00:04:30.900
But we'd been a little bit snowed
under and you were helping with some

00:04:30.905 --> 00:04:32.579
pull requests and I appreciated that.

00:04:32.819 --> 00:04:37.119
And then, yeah, I got to see you
give a talk at API days in Paris.

00:04:37.269 --> 00:04:39.069
I went over there, was running about.

00:04:39.224 --> 00:04:40.184
Who needs some work?

00:04:40.184 --> 00:04:41.054
Do you need some work?

00:04:41.054 --> 00:04:42.014
Can I write for you?

00:04:42.314 --> 00:04:43.094
Oh God.

00:04:43.094 --> 00:04:43.394
Work.

00:04:43.394 --> 00:04:47.384
You know, work, work work is hard when
you don't have a regular, regular job.

00:04:47.414 --> 00:04:48.164
I just have to go and

00:04:48.264 --> 00:04:48.984
Quobix: It is, yeah.

00:04:48.984 --> 00:04:51.384
You know, trying and
lots of talking to people

00:04:51.744 --> 00:04:54.534
Track 1: Yeah, it was the first time I've
actually had to do networking, right?

00:04:54.534 --> 00:04:57.054
Like, normally I just turn up at a
conference and I'm like, the company

00:04:57.054 --> 00:04:58.704
I'm working for paid me to be here.

00:04:58.704 --> 00:04:59.454
Here's my talk.

00:04:59.454 --> 00:05:00.894
I'll be at the pub from here on out.

00:05:01.074 --> 00:05:03.714
But this time it was very much
like I actually need to go to every

00:05:03.714 --> 00:05:06.174
booth and shake every hand and
talk to everyone and see if anyone

00:05:06.294 --> 00:05:08.574
has any paid work for me anyway.

00:05:08.624 --> 00:05:12.554
Seeing your talk was, was a, a nice
refreshing break from a lot of,

00:05:12.554 --> 00:05:15.714
like, AI will save the world and,
if you don't need to build an API,

00:05:15.924 --> 00:05:18.624
you don't need to build an API Ever
'cause you can just get AI to do it.

00:05:18.624 --> 00:05:21.504
Although you have to write a
specific API for the AI to work.

00:05:21.584 --> 00:05:23.114
Just a lot of very silly talk.

00:05:24.419 --> 00:05:25.349
Brilliant talk.

00:05:25.499 --> 00:05:27.029
We won't, we won't get onto that tangent.

00:05:27.239 --> 00:05:27.869
Good talk from you.

00:05:28.049 --> 00:05:33.099
You were, it, it was, I really enjoyed
the talk considering you spent the a

00:05:33.099 --> 00:05:36.069
good half of the talk, making fun of
spectral a tool that I helped to build.

00:05:36.279 --> 00:05:39.549
So I did what any rational human being
would do and we all, we went to the

00:05:39.554 --> 00:05:41.139
pub and shot the shit and it was great.

00:05:41.549 --> 00:05:48.209
You built, you built vacuum, which is kind
of like a go equivalent of, of spectral.

00:05:48.209 --> 00:05:50.399
And to save me butcher in the
introduction, like, tell me,

00:05:50.429 --> 00:05:52.229
tell, tell our listeners a
little bit more about vacuum.

00:05:52.944 --> 00:05:57.364
Quobix: Yeah, so, so it's, it's it's
inspired by spectral it's, it's it's

00:05:57.364 --> 00:06:01.654
based on the same concept, so it's
compatible with spectral rules and

00:06:01.654 --> 00:06:03.334
core functions and things like that.

00:06:03.334 --> 00:06:03.574
So you.

00:06:03.964 --> 00:06:07.744
In theory, you should be able to take a
spectral rule set, plug it into vacuum,

00:06:07.744 --> 00:06:09.454
and it'll give you the same results.

00:06:09.454 --> 00:06:12.004
There's, there's, there's different logic
and it, it's, it's built differently.

00:06:12.004 --> 00:06:12.604
Completely different.

00:06:12.604 --> 00:06:17.434
It's different architecture, but
the reason why it exists and now

00:06:17.434 --> 00:06:20.644
understand I was making fun of some
of the speed was, was, was because

00:06:20.649 --> 00:06:21.869
of the, was because of the speed.

00:06:22.714 --> 00:06:25.594
So I'll take, I take you back to
the, the kind of origins of it.

00:06:25.944 --> 00:06:29.239
It was around like 2019 when I was
working at a company called VMware.

00:06:29.949 --> 00:06:30.849
It doesn't exist anymore.

00:06:30.909 --> 00:06:32.589
It's been bought by Broadcom.

00:06:33.079 --> 00:06:37.099
But yeah, but the, the, the, the
big thing there was, you know, there

00:06:37.104 --> 00:06:40.699
was a huge, there's thousands and
thousands of open API specs, and

00:06:40.789 --> 00:06:43.879
there was, some were generated, some
were handwritten, some were rubbish,

00:06:43.879 --> 00:06:45.199
some were just, didn't even work.

00:06:45.199 --> 00:06:46.279
But these were all being just.

00:06:46.279 --> 00:06:51.049
Pushed out as documentation to
customers, and they were just rubbish.

00:06:51.049 --> 00:06:51.739
They were just terrible.

00:06:51.739 --> 00:06:53.149
They didn't work in co generators.

00:06:53.149 --> 00:06:55.249
They, the, the documentation was awful.

00:06:55.249 --> 00:06:56.239
It, it just didn't load.

00:06:56.659 --> 00:06:58.819
It was, there was no SEO,
you couldn't discover it.

00:06:58.819 --> 00:07:01.069
All, all kinds of problems anyway.

00:07:01.179 --> 00:07:05.079
So I got tasked with this problems
like, can you start figuring this out?

00:07:05.079 --> 00:07:06.369
Can you start figuring this mess out?

00:07:06.699 --> 00:07:10.539
And the first thing I did was, okay, let's
go and grab some tools from the internet.

00:07:10.544 --> 00:07:13.959
So I started grabbing documentation
tools and linting grab spectral

00:07:14.259 --> 00:07:18.729
started running it, and it was doing
fine for the smaller specs, you

00:07:18.729 --> 00:07:20.229
know, the smaller SaaS services.

00:07:20.589 --> 00:07:23.319
But when I fed in, there's a
product of VMware called vSphere.

00:07:24.189 --> 00:07:29.889
This thing was built in 2006, and it has.

00:07:30.514 --> 00:07:31.564
10,000.

00:07:31.624 --> 00:07:36.304
20,000 a Ps, an ungodly amount of APIs,
and all these models were object oriented,

00:07:36.994 --> 00:07:40.084
fed some of those specs in, and they
were like 70, 80 megabytes a piece.

00:07:41.599 --> 00:07:43.249
spect, which did give us a response back.

00:07:43.249 --> 00:07:44.629
It just, it just never came back.

00:07:44.839 --> 00:07:46.639
It went off, never came back.

00:07:47.239 --> 00:07:48.739
It was like, okay, what
do we do about that?

00:07:48.949 --> 00:07:52.999
So started, we actually tried to build
a tool internally to replicate spectral,

00:07:52.999 --> 00:07:55.009
and failed absolutely miserably.

00:07:55.069 --> 00:07:55.579
We failed.

00:07:55.879 --> 00:07:58.399
Couldn't do it just because
spectral was, it's so complicated.

00:07:58.429 --> 00:07:58.999
Did such a good

00:07:58.999 --> 00:08:00.169
job and it was, you know,

00:08:00.229 --> 00:08:01.849
Track 1: does a lot of
different things as well.

00:08:01.939 --> 00:08:05.509
Like the way, so one thing that people
always kind of forget about with linter

00:08:05.509 --> 00:08:09.229
is like when you've got a code-based
linter, you can usually look at that

00:08:09.234 --> 00:08:12.739
file to find out if that syntax is
correct, or you can, you can kind of use

00:08:12.739 --> 00:08:15.199
reflection APIs in PP to use the PHP term.

00:08:15.409 --> 00:08:16.219
You can look at the reflection.

00:08:16.219 --> 00:08:16.759
API.

00:08:16.779 --> 00:08:20.769
To load it up and be like, does the
name of this function look right to you?

00:08:20.959 --> 00:08:24.899
But it, but you, you know what line that
that file is on or that function is on

00:08:24.904 --> 00:08:27.989
and you, and it's, it's a lot easier
to, to work with individual files,

00:08:27.989 --> 00:08:31.729
which is therefore quicker than it,
than with open API because you have to.

00:08:32.104 --> 00:08:36.124
Build all of the structure into memory,
like you have to follow every single

00:08:36.124 --> 00:08:37.714
ref of which there might be thousands.

00:08:37.894 --> 00:08:41.254
And then build kind of like a, an
actual map, a fully referenced map

00:08:41.284 --> 00:08:42.694
of that, which gets quite chunky.

00:08:42.944 --> 00:08:45.614
And then you have to like find
out if something is a problem

00:08:45.614 --> 00:08:47.324
in every single location.

00:08:47.324 --> 00:08:48.494
What it is used like the.

00:08:48.604 --> 00:08:52.684
The issue might not be in the file you
are looking at, it's when that file is, is

00:08:52.684 --> 00:08:55.204
reved into a place and now it's a problem.

00:08:55.204 --> 00:08:57.574
And then, and then a lot
of tools have done that.

00:08:57.574 --> 00:09:00.244
Like Specky, the thing that kind
of inspired Spectral did that,

00:09:00.484 --> 00:09:03.124
but then it couldn't tell you
which file the problem was in.

00:09:03.304 --> 00:09:06.514
So you have to kind of go up and down
into these different formats and like

00:09:06.604 --> 00:09:10.744
map everything to a different place
and it's bloody confusing to do so.

00:09:10.794 --> 00:09:13.614
I can only imagine, like I've, I've played
with the Spectral Source code quite a lot.

00:09:13.614 --> 00:09:16.714
I didn't write it, but I was like the
product manager there for a while.

00:09:16.714 --> 00:09:19.814
And yeah, every time I look
in there, I just go, Hmm,

00:09:19.874 --> 00:09:20.924
someone else can work on that.

00:09:20.924 --> 00:09:22.754
I'm not gonna, I'm not,
not gonna even try.

00:09:24.724 --> 00:09:29.644
Quobix: It, you know, the, so and I
discovered that when, after, long story

00:09:29.644 --> 00:09:33.634
short we were trying to run spectral with
some of this tooling, couldn't get it to

00:09:33.634 --> 00:09:34.894
run at the speed that we needed it to.

00:09:34.894 --> 00:09:36.454
So I said, look, let's, let's rebuild it.

00:09:36.454 --> 00:09:37.444
And VMware said no.

00:09:37.924 --> 00:09:40.654
And as I got all these other tools that
we built, said, let's open source them.

00:09:40.659 --> 00:09:42.214
And they're like, no, we're
not gonna do any of that.

00:09:42.214 --> 00:09:45.604
So I was like, okay, I want to, I
want to give back to the community.

00:09:45.604 --> 00:09:46.624
I want to work on this stuff.

00:09:46.624 --> 00:09:47.464
I want to build this link.

00:09:48.319 --> 00:09:50.059
You won't, you don't wanna do it.

00:09:50.269 --> 00:09:52.339
I don't have a future here if
you don't wanna work on it.

00:09:52.339 --> 00:09:52.789
So I'm out.

00:09:52.789 --> 00:09:56.299
So when I, and I basically quit VMware
and started building it from scratch, so.

00:09:56.674 --> 00:10:00.064
Th going through that process
of day zero, blank slate.

00:10:00.154 --> 00:10:02.224
Okay, I'm gonna build my own version.

00:10:02.254 --> 00:10:06.184
I'm gonna take spectral as a template
or as a, as a, as an inspiration.

00:10:06.184 --> 00:10:08.824
Look at the source code and
then reimagine that and go.

00:10:09.274 --> 00:10:12.714
And I spent two months rewriting that.

00:10:12.974 --> 00:10:15.944
Reference, look up,
trying to figure that out.

00:10:16.544 --> 00:10:20.744
Recursive logic, months, months
of scratch scratching my head

00:10:20.744 --> 00:10:22.274
and I failed multiple times.

00:10:22.274 --> 00:10:24.434
I couldn't get it to work and
I couldn't get it to work fast.

00:10:24.944 --> 00:10:27.404
So trying to make that work,
you know, the work that was done

00:10:27.404 --> 00:10:29.024
on Spectra was, was phenomenal.

00:10:29.504 --> 00:10:32.804
It to be months and months just to wrap my
head around how to get the logic together.

00:10:33.204 --> 00:10:35.994
Eventually I pulled it, pulled it, pulled
it together, but I was having like.

00:10:36.739 --> 00:10:37.699
Recursive dreams.

00:10:37.699 --> 00:10:40.909
Like I was waking up, you know, in the
same like loop in my head, like trying

00:10:40.909 --> 00:10:45.929
to program my way through a dream, you
know, in this recursive stepping in way.

00:10:45.929 --> 00:10:49.139
Anyway, it was driving me nuts, but
yeah, got there in the end and, and

00:10:49.144 --> 00:10:53.669
the whole purpose was to, I want to
be able to generate a spectral report

00:10:53.909 --> 00:10:55.969
or a report but I want it to run.

00:10:56.479 --> 00:11:01.009
Fast and I need a, a language that's
more suited to do this type of stuff.

00:11:01.159 --> 00:11:05.389
You know, ideally it would've been in Rust
or done it in c plus plus or something,

00:11:05.389 --> 00:11:08.359
but you know, I was familiar with Go
Loved Go, been using it for years and

00:11:08.364 --> 00:11:10.699
it's almost as fast, you know, you know,

00:11:10.699 --> 00:11:13.969
it's not as, not as fast,
but yeah, almost as fast.

00:11:14.269 --> 00:11:15.529
So it would, it would do the job.

00:11:15.559 --> 00:11:19.219
Plus there's a, there's a pretty
large community for Go, so yeah, it's

00:11:19.219 --> 00:11:23.809
spent like four months, five months
building it, you know, just every day.

00:11:24.144 --> 00:11:24.954
Chop away.

00:11:25.044 --> 00:11:25.674
Chop away.

00:11:25.704 --> 00:11:26.304
Chop away.

00:11:26.634 --> 00:11:27.264
Threw it away.

00:11:27.264 --> 00:11:28.014
Start again.

00:11:28.044 --> 00:11:28.704
Start again.

00:11:29.034 --> 00:11:31.744
Eventually I got a design that
actually worked and worked well

00:11:31.744 --> 00:11:35.614
and was something I could then
add onto to and scale up and open.

00:11:35.614 --> 00:11:38.464
Sourced it and said, you
know, what do you think?

00:11:39.124 --> 00:11:39.274
No.

00:11:39.604 --> 00:11:41.254
First few months there was zero.

00:11:41.254 --> 00:11:42.814
It was like, no, it was cricket, but yeah.

00:11:42.814 --> 00:11:43.489
Started to take off.

00:11:44.534 --> 00:11:45.074
Track 1: that's wild.

00:11:45.074 --> 00:11:45.524
I mean, yeah.

00:11:45.524 --> 00:11:50.604
The, the entire API linting when was
vacuum released a year or two ago,

00:11:51.294 --> 00:11:54.404
Quobix: Yeah, it was
2022, like April or May,

00:11:54.734 --> 00:11:55.424
Track 1: Yeah, I gotcha.

00:11:55.544 --> 00:11:59.354
So that's, that's like linting
is a thing now by 2022, right?

00:11:59.359 --> 00:12:03.094
Like that, that's it still kind of
early days, but in it is been the

00:12:03.094 --> 00:12:05.704
last year or two where it's really
taken off all of the tooling vendors.

00:12:06.089 --> 00:12:07.019
Are working on it.

00:12:07.019 --> 00:12:10.709
They've either, you know, they've either
baked, spectral in under the hood like

00:12:10.709 --> 00:12:15.729
Postman did, or e even SmartBear have
kind of replaced their, their own kind

00:12:15.729 --> 00:12:19.524
of mostly red checks or whatever based
linting with spectral under the hood.

00:12:19.529 --> 00:12:23.934
Now they've acquired stoplight or they're
working on their own kind of thing.

00:12:23.959 --> 00:12:26.124
Or like everyone's,
everyone's into it now.

00:12:26.124 --> 00:12:28.824
It's a thing, like it
didn't exist as a, as a.

00:12:29.739 --> 00:12:33.249
It didn't exist more than conceptually in
bullshit hacks until, until about then.

00:12:33.309 --> 00:12:34.239
So yeah.

00:12:34.239 --> 00:12:37.969
Now, now we're onto the, the good uptake
the good part of the hype cycle where

00:12:37.969 --> 00:12:40.429
it's not just early adopters, it's
loads more people and people are looking

00:12:40.429 --> 00:12:42.829
for different tools and they might
not want something that's JavaScript.

00:12:42.829 --> 00:12:45.499
They might not want something that's
slow and that, and they might want

00:12:45.504 --> 00:12:48.229
something, you know, some people want
things that are CLI based or like

00:12:48.229 --> 00:12:49.549
other different types of interface.

00:12:49.554 --> 00:12:52.354
We've got the rate my open API app.

00:12:52.834 --> 00:12:54.874
That's turned up that you've
been helping out with.

00:12:54.924 --> 00:12:57.684
So that's by Zulo, but you know,
they, they're running on, on vacuum.

00:12:58.044 --> 00:13:01.469
And then there's I did a review
of these two API insights as a

00:13:01.559 --> 00:13:02.444
Quobix: by treble though, right?

00:13:02.804 --> 00:13:03.194
Track 1: Trouble.

00:13:03.194 --> 00:13:03.584
Yeah.

00:13:03.584 --> 00:13:08.114
And so them on the podcast recently, and
I've done a review on APIs, you went hate

00:13:08.114 --> 00:13:11.594
blog about those two tools, but they're
both more visuals instead of CLI based.

00:13:11.594 --> 00:13:15.734
So we, we've gone from a world where like
these tools didn't exist to now where

00:13:15.734 --> 00:13:19.244
like these tools are aimed at different
types of user and different types of use

00:13:19.244 --> 00:13:20.954
case, which is a brilliant place to be.

00:13:20.984 --> 00:13:22.694
'cause now we're all sharing ideas and.

00:13:22.939 --> 00:13:24.769
Powering each other and improving things.

00:13:24.769 --> 00:13:27.959
And there is a bit of a, in, in
my head, coming from like a, a

00:13:27.959 --> 00:13:29.249
background with standards bodies.

00:13:29.249 --> 00:13:31.259
I'm like, why are there
five different formats?

00:13:31.649 --> 00:13:35.189
You know, there's like, you thankfully
have gone with a spectral compatible thing

00:13:35.189 --> 00:13:36.629
and maybe that will change in the future.

00:13:36.629 --> 00:13:41.249
But then there's kind of the redoc le
into, which is its own more simple DSL.

00:13:41.774 --> 00:13:43.574
Simpler, but somewhat less powerful.

00:13:43.754 --> 00:13:48.664
And then potentially, and then there's
the open, there's the optic CLI lint

00:13:48.664 --> 00:13:52.114
GPT, which is like, you can just
send it a string of human words.

00:13:52.114 --> 00:13:55.144
And if you, you know, ask the
wizard nicely, it will, it will

00:13:55.144 --> 00:13:56.074
give you the thing you want.

00:13:56.464 --> 00:13:58.679
And review of that on the
blog recently as well.

00:13:59.009 --> 00:14:00.899
So we're in this amazing
place where there's loads of

00:14:00.929 --> 00:14:02.629
linting going on and, and.

00:14:03.114 --> 00:14:03.834
I'm into it.

00:14:03.934 --> 00:14:08.374
I think vacuum, from what I've seen is, is
blooming brilliant and I think your choice

00:14:08.374 --> 00:14:13.204
of langu in go is, is probably isn't
gonna be a limiting factor to the speed.

00:14:13.204 --> 00:14:13.384
Right.

00:14:13.389 --> 00:14:17.914
I think a, a big benefit that you've got
there is the way that it was architected.

00:14:17.944 --> 00:14:22.744
I think spectral is kind of tipping
it hand as being in initially.

00:14:23.259 --> 00:14:27.699
A utility of stoplight studio where
you are editing a bunch of files and

00:14:27.699 --> 00:14:31.089
whether they're local or on the cloud,
it has all the files kind of local.

00:14:31.420 --> 00:14:35.829
Even the, even the cloud version would
clone the entire repo into your browser

00:14:35.949 --> 00:14:37.719
and have all of those files like there.

00:14:37.939 --> 00:14:39.884
Yeah, clone it somewhere.

00:14:39.884 --> 00:14:41.384
It'll clone it into local storage.

00:14:41.604 --> 00:14:43.165
And then you could kind
of access it from there.

00:14:43.314 --> 00:14:47.044
And basically the idea was, you'd
kind of you'd run it and it would

00:14:47.044 --> 00:14:50.674
get an idea of all of your open API
and then you'd, you'd edit one model

00:14:50.734 --> 00:14:53.435
and it would go, alright, let's just
update that one model in, in the

00:14:53.435 --> 00:14:54.844
storage and it would run it from there.

00:14:54.844 --> 00:14:59.704
So it's more meant to lint while
you edit, which is quite fast.

00:14:59.734 --> 00:15:02.435
'cause it does the initial upfront
load and then it's just like, oh,

00:15:02.524 --> 00:15:04.234
you change your speech, change
your speech, change this bit.

00:15:04.534 --> 00:15:08.265
But yeah, like when you've got, you know
what's the, you, you were using GitHub.

00:15:08.930 --> 00:15:11.239
The GitHub example, which is
Monstrous and Stripe as well.

00:15:11.239 --> 00:15:12.079
They're both huge.

00:15:12.499 --> 00:15:15.199
And yeah, when you just say, go and
figure that whole thing out, it just

00:15:15.199 --> 00:15:18.919
kind of weeps and just can't handle it.

00:15:18.919 --> 00:15:22.369
So yeah, it's great to see these different
use cases being covered by by different

00:15:22.369 --> 00:15:26.059
approaches and I can only imagine how
hard that was to, to build from scratch.

00:15:26.459 --> 00:15:26.879
Yeah.

00:15:26.919 --> 00:15:27.849
Quobix: was, it was an adventure.

00:15:27.879 --> 00:15:31.539
It was, it was, you know, it was
definitely putting my imposter syndrome

00:15:31.599 --> 00:15:36.069
on full tilt, you know, standing and
think, why can't I figure this out?

00:15:36.074 --> 00:15:38.649
You know, why can't I get
this algorithm to work?

00:15:39.039 --> 00:15:40.180
Why is it getting stuck?

00:15:40.180 --> 00:15:41.259
Why is it spinning out?

00:15:41.259 --> 00:15:42.399
Why are these threads pauses?

00:15:42.399 --> 00:15:43.089
Why is this lock?

00:15:43.119 --> 00:15:46.359
I mean, it was just every,
every time I tried to do it.

00:15:46.659 --> 00:15:51.090
So, you know, hats off to the engineers
working on spectral because solving

00:15:51.090 --> 00:15:54.810
that problem, you know, and doing
it in a way that works consistently.

00:15:55.275 --> 00:15:56.385
Very, very, very hard.

00:15:56.445 --> 00:15:57.225
Very, very hard.

00:15:57.510 --> 00:16:00.009
Track 1: Do you have you mentioned
there wasn't that much adoption at

00:16:00.009 --> 00:16:01.989
first, is have things been picking up?

00:16:02.049 --> 00:16:04.599
That's where I started to go
with my like hype cycle, ramble.

00:16:05.305 --> 00:16:08.034
Quobix: Yeah, there's, so it, it
kind of, it, it's, it, it goes

00:16:08.034 --> 00:16:10.374
through little waves, depends on
whether there's a holiday or not.

00:16:10.374 --> 00:16:15.414
Like a, the traffic to the docks,
it's weekends, ghost Town, Monday

00:16:15.414 --> 00:16:17.634
morning, straight again spikes up.

00:16:17.634 --> 00:16:21.055
So it's very much following that kind
of business you know, peaks and troughs.

00:16:21.444 --> 00:16:23.754
So, over Christmas it kind of dipped
a bit, but then it was, you know,

00:16:23.874 --> 00:16:29.574
it's up to about, between 11, 12,000
downloads a month via MPM, it's had

00:16:29.574 --> 00:16:31.434
nearly half a million downloads, so it's.

00:16:31.929 --> 00:16:32.289
Track 1: Wow.

00:16:32.349 --> 00:16:33.281
Yeah, yeah, yeah.

00:16:33.535 --> 00:16:34.134
Quobix: it's moving.

00:16:34.140 --> 00:16:36.135
It's not where I'd want it
to be, obviously, but it's

00:16:36.135 --> 00:16:37.214
definitely moving, you know,

00:16:37.409 --> 00:16:38.129
Track 1: Oh yeah, and I saw that.

00:16:38.134 --> 00:16:40.679
So it can be installed by NPM as well.

00:16:40.779 --> 00:16:40.999
Quobix: Yes.

00:16:41.419 --> 00:16:43.009
Track 1: That, that's,
that's pretty interesting.

00:16:43.014 --> 00:16:43.189
Yeah.

00:16:43.219 --> 00:16:45.859
'cause things I, I've never,
I've never tried running go in

00:16:45.859 --> 00:16:47.149
like GitHub actions or whatever.

00:16:47.149 --> 00:16:48.319
I'm sure it's fine.

00:16:48.439 --> 00:16:51.709
But whenever you ask people,
like most open API tooling is.

00:16:52.474 --> 00:16:53.194
In JavaScript.

00:16:53.194 --> 00:16:56.824
It seems to be like a really node
heavy community and not entirely

00:16:56.824 --> 00:16:57.934
sure why that is, but it is.

00:16:58.214 --> 00:17:01.334
And it's, so, it's, it is always
good to see other languages

00:17:01.334 --> 00:17:02.594
kind of getting involved.

00:17:02.684 --> 00:17:05.444
But then because so many people
are used to NPM, it's good

00:17:05.449 --> 00:17:06.344
to have that covered as well.

00:17:06.374 --> 00:17:08.834
'cause if you are, if you, if you're
currently running spectral, you could

00:17:08.839 --> 00:17:10.364
just run vacuum and, and see if it works

00:17:10.379 --> 00:17:12.239
Quobix: I mean, that's where
the majority of the downloads

00:17:12.244 --> 00:17:14.429
come from is from MPM use.

00:17:14.529 --> 00:17:16.414
Whenever I speak to people on
the forums or they come on the

00:17:16.414 --> 00:17:17.435
Discord, you know, they're.

00:17:17.989 --> 00:17:21.019
They're running it or installing
it via MPM or Docker, those two,

00:17:21.050 --> 00:17:23.779
the, the most popular, which
is really surprising for me.

00:17:23.779 --> 00:17:26.329
You know, I, I thought, you know, most
people would want to be installing

00:17:26.329 --> 00:17:30.139
it, you know, as a CLI tool and have
it as a binary, just, you know, using

00:17:30.139 --> 00:17:32.149
Home Brew or via Shell or something.

00:17:32.540 --> 00:17:33.620
But no, it's Docker.

00:17:33.679 --> 00:17:34.969
Yeah, Docker and MPM most

00:17:34.969 --> 00:17:35.389
popular.

00:17:36.259 --> 00:17:37.370
It was, yeah, very surprising.

00:17:38.029 --> 00:17:38.449
Track 1: Nice.

00:17:38.569 --> 00:17:42.439
Well yeah, great to give people a bunch of
different installation options and where.

00:17:43.684 --> 00:17:44.944
Where's it at and where's it going?

00:17:44.944 --> 00:17:46.324
What's the plan for vacuum?

00:17:46.850 --> 00:17:47.299
Quobix: Yes.

00:17:47.389 --> 00:17:48.169
That's a great question.

00:17:48.169 --> 00:17:51.350
So the, the, the kind of the purpose
of, of what I've been working

00:17:51.350 --> 00:17:54.590
recently, or up until this point,
was to be able to get it to a state

00:17:54.594 --> 00:17:56.600
where it's consistently operated.

00:17:56.600 --> 00:18:00.350
The, the bugs that I can fix, I can
solve are mostly, mostly cleared.

00:18:00.709 --> 00:18:04.309
And to be honest, the majority of them
live outside of vacuum is actually in lib

00:18:04.309 --> 00:18:06.350
open API, which we can talk about a bit.

00:18:06.840 --> 00:18:10.080
And that getting that, that's, that's
kind of the beating heart of everything

00:18:10.084 --> 00:18:11.729
and getting that to a point where.

00:18:12.274 --> 00:18:16.235
It's working for all the use cases of
all the variations from the very, very

00:18:16.235 --> 00:18:18.364
complicated to the very, very simple.

00:18:18.735 --> 00:18:21.405
Basically, I wanted it to stop
blowing up because I actually run it

00:18:21.405 --> 00:18:25.850
as a demo in the pipeline and when I
first put it up, you know, every day.

00:18:26.349 --> 00:18:28.449
It just panic, panic, panic.

00:18:28.449 --> 00:18:29.649
And it would reset itself.

00:18:29.649 --> 00:18:32.919
You know, it's like a tiny little
container, but I was just watching this

00:18:32.919 --> 00:18:36.039
just blow up over and over and over
again, and I'd fix those bugs and then I'd

00:18:36.044 --> 00:18:38.229
wait, wait for it to spin outta control.

00:18:38.589 --> 00:18:40.149
And that stopped happening now.

00:18:40.179 --> 00:18:42.279
So now it's, it's not blowing up anymore.

00:18:42.284 --> 00:18:43.870
It's not spinning outta control.

00:18:44.049 --> 00:18:45.009
It's consistent.

00:18:45.009 --> 00:18:47.979
The error reports I'm seeing
are very, very limited or

00:18:47.979 --> 00:18:49.179
things I already know about.

00:18:49.659 --> 00:18:53.559
So that's been the goal is to harden
it, get it to the point where it's.

00:18:54.174 --> 00:18:58.404
I'm happy to say it's gonna run, you know,
consistently now, wherever it is, the next

00:18:58.404 --> 00:19:00.504
piece is to start making it more usable.

00:19:00.504 --> 00:19:01.524
So for example.

00:19:02.095 --> 00:19:05.575
Like you, like you were talking about with
rule sets and rules and the syntax of the

00:19:05.575 --> 00:19:10.524
DSL and doing J path queries and figuring
out functions and function options,

00:19:10.885 --> 00:19:14.115
it can get a bit hairy particularly
with, you know, you know, some really

00:19:14.115 --> 00:19:16.995
complicated rules and then you ha
adding in custom JavaScript functions,

00:19:17.535 --> 00:19:20.115
all of that kind of, is it working?

00:19:20.175 --> 00:19:21.075
Can I test it?

00:19:21.165 --> 00:19:22.515
How do I know it's working?

00:19:22.875 --> 00:19:24.705
You need some kind of, you know.

00:19:25.200 --> 00:19:28.890
Tool to be able to test your rule
sets, test your rules, test your path,

00:19:28.890 --> 00:19:30.570
test your functions, test your logic.

00:19:31.020 --> 00:19:32.490
That doesn't exist right now.

00:19:32.550 --> 00:19:38.310
So that's the next step is to, to allow
you to see your spec, see the linting,

00:19:38.310 --> 00:19:42.450
so, and label it to work with a language
server so we can plug it straight into.

00:19:42.480 --> 00:19:45.600
Vs code and, you know, make
a VS code extension and then

00:19:45.630 --> 00:19:46.680
bring that even further.

00:19:46.680 --> 00:19:50.730
So you can have a rule set editor and a
rule editor and a, you know, try out your

00:19:50.730 --> 00:19:52.860
JavaScript function, see if it works.

00:19:52.860 --> 00:19:54.120
You know, does it, what does it pick up?

00:19:54.300 --> 00:19:55.020
What does this pick up?

00:19:55.020 --> 00:19:55.500
What happens?

00:19:55.500 --> 00:19:56.220
What's the outcome?

00:19:56.490 --> 00:20:00.120
So it's like a, you know, like a sound
bit or a sandbox for rules and rule sets.

00:20:00.450 --> 00:20:03.600
That's where I'm gonna go next with
it and improve the, the rendering.

00:20:03.600 --> 00:20:05.940
Right now there's an H TM L report,
which I think is pretty good,

00:20:06.270 --> 00:20:08.640
but I could do better, do much

00:20:08.640 --> 00:20:08.910
better.

00:20:09.540 --> 00:20:12.030
Track 1: Well, it's exciting to
hear that 'cause I think the,

00:20:12.060 --> 00:20:13.320
the dev experience, like anyone.

00:20:13.995 --> 00:20:16.755
Anyone who's tried writing a
bunch of spectral rule sets will

00:20:16.815 --> 00:20:18.405
know that it can be very hard.

00:20:18.405 --> 00:20:23.264
I'm currently updating the spectral ow
wasp security rule set for security.

00:20:23.364 --> 00:20:24.834
What the top 10, 20, 23?

00:20:24.894 --> 00:20:26.604
'cause the previous report was 2019.

00:20:26.634 --> 00:20:31.844
And yeah, like I'm, I'm doing zany
stuff and I, it's hard work and I think.

00:20:32.219 --> 00:20:35.069
It was always discussed at, sort
like a long time ago that the

00:20:35.069 --> 00:20:39.149
plan was to build some sort of dev
experience to help people do that.

00:20:39.149 --> 00:20:42.299
But it, it didn't get around to
materializing 'cause the the effort was

00:20:42.304 --> 00:20:45.989
put into like making hosted rule sets
where you could, instead of editing

00:20:45.989 --> 00:20:49.199
a YAML file on your computer, you've
got a nice gooey for working on them.

00:20:49.439 --> 00:20:51.629
But that gooey was
replacing the YAML file.

00:20:51.629 --> 00:20:53.339
It wasn't replacing the, the, the.

00:20:53.339 --> 00:20:56.084
The guts or the experience of
working out what rules to put in.

00:20:56.384 --> 00:21:00.884
And so e even like a RegX power.com
equivalent of like, here I am typing

00:21:00.884 --> 00:21:04.774
in a rule here you can see it's
selecting the right bit of open API

00:21:04.774 --> 00:21:06.064
Now what would you like to do with it?

00:21:06.304 --> 00:21:08.044
Anything along those
lines would really help.

00:21:08.254 --> 00:21:10.864
It's why I build them as NPM
test suites because I could just

00:21:10.864 --> 00:21:13.924
type like NPM test, NPM test, NP
test, and PM test and just like.

00:21:14.199 --> 00:21:17.349
Randomly bullshit my way towards
getting to the correct solution.

00:21:17.349 --> 00:21:21.129
But that, that's the key thing because
this is why we've seen people making

00:21:21.429 --> 00:21:25.809
wizard based approaches or like nicer
DSL based approaches because the J

00:21:25.959 --> 00:21:29.620
path thing is so complicated and, and
custom functions can be so difficult.

00:21:29.620 --> 00:21:33.609
But I don't feel like you can just
avoid that problem with the DSL.

00:21:33.609 --> 00:21:39.289
Like with it, there's, there needs to be
something in the middle or just a DSL.

00:21:39.289 --> 00:21:40.729
You can only do what the DSL does.

00:21:41.669 --> 00:21:46.829
But leaning forward into like, I'm gonna
combine JSON path plus RegX based with

00:21:46.829 --> 00:21:51.089
RegX in it and like have no way of knowing
if that's working well or not, apart from

00:21:51.094 --> 00:21:52.679
like trying it and seeing what happens.

00:21:52.979 --> 00:21:55.620
Neither of those are
particularly good experiences.

00:21:56.474 --> 00:21:58.304
Quobix: Yes, exactly, exactly that.

00:21:58.304 --> 00:22:00.854
It's like you just, you just keep
hitting it with a hammer over and over

00:22:00.854 --> 00:22:02.324
and over again until you see something.

00:22:02.794 --> 00:22:06.215
Having some kind of
guide, some like feedback.

00:22:06.245 --> 00:22:08.764
It's, you're doing it wrong,
you're doing it wrong.

00:22:08.770 --> 00:22:11.554
I've tried to capture that with
some of the linting rules that.

00:22:12.020 --> 00:22:15.260
One thing you don't get with, I
haven't seen anyway, with spectral is

00:22:15.260 --> 00:22:17.000
like, here's how to fix this problem.

00:22:17.000 --> 00:22:20.510
It's like, here's your problem, but here's
what you go and do to go and remedy it.

00:22:20.510 --> 00:22:23.209
And here's some docs of a good
example and a bad example.

00:22:23.750 --> 00:22:26.690
So doing that same type of thing,
but with, you know, the dev

00:22:26.690 --> 00:22:28.340
experience, you know your rules wrong.

00:22:28.340 --> 00:22:29.510
This is not finding anything.

00:22:29.510 --> 00:22:30.379
This is what it's picking up.

00:22:30.379 --> 00:22:32.389
This is, this is what you think you
are getting, this is what you're

00:22:32.389 --> 00:22:33.350
actually getting, type thing.

00:22:33.800 --> 00:22:34.550
Track 1: Yeah, I gotcha.

00:22:34.850 --> 00:22:35.179
Alright.

00:22:35.209 --> 00:22:38.120
We could talk about Linton stuff
for ages, and that's why I wanted

00:22:38.120 --> 00:22:39.139
to get this one done first.

00:22:39.139 --> 00:22:44.240
But you've built loads of other tools
as well, and so wiretap is really cool.

00:22:44.270 --> 00:22:48.560
A a, a mocking server aiming to do some
of what Prism was meant to do, but Prism

00:22:48.560 --> 00:22:53.120
kind of got left behind in prioritization
a little bit and hasn't really done

00:22:53.270 --> 00:22:54.860
many of the things that it wanted to do.

00:22:55.504 --> 00:22:56.825
When it, when it started off?

00:22:56.875 --> 00:22:57.475
Unfortunately.

00:22:57.475 --> 00:23:00.235
So tell me a little
bit about wire itap and

00:23:00.415 --> 00:23:00.804
Quobix: Yeah.

00:23:00.804 --> 00:23:01.195
Great.

00:23:01.195 --> 00:23:01.675
Thank you.

00:23:02.195 --> 00:23:05.634
So wiretap, it actually started
this, there's this, there's something

00:23:05.634 --> 00:23:08.805
that's a, like a real u real life
use case that I have at Splunk.

00:23:09.365 --> 00:23:10.295
There's two things.

00:23:10.345 --> 00:23:13.885
First the way that our, that we build
our premium applications as Splunk

00:23:13.935 --> 00:23:16.935
we were using Webpac dev server
for all of our front end stuff.

00:23:16.935 --> 00:23:19.634
So, you know, we, we load up
our front end and it'll make all

00:23:19.634 --> 00:23:21.254
these API calls at the back end.

00:23:21.554 --> 00:23:23.685
Problem is, is that, you know, when we do.

00:23:24.175 --> 00:23:27.985
Running this thing for know, a few
hours, it would start to choke, right?

00:23:27.990 --> 00:23:30.834
The, the whole thing would just
start, you know, API calls are

00:23:30.834 --> 00:23:32.905
failing, weird errors are coming back.

00:23:32.905 --> 00:23:34.495
It was caching some weird stuff.

00:23:34.764 --> 00:23:36.504
It was just, just didn't work.

00:23:36.504 --> 00:23:36.685
You know?

00:23:36.689 --> 00:23:37.975
It didn't work at scale.

00:23:38.004 --> 00:23:41.544
Great for smaller stuff, and when you
start using it, let scale didn't work.

00:23:41.544 --> 00:23:42.504
So we had that problem there.

00:23:42.504 --> 00:23:43.195
The next problem is.

00:23:43.919 --> 00:23:47.820
We have all these front ends and backends,
and some of them have a open API spec.

00:23:47.820 --> 00:23:51.509
Some of them don't, and we don't
actually know if any of them

00:23:51.509 --> 00:23:52.799
are compliant with each other.

00:23:52.799 --> 00:23:54.719
We don't have the backends
been implemented properly.

00:23:54.725 --> 00:23:56.729
We don't have the front ends
been implemented properly.

00:23:57.189 --> 00:24:00.850
And we don't, well, obviously the API open
API spec is in in one condition as well.

00:24:01.570 --> 00:24:05.889
So problem A is we're struggling
with how to build our UIs in

00:24:05.889 --> 00:24:08.290
the front end Problem B is.

00:24:08.605 --> 00:24:12.475
We we can't tell if our API traffic
is compliant, frontend or backend.

00:24:12.595 --> 00:24:14.785
And there's the third problem,
which is mocking and frontend.

00:24:14.785 --> 00:24:15.175
Mocking.

00:24:15.415 --> 00:24:18.175
Obviously you've been in software
development, you know, the front end

00:24:18.355 --> 00:24:19.915
moves at different speed from the backend.

00:24:20.275 --> 00:24:24.175
So we get a bunch of requirements from
PMs and the backend teams start moving

00:24:24.175 --> 00:24:25.795
at this, you know, a glacial speed.

00:24:25.795 --> 00:24:28.165
And the front end team, we're all
like mocked up and ready to go with

00:24:28.165 --> 00:24:29.575
the ux, but there's no backend.

00:24:30.115 --> 00:24:30.895
What do we do?

00:24:30.925 --> 00:24:31.795
How do we move forward?

00:24:32.125 --> 00:24:36.235
So with API first, with an API first
methodology, working on the contract

00:24:36.235 --> 00:24:39.655
first, we can then take something
like wiretap and, and mock it out

00:24:40.044 --> 00:24:43.284
so we can have a front end working
with the contract whilst the backend

00:24:43.290 --> 00:24:44.754
does, you know, their implementation.

00:24:45.145 --> 00:24:48.205
So it solves those, those three
problems that we, that we have.

00:24:48.655 --> 00:24:49.705
And, you know, so.

00:24:50.155 --> 00:24:55.330
The, the way that we use it today is it
powers our, our call local dev suite.

00:24:56.170 --> 00:25:00.010
So all the UI developers, they, when
they run NPM start, it actually spins

00:25:00.010 --> 00:25:01.900
up wiretap, it's not spinning up webpac.

00:25:02.270 --> 00:25:04.940
And we can run a, we run web pack as
a watcher, so it's recompiling all

00:25:04.940 --> 00:25:06.830
the JS and the CSS in the background.

00:25:07.280 --> 00:25:10.520
So it spins that up and then we start
capturing all the, all the API traffic.

00:25:10.520 --> 00:25:13.040
So the other thing that it
does was its primary goal.

00:25:13.615 --> 00:25:15.955
The, the, that's what I
wanted to build it for.

00:25:15.955 --> 00:25:17.785
But I also saw these
other use cases as well.

00:25:18.115 --> 00:25:21.685
Primary goals was mocking
and API open API validation.

00:25:22.135 --> 00:25:26.085
So whilst it's serving all the
static content, any APIs, it can, you

00:25:26.235 --> 00:25:29.985
read them in and you can configure
them with, you know allow lists and

00:25:29.985 --> 00:25:31.545
denial lists and things like that.

00:25:31.545 --> 00:25:32.955
You can do path rewriting.

00:25:33.465 --> 00:25:36.705
A lot of the stuff that you get from
like, like Webpac dev server, it's

00:25:36.705 --> 00:25:39.525
actually a drop in replacement for
a lot of those features like, you

00:25:39.525 --> 00:25:42.555
know, variables and authentication
tokens and all that kind of stuff.

00:25:42.555 --> 00:25:46.635
Anyway, it act as a proxy, a, a, a
complete transparent proxy for all of

00:25:46.635 --> 00:25:50.625
your APIs and remap 'em if they need
to, but it captures all the API traffic

00:25:50.925 --> 00:25:55.875
and allows you to, you know, validate
the, the requests and responses and sch.

00:25:57.485 --> 00:26:01.805
Effectively looks at the whole open
API contract in detail, and then shows

00:26:01.805 --> 00:26:03.875
you which of your requests are invalid.

00:26:03.875 --> 00:26:05.405
You know, how, how compliant are you?

00:26:05.675 --> 00:26:08.795
And then you can see where those,
those, those violations are.

00:26:08.855 --> 00:26:12.005
And it gives you numbers
to straight to the spec.

00:26:12.455 --> 00:26:16.145
That's something that's missing from a
number of tools, is the ability to get to.

00:26:16.965 --> 00:26:17.895
Here's your problem.

00:26:18.075 --> 00:26:20.805
Here's why it's wrong
here it is in the spec.

00:26:20.810 --> 00:26:24.645
Here's where it is in those line
numbers and in go that functionality was

00:26:24.645 --> 00:26:28.095
missing from, from, you know, another
of other libraries that are out there.

00:26:28.245 --> 00:26:28.485
So

00:26:28.575 --> 00:26:28.935
Track 1: gotcha.

00:26:28.965 --> 00:26:29.655
That's pretty handy.

00:26:29.655 --> 00:26:31.575
'cause the, that, that's
always been, that's been the

00:26:31.575 --> 00:26:32.865
goal of so many tools that.

00:26:33.465 --> 00:26:36.675
Kind of the contract validation
stuff I think is really important.

00:26:36.675 --> 00:26:39.345
So when we talk about
validation, there's two types.

00:26:39.345 --> 00:26:43.545
And so vacuum tools like that,
the linters, they are schema

00:26:43.545 --> 00:26:45.795
validators, like is my schema correct?

00:26:45.845 --> 00:26:49.185
To whatever roles I may have defined
to the spec and to my preferences.

00:26:49.530 --> 00:26:53.110
But then there's the, I call it
data validator which I've never

00:26:53.110 --> 00:26:54.400
said out loud and is annoying.

00:26:54.400 --> 00:26:55.480
I need a different term now.

00:26:55.810 --> 00:26:57.770
But data validation doesn't sound so bad.

00:26:57.990 --> 00:27:01.560
But yeah, the goal of that is like,
and is the data, is this, is this

00:27:01.560 --> 00:27:06.000
instance of Jason or whatever valid
to what the schema said it should be.

00:27:06.190 --> 00:27:08.380
And, and that's pretty
bloody key when people are.

00:27:08.910 --> 00:27:13.260
If you're doing the a PA design
first, then you can, your, whatever,

00:27:13.260 --> 00:27:16.200
your teams in general will agree
on a contract, and then everyone

00:27:16.200 --> 00:27:17.280
has to build to that contract.

00:27:17.600 --> 00:27:19.670
And, and your front end teams
wanna build to it, and your

00:27:19.675 --> 00:27:20.870
backend teams wanna build to it.

00:27:21.110 --> 00:27:24.920
And if the, if the clients are sending
things that don't conform to the rules.

00:27:25.245 --> 00:27:26.445
Someone should tell them.

00:27:26.665 --> 00:27:30.415
And if the backend team is also
like emitting stuff that isn't

00:27:30.475 --> 00:27:32.155
right, someone should tell them too.

00:27:32.395 --> 00:27:35.245
And I think we kind of
aim to do that with Prism.

00:27:35.275 --> 00:27:38.425
With you, you, you can build a mock
server, so if the backend doesn't exist,

00:27:38.425 --> 00:27:40.775
you've got the mock server and you
can just talk to the mock and it all

00:27:40.775 --> 00:27:41.915
let you know if you're doing it wrong.

00:27:42.125 --> 00:27:45.385
And then once you've actually got the once
you've actually got the API, you switch

00:27:45.385 --> 00:27:49.075
that mock to a proxy and it will still put
the same traffic through pretty invisible.

00:27:49.225 --> 00:27:51.115
Just there's a bit more
business logic happening.

00:27:51.245 --> 00:27:53.435
Tax rules might actually
be applied instead of just

00:27:53.435 --> 00:27:54.635
static examples coming back.

00:27:54.635 --> 00:27:55.835
That was kinda the plan for Prism.

00:27:56.045 --> 00:27:59.135
Sounds like y'all do the same thing
too, but what I really liked about

00:27:59.135 --> 00:28:02.875
it was you, you've got a built in,
like a Go terminal, like a ui thing.

00:28:03.025 --> 00:28:05.755
So you can actually see the requests
that have gone through, see which one's

00:28:05.760 --> 00:28:07.345
passed, see which one, which one's failed.

00:28:07.585 --> 00:28:10.405
And if you wanted that with, with
Prism, you didn't really get it like.

00:28:10.550 --> 00:28:11.750
You could sniff on some headers.

00:28:11.750 --> 00:28:16.210
I think we had like a Xen something
or other responses validation

00:28:16.210 --> 00:28:19.960
errors kind of Jason that you
then have to like unfurl somehow.

00:28:19.990 --> 00:28:22.960
But yeah, having it in that terminal
built in, otherwise you've gotta go

00:28:22.965 --> 00:28:24.610
and have another proxy installed.

00:28:24.610 --> 00:28:26.830
Like go and set up Charles proxy or go and

00:28:26.930 --> 00:28:27.935
Quobix: Right, right.

00:28:27.940 --> 00:28:28.160
Yeah.

00:28:28.385 --> 00:28:30.695
Track 1: Some sort of sniffing thing,
which is a bit of a pain in the backside.

00:28:30.695 --> 00:28:33.655
So yeah, having that all in
one place is, is pretty handy.

00:28:33.655 --> 00:28:36.895
And especially if that's one command
that your front end people can write.

00:28:37.075 --> 00:28:40.255
Maybe the front end people are,
aren't, aren't the ones that

00:28:40.255 --> 00:28:41.305
wanna set up Charles' proxy.

00:28:41.305 --> 00:28:43.495
So yeah, that's, that's really handy.

00:28:44.005 --> 00:28:46.855
Quobix: Yeah, so it, it was, it was
that, it's the same thing with vacuum.

00:28:46.855 --> 00:28:49.435
Like there's a console, CLI,
there's a sort, the terminal

00:28:49.435 --> 00:28:51.505
CLI, there's A-H-T-M-L report.

00:28:51.505 --> 00:28:54.115
So with Wire it's got the same
thing that, you know, you can

00:28:54.115 --> 00:28:55.465
run it, run it as a service.

00:28:55.555 --> 00:28:57.655
It runs, it actually powers
some other stuff as well.

00:28:57.655 --> 00:29:04.110
But it runs as service or it runs as a,
you know, as a, as a, a local, local ui,

00:29:04.145 --> 00:29:06.245
local GUI to be able to, to, to view it.

00:29:06.745 --> 00:29:07.135
And

00:29:07.135 --> 00:29:08.215
part of the, you know, the, the,

00:29:09.565 --> 00:29:09.715
Track 1: Sorry.

00:29:09.745 --> 00:29:12.715
I was just gonna say it, it, it can
be a fia when I, I've said in the

00:29:12.715 --> 00:29:16.585
past some teams, some front end teams,
like I, I don't, front end teams

00:29:16.585 --> 00:29:19.375
are perfectly smart and the front
end stack is a lot more complicated

00:29:19.375 --> 00:29:20.635
than the backend in so many ways.

00:29:20.855 --> 00:29:24.605
But yes, when you give 'em a new tool,
if I've tried to say like, oh yeah,

00:29:24.605 --> 00:29:28.565
just install like Prism and point it at
this open API file and then like pass

00:29:28.565 --> 00:29:32.045
these options or whatever, and they're
like, I don't really want to do that.

00:29:32.075 --> 00:29:33.395
'cause then they've got,
you know, trying to get the.

00:29:33.615 --> 00:29:37.245
The proxy information out's a bit of
a faf, but when I, if you can host

00:29:37.245 --> 00:29:40.485
it, then you can just like change an
environment variable and say like,

00:29:40.485 --> 00:29:43.965
just point your front end at this
instead of pointing it at that, or

00:29:44.085 --> 00:29:45.435
it's completely seamless to them.

00:29:45.435 --> 00:29:48.555
Like just point it at the API and
you don't even need to know that

00:29:48.555 --> 00:29:49.575
it's running the proxy right now.

00:29:49.575 --> 00:29:50.955
We've just squished that into place.

00:29:51.205 --> 00:29:53.720
That, that makes it a lot more useful
for those teams that don't wanna

00:29:53.720 --> 00:29:54.860
figure out a new tool right now.

00:29:55.420 --> 00:29:58.870
Quobix: That's, it was exactly that
use case is how, how, how do I make

00:29:58.870 --> 00:30:02.380
this completely transparently replace
the thing that's giving us our dev

00:30:02.385 --> 00:30:06.430
experience right now and serving all the
content and making all the API calls and

00:30:06.460 --> 00:30:08.200
proxying them to our staging servers.

00:30:08.650 --> 00:30:13.120
How do I replace that with, you know,
so it's completely transparent so that

00:30:13.120 --> 00:30:16.780
even the MPM commands are the same in
the script, is just, it's, you know,

00:30:16.900 --> 00:30:17.950
they don't have to think about it.

00:30:18.280 --> 00:30:20.770
That's what obviously makes
the adoption so much easier

00:30:20.770 --> 00:30:21.670
because, you know, it's just.

00:30:22.340 --> 00:30:25.880
Just all of a, all of a sudden one day,
it's just, it's not breaking anymore.

00:30:26.980 --> 00:30:27.310
Track 1: Yeah.

00:30:27.340 --> 00:30:27.730
Brilliant.

00:30:28.120 --> 00:30:31.060
Alright again, loads of other stuff I
could talk to you about this, about.

00:30:31.110 --> 00:30:32.685
This is mostly just a chance for.

00:30:33.270 --> 00:30:36.270
For me to nerd out with someone who's
working on the exact same problems

00:30:36.270 --> 00:30:37.410
that I spent years working on.

00:30:37.410 --> 00:30:39.630
So hopefully, hopefully some
other listeners like this,

00:30:39.635 --> 00:30:40.800
but it's fun for me at least.

00:30:41.190 --> 00:30:44.760
Anyway, the next one, otherwise
a massive waste of time.

00:30:45.100 --> 00:30:45.370
Hello.

00:30:45.375 --> 00:30:49.150
Is this thing on the, another thing
you've been working on, which I

00:30:49.390 --> 00:30:52.530
always wanted to get involved with,
but never had the chance is kind

00:30:52.530 --> 00:30:54.540
of changes and change detection.

00:30:54.545 --> 00:30:58.290
So this is a new, a new area that's
kind of popping up for people is

00:30:58.650 --> 00:31:01.830
we've now, we've now spent enough
time with the API design, first

00:31:01.830 --> 00:31:04.080
lifecycle, or whatever is going on.

00:31:04.320 --> 00:31:07.320
Enough people are making open API
and describing their APIs well.

00:31:07.820 --> 00:31:12.650
They've learned how to, you know, describe
it well with, with good standards.

00:31:12.740 --> 00:31:17.240
And they've learned how to make
sure it's true by using contract

00:31:17.240 --> 00:31:21.020
testing in their test suite or prison
contract testing style proxies.

00:31:21.230 --> 00:31:22.730
That stuff's done great.

00:31:23.000 --> 00:31:28.700
Now it's in production and people are
making changes and shit's breaking 'cause

00:31:28.700 --> 00:31:32.030
people love making breaking changes and.

00:31:32.335 --> 00:31:36.265
There's an increasing number of tools that
are coming out to, I, I haven't looked at

00:31:36.265 --> 00:31:41.255
how open API changes actually works, but
I, there's optic Diff and Bump have got

00:31:41.255 --> 00:31:44.765
like breaking change detection on their,
on their documentation deployment, which

00:31:44.765 --> 00:31:47.765
I'm, I've been doing some writing for them
recently and it's quite a cool, and where

00:31:48.035 --> 00:31:51.065
you just kind like deploy your docs, keep
on deploying your docs, put it in the.

00:31:51.335 --> 00:31:53.645
Put it in the pull request and
just keep on deploying your

00:31:53.645 --> 00:31:54.815
docs when they go to master.

00:31:54.995 --> 00:31:57.515
And then on your pull requests
it can go, whoa, there, there's

00:31:57.515 --> 00:31:58.595
a break and change in here.

00:31:58.595 --> 00:31:59.915
Is that something that you wanted to do?

00:31:59.915 --> 00:32:01.655
Or like, this has been
removed, that's been added.

00:32:01.925 --> 00:32:04.265
And it's really nice to see
more people getting into that.

00:32:04.295 --> 00:32:07.805
'cause that's one of the hardest
problems in APIs is if y'all break,

00:32:08.045 --> 00:32:11.585
if you, if you change stuff, things
are gonna break for your consumers.

00:32:11.615 --> 00:32:16.015
So how have you gone about stepping
into the world of, of API changes and

00:32:16.015 --> 00:32:16.910
what problems are you trying to solve?

00:32:17.350 --> 00:32:17.470
I.

00:32:17.860 --> 00:32:19.330
Quobix: Yeah, it's a great question.

00:32:19.330 --> 00:32:22.720
So the, it's, it's exactly that is
how do we know, and this is another

00:32:22.720 --> 00:32:25.300
thing, there's another problem
that, again, it's with my day job.

00:32:25.790 --> 00:32:28.760
I've always wanted to build this, I've
actually built it before with VMware,

00:32:28.760 --> 00:32:33.240
but this is a very real problem, is
devs aren't, because there's no testing,

00:32:33.245 --> 00:32:36.720
there's no compliance validation, there's
no quality assurance on, on his open API

00:32:36.720 --> 00:32:39.870
contracts, they're making changes or they
changed automatically through code changes

00:32:39.870 --> 00:32:42.450
if it's code first and it gets deployed.

00:32:42.840 --> 00:32:45.540
There's no testing and
a customer gets broken.

00:32:45.750 --> 00:32:48.840
It's like, well, well we, we read
the contract and it's not working,

00:32:49.170 --> 00:32:52.110
and we're breaking each other, like
we're breaking product A to product B.

00:32:52.390 --> 00:32:55.600
The integration points between
them, because the teams just aren't.

00:32:55.960 --> 00:32:59.500
They don't know, they, they're not
following the, the dots aren't connected.

00:33:00.070 --> 00:33:03.410
So first, you know, you, the,
the change detection only works

00:33:03.410 --> 00:33:06.420
if you are using the open a PA
contract as that source of truth.

00:33:06.420 --> 00:33:09.240
And when you are, you know, you want
to know exactly what has changed.

00:33:09.240 --> 00:33:12.550
So there's, there's a, there's other
tools out there, like like it's great

00:33:12.550 --> 00:33:16.340
tools like OASD that does, you know,
same thing, you put rules in there.

00:33:16.810 --> 00:33:20.470
The, the thing that I noticed though
with a lot of these diff tools is.

00:33:21.065 --> 00:33:25.485
I, I, I'm, I'm getting like a, like you
would get with vacuum, you get a straight.

00:33:26.120 --> 00:33:28.845
A hot list of all of the
violations that have occurred.

00:33:29.235 --> 00:33:32.865
And it's, it's when there's, there's
a lot of them, it's a okay, where

00:33:32.865 --> 00:33:33.975
in the model has that changed?

00:33:33.975 --> 00:33:38.880
Because that property, that name
ID, is used 10,000 times and I

00:33:38.880 --> 00:33:40.455
dunno, which, I dunno where it is.

00:33:40.455 --> 00:33:43.485
And if I can't see it, I don't
have a visual representation of it.

00:33:43.825 --> 00:33:46.375
I'm struggling to get the gestalt
of what's actually changed.

00:33:46.795 --> 00:33:49.675
So that was the approach that I
took with Open API changes is it's

00:33:49.885 --> 00:33:51.865
actually more of a visual rendering.

00:33:51.865 --> 00:33:52.345
So it does.

00:33:52.600 --> 00:33:53.260
Two things.

00:33:53.260 --> 00:33:56.050
It the way, the way it works,
it, it reads in the model.

00:33:56.690 --> 00:34:00.970
From both A and B, then it does
actually every single object

00:34:00.970 --> 00:34:02.620
as a hash check against this.

00:34:02.620 --> 00:34:05.260
So it takes the object, hashes
it in to says, has it changed?

00:34:05.530 --> 00:34:08.410
And if it has changed, it looks
at every single property, what was

00:34:08.410 --> 00:34:10.300
added, what was removed, and decide
if it was, you know, is there a

00:34:10.300 --> 00:34:14.140
braking change if you added like a, a
non-optional parameter, things like that.

00:34:14.625 --> 00:34:18.075
And then what it will do is render
out those changes as part of the.

00:34:18.095 --> 00:34:20.195
The model of the open API document.

00:34:20.435 --> 00:34:23.465
So you can see the past, you can
see the parameters were added.

00:34:23.465 --> 00:34:27.905
You can see where in the structure it
was changed and then you can flip it.

00:34:27.955 --> 00:34:30.625
Instead of just looking at a tree,
you can look at a graph like it

00:34:30.630 --> 00:34:32.725
actually renders out a visual graph.

00:34:33.145 --> 00:34:37.870
I was really inspired by a tool
called jason crack.com and it's

00:34:37.875 --> 00:34:41.020
allows you to feed in adjacent
file and it will visualize it.

00:34:41.050 --> 00:34:42.880
It broken apart and you can see it.

00:34:43.315 --> 00:34:45.010
I was like, that's very, very good.

00:34:45.420 --> 00:34:46.710
That's very useful.

00:34:46.740 --> 00:34:49.710
I would like to see that, but with
something that's not just adjacent

00:34:49.710 --> 00:34:52.020
file, you know, a, a, a data structure.

00:34:52.410 --> 00:34:53.700
So I took that same idea.

00:34:53.910 --> 00:34:54.810
I used all the same light.

00:34:54.810 --> 00:34:57.360
In fact, I built this all in React
just so I could make it work with the

00:34:57.360 --> 00:34:58.440
tool that they, because I loved it.

00:34:59.030 --> 00:35:02.300
And yeah, we recreated that same
experience, but now instead of

00:35:02.300 --> 00:35:05.060
rendering out just the J file,
it's rendering out the change tree.

00:35:05.360 --> 00:35:10.490
So you can see the open API document as a
visual graph and explore it that way, and

00:35:10.495 --> 00:35:14.000
you can rotate it, you know, and we'll get
all different layouts and stuff like that.

00:35:14.710 --> 00:35:19.300
But, so it's a visual way to
explore and also it then it gives

00:35:19.300 --> 00:35:20.980
you the ability to go back in time.

00:35:21.250 --> 00:35:24.310
So you can not only see, you know, the
change from where you are today, but you

00:35:24.310 --> 00:35:26.710
can see where it was previous before that.

00:35:26.715 --> 00:35:30.190
And then it gives you some graphs and
charts of how it has changed over time.

00:35:30.460 --> 00:35:34.810
So it's, it's like a local tool right now
that will give you that, whether, whether

00:35:34.810 --> 00:35:37.660
you've got a local Git repository, it
will look through all of your revisions.

00:35:37.660 --> 00:35:43.280
It will just do a left or a right, or it
can pull straight from GitHub and pull

00:35:43.280 --> 00:35:44.780
down all the, the revisions for that.

00:35:44.780 --> 00:35:48.740
You just literally pointed at the, the
open file and pull down all the, all the,

00:35:49.010 --> 00:35:53.240
the commits that you've had, and then do
diffs for every single one up to a limit.

00:35:53.270 --> 00:35:57.410
You can, you can limit it to five or
10 or whatever, but it was a different

00:35:57.410 --> 00:35:58.640
experience that I was missing.

00:35:58.790 --> 00:36:02.090
I want to see what's changed over
time and I want to visualize it.

00:36:02.150 --> 00:36:06.830
I don't just want a, a straight list
of violations here in like, like a.

00:36:07.095 --> 00:36:10.365
You know, like vacuum or spectral,
when is something more visual?

00:36:10.635 --> 00:36:13.035
So that's, that's the
difference of how it works.

00:36:13.065 --> 00:36:14.565
It's gets custom built.

00:36:14.625 --> 00:36:17.535
It doesn't use any other existing
libraries other than the open API.

00:36:18.035 --> 00:36:19.985
And it walks the model as a hierarchy.

00:36:19.985 --> 00:36:24.065
So it gives you a hierarchical rendering
com complete with, you know, line numbers

00:36:24.065 --> 00:36:26.885
and columns, which is also missing
from a number of other tools that don't

00:36:26.885 --> 00:36:28.655
give you the line numbers and columns.

00:36:28.655 --> 00:36:30.575
They just tell you the
path to where it changed.

00:36:30.930 --> 00:36:31.620
Track 1: Absolutely.

00:36:31.890 --> 00:36:34.200
Well, yeah, that's, that's back to
what I said about some of the pres

00:36:34.200 --> 00:36:38.040
spectral stuff in it where yeah,
people are like, I, I read all of

00:36:38.040 --> 00:36:40.530
your files into this massive array.

00:36:40.530 --> 00:36:43.620
Now go figure out where in this
massive array array it went wrong.

00:36:43.625 --> 00:36:44.850
You're like, that's not helpful.

00:36:44.850 --> 00:36:45.840
I need to fix this.

00:36:46.260 --> 00:36:51.520
So yeah, I think some of those tools
were kind of designed by either.

00:36:51.985 --> 00:36:54.655
Very small teams that didn't have a
chance to like really get into it,

00:36:54.655 --> 00:36:58.615
or were kind of designed by people
that aren't as in the trenches

00:36:58.615 --> 00:37:00.115
doing open API stuff all the time.

00:37:00.115 --> 00:37:01.945
So therefore, didn't really
realize the importance.

00:37:01.950 --> 00:37:05.935
Like, Hey, our product manager's
happy, but the people that actually

00:37:05.935 --> 00:37:08.305
need this to solve actual problems
aren't, aren't so impressed.

00:37:08.310 --> 00:37:10.045
So that's, that's pretty handy.

00:37:10.565 --> 00:37:13.925
I do wonder with some of this stuff,
with like the breaking changes in open

00:37:13.925 --> 00:37:17.105
API, like, I feel there's, there's a
little part of my brain that's like,

00:37:17.105 --> 00:37:18.605
did we create a problem for ourselves?

00:37:18.845 --> 00:37:24.935
Where originally a lot of the tools that
I didn't like so much would keep open API

00:37:25.265 --> 00:37:26.885
completely separate from the source code.

00:37:27.035 --> 00:37:30.305
And, you know, maybe some, if you're doing
code first and then you just render it,

00:37:30.395 --> 00:37:33.935
render out some open API and it somewhere
that's, whatever, that's a bit different.

00:37:34.355 --> 00:37:38.825
But as, as well, a lot of people
will export the open API from their

00:37:38.825 --> 00:37:40.775
code and then it goes into the repo.

00:37:40.925 --> 00:37:43.445
And if you're designed first, it lives
in the repo and then you actually use

00:37:43.445 --> 00:37:46.985
it as the source of truth, maybe for
testing, maybe to power some of the code.

00:37:46.985 --> 00:37:53.075
So either way you go more often, open
API lives in the repo so that you

00:37:53.075 --> 00:37:56.165
know when you make a pull request, any
changes that happen will happen to your

00:37:56.165 --> 00:37:59.495
open API and therefore your docs and
your hosted marks and everything else

00:37:59.500 --> 00:38:01.295
all at once, all along with the code.

00:38:01.300 --> 00:38:02.405
So it's a bit more atomic.

00:38:02.595 --> 00:38:06.435
A way that things worked before that was,
yeah, you, you've got your code over here

00:38:06.585 --> 00:38:10.455
and you've got your contract testing suite
over there and that meant that if you made

00:38:10.455 --> 00:38:14.205
a breaking change, then it would probably
notice, like the completely separate

00:38:14.205 --> 00:38:18.255
contract test suite would, would kind of
notice 'cause you hadn't updated that.

00:38:18.555 --> 00:38:22.095
And it was always really annoying if
you, if you make an intentional change.

00:38:23.070 --> 00:38:26.220
Then it breaks your contract test suite
and you have to go and change that.

00:38:26.220 --> 00:38:30.510
So that always kind of annoyed me, but
it, it does at least kind of then give you

00:38:30.510 --> 00:38:32.730
some protection against that happening.

00:38:32.880 --> 00:38:35.850
But as soon as we've moved it all into
the repo, you can easily just like delete

00:38:36.090 --> 00:38:37.860
something and it breaks for everyone.

00:38:38.110 --> 00:38:40.420
And it goes, yes, I've contract
tested with myself, and I've

00:38:40.420 --> 00:38:41.410
agreed that I'm correct.

00:38:41.760 --> 00:38:45.510
So even though I'm not what the
clients want and that, and that's

00:38:45.510 --> 00:38:47.130
where tools like Pact come in, right?

00:38:47.130 --> 00:38:51.450
'cause then the, the, the consumer has to
set up their own contract testing, which

00:38:51.450 --> 00:38:55.560
isn't, you know, the, the producer is,
hi, my API does what I think it should.

00:38:55.710 --> 00:38:59.190
And then consumer testing is like, does
your API do what I think it should.

00:38:59.520 --> 00:39:02.550
And I, you know, the consumers can test
for the bits they're interested in.

00:39:02.940 --> 00:39:08.860
But if, if you have change detection
running then you can, I dunno if open

00:39:08.860 --> 00:39:12.610
a PA changes does this, some of the
diff tools do where your consumers can

00:39:12.610 --> 00:39:16.300
actually subscribe to changes and get
like an email when changes come out.

00:39:16.540 --> 00:39:16.840
And I don't

00:39:16.885 --> 00:39:17.635
Quobix: that's a good idea.

00:39:17.785 --> 00:39:18.570
I'll run that one down.

00:39:18.820 --> 00:39:21.010
Track 1: automate something
that, something the bump does.

00:39:21.010 --> 00:39:23.560
And I really like that 'cause
it, it, it solves both.

00:39:23.800 --> 00:39:26.230
I've not needed to make
this really annoying.

00:39:26.560 --> 00:39:30.070
Blocker where, you know, your contract
testing is totally separate from your

00:39:30.070 --> 00:39:33.460
code and you constantly have to go and
change it in two different places, but

00:39:33.520 --> 00:39:37.060
you haven't also forced all of the work
onto your consumers to find out whether

00:39:37.060 --> 00:39:38.620
you've broken shit recently or not.

00:39:38.890 --> 00:39:40.240
They can find out what's changed.

00:39:40.240 --> 00:39:41.800
They can find out if they care about it.

00:39:41.805 --> 00:39:44.380
And, and that's a, a powerful thing
for change detection, I think.

00:39:44.380 --> 00:39:45.820
But yeah, that

00:39:45.820 --> 00:39:46.360
Quobix: Yeah, it is.

00:39:46.385 --> 00:39:49.600
it it it it very powerful and it's
a, it is a big problem, right?

00:39:49.600 --> 00:39:52.000
Big problem is like, how do,
how do, how, how do we, you

00:39:52.000 --> 00:39:53.020
know, find the balance there.

00:39:53.290 --> 00:39:57.400
I like that idea of, you know, like a
Slack or a message email or something.

00:39:57.730 --> 00:40:01.450
It don't do any of that stuff because
it's, it's just like a local tool.

00:40:01.450 --> 00:40:03.430
It has no kind of network connect.

00:40:03.430 --> 00:40:06.470
I mean, it, it, it does some stuff,
but yeah, there's no like put

00:40:06.470 --> 00:40:07.940
your emails, no subscriptions yet.

00:40:08.180 --> 00:40:08.810
Track 1: No, that's cool.

00:40:08.810 --> 00:40:10.790
Well, we've got more to talk about
here 'cause you've got, you've

00:40:10.790 --> 00:40:12.230
been busy, you've been really busy.

00:40:12.340 --> 00:40:15.130
We have been talking about three
open source tools that you've worked

00:40:15.130 --> 00:40:20.320
on, and they are powered by lib open
API Now do you just enjoy writing

00:40:20.320 --> 00:40:22.630
code or why, why does that exist?

00:40:23.875 --> 00:40:27.980
Quobix: So, yeah, so it, again, it started
with this, all the tools that I've seen

00:40:27.980 --> 00:40:31.610
out there, they're missing some of these
key pieces that I need to be able to

00:40:31.610 --> 00:40:32.930
build the tools that I want to build.

00:40:32.930 --> 00:40:35.660
So I'm still trying to build the tool
that I want to build and all the bits

00:40:35.660 --> 00:40:38.720
that I need to build it haven't, they
didn't exist or they didn't exist

00:40:38.720 --> 00:40:39.770
in the way that I needed them to.

00:40:40.310 --> 00:40:44.630
And I started with vacuum and lib
open API was born inside vacuum.

00:40:44.875 --> 00:40:49.425
And it was, how do I, how do I
pass this open API filing go.

00:40:49.605 --> 00:40:52.665
So there's already a great library
out there, like kin open API.

00:40:53.065 --> 00:40:55.645
And that was my, just, so
why would I reinvent this?

00:40:55.650 --> 00:40:57.025
Why would I redo this work?

00:40:57.595 --> 00:40:59.635
And I went to the plug it in.

00:40:59.640 --> 00:41:00.955
But there's, there's, there's a problem.

00:41:00.960 --> 00:41:02.065
There's two problems actually.

00:41:02.875 --> 00:41:05.755
The first problem is it's a
fundamental design problem.

00:41:06.305 --> 00:41:10.445
The way that it, when it passes in
the model, it loses all the context

00:41:10.445 --> 00:41:15.185
of line numbers and columns, which
is critical in my opinion, for being

00:41:15.185 --> 00:41:18.085
able to do change detection and
show you where things have changed.

00:41:18.085 --> 00:41:21.325
And then with the, you know, being
able to build, same thing for linting.

00:41:21.385 --> 00:41:23.935
I need to know where it is to be
able to say, here's the problem.

00:41:24.395 --> 00:41:26.790
And it doesn't have that, and it won't
be able to have that because of the,

00:41:26.790 --> 00:41:28.050
the way the architects put together.

00:41:28.050 --> 00:41:32.610
So the only way to do it was to
literally rebuild it from scratch as

00:41:32.610 --> 00:41:34.350
a, like a compiler passing the abac.

00:41:34.835 --> 00:41:39.275
Abstract syntax tree, which is,
you know, the raw YAML effectively,

00:41:39.275 --> 00:41:42.995
or the raw Jason, and then put
that into a model that captures

00:41:42.995 --> 00:41:44.675
all of that low level information.

00:41:44.675 --> 00:41:48.005
And there's things like anchors
and aliases and comments

00:41:48.005 --> 00:41:49.535
in YAML that all get lost.

00:41:49.955 --> 00:41:52.985
And you need to know about all of the
sources of that and where it was come

00:41:52.985 --> 00:41:54.755
from, particularly doing like references.

00:41:55.325 --> 00:41:57.395
Anyway that's why it exists because.

00:41:58.020 --> 00:41:59.760
F first of all, there was
no lineups and columns.

00:41:59.760 --> 00:42:03.900
The second thing is that KIN
doesn't support 3.1 yet, and

00:42:03.900 --> 00:42:04.140
that

00:42:04.515 --> 00:42:06.405
Track 1: Does it spot 3.0 even?

00:42:06.630 --> 00:42:08.760
Quobix: it does, yeah,
it does support 3.0.

00:42:09.170 --> 00:42:12.360
But simply because of it's got
its own Jason Schema model.

00:42:12.660 --> 00:42:15.630
The problem is, is we have exclusive
minimum, exclusive maximum, you know,

00:42:15.630 --> 00:42:17.850
went from Boolean to and things like that.

00:42:17.925 --> 00:42:18.285
Track 1: All the nut

00:42:18.525 --> 00:42:21.525
Quobix: Unless you've got like,
like ability to do dynamic objects,

00:42:21.525 --> 00:42:25.605
which is what we have in lib open
API, you're kind of stuck and you've

00:42:25.605 --> 00:42:27.045
gotta rebuild the whole thing again.

00:42:27.115 --> 00:42:29.005
And that's kind of where the project is.

00:42:29.005 --> 00:42:32.955
It's you've gotta rebuild the model to
be able to make this work, which is just,

00:42:33.225 --> 00:42:35.095
it's just too much for some maintainers.

00:42:35.725 --> 00:42:39.835
So that's why I, I built it 'cause what
I needed didn't exist and we, I wasn't

00:42:39.835 --> 00:42:41.485
gonna be able to get to 3.1 support.

00:42:41.925 --> 00:42:45.255
And, you know, it's a
useful tool by itself.

00:42:45.285 --> 00:42:46.875
So live it just inside vacuum.

00:42:46.880 --> 00:42:49.515
When people don't wanna do linting, they
just wanna be able to pass the model

00:42:49.515 --> 00:42:51.705
or do d diff checking programmatically.

00:42:52.005 --> 00:42:54.195
So that's, that's why I built
it and that's why I exist.

00:42:54.195 --> 00:42:56.175
And yes, to answer your first
question, I love coding.

00:42:56.655 --> 00:42:57.585
Love coding

00:42:57.780 --> 00:43:01.170
Track 1: Just like you really enjoy
writing the really just like difficult

00:43:01.170 --> 00:43:05.340
under the hood, low level, just like
writing some code that in, in like

00:43:06.600 --> 00:43:10.680
inspects YAML anchors, like most people
don't even like working with YAML

00:43:10.680 --> 00:43:14.430
anchors, but you're like, let me write
some code that muck about with this, or

00:43:14.745 --> 00:43:16.005
Quobix: yeah, yeah.

00:43:16.545 --> 00:43:16.995
yeah.

00:43:17.055 --> 00:43:19.605
Part, you know, part of the
challenge is can, can I even do this?

00:43:19.605 --> 00:43:21.165
Do I, am I good enough to do that?

00:43:21.165 --> 00:43:24.675
And you know, the, then there's the,
there's something, there's something

00:43:24.680 --> 00:43:27.315
really rewarding about, you know,
when you're working in these high

00:43:27.315 --> 00:43:30.285
level experiences and you are,
know, rendering, you know, graphs

00:43:30.290 --> 00:43:32.685
and charts to be able to trace.

00:43:33.295 --> 00:43:37.195
All the way down to the, the code that
literally read those bites in from the

00:43:37.195 --> 00:43:40.975
spec and know that tree is something
very rewarding about that to me.

00:43:41.065 --> 00:43:41.605
You know, have

00:43:41.605 --> 00:43:44.665
that, that over at that
full, that full view.

00:43:45.175 --> 00:43:46.675
But anyway, yeah, that's
that's a lib open.

00:43:46.675 --> 00:43:46.975
API.

00:43:46.975 --> 00:43:48.505
It's the heart of all the tools.

00:43:48.565 --> 00:43:51.265
It's, you know, it's the ultimate
in dog food, if you will.

00:43:51.415 --> 00:43:53.275
Every single piece relies on this.

00:43:53.635 --> 00:43:58.585
So when all these things break in these
higher levels, it always usually traces

00:43:58.585 --> 00:44:00.055
back to a problem in live open a p.

00:44:00.900 --> 00:44:01.190
Track 1: Yeah,

00:44:02.010 --> 00:44:03.090
Quobix: It's pretty robust.

00:44:03.150 --> 00:44:05.700
There's no real open bug reports.

00:44:05.920 --> 00:44:08.620
Clinger, there's a few, but maybe
it depends on who you look at

00:44:08.695 --> 00:44:10.135
Track 1: there's, there's,
there's always some things.

00:44:10.540 --> 00:44:12.520
Quobix: there's always some stuff in,
there's, there's, there's a few things

00:44:12.520 --> 00:44:16.510
in there, but it's, it's actually the
point where, you know, if I wanted to,

00:44:16.510 --> 00:44:20.680
it would be able to cut a 1.0 release,
which is kind of very rare, but Yeah.

00:44:20.830 --> 00:44:21.220
it's,

00:44:22.495 --> 00:44:23.455
Track 1: Well, that's, that's brilliant.

00:44:23.455 --> 00:44:27.745
And so you, you're doing this, you're
doing this all as a side project and

00:44:27.750 --> 00:44:31.500
one of the questions someone was asking
APIs was like, how sustainable is this?

00:44:31.505 --> 00:44:33.570
Like, is this just a hobby
that you'll get bored of?

00:44:33.940 --> 00:44:37.270
And so that brings us to
the next topic, which is.

00:44:37.810 --> 00:44:40.660
You're building like a SaaS and
a suite to tie this all together.

00:44:40.960 --> 00:44:41.320
How?

00:44:41.320 --> 00:44:42.220
How does that work?

00:44:42.940 --> 00:44:43.600
Quobix: So like that.

00:44:43.600 --> 00:44:46.360
So all of the individual tools, you know,
they're useful in their own purposes,

00:44:46.360 --> 00:44:49.390
but they're all designed as, they're,
they're tools that you download them, you

00:44:49.395 --> 00:44:51.310
own them, you run them, you modify them.

00:44:51.315 --> 00:44:52.780
They're, they're yours forever.

00:44:53.300 --> 00:44:55.815
But then there's the idea of, well,
well, all these individual pieces

00:44:55.815 --> 00:44:57.465
are valuable, but what if it was all.

00:44:58.030 --> 00:45:01.510
Put together, you know, the, the idea
of a suite, that that's, they're all in.

00:45:01.540 --> 00:45:03.070
They're actually designed
to work together.

00:45:03.070 --> 00:45:05.380
They're all put, built in a way
that they'll click together.

00:45:05.900 --> 00:45:09.560
So it's being able to do quality
analysis and have the ability to edit

00:45:09.560 --> 00:45:13.670
rule sets and, you know, and then
be able to visualize your contracts

00:45:13.670 --> 00:45:15.440
and see your schemas visually.

00:45:15.470 --> 00:45:17.270
It's another thing that
we've kind of lacking on.

00:45:17.660 --> 00:45:19.880
You know, there's, there's tools
out there that will visualize.

00:45:19.905 --> 00:45:21.135
To a certain degree.

00:45:21.135 --> 00:45:25.905
But for example, if I'm designing a whole
bunch of schemas in an open API, how can

00:45:25.905 --> 00:45:27.975
I take a look at the, the class hierarchy?

00:45:28.035 --> 00:45:28.965
Hierarchy, sorry.

00:45:29.315 --> 00:45:33.085
In, you know, in some form of UML,
you know, maybe not ml, I dunno.

00:45:33.355 --> 00:45:36.775
But you get to the point
is how do I visualize it?

00:45:36.895 --> 00:45:38.605
How do I do change detection?

00:45:38.605 --> 00:45:40.525
How do I do mocking and testing?

00:45:40.555 --> 00:45:41.635
How do I do compliance?

00:45:41.635 --> 00:45:42.625
How do I do validation?

00:45:42.985 --> 00:45:44.035
Having that as part of.

00:45:44.375 --> 00:45:48.485
One tool that, you know, works
as a desktop app, but also is

00:45:48.485 --> 00:45:50.315
available as a SaaS platform.

00:45:50.315 --> 00:45:54.215
So know, so it's got its own full API
and then it means it can be introduced

00:45:54.220 --> 00:45:58.115
into things like GitHub actions and
all of those functionalities that you

00:45:58.120 --> 00:46:02.705
use as the individual tools now become
available as a service or as a suite

00:46:02.705 --> 00:46:06.455
that you can, you can download and then
moving that forward and offering, you

00:46:06.455 --> 00:46:08.765
know, really what I wanna focus on is.

00:46:09.015 --> 00:46:13.935
The upstream elements of all of open
APIs focusing on the contracts, not

00:46:13.995 --> 00:46:17.775
necessarily the artifacts that are
generated from the contracts like SDKs

00:46:18.215 --> 00:46:23.645
and, you know, docs to some degree, but
it's really about maintaining, you know

00:46:23.700 --> 00:46:25.800
giving you visibility into the contract.

00:46:25.860 --> 00:46:29.130
A lot of it is inspired by a lot of the
work that's stoplight has done, you know

00:46:29.820 --> 00:46:30.240
Track 1: Cool.

00:46:30.270 --> 00:46:32.910
I mean, yeah, there's, there's a
lot of different verticals, right?

00:46:32.940 --> 00:46:36.540
So there, we talk to a lot of all vendors
on this podcast and I'm usually asking

00:46:36.540 --> 00:46:37.680
'em which bits they're going for, 'cause.

00:46:38.155 --> 00:46:40.585
Jason Harmon from Stoplight did a
brilliant piece about how you can't

00:46:40.585 --> 00:46:44.965
do every vertical well, and anyone
who tries is delusional or lying.

00:46:45.075 --> 00:46:48.140
And not, not those exact words,
but something along those lines.

00:46:48.140 --> 00:46:50.150
And it, it definitely,
it definitely checks out.

00:46:50.150 --> 00:46:52.700
Like there's a lot of companies
that kind of do a certain vertical

00:46:52.700 --> 00:46:55.910
as a checkbox activity and,
and it's just sad for everyone.

00:46:55.910 --> 00:46:58.185
But yeah, it seems like, so focusing on.

00:46:58.775 --> 00:47:04.605
Kind of linting and mocking and, and
validation and that, that's, that's

00:47:04.605 --> 00:47:05.895
already quite and change detection.

00:47:06.075 --> 00:47:10.065
That's already quite, quite a blooming
lot, but it's, it's all areas that

00:47:10.575 --> 00:47:13.895
aren't massively well served currently.

00:47:13.900 --> 00:47:17.025
I mean yeah, there's a lot of tools
that kind of go for it, but they've

00:47:17.025 --> 00:47:19.245
all got primary focuses elsewhere.

00:47:19.455 --> 00:47:23.535
So e even if you kind of do put in
some, some docs, I mean, you know.

00:47:24.120 --> 00:47:25.200
Not, that's not the hardest one.

00:47:25.200 --> 00:47:28.290
Once you've got some open API, you
can render it with a pretty interface.

00:47:28.620 --> 00:47:30.480
So like everyone does
docs and something else.

00:47:30.590 --> 00:47:34.010
But yeah, that's, it's an interesting
series of verticals to go for and it's

00:47:34.015 --> 00:47:37.880
good that there's a plan to get some
money involved to help you work on that.

00:47:37.910 --> 00:47:38.360
'cause it's not, I.

00:47:38.810 --> 00:47:42.710
Something you can do Well if it's
purely evenings and weekends, not, not

00:47:42.725 --> 00:47:43.015
Quobix: Yeah.

00:47:43.370 --> 00:47:44.690
Track 1: not in that sweet sense.

00:47:44.690 --> 00:47:46.880
Like you can make the tools
and give them out to people,

00:47:47.090 --> 00:47:48.230
but glue in it all together.

00:47:48.230 --> 00:47:51.950
I, I compare it to like, you know, I
want, I want to set a cutlery and and,

00:47:51.950 --> 00:47:54.620
and I've just got a knife and I'm like,
all right, well let me just whittle for

00:47:54.650 --> 00:47:56.870
the next two days and I'll have that.

00:47:57.060 --> 00:47:58.920
But like, not everyone wants to do that.

00:47:58.920 --> 00:48:02.340
They don't want to go, all right, let me
plug this into this part of the ci and

00:48:02.340 --> 00:48:06.300
then that can do these other 12 steps,
you know, glue it together for me please.

00:48:06.765 --> 00:48:07.665
Quobix: Yes, yes.

00:48:07.695 --> 00:48:08.175
It's the glue.

00:48:08.235 --> 00:48:08.355
Yeah.

00:48:08.355 --> 00:48:11.385
Gl I'll, I'll, here's a service that
sticks it all together for you and

00:48:11.385 --> 00:48:15.375
gives you, you know, a lovely set of
interfaces, easy APIs to integrate with.

00:48:15.805 --> 00:48:16.315
So you're right.

00:48:16.315 --> 00:48:16.495
Yeah.

00:48:16.500 --> 00:48:20.515
It, it, it can't be something that
just stays as evenings and weekends.

00:48:20.570 --> 00:48:23.720
That's my long term goal is to turn
it into, you know, a business that

00:48:23.780 --> 00:48:25.280
I can work on, you know, full time.

00:48:25.850 --> 00:48:27.530
That's, that's where,
that's where I want to be.

00:48:27.590 --> 00:48:29.780
And, you know, it depends on
the, the reason why I'm doing

00:48:29.780 --> 00:48:31.520
this right now is validation.

00:48:31.520 --> 00:48:36.800
Is it, would people even pay, would they
be interested in, you know, there's users

00:48:36.800 --> 00:48:40.700
of open API, there's all these companies
that are using it, but are they gonna.

00:48:41.225 --> 00:48:41.795
Four Cal.

00:48:41.795 --> 00:48:44.915
And I know that model exists because,
you know, the, through the success

00:48:44.915 --> 00:48:50.525
of companies like Bump or optic or
Speakeasy or you know stop Lying, being

00:48:50.525 --> 00:48:53.315
acquired, definitely a, a market for it.

00:48:53.625 --> 00:48:56.235
I just wanted to see, first of
all, would people be interested

00:48:56.235 --> 00:48:57.525
in using my tools first?

00:48:58.215 --> 00:49:00.945
That seems to be, you know,
validated to a degree.

00:49:01.005 --> 00:49:03.645
Now it's, let's, let's make it better.

00:49:04.200 --> 00:49:04.800
Track 1: it's

00:49:04.995 --> 00:49:05.145
Quobix: the gas.

00:49:05.820 --> 00:49:08.130
Track 1: exactly, I mean that's, I
think, I think something you mentioned

00:49:08.130 --> 00:49:09.150
when I saw you talk was like.

00:49:09.555 --> 00:49:13.755
If people, if people start paying and
you can afford to bring somebody on, then

00:49:13.755 --> 00:49:16.785
that's, that's something that you know,
you'd like to do and start to expand it.

00:49:16.785 --> 00:49:18.525
And that, that I think
is really interesting.

00:49:18.525 --> 00:49:22.235
Like my, my background when I'm
not messing with startups it

00:49:22.240 --> 00:49:23.555
is mostly bootstrapped, right?

00:49:23.555 --> 00:49:26.075
Like I, yeah, I, I work for
WeWork, definitely not a startup.

00:49:26.075 --> 00:49:28.325
They like to pretend they are and
they have the ping pong tables, but

00:49:28.565 --> 00:49:30.155
obviously a massive corporation.

00:49:30.375 --> 00:49:32.655
But before that, loads of loads
of bootstrap companies and,

00:49:32.655 --> 00:49:33.645
and small startups and stuff.

00:49:33.705 --> 00:49:34.895
And yeah, it's.

00:49:35.390 --> 00:49:39.950
It's really cool to see you go in
the bootstrapped approach and, and

00:49:39.950 --> 00:49:45.470
look into grow, but also starting
off still with so much open source.

00:49:45.475 --> 00:49:49.340
Because the balance for most of these
tooling companies is if you make

00:49:49.345 --> 00:49:52.490
everything so that people have to pay
you a thousand pounds a month just to

00:49:52.490 --> 00:49:55.520
start using it, you have a really hard
time getting people to start using it.

00:49:55.550 --> 00:50:00.170
'cause it's, it's 100% like enterprise
sales, team driven and you've gotta

00:50:00.170 --> 00:50:03.410
get those big enterprise contracts and
you've gotta have a lot of functionality.

00:50:03.410 --> 00:50:04.550
So it's a massive chicken and egg.

00:50:04.830 --> 00:50:08.100
But then if you have open source, you
get a lot of developers using it and

00:50:08.100 --> 00:50:09.600
some of them might start paying for it.

00:50:09.600 --> 00:50:12.950
So stoplight's approach was, we've
got, you know I can't really put

00:50:12.950 --> 00:50:17.540
numbers on it, I I, but it felt
like kind of 20, 25% of our effort

00:50:17.540 --> 00:50:19.430
would be like entirely open source.

00:50:19.430 --> 00:50:22.700
Like, you know, issues that only really
affect the open source projects or are

00:50:22.700 --> 00:50:24.770
primarily asked for by open source.

00:50:24.920 --> 00:50:27.770
And so you're kinda like making
that stuff out there in the open

00:50:27.770 --> 00:50:30.740
that people can use, but then it's
also powering your paid products.

00:50:30.740 --> 00:50:32.030
And not only does that mean that.

00:50:32.259 --> 00:50:34.690
You know, some people might
be contributing bugs that then

00:50:34.690 --> 00:50:37.660
improve the experience for
your paid users, which is cool.

00:50:37.939 --> 00:50:43.069
But you are also like getting people
hooked on the free stuff and then not,

00:50:43.069 --> 00:50:45.829
you know, then you glue it together
for them and that that brings them in.

00:50:46.099 --> 00:50:52.189
So it is really interesting to see a one
man army kind of just go, well, I'll just

00:50:52.189 --> 00:50:54.709
start off with open source and bloody
everything and figure it out later.

00:50:54.740 --> 00:50:57.589
Like, I really kind of just
like the, it's, it's bold.

00:50:57.679 --> 00:50:58.519
It's a bold choice.

00:50:58.924 --> 00:50:59.750
But it seems to be working.

00:50:59.915 --> 00:51:00.754
Quobix: I appreciate that.

00:51:00.814 --> 00:51:04.174
Yeah, it's, yeah, it's, it's, it's,
it's going in the right direction.

00:51:04.174 --> 00:51:05.194
That, that's for sure.

00:51:05.254 --> 00:51:07.564
For now, you know, anything, can
anything come along and derail

00:51:07.624 --> 00:51:11.714
anything But it, the, the hunger's
there, the, the audience is there.

00:51:11.714 --> 00:51:13.784
The interest in Open API is growing.

00:51:13.844 --> 00:51:17.914
It seems there's a friend of mine
who, he mentioned, he calls it like

00:51:17.914 --> 00:51:19.354
an evergreen, it's an evergreen

00:51:19.354 --> 00:51:19.804
field.

00:51:19.804 --> 00:51:24.154
You know, in 2016, I remember, you
know, there was, we were coming

00:51:24.334 --> 00:51:27.004
off the Ramel versus swagger wars.

00:51:27.594 --> 00:51:30.384
And you know, the conversation
was like, what, we need to invest

00:51:30.384 --> 00:51:31.524
in this, this is important.

00:51:31.524 --> 00:51:32.604
We should care about this.

00:51:32.904 --> 00:51:35.419
So even then, you know, the same
conversations are happening.

00:51:36.324 --> 00:51:39.564
We really haven't made huge
amounts of progress towards

00:51:39.744 --> 00:51:42.474
actually getting this sold, you
know, at at, at the company level.

00:51:42.474 --> 00:51:44.664
There's lots of individual
companies doing this really well,

00:51:44.874 --> 00:51:49.254
but large enterprises are still
mostly absolutely terrible at this.

00:51:49.554 --> 00:51:51.684
So it's, there's this field
where there is evergreen.

00:51:51.684 --> 00:51:56.934
There's always a need to improve here,
and my opinion is the open API is like it.

00:51:58.614 --> 00:52:01.854
It is the key to rest, like is if,
just, just to say that we, if we're

00:52:01.854 --> 00:52:05.784
gonna do rest, there's open API Sure
there's other DSLs out there in other

00:52:05.789 --> 00:52:09.234
languages, but it's, it's the one that
everyone, every company has settled on.

00:52:09.239 --> 00:52:11.274
I, I don't see anyone
talking about any of the

00:52:11.329 --> 00:52:11.819
Track 1: exactly.

00:52:12.089 --> 00:52:13.404
Doesn't need to like.

00:52:13.899 --> 00:52:15.579
We don't necessarily need
to think it's the best.

00:52:15.579 --> 00:52:16.689
It's the one that stuck

00:52:17.364 --> 00:52:17.694
Quobix: Yeah.

00:52:17.694 --> 00:52:18.714
It's VHS, right?

00:52:18.714 --> 00:52:18.774
It

00:52:18.914 --> 00:52:19.204
Track 1: Yeah.

00:52:19.704 --> 00:52:19.974
Quobix: tape.

00:52:19.974 --> 00:52:20.934
It's, it just, we,

00:52:20.979 --> 00:52:22.629
Track 1: Laser discs were cool.

00:52:22.879 --> 00:52:25.159
You could use them as giant
dangerous Frisbees as well.

00:52:25.389 --> 00:52:30.189
Yeah, I mean the last the last I think
two podcasts we've done, we, we had Daryl

00:52:30.194 --> 00:52:32.529
Miller and Vincent whose surname I forgot.

00:52:32.529 --> 00:52:33.069
I'm sorry.

00:52:33.279 --> 00:52:35.649
I, I, I got really cocky that
I knew everyone's names and

00:52:35.654 --> 00:52:36.729
then, and then went for it.

00:52:36.734 --> 00:52:38.249
But but Lorna Mitchell as well.

00:52:38.519 --> 00:52:40.529
And we were talking about moonwalk
a little bit, like yeah, there's,

00:52:40.559 --> 00:52:41.969
there's a V four open, API coming.

00:52:43.059 --> 00:52:46.809
And I do want to dig in more
to see how that is looking.

00:52:46.839 --> 00:52:49.929
'cause I'm, you know, that's
gonna be a big change for a lot of

00:52:49.929 --> 00:52:52.599
tooling developers and it's, it's
rough to see like this massive.

00:52:52.919 --> 00:52:55.409
Massive improvement in
tools happening recently.

00:52:55.409 --> 00:53:00.269
Like I set up open APA duct tools because
everything, everything was kind of shy,

00:53:00.299 --> 00:53:02.399
like a lot of the open source space was.

00:53:02.654 --> 00:53:05.459
We, we were all like, they were all
really small tools and everything

00:53:05.459 --> 00:53:09.369
was like you know, little, little
dodgy projects with like three stars.

00:53:09.369 --> 00:53:13.029
And it was all, we'd all, we were
all really just a young ecosystem

00:53:13.239 --> 00:53:17.559
and everything was coming off of
like swagger two and getting ditched

00:53:17.739 --> 00:53:20.889
and starting over and in open API
three 'cause it was so different.

00:53:21.194 --> 00:53:25.424
And, and it just felt like at that
time, so much of the cool flashy works

00:53:25.424 --> 00:53:28.934
really well, looks really nice, has
good marketing, is really battle tested.

00:53:28.934 --> 00:53:30.014
So much of the good stuff.

00:53:30.104 --> 00:53:32.144
All of that effort was just
going into different communities.

00:53:32.294 --> 00:53:35.144
It was all going into GraphQL and
they were making cool stuff and

00:53:35.144 --> 00:53:36.734
they were like, screw, screw, rest.

00:53:36.794 --> 00:53:37.814
The shiny stuff's over here.

00:53:37.814 --> 00:53:39.914
I was like, you could make, you
could do all of that over here.

00:53:39.914 --> 00:53:41.294
You've just chosen to do it over there.

00:53:41.294 --> 00:53:42.644
And now we're kind of stuck with nothing.

00:53:43.034 --> 00:53:45.799
But over the last couple of years,
like the, the tooling has, has

00:53:45.804 --> 00:53:47.294
grown up so much that I like.

00:53:47.554 --> 00:53:50.014
I have absolutely no envy
for those folks over there.

00:53:50.014 --> 00:53:52.084
And people are starting to come
back and, you know, the hype

00:53:52.084 --> 00:53:53.914
cycle on GraphQL is calming down.

00:53:54.099 --> 00:53:57.544
And, and, and the ma the tooling here
is maturing to a really good spot.

00:53:57.544 --> 00:54:02.674
So I love to see the competition in,
in the different spaces and verticals

00:54:02.854 --> 00:54:04.444
happening to push everyone forwards.

00:54:04.444 --> 00:54:07.624
And the focus on, on just like good
looking websites and good looking

00:54:07.624 --> 00:54:10.264
tools and good looking simple
things that plug and play together.

00:54:10.624 --> 00:54:12.844
So, yeah, I'm really excited
to, to see where it goes.

00:54:12.844 --> 00:54:18.674
And I just, I hope that the open a PV
four isn't a, a big drop kick between

00:54:18.674 --> 00:54:22.484
the legs of the progress that we've,
we've all been making on that front.

00:54:22.594 --> 00:54:24.274
So remains, remains to be seen.

00:54:24.784 --> 00:54:26.674
Quobix: It's quite as,
it's quite as significant.

00:54:26.674 --> 00:54:29.524
W So the moonwalks, from what
I've seen from the early earliest

00:54:29.584 --> 00:54:33.484
specifications, it's, it is gonna,
it will be a nuclear bomb being

00:54:33.484 --> 00:54:36.964
dropped on, on the deaf community,
particularly with the existing tools.

00:54:36.994 --> 00:54:40.174
It's, there's lots of Jason
Schema support, which is great.

00:54:40.764 --> 00:54:41.064
Yeah.

00:54:41.094 --> 00:54:41.724
But yeah.

00:54:42.829 --> 00:54:43.699
It will take some time.

00:54:43.704 --> 00:54:48.439
I don't, I don't even know how close we
are to, you know, full adoption of 3.1,

00:54:48.439 --> 00:54:53.909
yet there's still, you know, a huge amount
of 3.0 spec still being created today.

00:54:54.529 --> 00:54:57.559
But anyway, yeah, it's fun to see where
it goes and I'm glad that it's moving.

00:54:57.559 --> 00:55:00.439
You know, it's, it's the fact that
we've got the workflow specification

00:55:00.444 --> 00:55:04.169
that's almost there, that's,
that's really big overlays as well

00:55:04.169 --> 00:55:05.609
is an interesting thing that's

00:55:05.669 --> 00:55:06.779
not quite there yet.

00:55:07.059 --> 00:55:09.699
But like companies like speakeasy,
they've already gone ahead and, you know.

00:55:09.699 --> 00:55:13.139
Adopted some of the, like lib open API,
they've already built their own kind of

00:55:13.139 --> 00:55:15.109
extensions for it to support overlay.

00:55:15.139 --> 00:55:17.959
I think so anyway, I, I'm
guessing they support overlays

00:55:17.959 --> 00:55:20.179
and they use lib open api, so I'm
guessing they've done that, but

00:55:20.209 --> 00:55:20.749
Track 1: Perfect.

00:55:20.779 --> 00:55:21.439
Yes.

00:55:21.749 --> 00:55:21.899
No.

00:55:21.899 --> 00:55:22.949
I was playing around with the speakeasy.

00:55:22.949 --> 00:55:24.419
Implementation is
pretty, it's pretty good.

00:55:24.609 --> 00:55:28.359
Yeah, so there's loads of cool stuff
coming in open API four and the kind

00:55:28.359 --> 00:55:32.319
of open API connected ecosystem with
these working groups, and we've talked

00:55:32.319 --> 00:55:33.759
about that in previous episodes.

00:55:33.879 --> 00:55:36.039
I'll have to talk about that
more in future ones 'cause.

00:55:36.274 --> 00:55:37.714
This is getting close to being.

00:55:37.864 --> 00:55:39.274
Well, this is, we did it.

00:55:39.274 --> 00:55:40.144
It's a podcast.

00:55:40.314 --> 00:55:43.254
Thank you so much for coming and
talking about all this stuff.

00:55:43.254 --> 00:55:45.864
We, we could have gone for like
two hours, but we'll, we'll, we'll

00:55:45.864 --> 00:55:49.764
make life easier for the editor
and, and, and get outta here, but

00:55:49.979 --> 00:55:50.879
Quobix: Thank you so much.

00:55:51.504 --> 00:55:52.194
Track 1: pleasure having you.

00:55:52.374 --> 00:55:52.764
Cheers.

00:55:53.219 --> 00:55:53.309
Quobix: it.

00:55:53.339 --> 00:55:53.864
Cheers to the chat.

00:55:54.124 --> 00:55:54.344
Bye.