WEBVTT

NOTE
This file was generated by Descript 

00:00:00.253 --> 00:00:02.293
Mike Bifulco: Hello and welcome
back to APIs you won't hate.

00:00:02.293 --> 00:00:03.463
My name is Mike Biko.

00:00:03.463 --> 00:00:05.863
I'm one of your APIs
you won't hate co-hosts.

00:00:06.083 --> 00:00:10.713
I'm lucky to be hanging out today  with
my API's co-founder Phil, Phil Sturgeon.

00:00:10.713 --> 00:00:11.493
How are you doing today?

00:00:12.193 --> 00:00:12.763
Phil: Hello.

00:00:12.763 --> 00:00:14.383
I am doing all right.

00:00:14.383 --> 00:00:15.919
I'm in wet North Wales.

00:00:16.159 --> 00:00:18.079
Hiding out, hiding out from the weather.

00:00:18.289 --> 00:00:18.589
We got a

00:00:18.589 --> 00:00:19.384
big old storm coming.

00:00:20.469 --> 00:00:20.709
Mike Bifulco: Yeah.

00:00:20.709 --> 00:00:22.089
Gosh, it must be the
depths of winter there.

00:00:22.089 --> 00:00:24.439
I'm sure it's plenty, plenty
chilly for you right now, huh?

00:00:24.555 --> 00:00:25.185
Phil: Yeah, absolutely.

00:00:25.312 --> 00:00:26.392
Mike Bifulco: I'm glad to have you here.

00:00:26.392 --> 00:00:29.422
I'm glad to be able to sit down and
talk and you and I actually today are

00:00:29.422 --> 00:00:30.832
gonna be speaking with a, a guest.

00:00:30.832 --> 00:00:32.932
We have Rich Steinmetz on the call today.

00:00:32.932 --> 00:00:34.092
Rich how are you doing?

00:00:34.362 --> 00:00:35.857
Rich: Yeah, hey, all good.

00:00:35.857 --> 00:00:36.897
From my side as well.

00:00:36.997 --> 00:00:39.252
I'm here in sunny Barcelona.

00:00:39.252 --> 00:00:42.192
It's been constantly sunny as always.

00:00:42.412 --> 00:00:42.742
Phil: it in.

00:00:43.864 --> 00:00:45.094
Mike Bifulco: my jealousy is infinite.

00:00:45.344 --> 00:00:48.854
Rich, you have been a community
member for, with APIs you hate

00:00:48.854 --> 00:00:50.804
for, for as long as I can remember.

00:00:50.804 --> 00:00:50.984
And.

00:00:51.074 --> 00:00:53.684
And it feels like your name and
your your voice have appeared

00:00:53.684 --> 00:00:55.294
quite a bit in our world.

00:00:55.394 --> 00:00:58.664
But I, I feel like I also wouldn't
quite do justice to explain just

00:00:58.664 --> 00:01:00.044
to everything that you work on

00:01:00.094 --> 00:01:02.254
can you give a little background
on yourself and kind of the things

00:01:02.254 --> 00:01:04.114
that you do in, in and out of APIs?

00:01:05.229 --> 00:01:06.219
Rich: Yeah, for sure.

00:01:06.319 --> 00:01:08.839
First of all, thanks a
lot for having me on.

00:01:08.839 --> 00:01:08.869
I.

00:01:09.694 --> 00:01:15.634
I'm a listener of the podcast since
probably four or five years, so it's

00:01:15.844 --> 00:01:21.214
basically one of the places that
got me into the whole API thing.

00:01:21.214 --> 00:01:26.884
So it's, it always surprises me
how it is when you listen to some,

00:01:26.914 --> 00:01:30.034
to a podcast or watch a show and
then all of a sudden you are there.

00:01:31.234 --> 00:01:32.134
So thanks

00:01:32.179 --> 00:01:34.129
Mike Bifulco: think that
officially makes you an OG too.

00:01:34.129 --> 00:01:36.019
If you've been around for four
or five years, , you've been

00:01:36.019 --> 00:01:37.254
with us  since, pretty early on.

00:01:37.499 --> 00:01:40.199
Rich: Yeah, I think, I think it
is pretty much from the start.

00:01:40.259 --> 00:01:40.559
Phil: Nice.

00:01:40.679 --> 00:01:44.099
Just be, just be ready for how weird it
gets when you kind of, you know, you,

00:01:44.099 --> 00:01:47.609
you, you do this recording, you pop off,
you forget about it, and then however

00:01:47.609 --> 00:01:49.799
long it takes us to actually get this
one out, you'll be minding your own

00:01:49.799 --> 00:01:52.349
business one day and you'll hear your
voice coming in through your headphones.

00:01:52.349 --> 00:01:54.479
You're like, I was just trying to
listen to the podcast and it's me.

00:01:54.479 --> 00:01:54.929
Ah.

00:01:55.109 --> 00:01:55.619
So just skip

00:01:55.669 --> 00:01:57.169
Rich: yeah, yeah.

00:01:57.169 --> 00:02:01.492
That, that's a, that's a scary one for
sure, but I'm looking forward to that.

00:02:01.592 --> 00:02:05.402
I, I'm not from a engineering background.

00:02:05.972 --> 00:02:12.722
I did get into engineering about
like nine to 10 years ago, and I,

00:02:12.722 --> 00:02:14.282
obviously, I didn't know what I'm doing.

00:02:14.282 --> 00:02:18.092
I tried a bunch of different
things, worked and different.

00:02:18.467 --> 00:02:21.527
Software teams from the
beginning as well and different

00:02:21.527 --> 00:02:23.937
technologies from cake to cake.

00:02:23.937 --> 00:02:25.527
PHP, like from PHP

00:02:25.737 --> 00:02:26.187
Mike Bifulco: Oh yeah.

00:02:26.797 --> 00:02:28.327
Rich: Java to Python.

00:02:28.327 --> 00:02:35.797
And one day I had a contract
in the Ruby Real space.

00:02:36.037 --> 00:02:41.167
And there, there I thought,
yeah, that's a cool technology.

00:02:41.167 --> 00:02:42.667
That's a cool community.

00:02:42.667 --> 00:02:45.007
I want to stay here and.

00:02:46.537 --> 00:02:48.367
I was always a backend guy.

00:02:48.367 --> 00:02:53.977
So although I've built full stack
from like infrastructure to front

00:02:53.977 --> 00:03:00.727
end, I still in in the years
before I touched and created APIs

00:03:00.727 --> 00:03:03.187
a lot for one reason or another.

00:03:03.577 --> 00:03:04.177
But then.

00:03:05.527 --> 00:03:11.707
With this contract, this Rails
contract, five years ago I, for

00:03:11.707 --> 00:03:15.337
the first time I worked in a team
that they had an interesting setup.

00:03:15.337 --> 00:03:15.787
Actually.

00:03:15.877 --> 00:03:22.177
They had like a, on the front end, they
had a Rails app, and on the backend

00:03:22.207 --> 00:03:28.697
they had a, it's called Grape, API it's
like a framework in Ruby to create APIs.

00:03:29.327 --> 00:03:32.507
And it was the first contract
where I realized that.

00:03:32.882 --> 00:03:39.032
APIs are like a discipline, like it's
something you can get into and be like,

00:03:39.632 --> 00:03:42.662
get good at and can learn more about.

00:03:42.722 --> 00:03:48.922
And there I learned things
like designing an API and they

00:03:48.922 --> 00:03:51.022
have like a swagger UI too.

00:03:52.012 --> 00:03:54.652
For the front end app to
communicate with the backhand.

00:03:54.652 --> 00:04:01.682
So and this is where I match you guys in
the, on the podcast with my ears at least.

00:04:02.522 --> 00:04:07.782
And this is where I started to get deeper
into APIs and like read books about it.

00:04:07.912 --> 00:04:12.082
And yeah, follow the different shows
and understanding like the business

00:04:12.082 --> 00:04:15.802
aspect of it, the technical aspect
of it, the design aspect of it.

00:04:16.352 --> 00:04:24.512
And yeah, five years forward,
I'm now, I, I had only rails Ruby

00:04:24.512 --> 00:04:28.632
Rails and API contracts ever since.

00:04:29.442 --> 00:04:40.872
And I'm now helping to build the business
operating system, API for ClickFunnels.

00:04:41.372 --> 00:04:43.682
It's a company who basically.

00:04:44.342 --> 00:04:49.022
Provides the software for entrepreneurs,
for solopreneurs, bootstrappers,

00:04:49.022 --> 00:04:53.682
but nowadays also for all kinds
of companies to run their business

00:04:53.682 --> 00:04:59.862
on and basically have everything
related to marketing and shops and

00:04:59.912 --> 00:05:01.852
customer management running inside.

00:05:03.545 --> 00:05:03.965
Mike Bifulco: Thank you.

00:05:03.965 --> 00:05:05.045
That's super helpful.

00:05:05.105 --> 00:05:09.249
I , am the first to say that I
understand marketing technology at

00:05:09.249 --> 00:05:11.289
like, let's call it a 100 level.

00:05:11.289 --> 00:05:16.389
I'm not super versed in marketing stuff
but I'm also a victim of it fairly

00:05:16.389 --> 00:05:20.579
often, meaning I get to be an end user
of it as a developer for my team at.

00:05:22.434 --> 00:05:22.724
Rich: Yeah.

00:05:22.964 --> 00:05:25.424
Mike Bifulco: something that I find
really fascinating there is for, for the

00:05:25.424 --> 00:05:30.321
uninitiated, there is an incredible amount
of technology that goes into making sure

00:05:30.321 --> 00:05:35.451
that money spent on ads, for example, is
being spent well and being used to target

00:05:35.451 --> 00:05:39.321
fundamentally better audiences each day
or week or cycle, however that works.

00:05:39.511 --> 00:05:42.061
But then there's a lot of
information that goes into tracking

00:05:42.061 --> 00:05:43.891
people's journey through a site.

00:05:43.891 --> 00:05:47.216
So how does someone reach your
your website and then get from.

00:05:47.516 --> 00:05:51.086
Wherever they got to you to spending
money presumably, or creating an

00:05:51.086 --> 00:05:52.466
account or whatever the goal is.

00:05:52.776 --> 00:05:55.806
And I think on some level
that's kind of what ClickFunnels

00:05:55.806 --> 00:05:58.056
does, is that vaguely right.

00:05:58.846 --> 00:06:02.896
Rich: Yes, we do have a good analytics.

00:06:02.956 --> 00:06:08.456
Analytics like module where
you can follow your customer's

00:06:08.456 --> 00:06:10.016
journey through your funnels.

00:06:10.016 --> 00:06:16.556
Like the meat of the software is,
it's in the name, it's the funnels.

00:06:16.556 --> 00:06:21.896
It's like a page builder for
you to create your offer.

00:06:22.406 --> 00:06:26.906
Or Well, you create your offer in
your mind, in the background on

00:06:26.906 --> 00:06:29.106
paper on the, on the whiteboard.

00:06:29.106 --> 00:06:32.526
And then you make it visible
for others in, in software.

00:06:32.826 --> 00:06:35.896
And it's basically there
is a page pillar for that.

00:06:37.006 --> 00:06:40.846
And then you can have a bunch of
different automations, for example.

00:06:41.306 --> 00:06:46.766
I think for craftwork you have, you
have or will have a subscription, right?

00:06:46.766 --> 00:06:48.026
Mike is,

00:06:48.506 --> 00:06:50.066
or is it one time payments.

00:06:50.141 --> 00:06:51.161
Mike Bifulco: yeah, it's one time payment.

00:06:51.161 --> 00:06:52.891
So we're a B2C company.

00:06:52.891 --> 00:06:54.796
We, we do home painting,
so we're not a SaaS at all.

00:06:55.106 --> 00:06:55.396
Yeah.

00:06:55.426 --> 00:06:55.726
Rich: Yeah.

00:06:55.731 --> 00:06:56.656
I, I remember, yeah.

00:06:56.656 --> 00:06:56.746
You

00:06:56.746 --> 00:07:00.976
do home paintings and then now
imagine you have your offer there.

00:07:01.006 --> 00:07:03.486
Hey, I have these amazing
paintings in here.

00:07:03.486 --> 00:07:05.736
And then someone buys your offer.

00:07:06.396 --> 00:07:10.636
Let's say you have like a fixed price
on it for this particular funnel, and

00:07:10.636 --> 00:07:15.236
then they're redirected to another
page where you can provide them

00:07:15.236 --> 00:07:16.916
with more services that they need.

00:07:17.681 --> 00:07:21.971
Maybe, I don't know if they really
need it, if you do like everything,

00:07:21.971 --> 00:07:27.461
but theoretically you could sell 'em
the the tools to do the painting.

00:07:27.461 --> 00:07:29.411
Well, you'll be doing it of course, as a

00:07:29.606 --> 00:07:30.056
Mike Bifulco: Sure.

00:07:30.146 --> 00:07:30.536
Yeah,

00:07:30.761 --> 00:07:31.751
Rich: just as an example.

00:07:31.886 --> 00:07:32.696
Mike Bifulco: yeah, of course.

00:07:33.626 --> 00:07:39.056
And so ClickFunnel helps, helps you to
understand that process and, and hopefully

00:07:39.056 --> 00:07:40.286
send people in the right direction.

00:07:40.631 --> 00:07:41.321
Rich: Exactly.

00:07:41.321 --> 00:07:45.391
And then you can have all kinds
of automations around that.

00:07:45.451 --> 00:07:50.551
And of course going back to analytics,
it's an important part to understand

00:07:50.551 --> 00:07:55.501
like where in your funnel and your
funnel can consist of couple of steps

00:07:55.501 --> 00:08:00.101
can be very simple, but it can be
also very complex with like split

00:08:00.101 --> 00:08:03.041
testing and all kinds of things.

00:08:04.991 --> 00:08:06.761
Mike Bifulco: And imagine
when it comes down to it.

00:08:06.761 --> 00:08:10.481
So I'm viewing, I'm sitting on
ClickFunnel's homepage right now, and

00:08:10.481 --> 00:08:13.301
there is a massive grid of features here.

00:08:13.301 --> 00:08:16.151
Many, many different things that
ClickFunnel seems to build and

00:08:16.221 --> 00:08:17.991
make available to customers.

00:08:18.331 --> 00:08:21.151
All of these things probably have
to talk to each other on some level.

00:08:21.151 --> 00:08:22.621
Is that where your work comes in?

00:08:23.191 --> 00:08:23.941
Rich: yeah, exactly.

00:08:23.941 --> 00:08:26.556
Like we have all these features and.

00:08:27.056 --> 00:08:28.766
It is actually a funny story.

00:08:29.196 --> 00:08:36.926
This software exists for 10 years
now more or less, and they began

00:08:37.706 --> 00:08:45.476
mostly just being a funnel builder,
like page builder, website builder.

00:08:46.286 --> 00:08:50.476
And at some point five years
or so, for like five years

00:08:50.476 --> 00:08:52.936
ago, they decided to do like.

00:08:53.436 --> 00:08:54.756
A ClickFunnels 2.0,

00:08:54.786 --> 00:09:04.026
like a second version, and one of
their like huge factors was the

00:09:04.026 --> 00:09:12.306
technical aspect of how their app
was built in terms of API ecosystem.

00:09:12.456 --> 00:09:16.786
Like everything around when
I say API ecosystem, I'm

00:09:16.786 --> 00:09:18.586
thinking about like webhooks.

00:09:19.096 --> 00:09:25.886
The public, API, of course like the
platform ability of your app, like

00:09:25.976 --> 00:09:28.346
other apps connecting to your app.

00:09:28.522 --> 00:09:32.212
that was a huge factor because
the, the infrastructure or the,

00:09:32.212 --> 00:09:35.992
the technical architecture there in
the, in the first version wasn't.

00:09:36.036 --> 00:09:38.616
set up in a way that, that was easy.

00:09:38.616 --> 00:09:40.686
They had like the old version of the API.

00:09:40.686 --> 00:09:47.226
So basically to provide a much better
experience for their users, give them even

00:09:47.226 --> 00:09:52.786
more power in terms of automations that
they get with the web hooks and public

00:09:52.786 --> 00:09:56.566
API, and to also enable partnerships.

00:09:57.116 --> 00:10:01.686
They have like this big factor,
Hey, let's, let's build an.

00:10:02.796 --> 00:10:04.736
Ap ClickFunnels 2.0

00:10:05.246 --> 00:10:08.486
and let's make the API ecosystem.

00:10:08.516 --> 00:10:09.176
Awesome.

00:10:09.266 --> 00:10:13.826
Like the, there was a, a lot of
thought going in from the beginning

00:10:14.156 --> 00:10:19.226
into how to build, build it and make
it in a way that it's like a platform.

00:10:19.706 --> 00:10:26.796
And it really shows fruit fruits
now because, you were at their main

00:10:26.796 --> 00:10:29.316
page probably@likeclickfunnels.com.

00:10:29.826 --> 00:10:33.546
If you would look for like developers.my

00:10:33.546 --> 00:10:35.406
clickfunnels.com,

00:10:35.736 --> 00:10:38.586
you would see the Our Developer hub.

00:10:38.586 --> 00:10:43.206
And there you can see the
different resources that we kinda,

00:10:43.356 --> 00:10:46.686
that relate to the features,
of course on clickfunnels.com.

00:10:47.616 --> 00:10:49.026
But then also.

00:10:50.106 --> 00:10:56.076
That are used by, by our partners
or by our, like, power users

00:10:56.076 --> 00:11:02.686
and just also developers or
entrepreneurs who are very techy.

00:11:03.542 --> 00:11:05.672
Mike Bifulco: I feel like I've gone
further and further down the rabbit

00:11:05.672 --> 00:11:07.802
hole here, and I'm finding more as I go.

00:11:08.232 --> 00:11:09.222
It's a big product.

00:11:09.287 --> 00:11:10.547
Phil: why I've been quiet for a while.

00:11:10.547 --> 00:11:12.737
'cause I've just been clicking around
the website going, oh man, this

00:11:12.737 --> 00:11:13.697
is gonna solve a lot of problems.

00:11:14.132 --> 00:11:16.442
Whenever I look at a product at the
moment, I'm kind of thinking how

00:11:16.442 --> 00:11:17.672
it would work for Protect Earth.

00:11:17.732 --> 00:11:18.152
And I

00:11:18.152 --> 00:11:18.662
think one of the

00:11:18.662 --> 00:11:19.172
problems we've

00:11:19.172 --> 00:11:20.282
got is,

00:11:20.332 --> 00:11:23.452
Yeah, we're like a tiny little
startup growing rapidly as a

00:11:23.452 --> 00:11:24.892
kind of reforestation charity.

00:11:25.202 --> 00:11:27.902
And there's so many different bits
of software and we've got like a

00:11:27.902 --> 00:11:33.092
website on Squarespace and the you
can sponsor Trees on via the Shopify

00:11:33.092 --> 00:11:36.392
store, which kind of we have to manually
make, try and look a bit similar.

00:11:36.677 --> 00:11:41.447
And you can schedule appointments
and CRM stuff with HubSpot and you

00:11:41.447 --> 00:11:44.737
could, you know, there's all we've got
MailChimp for doing email marketing,

00:11:44.737 --> 00:11:47.017
but we've also got SendGrid for kind of

00:11:47.017 --> 00:11:47.797
programmatically,

00:11:47.797 --> 00:11:49.837
sending emails and there's a
hundred different things in here

00:11:49.837 --> 00:11:50.947
and it looks like you guys do

00:11:50.947 --> 00:11:51.457
basically.

00:11:51.457 --> 00:11:51.967
all of it.

00:11:52.267 --> 00:11:53.677
So that's, that's pretty interesting.

00:11:53.832 --> 00:11:54.122
Rich: Yeah.

00:11:54.262 --> 00:11:57.507
So this is exactly the vision to have.

00:11:57.867 --> 00:12:03.627
Like the business operating system, like
to have everything in one place working

00:12:03.627 --> 00:12:10.407
together and in an automated way so you
don't have to switch between the tools.

00:12:10.407 --> 00:12:14.127
You don't have to connect them
because probably if you have those

00:12:14.127 --> 00:12:19.137
different tools fill, you probably
also go from time to time and use

00:12:19.137 --> 00:12:20.907
something like Zapier maybe to,

00:12:21.487 --> 00:12:23.227
Phil: Yeah, and a

00:12:23.227 --> 00:12:25.597
bunch of them charge, charge
extra for the integration.

00:12:25.597 --> 00:12:27.817
I think like donor box,
our donation platform.

00:12:27.817 --> 00:12:29.167
I've been looking to
replace that for a while.

00:12:29.167 --> 00:12:34.597
'cause Stripe already taken whatever
reduced charity rate fee they take.

00:12:34.597 --> 00:12:37.627
But then donor box take another
percentage of that and sometimes someone

00:12:37.627 --> 00:12:41.137
wants to bang in a thousand pounds and
we lose like 50 or 60 or something.

00:12:41.587 --> 00:12:45.337
And tracking analytics is, is
a massive pain in the backside.

00:12:45.337 --> 00:12:50.067
Fathom, who are amazing sponsors
of the charity have given us like a

00:12:50.067 --> 00:12:54.957
free analytics thing but it's pretty
basic because we've not managed

00:12:54.957 --> 00:12:58.947
to integrate all of the correct
tracking links between Squarespace.

00:12:59.007 --> 00:13:02.547
going to donor box and and
joining it all up with that.

00:13:02.787 --> 00:13:09.567
So yeah, I think the integrations when
free require a little bit of work to make.

00:13:10.167 --> 00:13:13.587
Work properly and sometimes aren't free.

00:13:13.977 --> 00:13:16.707
so it's expensive and more work.

00:13:16.707 --> 00:13:19.862
So yeah, it's interesting to see
someone trying to tackle all of

00:13:19.862 --> 00:13:21.502
this at once, which cannot be easy.

00:13:22.272 --> 00:13:23.322
Rich: Yeah, definitely.

00:13:23.372 --> 00:13:28.682
a lot of the features are also quite
new and there is a lot in the pipeline

00:13:28.682 --> 00:13:35.517
as well, but we are now at a point
that we zoom into making them awesome.

00:13:35.930 --> 00:13:38.450
on the UI side or on the API side.

00:13:38.450 --> 00:13:39.590
So, yeah.

00:13:40.140 --> 00:13:44.460
In terms of features, I, I don't think
it will not grow like horizontally

00:13:44.460 --> 00:13:46.530
anymore a lot I think from what

00:13:46.795 --> 00:13:47.125
Phil: Right.

00:13:47.800 --> 00:13:48.550
Rich: From what I see.

00:13:48.550 --> 00:13:53.740
But we will just like double down on what
we have now in the, in the coming time.

00:13:54.305 --> 00:13:54.635
Phil: Yeah.

00:13:54.635 --> 00:13:55.715
How, how is it?

00:13:56.420 --> 00:13:57.950
What, what form does it take?

00:13:57.950 --> 00:13:59.630
Like is it basically a, a, a

00:13:59.630 --> 00:14:00.590
Big old cms

00:14:00.590 --> 00:14:03.320
with lots of modules or
is it something that is a

00:14:03.320 --> 00:14:05.480
kind of a toolkit that you
are meant to plug into.

00:14:05.480 --> 00:14:06.740
some sort of site yourself?

00:14:07.240 --> 00:14:12.455
Rich: It's, it is just a UI with you,
you start out basically when you do the

00:14:12.455 --> 00:14:18.325
free trial, for example, you start out
and with a screen and a couple of apps.

00:14:18.850 --> 00:14:19.960
Predefined for you.

00:14:19.960 --> 00:14:26.630
Like let's say like funnels are native
and then you can choose, pick and

00:14:26.630 --> 00:14:29.750
choose what you, what kind of an app.

00:14:30.050 --> 00:14:34.640
It's structured in an appy way
and then you go to the app's menu

00:14:34.640 --> 00:14:39.530
and say, Hey, I want like, know
to know more about analytics.

00:14:39.530 --> 00:14:43.400
So we pick the app and then it just.

00:14:43.730 --> 00:14:47.660
Part of your dashboard and
you can just come back to it

00:14:47.780 --> 00:14:48.410
Phil: Oh, I gotcha.

00:14:48.410 --> 00:14:52.380
And there's like, there's a, a website
editor where you are picking a theme,

00:14:52.680 --> 00:14:55.820
and then all of those themes will support
all of the built in apps, I'm guessing,

00:14:55.820 --> 00:14:59.060
so you can just kind of add in whichever
apps and it will have an interface.

00:14:59.060 --> 00:15:00.650
for that, for that, that

00:15:00.790 --> 00:15:01.680
Rich: Exactly, yeah.

00:15:01.680 --> 00:15:03.870
There's an editor like the whole.

00:15:03.898 --> 00:15:05.788
Funnel thing, it's its own app.

00:15:05.788 --> 00:15:07.978
So there is an editor website.

00:15:08.308 --> 00:15:12.518
You connect a domain, you can connect
a domain to it, and then you are

00:15:12.518 --> 00:15:15.488
provided with a domain, like with
Click Funnels, domain first, and

00:15:15.488 --> 00:15:17.108
then you can just connect yours

00:15:17.158 --> 00:15:20.008
Phil: Do you have any integration
with like random APIs?

00:15:20.008 --> 00:15:25.308
So could I dynamically fetch data
into one of these pages from my own

00:15:25.308 --> 00:15:27.498
api, or would that be something else?

00:15:27.998 --> 00:15:30.638
Rich: You mean whether

00:15:30.738 --> 00:15:31.818
Phil: like Right, right now I've

00:15:31.838 --> 00:15:33.128
Rich: data from

00:15:33.558 --> 00:15:34.278
Phil: yeah, exactly.

00:15:34.278 --> 00:15:36.248
I've got I'm just turning
this into free consulting now.

00:15:36.248 --> 00:15:36.638
Cheers.

00:15:37.038 --> 00:15:41.328
So for a common problem that I
have with CMSs that, that try to

00:15:41.328 --> 00:15:43.998
do quite a lot or any sort of kind
of SaaS that does quite a lot?

00:15:43.998 --> 00:15:44.448
Is that.

00:15:44.448 --> 00:15:46.458
the more stuff they do, the better.

00:15:46.458 --> 00:15:48.878
But you always find you know,
the end of it somewhere.

00:15:49.118 --> 00:15:50.848
And we've got we've got
loads of projects, right?

00:15:50.848 --> 00:15:54.538
Like every site that we create a new
woodland at is a, is another project.

00:15:54.918 --> 00:16:00.648
And I've just spent the last week or
two hiring a guy to kind of do manual

00:16:00.648 --> 00:16:02.508
data entry into our Squarespace website.

00:16:02.538 --> 00:16:04.908
'cause there's no way to dynamic
people in the information.

00:16:05.148 --> 00:16:08.958
And I'm like, man, I really should,
I should be doing better than this.

00:16:08.958 --> 00:16:12.558
I should not be hiring someone to manually
do data entry on a website when all

00:16:12.558 --> 00:16:14.418
of this data already lives in an API.

00:16:14.718 --> 00:16:16.698
But also we're quite busy planting trees.

00:16:17.028 --> 00:16:18.258
And I think my point is yeah.

00:16:18.258 --> 00:16:21.708
Is there any way to get kind
of custom data into it somehow?

00:16:21.953 --> 00:16:25.228
Rich: do you have like an example of
what kind of data it would be like?

00:16:25.248 --> 00:16:28.998
Phil: If I've got an API with like name
of project description, number of trees

00:16:28.998 --> 00:16:30.408
planted, and here are some photographs.

00:16:30.408 --> 00:16:32.658
Rich: So it is kind of custom data, right?

00:16:32.658 --> 00:16:36.623
It's not something that's
part of ClickFunnels already.

00:16:36.863 --> 00:16:37.743
I, I know that like.

00:16:37.743 --> 00:16:41.823
can have , the first thing I I'm
thinking about here now is like

00:16:41.823 --> 00:16:46.653
Salesforce, they have these and their
APIs are very happy to work with,

00:16:47.283 --> 00:16:50.783
but they have this like maybe also
HubSpot if I remember correctly.

00:16:50.783 --> 00:16:55.193
But they have these objects you can
create and you can name them whatever

00:16:55.193 --> 00:16:57.503
you want and things like that.

00:16:57.563 --> 00:16:59.063
Is that what, what you would look

00:16:59.478 --> 00:16:59.838
Phil: Yeah.

00:16:59.838 --> 00:17:02.598
I've worked with that sort of integration
in the past that's quite clever.

00:17:02.598 --> 00:17:06.078
And I was quite impressed, even though
it was cumbersome, like in Salesforce,

00:17:06.078 --> 00:17:08.568
you can define custom objects

00:17:08.568 --> 00:17:11.788
in there that are like
represented as o data

00:17:12.028 --> 00:17:16.288
and therefore you can see that lives
over here on my API and then it kind

00:17:16.288 --> 00:17:19.918
of does some syncing in the background
or whatever because it, because it's

00:17:19.918 --> 00:17:23.278
o data, it knows what structure it is
and what types are and everything else.

00:17:23.428 --> 00:17:24.958
Yeah, I suppose that sort of thing.

00:17:25.038 --> 00:17:25.578
Rich: Hmm.

00:17:25.638 --> 00:17:26.838
No, we don't have that.

00:17:26.838 --> 00:17:33.378
We have the, the resources that we
provide on, on the API, like, we

00:17:33.528 --> 00:17:38.438
basically hook in to what we offer
to, to what we offer in the app.

00:17:38.502 --> 00:17:40.545
And that's basically.

00:17:40.570 --> 00:17:41.050
Phil: I gotcha.

00:17:41.170 --> 00:17:44.470
So I can integrate kind of products
and courses and, and all of the

00:17:44.470 --> 00:17:46.180
various different app bits I could use.

00:17:46.240 --> 00:17:48.190
I could use an API to
stick some stuff in there.

00:17:48.255 --> 00:17:55.165
Rich: Exactly like context products CRM
you can do even fulfillments via the API.

00:17:55.165 --> 00:18:00.580
We have a amazing new feature, which
is like creating orders via the API.

00:18:01.108 --> 00:18:01.588
Phil: Oh, brilliant.

00:18:01.768 --> 00:18:02.638
Yeah, that's helpful.

00:18:02.823 --> 00:18:03.903
Rich: Yeah, so

00:18:03.928 --> 00:18:04.348
Phil: Excellent.

00:18:04.348 --> 00:18:07.228
I always like to find the limitations
of a thing to help people get context

00:18:07.228 --> 00:18:10.618
of like where it sits, but that's,
there's plenty on here, which will

00:18:10.618 --> 00:18:13.348
cover the vast majority of of needs.

00:18:13.468 --> 00:18:15.598
'cause not everyone runs
a reforestation charity,

00:18:15.598 --> 00:18:16.498
. 
Mike Bifulco: So Rich, I.

00:18:16.498 --> 00:18:20.548
happen to stumble across the change log
on the developer side of ClickFunnels.

00:18:20.578 --> 00:18:24.078
And I've noticed your name is under
most of the change log entries of

00:18:24.078 --> 00:18:25.818
late for the past few months at least.

00:18:26.628 --> 00:18:29.688
One of the things I'm curious about
is, especially like, as Phil's

00:18:29.688 --> 00:18:30.978
mentioned, there's so many things.

00:18:30.978 --> 00:18:33.448
You're, you're serving so
many different use cases here.

00:18:33.448 --> 00:18:37.798
How is your team identifying what to
work on next and how do you balance,

00:18:37.978 --> 00:18:41.108
you know, the change of a feature
with all the users who must be

00:18:41.108 --> 00:18:42.398
consuming the things that you've built?

00:18:43.598 --> 00:18:45.038
Rich: Yeah, that's a great question.

00:18:45.088 --> 00:18:52.828
This like our API launched almost
two years ago and like end of.

00:18:52.828 --> 00:18:55.918
September, somewhere 2023.

00:18:56.278 --> 00:19:02.578
I launched the second version of the
API and since then it has evolved.

00:19:02.668 --> 00:19:10.248
So we went from, Hey, let's give our users
what we know they'll be using for sure.

00:19:10.758 --> 00:19:12.798
Let, let's give them like a basis.

00:19:12.798 --> 00:19:17.268
And we basically decided ourselves,
like business decided together with

00:19:17.268 --> 00:19:19.748
the engineering team what it will be.

00:19:19.848 --> 00:19:24.348
They have always spoken a
lot, a lot to customers.

00:19:24.888 --> 00:19:31.098
And so we were just shipping
the, the thing that, that we knew

00:19:31.548 --> 00:19:34.878
that will have broad application.

00:19:34.878 --> 00:19:39.988
And at some point this shifted a
little bit in terms of  we went

00:19:39.988 --> 00:19:43.358
more into shipping for our partners.

00:19:43.618 --> 00:19:50.258
And as people started using the API
more, they were requesting things

00:19:50.258 --> 00:19:52.328
more so we had direct feedback.

00:19:52.828 --> 00:19:54.058
By the different channels.

00:19:54.058 --> 00:20:00.418
We also encourage people to have feedback
for us, so they come via support or we

00:20:00.418 --> 00:20:06.748
start early on to foster this discussion,
as you said, in the change log.

00:20:07.298 --> 00:20:13.798
Like that, that would be like the passive
consumption of what's, what's going on.

00:20:13.873 --> 00:20:13.963
But

00:20:14.713 --> 00:20:20.743
we also early on went into having
like a discussion forum so people

00:20:20.773 --> 00:20:25.473
have have a place where they have,
can have questions or doubts.

00:20:25.473 --> 00:20:30.933
And then again, our like our API
users, they aren't all necessarily

00:20:30.933 --> 00:20:34.963
like the hardcore developers who.

00:20:34.963 --> 00:20:38.653
Are hired to do the thing
with Salesforce, for example.

00:20:39.153 --> 00:20:45.453
Our API users are a lot more, I think
compared to, for example, Salesforce

00:20:45.453 --> 00:20:50.553
are a lot more just like solopreneurs
who who are techie and they want

00:20:50.553 --> 00:20:52.593
to build that thing real quick.

00:20:52.593 --> 00:20:56.673
By fo fostering that discussion
in d in different channels.

00:20:57.173 --> 00:21:01.823
We also have like a feature feature board,
and these are all the places basically

00:21:01.873 --> 00:21:07.003
like our partners who integrate with us,
and they're, they're quite a lot of them.

00:21:07.423 --> 00:21:10.603
Who basically with whom
we have synergy, right?

00:21:10.603 --> 00:21:14.893
Like this is a big thing I
think in the API space like the

00:21:15.103 --> 00:21:16.723
business aspect of the APIs.

00:21:16.723 --> 00:21:21.283
If you provide like a good
platform that can be easily or apt.

00:21:22.093 --> 00:21:28.153
Two that can be, that have exposes
a lot of like API features.

00:21:28.483 --> 00:21:31.873
Then you have the synergy with other
partners and you can kind of propel

00:21:31.903 --> 00:21:37.093
your, both businesses and through
both customers in terms of like value.

00:21:37.643 --> 00:21:40.133
Mike Bifulco: I'm curious, can you
tell us a little bit about how the

00:21:40.193 --> 00:21:41.483
product is built in the backend?

00:21:41.483 --> 00:21:43.683
Like , what  tools are you using
to manage and maintain the API?

00:21:43.900 --> 00:21:45.940
Rich: That's a good question as well.

00:21:45.990 --> 00:21:50.280
ClickFunnels is built on on Ruby Rails.

00:21:50.280 --> 00:21:50.790
Mike Bifulco: Okay.

00:21:51.105 --> 00:21:54.525
Rich: Additionally, it's
also built on bullet train.

00:21:54.525 --> 00:22:02.695
So bullet train is an open source SAS
building framework on top of Ruben Rails.

00:22:03.355 --> 00:22:06.265
And it's basically like Ruben
Rails on steroids for SaaS.

00:22:06.315 --> 00:22:12.225
The creator of this framework, Andrew
Culver and the the open source team

00:22:12.405 --> 00:22:18.695
who's working on it, they have created
this this pretty cool starter kit

00:22:18.695 --> 00:22:22.055
for, for SaaS and for APIs as well.

00:22:22.105 --> 00:22:26.655
It is funny that . It was ahead of
its time a little bit in, in the Ruby

00:22:26.655 --> 00:22:31.890
rail space because in the enterprise
world where different technologies

00:22:31.890 --> 00:22:39.260
play a bigger role like Java and c
and wherever and even Python, like in

00:22:39.290 --> 00:22:41.857
where microservices play a bigger role.

00:22:41.857 --> 00:22:45.637
It's more common to build
something like API first.

00:22:45.637 --> 00:22:46.717
Would you agree?

00:22:46.747 --> 00:22:52.167
Like, because Ruby Rails is
more like SaaS web applications.

00:22:52.197 --> 00:22:52.567
Phil: Yeah.

00:22:52.567 --> 00:22:57.007
I definitely feel like there, there's a
lot more kind of, let's sit around and

00:22:57.007 --> 00:22:59.397
spend a year planning this thing in, in

00:22:59.397 --> 00:23:02.367
those enterprises just 'cause of
the, the, the nature of the size

00:23:02.367 --> 00:23:04.377
of company and they wanna make
sure they get it right, you know?

00:23:04.597 --> 00:23:08.132
They're, they're often a bit less
agile, a bit more waterfall because.

00:23:08.507 --> 00:23:10.997
They are gonna spend, yeah,
like sometimes, literally

00:23:10.997 --> 00:23:11.507
six Months.

00:23:11.507 --> 00:23:15.077
to a year, like planning what they
need and involving stakeholders

00:23:15.357 --> 00:23:19.827
before, before they even kind of
get around to writing any code.

00:23:19.827 --> 00:23:22.317
Whereas I am consistent, you know?

00:23:22.417 --> 00:23:26.887
In previous jobs where Rails has been the
thing, you'd be in a meeting talking about

00:23:26.947 --> 00:23:28.957
what, what we might need from this API.

00:23:28.957 --> 00:23:31.987
And someone's already started typing
rails new into their command line.

00:23:31.987 --> 00:23:35.237
Like they will not stop coding
because of the because of the

00:23:35.237 --> 00:23:36.737
kind of agile nature of it all.

00:23:36.737 --> 00:23:39.977
And the fact that there are like
generators and Scaffolders people will

00:23:40.157 --> 00:23:42.647
immediately try and just be like, his hit.

00:23:42.677 --> 00:23:44.717
well, you've mentioned
these five resources.

00:23:44.717 --> 00:23:44.897
I've.

00:23:44.897 --> 00:23:46.187
already made the controllers for them.

00:23:46.307 --> 00:23:48.317
The API's basically done,
what are we talking about?

00:23:48.797 --> 00:23:49.157
So

00:23:49.337 --> 00:23:54.617
Rich: The funny thing, you, me mentioned
scaffolds, like it's a console command

00:23:54.677 --> 00:24:00.127
for anyone who's not into like rails
and, and this stuff where you have you

00:24:00.127 --> 00:24:04.357
just type it in and it creates like
controllers, models, like a bunch of

00:24:04.357 --> 00:24:06.427
code that you would write manually.

00:24:06.427 --> 00:24:11.617
In other language system frameworks and
like Bullet train has super scaffold, so

00:24:11.617 --> 00:24:17.137
it provides you with extra functionality,
a lot of UI things already built in.

00:24:17.137 --> 00:24:21.797
So it is pretty cool and yeah, it
is cool that you agree that there is

00:24:21.827 --> 00:24:28.367
like more ity on with like in Ruby
and Rails teams, maybe also in PPHP

00:24:28.367 --> 00:24:32.507
teams or like some other, tech bubbles.

00:24:33.057 --> 00:24:33.347
Yeah.

00:24:33.617 --> 00:24:36.237
Mike Bifulco: That seems to be a
pattern that's found some favor

00:24:36.237 --> 00:24:38.877
with people, especially with
getting off to the races quickly.

00:24:38.937 --> 00:24:42.302
You can like Phil was saying, rails
new,  is  a funny shortcut for just

00:24:42.302 --> 00:24:43.322
like, oh, I'm gonna build a thing.

00:24:43.322 --> 00:24:44.072
I've got the solution.

00:24:44.072 --> 00:24:44.582
It's coming.

00:24:44.582 --> 00:24:48.462
And scaffolding is kind of halfway
in between where  you may be growing

00:24:48.462 --> 00:24:51.602
your understanding of the thing and,
you can use a scaffold to create

00:24:51.602 --> 00:24:53.402
all of the crud stuff very quickly.

00:24:53.677 --> 00:24:57.397
My understanding of super scaffolding
is that it's make the crud stuff

00:24:57.397 --> 00:25:00.427
so that your web app has all of the
views for a list and a show and an

00:25:00.427 --> 00:25:04.957
edit, but also that you now have an
API that does those same things too.

00:25:05.007 --> 00:25:05.517
Rich: Oh yeah.

00:25:05.517 --> 00:25:07.287
Well, how do you know this?

00:25:07.287 --> 00:25:08.502
Have you worked with train?

00:25:08.962 --> 00:25:11.742
Mike Bifulco: I haven't worked with
Bullet train but at Kraftwerk we're

00:25:11.742 --> 00:25:13.962
building our product on top of Rails.

00:25:13.962 --> 00:25:18.012
So I've done a bunch of research about
Rails API, providers and patterns.

00:25:18.012 --> 00:25:21.132
And I think one of the interesting
things about Ruby on Rails is

00:25:21.132 --> 00:25:26.022
that for a, a framework that is
so, so hell bent on having like

00:25:26.022 --> 00:25:27.402
the rails way to do everything.

00:25:27.687 --> 00:25:30.987
When it comes to APIs, there isn't
really a fully formed opinion.

00:25:31.037 --> 00:25:36.017
And there's many types of ways of kind
of getting to what feels like a similar

00:25:36.017 --> 00:25:38.867
end result enough to the point where
it feels like maybe that should just be

00:25:39.077 --> 00:25:40.697
somewhat standardized at this point too.

00:25:40.697 --> 00:25:44.327
And super scaffolding seems, seems to come
up every time I look up, you know, how do

00:25:44.327 --> 00:25:46.697
I make a nice rest API using my rails app?

00:25:47.052 --> 00:25:50.712
. Rich: This is exactly where, where
I was saying that bullet train

00:25:50.742 --> 00:25:56.052
was a little bit ahead of its time
in the ruby rails space because,

00:25:56.472 --> 00:25:59.952
because of its ity, because of how.

00:25:59.952 --> 00:26:07.112
The rails main driver company, which
is like Rails and so Source, right?

00:26:07.112 --> 00:26:12.355
And behind Rails, like the main
core contributors are, , from a co

00:26:12.355 --> 00:26:14.515
from the rails creator basically.

00:26:14.515 --> 00:26:18.475
Who, who, who's like
DHH David Heiner Hansen.

00:26:19.025 --> 00:26:25.545
He's the founder or creator of Frails
and he, like his company is basically

00:26:25.545 --> 00:26:27.525
the, the main driver of this technology.

00:26:28.005 --> 00:26:34.305
And if you look at their API, you might
have,  like Basecamp is one of their apps.

00:26:34.545 --> 00:26:39.765
If you look at the base cam play this a
PIV four, you might get an idea why Rails.

00:26:39.765 --> 00:26:43.965
API standardization is in the
state that it's currently in.

00:26:44.465 --> 00:26:45.665
Because it's funny, it's actually funny.

00:26:45.715 --> 00:26:48.535
Their APIs basically hosted on GitHub.

00:26:49.035 --> 00:26:54.145
It doesn't, it just examples with,
with some text and I'm not sure

00:26:54.145 --> 00:26:56.365
they are auto generating anything.

00:26:56.365 --> 00:26:56.965
Maybe they are.

00:26:56.965 --> 00:27:03.395
But in the end it's just like
example response, payload and text.

00:27:03.395 --> 00:27:07.985
So they haven't ever, I think
I'm looking this up like a couple

00:27:07.985 --> 00:27:11.105
of times a year, probably every
year for the last five years.

00:27:11.855 --> 00:27:16.135
And I don't think they ever with any
of their products, they went into like

00:27:16.135 --> 00:27:20.095
generating an open API schema providing
like a developer hub or anything.

00:27:20.095 --> 00:27:20.935
So they never.

00:27:21.565 --> 00:27:26.185
Got into this stuff so it never became
part of the Rails core framework and

00:27:26.435 --> 00:27:26.795
Phil: yeah.

00:27:26.795 --> 00:27:30.365
I think he's a bit busy writing fascist
manifestos to get down writing any open

00:27:30.365 --> 00:27:33.665
API, but it would be, it would be nice
to see a little bit more effort put

00:27:33.665 --> 00:27:38.015
into actually describing, describing
any of the APIs involved properly.

00:27:38.310 --> 00:27:41.640
Because yeah, it has just been
the, the classic, like worst

00:27:41.640 --> 00:27:44.460
possible example of here is a url.

00:27:44.490 --> 00:27:46.260
Here is some stuff you might throw.

00:27:46.260 --> 00:27:46.500
at it.

00:27:46.500 --> 00:27:51.270
We're not gonna, describe any of the, of
the data types or validations or anything

00:27:51.270 --> 00:27:54.630
that you'll actually need and just go
figure it out and see what happens.

00:27:54.900 --> 00:27:56.850
Because I forget the name of the term.

00:27:56.850 --> 00:27:57.840
I think it's, Hirums Law.

00:27:58.040 --> 00:28:01.820
Or I'm just getting it wrong and I'm
googling frantically, but the, the

00:28:01.820 --> 00:28:04.060
law that any part of an interface.

00:28:04.705 --> 00:28:06.955
Can and will be used as an API.

00:28:07.225 --> 00:28:08.155
Yeah, yeah, yeah.

00:28:08.155 --> 00:28:09.295
There I actually got it right.

00:28:09.295 --> 00:28:09.955
Go me.

00:28:09.955 --> 00:28:12.595
I've said it to like three other
people recently, so retroactively.

00:28:12.595 --> 00:28:13.075
That's good.

00:28:13.575 --> 00:28:15.705
With a sufficient number
of users of an api.

00:28:15.705 --> 00:28:19.455
It does not matter what you promise in the
contract All observable behaviors of your

00:28:19.455 --> 00:28:21.255
system will be depended on by somebody.

00:28:21.615 --> 00:28:23.145
And so with Rails, because

00:28:23.205 --> 00:28:27.045
there are often a lot of different
ways of doing something, and sometimes

00:28:27.045 --> 00:28:31.335
those things change if you are not
documenting the way that things should be.

00:28:31.335 --> 00:28:34.245
done and there are multiple ways
of doing it, then you have no

00:28:34.245 --> 00:28:35.745
idea if you're breaking an API.

00:28:36.090 --> 00:28:41.850
Like the fact that Rails has from day
one somewhat ruined the entire internet's

00:28:41.850 --> 00:28:43.800
Understanding of the difference between,

00:28:43.800 --> 00:28:44.520
a put and a patch.

00:28:44.520 --> 00:28:45.330
'cause there isn't one,

00:28:45.660 --> 00:28:47.400
it's just the same thing in Rails, right?

00:28:47.400 --> 00:28:48.660
And they've just never changed that.

00:28:48.960 --> 00:28:52.440
And the fact, and the fact that sometimes
they, they support like putting a dot

00:28:52.440 --> 00:28:54.690
Jason on the end or, or a content type.

00:28:54.690 --> 00:28:58.380
Like there's a lot of these weird ways
where they've just gone screw it both

00:28:58.860 --> 00:28:59.520
and.

00:28:59.850 --> 00:29:02.400
If that's not written down in a
contract somewhere, you don't have

00:29:02.400 --> 00:29:05.310
a contract, you just have vibes that
might shift and break everything.

00:29:05.340 --> 00:29:05.700
So

00:29:05.935 --> 00:29:10.500
I, I would like to see open API
considered as important, not only

00:29:10.500 --> 00:29:17.960
to David Heil Hanson, but the
companies that he works for and the,

00:29:17.960 --> 00:29:19.460
the core product itself, you know.

00:29:19.595 --> 00:29:23.675
Rich: Yeah, I'm on a mission, a actually
to to get there and bullet train.

00:29:24.350 --> 00:29:29.030
Is, and I, I don't know how many years
it'll take, but maybe, maybe someday.

00:29:29.030 --> 00:29:30.290
And bullet train.

00:29:30.830 --> 00:29:37.610
One more time back to the head of its
time thing, it with the super scaffolding

00:29:37.640 --> 00:29:44.030
it provides you with with an API
namespace, this is like the regular way.

00:29:44.540 --> 00:29:48.365
It's not classic API
first development because.

00:29:48.853 --> 00:29:51.973
It's not like a separate service
in the end Rails is still like a

00:29:51.973 --> 00:29:57.493
monolith but it has like, it gets
like a touch of API first into the

00:29:57.493 --> 00:30:04.723
monolith and you get the the specific
API version namespace in there.

00:30:04.783 --> 00:30:08.073
You you have even the parameters.

00:30:08.073 --> 00:30:13.623
Are initially when you do the su super
scaffold, like the parameters of the

00:30:13.623 --> 00:30:20.233
domain code in the controllers makes use
of the parameters in the API control.

00:30:20.308 --> 00:30:24.213
Control so that you kind of
think from the beginning about,

00:30:24.753 --> 00:30:27.033
Hey, what's, what would be here?

00:30:27.033 --> 00:30:31.043
Like like something I can or
should expose or shouldn't.

00:30:31.043 --> 00:30:38.273
And yeah, not to forget, there is
the, the open API quote unquote

00:30:38.273 --> 00:30:44.473
problem, which, in the rails world,
because it's an unsolved problem.

00:30:44.543 --> 00:30:47.193
I would consider it unsolved to.

00:30:47.883 --> 00:30:51.993
Generate your open API
schema from code itself.

00:30:52.023 --> 00:30:56.253
I, I don't know you guys, do you
agree that like in Python or like

00:30:56.403 --> 00:31:03.153
some type languages there are
extremely solid open API generators.

00:31:03.623 --> 00:31:07.733
And I'm always saying like, fast API
is the most prominent example, but do

00:31:07.733 --> 00:31:11.493
you agree that there are like kind of
bulletproof, more or less at least?

00:31:11.698 --> 00:31:12.118
Phil: No.

00:31:12.118 --> 00:31:14.038
I mean, every, every I.

00:31:14.683 --> 00:31:14.983
Every

00:31:14.983 --> 00:31:16.873
Language has one framework that takes the

00:31:16.873 --> 00:31:17.713
view that

00:31:17.953 --> 00:31:18.313
open.

00:31:18.313 --> 00:31:21.223
API is something that you should
just vomit out after you've

00:31:21.223 --> 00:31:22.573
finished writing all of your code.

00:31:22.843 --> 00:31:23.683
And, and

00:31:23.683 --> 00:31:26.623
whether that's coming directly from
the code because of types or whether

00:31:26.623 --> 00:31:27.223
it's coming from

00:31:27.223 --> 00:31:28.333
annotations that are

00:31:28.633 --> 00:31:30.583
confusing, proximity with accuracy,

00:31:30.583 --> 00:31:33.673
they kind of just, you know, throw
something out 'cause they were told to and

00:31:33.673 --> 00:31:34.693
they couldn't be bothered to think about

00:31:34.693 --> 00:31:35.623
doing it first.

00:31:35.893 --> 00:31:36.133
And

00:31:36.133 --> 00:31:36.703
that is.

00:31:36.703 --> 00:31:38.953
you know, helpful in some regards.

00:31:38.953 --> 00:31:42.613
But I think most, most frameworks have.

00:31:43.423 --> 00:31:46.753
A way of ingesting open API,

00:31:46.753 --> 00:31:46.963
Right?

00:31:46.963 --> 00:31:47.173
The

00:31:47.173 --> 00:31:48.913
API design first workflow being,

00:31:49.093 --> 00:31:53.083
I'm actually gonna do this open API first,
and then whatever code I end up using

00:31:53.083 --> 00:31:53.563
will simply

00:31:53.563 --> 00:31:53.923
be

00:31:54.133 --> 00:31:54.283
an

00:31:54.283 --> 00:31:55.603
implementation of this.

00:31:55.683 --> 00:31:58.503
Without going the full, like I'm
gonna generate the entire code

00:31:58.503 --> 00:32:00.843
off of the open API, which
is usually a bit of a faf.

00:32:01.203 --> 00:32:01.623
A lot of,

00:32:01.623 --> 00:32:02.983
them have like.

00:32:03.283 --> 00:32:05.213
Server side request validation

00:32:05.213 --> 00:32:06.833
so that you don't have
to write that yourself

00:32:06.893 --> 00:32:07.163
And

00:32:07.193 --> 00:32:07.793
then make sure

00:32:07.793 --> 00:32:08.453
that it matches.

00:32:08.453 --> 00:32:12.113
because you can just say, Hey,
this middleware, can you validate

00:32:12.113 --> 00:32:15.263
the incoming request based off of
open API and reject anything that's

00:32:15.263 --> 00:32:15.743
rubbish.

00:32:15.833 --> 00:32:19.433
And then they have like some other
sort of like aspect, you know, test

00:32:19.483 --> 00:32:21.493
unit testing extension that just

00:32:21.493 --> 00:32:21.823
Says

00:32:21.823 --> 00:32:22.693
oh, and hey, can you make

00:32:22.693 --> 00:32:22.933
Sure.

00:32:22.933 --> 00:32:26.053
that this response coming back matches
the open API that said it should

00:32:26.533 --> 00:32:29.113
and annoyingly  most frameworks.

00:32:29.443 --> 00:32:32.443
Have those sort of options, but there
are always some random little plugin

00:32:32.443 --> 00:32:34.663
main maintained by, you know, some guy.

00:32:35.123 --> 00:32:37.823
And I think that more and
more API frameworks or any

00:32:37.823 --> 00:32:38.543
Web application

00:32:38.543 --> 00:32:39.323
framework that wants to

00:32:39.323 --> 00:32:40.163
pretend that it's

00:32:40.193 --> 00:32:41.723
you know, focusing on APIs

00:32:41.723 --> 00:32:44.003
needs to bring those into the core,

00:32:44.273 --> 00:32:44.453
and

00:32:44.453 --> 00:32:46.523
make it incredibly easy and recommended

00:32:46.733 --> 00:32:47.123
to,

00:32:47.123 --> 00:32:50.363
instead of defining everything
in some random DSL, you

00:32:50.363 --> 00:32:51.503
could simply

00:32:51.713 --> 00:32:52.103
point it

00:32:52.103 --> 00:32:54.203
at your open API and
save, wrangle that code.

00:32:54.488 --> 00:32:54.638
I,

00:32:54.638 --> 00:32:55.268
I'd love to see

00:32:55.268 --> 00:32:57.308
Ruby do more of that and Rails do more of

00:32:57.308 --> 00:32:57.488
that.

00:32:57.488 --> 00:32:59.448
'cause there are really good
extensions out there for

00:32:59.448 --> 00:33:00.003
that sort of thing.

00:33:00.608 --> 00:33:01.148
Rich: Yeah.

00:33:01.208 --> 00:33:03.158
it, that's exactly the thing.

00:33:03.158 --> 00:33:04.808
Like an R swag.

00:33:04.808 --> 00:33:09.118
It's  one of the best options right now
in the real space where you kind of write

00:33:09.118 --> 00:33:14.188
the tests first and then it also generates
an O-P-A-P-I schema from the test.

00:33:14.188 --> 00:33:17.458
But it's still a little bit
of A-D-D-S-L there, right?

00:33:17.458 --> 00:33:20.878
It's not really generating from code,

00:33:20.878 --> 00:33:21.388
Phil: oh yeah, sure.

00:33:21.448 --> 00:33:22.648
That's, that's something different.

00:33:22.648 --> 00:33:26.158
That's aspect is just the generic
testing framework like PHP unit or

00:33:26.158 --> 00:33:28.078
J unit or just whatever test runner,

00:33:28.438 --> 00:33:29.368
um, the.

00:33:30.068 --> 00:33:30.728
Ah, swag.

00:33:30.728 --> 00:33:30.878
Yeah.

00:33:30.878 --> 00:33:33.428
I think that doesn't even support
the latest versions these days, and

00:33:33.488 --> 00:33:36.578
they can't be, they can't, can't be
interested in up update updating it.

00:33:36.578 --> 00:33:39.788
So mostly what I try and
recommend to people is instead of.

00:33:40.508 --> 00:33:44.648
Some people don't like writing open
API and instead of writing open API,

00:33:44.678 --> 00:33:48.338
they write some other sort of awkward
DSL, which then gets out of date

00:33:48.338 --> 00:33:51.068
because they've tried to simplify it
by taking shortcuts, which then don't

00:33:51.068 --> 00:33:53.078
represent the full reality of open API.

00:33:53.478 --> 00:33:56.868
So honestly, just like learn
to write it or use, use copilot

00:33:56.868 --> 00:33:58.128
to help you or whatever.

00:33:58.278 --> 00:33:58.428
But

00:33:58.428 --> 00:33:59.058
my, My.

00:33:59.058 --> 00:34:01.098
preferred thing is still
like, just actually write

00:34:01.098 --> 00:34:02.418
the open API, it's portable.

00:34:02.628 --> 00:34:04.788
If you rewrite your
version two of your API.

00:34:04.858 --> 00:34:09.488
And whatever go instead of Rails, then
app days, it, it's still exactly the same.

00:34:09.488 --> 00:34:13.478
And you have something there for breaking
change detection because you, you know,

00:34:13.478 --> 00:34:16.898
that you haven't accidentally broken the
API 'cause it's, you know, being tested

00:34:16.898 --> 00:34:18.278
and validated against the whole way.

00:34:18.628 --> 00:34:21.388
But that is probably a whole
other episode and one that we

00:34:21.388 --> 00:34:22.648
did recently.

00:34:22.648 --> 00:34:24.388
So I'll get off my soapbox.

00:34:24.688 --> 00:34:29.328
Rich: No, it, it is good stuff
because we also thought about testing

00:34:29.328 --> 00:34:31.068
this as an alternative approach.

00:34:31.068 --> 00:34:37.608
Like what would be the cost of
doing like this manually or design

00:34:37.608 --> 00:34:42.828
first versus having our own auto
generation, which we have now.

00:34:43.168 --> 00:34:47.398
But it also comes with some
things that need to be improved.

00:34:47.398 --> 00:34:52.012
Like , the final vision of this is
that bullet, the bullet train open.

00:34:52.012 --> 00:34:56.802
API generation would have like
the perfect generation generated

00:34:56.802 --> 00:35:03.252
from code and just like clean,
cool generation from code, but.

00:35:03.752 --> 00:35:05.647
Yeah, , that's the other
thought experiment there.

00:35:05.647 --> 00:35:10.957
Like what would it cost actually in
comparison to us getting it there, the

00:35:10.957 --> 00:35:14.617
technology there, what would it cost to
actually doing the design first thing?

00:35:14.917 --> 00:35:18.217
Mike Bifulco: So Rich I, I know you've
mentioned earlier in the chat that

00:35:18.217 --> 00:35:21.993
you have been doing some consulting
work my understanding is maybe at

00:35:21.993 --> 00:35:25.393
least that you may be working on
ClickFunnel as a consultant there too.

00:35:25.393 --> 00:35:28.023
Are you working with folks
currently  outside of ClickFunnel?

00:35:28.023 --> 00:35:29.163
Are there projects you're working on?

00:35:29.248 --> 00:35:29.368
Rich: on?

00:35:30.033 --> 00:35:30.603
Yeah, sure.

00:35:30.603 --> 00:35:36.143
So yeah, my main consulting right now
goes into the ClickFunnels business

00:35:36.143 --> 00:35:40.493
operating system, a BI, I'm super
passionate about that project, but.

00:35:40.493 --> 00:35:45.983
I'm also working together with people
to help them create their apps.

00:35:46.273 --> 00:35:50.503
Marketing First in the Ruby Rail
space because we as developers tend to

00:35:50.933 --> 00:35:55.283
develop a lot and keep our heads in the
code a lot, but then we don't really

00:35:55.283 --> 00:35:57.443
think about the Mark marketing aspect.

00:35:57.503 --> 00:35:59.873
Unfortunately a lot of times so.

00:36:00.023 --> 00:36:00.473
Yeah.

00:36:00.533 --> 00:36:06.513
I'm working with developers and developers
to help them build their app marketing

00:36:06.513 --> 00:36:12.763
first and maybe with maybe also some
projects will come out with backed by

00:36:12.763 --> 00:36:18.173
the ClickFunnels, API, to just see how
you can delegate your user management

00:36:18.323 --> 00:36:22.553
to, to the api, to an API or to this API.

00:36:22.733 --> 00:36:25.133
So I'm working, that's one of my main.

00:36:25.508 --> 00:36:26.463
Projects right now,

00:36:26.563 --> 00:36:29.113
Mike Bifulco: I think that's
something that I probably have shouted

00:36:29.113 --> 00:36:32.473
about on the internet infinitely
for people building new products.

00:36:32.743 --> 00:36:36.163
Is that marketing your thing is every
bit as important as making it work.

00:36:36.518 --> 00:36:39.698
Because if you build a product and nobody
knows about it, ain't nobody gonna use it.

00:36:39.728 --> 00:36:42.608
And that's hugely problematic for
a lot of founders who are super

00:36:42.728 --> 00:36:45.978
technically talented, but then never
tell anyone what they're building.

00:36:45.978 --> 00:36:48.318
And there is no longer, and if
you build it, they will come.

00:36:48.678 --> 00:36:50.358
It's uh, you gotta do both now.

00:36:50.448 --> 00:36:50.538
Rich: them.

00:36:50.988 --> 00:36:51.618
Yes.

00:36:51.618 --> 00:36:56.328
How many apps died because someone
shipped an app, it's online, they

00:36:56.328 --> 00:36:58.758
dropped the link somewhere and then no

00:36:58.758 --> 00:36:59.808
one registered.

00:37:00.528 --> 00:37:03.408
. Mike Bifulco: So Rich what's the best
way for people to find you online if

00:37:03.408 --> 00:37:04.363
they're interested in working with you?

00:37:04.363 --> 00:37:08.568
Rich: Yeah, I'm also asking myself this
sometimes because things change a lot.

00:37:08.853 --> 00:37:16.543
But I think one solid place is
always the rich stone.io/meat

00:37:16.543 --> 00:37:17.773
dash rich,

00:37:17.773 --> 00:37:21.253
That's the place where I kind of
share where I'm at right now and

00:37:21.413 --> 00:37:23.633
what channels are best to find me on.

00:37:24.667 --> 00:37:26.407
I'm also an ex, I'm everywhere.

00:37:26.407 --> 00:37:28.222
I'm Rich Stone io basically.

00:37:29.137 --> 00:37:30.097
Mike Bifulco: Oh, that makes it easy.

00:37:30.097 --> 00:37:33.837
And I'll make sure to drop a link
to your site in the show notes

00:37:33.837 --> 00:37:35.067
so people can find that as well.

00:37:35.067 --> 00:37:38.547
I've also jotted down a handful of
things related to ClickFunnels and

00:37:38.547 --> 00:37:39.747
bullet train and, and the like.

00:37:40.247 --> 00:37:42.497
We'd love to have you come back some
time in wax philosophical little

00:37:42.497 --> 00:37:45.217
bit about Rails and open API  I
think that'd be a fun chat too.

00:37:45.877 --> 00:37:46.567
Rich: That'd be awesome.

00:37:46.567 --> 00:37:46.777
Yeah.

00:37:47.147 --> 00:37:47.777
. And, and by the way,

00:37:48.267 --> 00:37:54.467
I just wanted to mention that the Ruby
Rails community being like the  web app.

00:37:54.467 --> 00:37:56.777
Framework and, and language.

00:37:56.807 --> 00:38:00.217
They will really appreciate the
things that you are sharing and doing

00:38:00.247 --> 00:38:02.227
about like APIs and integrations.

00:38:02.227 --> 00:38:07.327
So it's good to have you
more in our world as well.

00:38:07.807 --> 00:38:08.737
Mike Bifulco: Well, thanks so much.

00:38:08.737 --> 00:38:09.427
Yeah, I appreciate it.

00:38:09.427 --> 00:38:12.547
It is a hugely, hugely responsive
community, and they're definitely.

00:38:12.917 --> 00:38:15.107
Very opinionated , and
nice to chat with too.

00:38:15.107 --> 00:38:17.327
People are pretty reasonable
to talk through what they're

00:38:17.327 --> 00:38:20.237
working on and you know, why they
prefer this over that, and so on.

00:38:20.637 --> 00:38:24.567
I'll find myself deeper and deeper in that
as the the days where on certainly too.

00:38:24.617 --> 00:38:26.207
Alright, fellas, well, let's
call it a day from there.

00:38:26.207 --> 00:38:27.347
Thank you so much for hanging out.

00:38:27.347 --> 00:38:28.757
It's been really nice
chatting with you, rich.

00:38:28.757 --> 00:38:29.357
Have a great day.

00:38:29.357 --> 00:38:30.047
Thank you for coming.

00:38:30.317 --> 00:38:31.232
Rich: Thank you very much.

00:38:31.232 --> 00:38:31.712
Bye.

00:38:32.207 --> 00:38:32.897
Mike Bifulco: Bye, Phil.

00:38:32.897 --> 00:38:33.437
Until next time

00:38:33.437 --> 00:38:33.677
mate.

00:38:33.870 --> 00:38:34.090
Phil: yes.

00:38:34.090 --> 00:38:34.545
See it.