WEBVTT

NOTE
This file was generated by Descript 

00:00:06.036 --> 00:00:08.946
Thronmax MDrill One Pro & USB Video:
Hey folks, and welcome to the small

00:00:08.946 --> 00:00:11.736
tech podcast from Ephemere Creative.

00:00:11.926 --> 00:00:16.406
Today we're going to be talking
about choosing a tech stack.

00:00:16.406 --> 00:00:20.696
If you enjoy the work that we do, we'd
really appreciate it if you hit that like,

00:00:20.696 --> 00:00:26.546
and subscribe button on YouTube, or if you
subscribe in your podcast app of choice.

00:00:26.796 --> 00:00:30.006
We're a tiny team and
every little bit helps.

00:00:30.306 --> 00:00:32.496
First let's ask the question.

00:00:32.556 --> 00:00:34.116
What is a tech stack?

00:00:34.386 --> 00:00:38.636
A lot of you might already know but
for people who haven't been involved

00:00:38.636 --> 00:00:42.566
in this kind of stuff before, it's
normal to not know what that means.

00:00:43.066 --> 00:00:47.266
Essentially, almost every
technical system has multiple

00:00:47.266 --> 00:00:49.876
layers built on top of each other.

00:00:50.376 --> 00:00:53.766
And you put those things together
to create like a functioning stack.

00:00:53.796 --> 00:00:59.406
That is how all of your systems, how
your application, how your business

00:00:59.406 --> 00:01:02.286
processes and other stuff work.

00:01:02.786 --> 00:01:07.076
So a lot of the time, we'll talk
about a tech stack in the context of

00:01:07.076 --> 00:01:08.996
what I'll call an application stack.

00:01:08.996 --> 00:01:14.696
So specifically what you need to have
a functioning mobile app or a web app

00:01:14.696 --> 00:01:16.436
or website or something like that.

00:01:16.936 --> 00:01:20.386
But you'll also hear the term
used with reference to a marketing

00:01:20.386 --> 00:01:23.026
stack or an operational stack.

00:01:23.526 --> 00:01:28.776
And that's because even outside of the
strict bounds of building software, you're

00:01:28.776 --> 00:01:33.186
still layering technologies on top of
each other to get your marketing work

00:01:33.186 --> 00:01:36.376
done and to structure your operations.

00:01:36.876 --> 00:01:39.696
But in the context of
a small tech business.

00:01:40.176 --> 00:01:42.156
Those things, all meshed together.

00:01:42.186 --> 00:01:45.636
You're going to build your application
in a way that it integrates with

00:01:45.636 --> 00:01:49.656
your marketing tools and you
want your operations to be tied

00:01:49.656 --> 00:01:52.266
into your application as well.

00:01:52.766 --> 00:01:57.296
But today for simplicity sake, we're
going to focus on the application side.

00:01:57.796 --> 00:02:02.536
So are we talking about choosing a
tech stack or building a tech stack?

00:02:02.736 --> 00:02:06.816
There are some tech stacks
that are off the shelf.

00:02:07.236 --> 00:02:08.016
Kind of...

00:02:08.256 --> 00:02:11.436
you might've heard of things
like the LAMP stack or you

00:02:11.436 --> 00:02:13.596
might've heard of MERN and MEAN.

00:02:13.796 --> 00:02:19.076
But by and large one way or another,
even if you use a commonly referred

00:02:19.076 --> 00:02:23.066
to stack like MERN, MEAN or LAMP,
you're going to be setting up each of

00:02:23.066 --> 00:02:27.986
the components independently and you
will need to make other choices about

00:02:27.986 --> 00:02:32.216
what goes into your stack and how you
get it up and running in production.

00:02:32.716 --> 00:02:36.946
So you might ask yourself at this point,
does this question really makes sense?

00:02:36.976 --> 00:02:39.286
Are we choosing a tech stack?

00:02:39.346 --> 00:02:42.136
Well, just sort of our you're
choosing the components.

00:02:42.136 --> 00:02:46.756
You are building it, but I think the
questions that you have to ask yourself

00:02:46.756 --> 00:02:51.649
when you choose each of the components,
could be asked about the stack itself.

00:02:51.799 --> 00:02:55.099
You don't want to just choose
your components in isolation.

00:02:55.129 --> 00:02:57.559
You are choosing these as part of a whole.

00:02:58.059 --> 00:03:00.969
So with that in mind, I want to
go over some of the questions

00:03:00.969 --> 00:03:04.959
that we ask ourselves when we're
choosing components in a stack.

00:03:05.459 --> 00:03:05.759
Okay.

00:03:05.759 --> 00:03:10.829
So my top priority personally
is who is going to work on this,

00:03:10.829 --> 00:03:12.419
who is going to work with it.

00:03:12.919 --> 00:03:16.009
And what are their needs
and their preferences.

00:03:16.509 --> 00:03:20.169
I'm talking primarily from an engineering
perspective here, but you'll also want

00:03:20.169 --> 00:03:23.799
to think about other people who interact
with the stack in different ways, not

00:03:23.799 --> 00:03:25.899
just the people who are coding against it.

00:03:26.399 --> 00:03:30.419
So you might want to choose a component
because it's easy for someone who's

00:03:30.419 --> 00:03:35.709
non-technical to log in and interact
with it, maybe to download backups and

00:03:35.709 --> 00:03:38.169
get some data off of it for example.

00:03:38.669 --> 00:03:42.029
You also need to think about what
is your infrastructure budget?

00:03:42.329 --> 00:03:45.239
There are certain things that
cost more than others to run

00:03:45.659 --> 00:03:47.129
for a variety of reasons.

00:03:47.159 --> 00:03:50.849
And you need to take that into account
when you're making that choice.

00:03:51.349 --> 00:03:54.079
You also need to think about
what your maintenance budget is.

00:03:54.379 --> 00:04:00.409
There are things that could be components
of your tech stack that require updates.

00:04:00.439 --> 00:04:04.159
And with each update,
you'll need to make changes.

00:04:04.159 --> 00:04:07.879
You'll need to make sure that
everything is working properly together.

00:04:08.079 --> 00:04:11.649
Some things are more complex
to manage than others.

00:04:11.649 --> 00:04:14.979
So you need to be aware of those
types of things, and you need to

00:04:14.979 --> 00:04:19.319
be aware of the resources that
are available for maintenance

00:04:19.319 --> 00:04:21.179
when you make that type of choice.

00:04:21.679 --> 00:04:25.969
You also need to think about legal
requirements in some cases that might be

00:04:25.969 --> 00:04:30.739
around licensing, but in other cases it
might be about things like data residency.

00:04:30.769 --> 00:04:35.925
Are you able to deploy your stack to an
infrastructure provider that runs in the

00:04:35.925 --> 00:04:38.355
country where your data needs to live.

00:04:38.835 --> 00:04:40.785
If not, you can't use it.

00:04:41.285 --> 00:04:46.895
A specific example of that, that I can
think of is a project where we were

00:04:46.895 --> 00:04:50.685
considering using Firebase because
it would have been very easy for us

00:04:50.685 --> 00:04:55.995
to get off the ground, but the data
had to stay in Canada and Firebase

00:04:55.995 --> 00:04:59.985
doesn't run Canadian data centers
so we had to choose an alternative.

00:05:00.045 --> 00:05:01.795
We ended up going with Supabase.

00:05:01.995 --> 00:05:05.415
You should also think about
performance requirements.

00:05:05.445 --> 00:05:10.755
There are certain types of things that
you're going to build that require

00:05:10.815 --> 00:05:13.555
really fast, high-performing tools.

00:05:13.755 --> 00:05:19.115
But often things that are,
high-performing also require more

00:05:19.115 --> 00:05:21.245
time and expertise to work with.

00:05:21.745 --> 00:05:24.745
So you might need to hire a
much more expensive developer

00:05:24.775 --> 00:05:29.945
to work on for example, a tool
that processes video on the fly.

00:05:30.445 --> 00:05:34.825
I also find it really important to
consider your growth projections.

00:05:35.215 --> 00:05:39.505
You don't want to, over-engineer
a system and choose tools that are

00:05:39.505 --> 00:05:45.055
really complicated to mesh together
if you're probably only going to have

00:05:45.085 --> 00:05:49.915
a hundred users on an app that won't
really need more than one server.

00:05:50.115 --> 00:05:54.325
Conversely though, you also don't want
to find yourself in a situation where

00:05:54.325 --> 00:05:57.295
you've used tools that limit your growth.

00:05:57.535 --> 00:06:02.235
You want to understand that trajectory
and choose the tools that are going

00:06:02.235 --> 00:06:04.545
to serve that trajectory best.

00:06:04.745 --> 00:06:08.855
Ideally, of course you use
tools that can do both well.

00:06:09.035 --> 00:06:14.225
That don't cost a lot to run at the
beginning and can serve your hundred

00:06:14.225 --> 00:06:20.135
users on a single machine well, but
also can scale to hundreds of thousands.

00:06:20.385 --> 00:06:25.335
Of course scaling is going to require
engineering one way or another.

00:06:25.535 --> 00:06:28.835
But you can choose tools that
allow you to take on that

00:06:28.835 --> 00:06:31.265
process more easily than others.

00:06:31.765 --> 00:06:32.065
Okay.

00:06:32.065 --> 00:06:35.095
So we've talked about the different
questions that we like to ask when we

00:06:35.095 --> 00:06:40.155
think about building a tech stack, and I'm
going to give you a practical example of

00:06:40.155 --> 00:06:42.675
how we've done this in the past, sort of.

00:06:42.875 --> 00:06:46.445
By plugging our very own
project, the Chewy Stack.

00:06:46.945 --> 00:06:52.577
So we've been developing the Chewy Stack
over many years essentially by taking

00:06:52.577 --> 00:06:56.807
our learnings from different projects
and finding commonalities and piecing

00:06:56.807 --> 00:07:01.337
together a stack that made sense for
us to do our work and to work with

00:07:01.367 --> 00:07:04.157
the types of clients that we take on.

00:07:04.657 --> 00:07:09.607
We wanted to unify all these different
tools and processes into a single coherent

00:07:09.607 --> 00:07:12.457
stack that we could reuse and optimize.

00:07:12.957 --> 00:07:16.167
So I'll go over the different questions
and give you a quick breakdown of our

00:07:16.167 --> 00:07:18.717
answers in the context of the Chewy Stack.

00:07:19.217 --> 00:07:20.837
So who needs to work with it?

00:07:21.137 --> 00:07:25.847
By and large, the focus was making sure
that developers who knew JavaScript

00:07:25.877 --> 00:07:31.177
and node JS could hop into it pretty
easily, while giving them guardrails

00:07:31.177 --> 00:07:33.187
to help them write good code.

00:07:33.687 --> 00:07:37.557
The infrastructure budget for
our clients varies quite a bit.

00:07:37.757 --> 00:07:43.517
But we wanted to use a baseline of around
$20 a month for the smallest projects.

00:07:43.717 --> 00:07:46.597
Considering the maintenance
budget is also important.

00:07:46.747 --> 00:07:51.607
We have some clients who have a longterm
maintenance budget, but others don't.

00:07:52.107 --> 00:07:55.047
So they need to be able to run
the app until we work with them

00:07:55.047 --> 00:08:00.042
next without having to make any
changes or run into any problems?

00:08:00.542 --> 00:08:05.372
Like I mentioned before data, residency is
a thing we've worked with multiple clients

00:08:05.372 --> 00:08:07.982
who need to keep their data in Canada.

00:08:08.042 --> 00:08:10.892
And we know that this
exists all over the world.

00:08:10.982 --> 00:08:14.912
There are plenty of reasons that
your data might need to stay in the

00:08:14.912 --> 00:08:16.682
country that you're operating in.

00:08:17.182 --> 00:08:20.632
So for us, it was important that
the Chewy Stack be able to do that.

00:08:20.962 --> 00:08:25.432
You should be able to run it on
infrastructure that runs in your country.

00:08:25.932 --> 00:08:29.682
Most of our clients don't actually have
any strict performance requirements.

00:08:29.712 --> 00:08:33.522
Of course, there's a user
experience requirement.

00:08:33.552 --> 00:08:39.282
Things need to be snappy on the user
end, but we generally don't have

00:08:39.282 --> 00:08:44.202
any projects that require heavy data
processing or anything along those lines.

00:08:44.702 --> 00:08:50.342
We did build things so that you can take
care of that sort of task asynchronously.

00:08:50.842 --> 00:08:54.892
And so that you could integrate with
other tooling if you wanted to, but

00:08:54.922 --> 00:08:58.912
out of the box, it's not really a
concern that we've run into very often.

00:08:59.412 --> 00:09:01.272
So what about growth projections?

00:09:01.602 --> 00:09:07.382
I think everyone has a dream of
growing their app to serve hundreds

00:09:07.382 --> 00:09:09.602
of thousands or millions of people.

00:09:09.802 --> 00:09:11.752
But generally the clients
that we've worked with, the

00:09:11.752 --> 00:09:13.192
projects that we've worked on.

00:09:13.222 --> 00:09:17.302
I have a good understanding
of their initial scale and

00:09:17.302 --> 00:09:18.922
how it'll move from there.

00:09:19.282 --> 00:09:23.212
And while we've built things so
that it can grow significantly.

00:09:23.542 --> 00:09:29.572
It also is easy to work with at a
small scale and deploy in that context.

00:09:30.072 --> 00:09:32.352
So those are some of the things
you might want to think about.

00:09:32.382 --> 00:09:36.492
You might choose a particular
database like my SQL or PostgreSQL.

00:09:36.792 --> 00:09:40.512
Uh, because you have relational
data that makes a lot of sense

00:09:40.512 --> 00:09:42.132
to put in a database like that.

00:09:42.552 --> 00:09:48.542
Or you might use a no SQL database like
Mongo, because you need to scale  to

00:09:48.562 --> 00:09:53.222
huge numbers very quickly and Mongo
might make it easier to do that.

00:09:53.522 --> 00:09:58.712
Or maybe you need to be able to handle
lots of things happening at the same time

00:09:58.712 --> 00:10:03.782
and Go, or Erlang might make it a lot
easier to handle those types of processes.

00:10:04.282 --> 00:10:06.992
Anyway, those are some
thoughts, I hope it helped.

00:10:07.192 --> 00:10:10.690
If you enjoy this stuff, please
like, and subscribe on YouTube.

00:10:10.940 --> 00:10:14.359
Subscribe to the podcast
in your app of choice.

00:10:14.359 --> 00:10:16.459
And please leave us a review.

00:10:16.459 --> 00:10:17.839
We'd love to hear what you think.

00:10:17.839 --> 00:10:20.149
And also we'd love to
have you on the podcast.

00:10:20.179 --> 00:10:23.119
If you're building a small tech
product, come chat with me.

00:10:23.119 --> 00:10:26.248
Let's talk about your tech stack,
or maybe let's talk about how

00:10:26.248 --> 00:10:29.548
you've approached different
hurdles as you build your company.

00:10:30.048 --> 00:10:32.148
Also sign up for our newsletter.

00:10:32.148 --> 00:10:36.484
We'll be sending out tons of great stuff
about how to build small tech products.

00:10:36.484 --> 00:10:40.804
Everything from videos, blog posts,
podcast, episodes that you may have

00:10:40.804 --> 00:10:43.105
missed and plenty of other stuff.

00:10:43.105 --> 00:10:48.535
Go to smalltechpodcast.com and click
the newsletter button in the nav bar.

00:10:48.835 --> 00:10:50.965
And that will take you to the right spot.

00:10:51.465 --> 00:10:54.705
So that's it for this week's
episode, we all want to do

00:10:54.705 --> 00:10:55.845
something good in the world.

00:10:55.875 --> 00:10:58.845
So go out there and build
something good folks.

00:10:59.025 --> 00:10:59.595
See ya.