267: Don't Run Servers
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS app development. I'm Marco Arment.
00:00:05
◼
►
And I'm David Smith. Under the Radar is usually not longer than 30 minutes, so let's get started.
00:00:10
◼
►
So before we get into our actual main topic for today, I just wanted to have a brief public service announcement that, as we are recording, we are but a handful of weeks away from WWDC.
00:00:20
◼
►
And as such, it is the time for my annual message to every developer out there who will listen, that now is the time to start preparing for WWDC Labs.
00:00:31
◼
►
So in case you're, you know, if you haven't been to WWDC before, or in terms of the way this is usually structured is, you know, typically Apple engineers are, you know, sort of sequestered behind a veil of secrecy and don't have a, aren't, you aren't able to, you know, interact with them generally, except for during labs.
00:00:49
◼
►
Which Apple has started doing, not just WWDC, though I will say typically, like the largest and most kind of wide ranging labs are WWDC.
00:00:58
◼
►
And these are an opportunity where, at least in the last few years, it's the way they structure it is you'll, you know, have a 30, I think, 15 minutes or a 30 minute zoom conversation with, you know, an engineer, multiple engineers at Apple, where you can talk about issues you're running into, problems you're having, suggestions you'd like to make.
00:01:15
◼
►
And this is just an opportunity to actually connect with it to an engineer to have them look at your code, if you want to interest, you can do screen sharing and show them something.
00:01:23
◼
►
Or similarly, they also have design labs or accessibility labs, which are places where you can have some review the accessibility of your app or review your designs.
00:01:31
◼
►
And I would just encourage everyone to start thinking about that, whether, whether and how you can take advantage of those lab opportunities now. The reason I say that is, it's, you know, if you write, you know, WWDC rolls around, you decide, hey, I'd like to go to a lab.
00:01:47
◼
►
But you don't actually have a list of questions, you don't have a list of topics, you don't have things that you actually want to deal with. It's very potentially hard to get a slot in terms of when you request a slot you they ask you to kind of describe why you want it.
00:01:59
◼
►
And so having a reasonable list is probably important in case it's a, you know, an oversubscribed labs, lab slot, but also just to be better prepared because the better prepared you are for your lab, the more you're able to get out of it.
00:02:11
◼
►
And I over the years have, you know, this is a method that I have used, you know, countless times, I think this will be my 15th WWDC.
00:02:18
◼
►
And so like I've honed this process down, because it's so valuable and because it's something that I find that you know, I always around this time of year over before maybe start a list in reminders that it's just questions for WWDC and anytime I run into something or think something pops into my mind, I'll write it on that list.
00:02:33
◼
►
And so then the week of WWDC, I can kind of, you know, take in the announcements on Monday, work out if there's any new things to it, and then use that as my roadmap going forward and being prepared, I've, you know, get a ton of value out of it.
00:02:44
◼
►
So this is just my little thought that now is the time to start thinking about that. And, you know, inevitably over the next few weeks, things will come up, you'll have ideas, start capturing those in a way that will allow you to be prepared and ready to take maximal value of that when WWDC gets underway.
00:03:00
◼
►
Yeah, I personally have almost never come to the labs with real questions that I prepared ahead of time because I never follow this advice. And so every time, you know, WWDC comes up, and I had the opportunity to, you know, possibly meet with engineers, I'm like, "Oh, man, I don't really have any questions like today, like right at this second, I don't have anything."
00:03:19
◼
►
Because I didn't do my homework, of course, the story of my life, you know, I didn't prepare for this. And so please, listeners, don't follow my example, follow Dave's example. Be prepared. Start now, recording things now, make a list now, because in the few times that I have actually taken advantage of the labs, they have been extremely valuable.
00:03:41
◼
►
I cannot understate how or I cannot overstate how valuable the labs have been. Really take advantage of them if you can. And the way to take advantage of them is to have some kind of question to bring to the labs. And so start thinking about those and writing them down now.
00:03:58
◼
►
All right, so on to our actual discussion for this week. And I think the thing that I thought would make sense to sort of bring up and start to discuss is, I guess, a new or increasingly solidified rule for indie development that I have settled upon. And the rule for indie development that I'm settling is never make a server unless you absolutely have to.
00:04:22
◼
►
Don't do anything. Don't touch servers unless it is an absolute requirement. Just stay away from them. Because in the history of my indie life, every time I make a server, eventually I end up regretting it. Like it is just a rule for my history. And sometimes the impacts of those will carry off to carry for years and years. And it's complicated. And, you know, just don't do it.
00:04:49
◼
►
And I think, you know, the rest of this episode will be kind of walking you through the nuance of that have sometimes it's important. Sometimes you should sometimes you should, you know, but in general, start from the premise of never make a server for anything. Don't do it, it's a bad idea. Instead, look for opportunities that you can do on your phone on device, and start there.
00:05:10
◼
►
And be sort of if you view that as a constraint that you are starting with, I think you can end up with some very interesting and cool places. And specifically, like this last week, I launched a feature in widgetsmith that kind of crystallized a lot of this for me where, you know, several years ago, when maybe it was six, six to nine months after widgets were first app added to iOS, there was a spat of sort of like trending apps, which were ways to show photos to
00:05:39
◼
►
share photos with someone else using the widgets on their home screen. And so essentially, it's a method by which, you know, you could take a picture added into a particular place. And then it was sort of automatically appear on someone else's phone. The most popular I think apps of these was called locket, which does this and you know, has a variety of other features. But functionally, it's that sense of you want to be able to take a picture and it should have it appear on someone else's block screen, which is a great idea is kind of cool. It's kind of a fun way to have this kind of ambient social network situation. But when you're
00:06:08
◼
►
when these these sort of started to come, obviously, I thought to myself, huh, that's interesting. Should I do this? You know, I'm Mr. widget, I can definitely if there's a hot new thing in widgets, I feel like I should be, you know, pursuing it and going after this, like, right, that's, that's, that's my thing. And if I thought about it for like 10 minutes, I was like, No, I'm not going anywhere near this, because in order for me to do it, it would have involved, you know, some amount of server communication involving people's personal photos. And that just immediately
00:06:37
◼
►
And that just immediately sounded like just a complete nonstarter and something I never
00:06:41
◼
►
wanted to touch within a million years, like, no matter how many things I did to that in
00:06:46
◼
►
terms of, like, if I tried to end to end encrypted or whatever it is, like at some point, if
00:06:49
◼
►
I'm in if I'm having managing a server that is having people's personal and private
00:06:53
◼
►
photos move through it, that's just sounds like a disaster waiting to happen.
00:06:57
◼
►
And so I just sort of, you know, wrote this feature off and said, No, it's never gonna
00:07:03
◼
►
And I just, you know, went on to the other widget features like to think of, but then
00:07:05
◼
►
recently had someone who reached out to me and said, Hey, I want to have a way to ambiently
00:07:10
◼
►
share photos with my with my wife.
00:07:13
◼
►
And what I'd love to be able to do is to if you could just make a widget that is the
00:07:17
◼
►
albums widget you already have, but rather than showing a random photo, could you just
00:07:20
◼
►
have it show the most recent photo that was added to that album.
00:07:24
◼
►
And then I can point it to a shared album on my wife's phone.
00:07:27
◼
►
And I could, you know, share photos with her of things I'm seeing throughout the day that
00:07:29
◼
►
made me think of her.
00:07:30
◼
►
And, you know, it's just like, I don't think they ever heard of lock it or any of those
00:07:33
◼
►
kind of apps.
00:07:34
◼
►
Like, this is something I'd like to do.
00:07:35
◼
►
And as soon as they said that it was like, wait, this is genius.
00:07:39
◼
►
Like, this is exactly like the ideal scenario for me where I can build this feature, but
00:07:45
◼
►
never have to ever see or touch these, these, you know, these users photos like this is
00:07:49
◼
►
entirely done on device.
00:07:51
◼
►
It is entirely leveraging iCloud photo sharing to do all of the heavy lifting and all of
00:07:55
◼
►
the privacy concerns and deal with all the issues that come along with that.
00:07:58
◼
►
And so I did it and it's like, it's been very popular.
00:08:00
◼
►
And it was just kind of a fun sort of situation of this, I think, you know, I'm glad I waited.
00:08:06
◼
►
I'm glad I didn't build the servers.
00:08:09
◼
►
This obviously isn't the same.
00:08:10
◼
►
And I think that's something that certainly will be worth unpacking that by going this
00:08:14
◼
►
route, I'm shoehorning a little bit or limiting what my feature can do in a way that if I
00:08:21
◼
►
had built my own servers, I could have done so much more.
00:08:23
◼
►
I could do all kinds of different sharing models or had different things going on with
00:08:28
◼
►
But being patient and taking a different approach, I think it opens me up, you know, it opens
00:08:34
◼
►
up this feature as a possibility, but while foreclosing huge swaths of problems or issues
00:08:39
◼
►
and headaches that I now don't have to deal with because they're not my servers.
00:08:43
◼
►
Yeah, I cannot echo this advice enough again in continuing the theme in another way in
00:08:50
◼
►
which I did not follow your advice and regretted it constantly.
00:08:56
◼
►
I currently run a bunch of servers and I hate running servers.
00:09:00
◼
►
I can't tell you how much I hate it.
00:09:03
◼
►
And I'm lucky in the sense that the servers I run now are way, way lower needs than what
00:09:09
◼
►
I used to have to deal with.
00:09:10
◼
►
Like Overcast is lower needs than Instapaper.
00:09:13
◼
►
Instapaper was way lower needs than Tumblr.
00:09:16
◼
►
And so I really, I have a pretty good situation going here as far as servers go.
00:09:22
◼
►
But it's such a pain and it's so much, it's tempting when you're a nerd like us and you
00:09:30
◼
►
think of some new opportunity or some new opportunity to present itself and you're like,
00:09:34
◼
►
"Wait a minute.
00:09:35
◼
►
If I quote 'just' and this is the biggest 'just' in the world, if I just bounce this
00:09:39
◼
►
off a server or use a server to sync this thing over here, then I can enable this cool
00:09:44
◼
►
feature or deliver this great value to my users or have this amazing capability."
00:09:50
◼
►
And when you're in that mode, when you're in the new idea promise mode where you're
00:09:57
◼
►
looking at something that could be really promising, in that mode, your mind, I think,
00:10:03
◼
►
I'm not a psychologist, but it would not be surprising to me if there was some actual
00:10:10
◼
►
chemical in your brain that at that moment made you totally minimize or just block out
00:10:17
◼
►
or forget all of the downsides of what you think you need to do to get there.
00:10:22
◼
►
So in the sense of, "Oh, I need to bounce this off a server," that word "just," "I'll
00:10:27
◼
►
just put a simple server up here," or "I'll just put it on AWS and some kind of weird
00:10:33
◼
►
abstracted server product that they or Google or Microsoft or whoever have, so it'll just
00:10:37
◼
►
run some JavaScript.
00:10:38
◼
►
Maybe it'll just run it on Cloudflare's edge nodes or whatever."
00:10:42
◼
►
There's always a "just."
00:10:44
◼
►
And the reality of that is always more complicated than that.
00:10:48
◼
►
But in that moment, your brain is not letting you see that reality.
00:10:51
◼
►
Your brain is totally tricked by, "Man, that would be cool if I could get it to work and
00:10:56
◼
►
then I could do this cool thing."
00:10:59
◼
►
And I think it's really useful to...
00:11:01
◼
►
I mean, look, if you're young and don't need sleep, go for it.
00:11:08
◼
►
Especially if you're working at a startup or you're spending someone else's money,
00:11:12
◼
►
That's the time to do it.
00:11:13
◼
►
When you are a middle-aged indie developer like us and you want to be able to do other
00:11:19
◼
►
things with your life ever and you need to care about how much things cost over time
00:11:23
◼
►
and how things scale over time, really think about that carefully.
00:11:29
◼
►
Because usually, this is one of the cases where, look, oftentimes there are certain
00:11:34
◼
►
problems that you really just kind of can't solve without running servers.
00:11:38
◼
►
For instance, if you need to have some kind of cross-platform thing, you want something
00:11:42
◼
►
to work on Windows and Android and Mac and iOS and Kindles, whatever you need to do.
00:11:50
◼
►
If you need something like that, it's going to be pretty hard to do that without running
00:11:52
◼
►
services of some sort on the web.
00:11:54
◼
►
But if you're just an indie iOS developer, for the most part, like us, there's a whole
00:12:01
◼
►
lot you can do just on device or just using the stuff Apple gives us for...
00:12:07
◼
►
Okay, I was going to say free.
00:12:09
◼
►
I know free here is similar to just earlier, but we'll just go with it.
00:12:16
◼
►
What Apple gives us for "free," there's so much we can do there.
00:12:20
◼
►
A lot of times, the idea that you have or the problem you want to solve, a lot of times,
00:12:26
◼
►
you can get 80% of the way there with just doing on-device stuff and CloudKit or whatever
00:12:33
◼
►
You can get away with a lot of what you want for zero downside on the server side.
00:12:38
◼
►
Now, that's not to say these solutions don't have challenges.
00:12:41
◼
►
Certainly, if you start doing things like with CloudKit, there are challenges there.
00:12:45
◼
►
There are limitations there.
00:12:46
◼
►
There are edge cases and problems that you'll have to deal with.
00:12:49
◼
►
But there also are all those challenges and edge cases and problems to deal with when
00:12:54
◼
►
running servers.
00:12:55
◼
►
The difference is, once you figure out CloudKit, it tends to basically work, and you don't
00:13:00
◼
►
really have to do anything ongoing for the most part.
00:13:03
◼
►
I know there's a lot of asterisks here, but bear with me.
00:13:06
◼
►
The difference between that and running your own servers is extraordinarily different.
00:13:11
◼
►
Running servers...
00:13:12
◼
►
And again, I run really low-needs servers.
00:13:14
◼
►
I usually don't have to do anything for my servers.
00:13:16
◼
►
But I still have to maintain them all.
00:13:19
◼
►
I still have to set them up.
00:13:20
◼
►
I still have to adjust them as my needs go over time.
00:13:24
◼
►
I have to manage their costs.
00:13:26
◼
►
And by the way, server costs are going up now for the first time ever because energy
00:13:31
◼
►
costs are going up like crazy.
00:13:33
◼
►
So all of a sudden, my costs are 20% higher than they were a few months ago, and I didn't
00:13:39
◼
►
get anything extra for it.
00:13:40
◼
►
It's just higher cost.
00:13:42
◼
►
I just have to eat that.
00:13:43
◼
►
If you were based on local device stuff or CloudKit, you wouldn't have to know about
00:13:48
◼
►
As the server world changes, your knowledge has to change.
00:13:51
◼
►
The way things are done changes with servers.
00:13:54
◼
►
Different tools come in and out of favor.
00:13:57
◼
►
Different security needs come up that you have to deal with.
00:14:00
◼
►
Different infrastructure things like IPv6 you have to deal with now, which I didn't
00:14:05
◼
►
have to deal with when I first set up my servers a million years ago.
00:14:08
◼
►
There's stuff like that that comes up.
00:14:11
◼
►
Every single time I have to deal with one of these things, I'm like, "Do I really want
00:14:14
◼
►
to be running servers?"
00:14:16
◼
►
This is not what I do best.
00:14:18
◼
►
This is not what I like doing.
00:14:20
◼
►
All it's doing is a supporting role to my app that most people, while they rely on it,
00:14:27
◼
►
they don't know they rely on it, and they don't care, and they don't appreciate it,
00:14:30
◼
►
and they don't necessarily need to have the app that relies on that.
00:14:33
◼
►
Most people who use my app use it on one device.
00:14:38
◼
►
They don't need to know what's on the back end powering all this stuff.
00:14:41
◼
►
They don't care.
00:14:44
◼
►
Running the servers is almost entirely just a burden to me.
00:14:47
◼
►
It's not really providing tons of customer value that they can see and know about.
00:14:52
◼
►
It isn't the only way to do it.
00:14:54
◼
►
If I really wanted to totally remake the app to not use servers, I could.
00:15:00
◼
►
I wouldn't lose much except a ton of time.
00:15:05
◼
►
That's why I don't do this, because it would take a ton of time, and it wouldn't be as
00:15:11
◼
►
good in certain ways at the result.
00:15:15
◼
►
I could actually achieve 80% of what people want totally serverless.
00:15:21
◼
►
It would be fine.
00:15:23
◼
►
I look at, as I'm developing features over time now, I'm looking at reducing my server
00:15:30
◼
►
usage, not increasing it.
00:15:32
◼
►
I'm doing this giant sync engine rewrite and data layer rewrite using my Blackboard engine
00:15:38
◼
►
and Swift and Swift UI and Async and all this stuff.
00:15:41
◼
►
Part of that is really designing the sync protocol to be extremely efficient from the
00:15:48
◼
►
I try to reduce the server needs as much as I can with that.
00:15:52
◼
►
Doing certain things to the devices too.
00:15:54
◼
►
For most of the last decade I've been doing Overcast, I have generated my own image thumbnails
00:16:01
◼
►
for when you search for a podcast and it shows the search list and everything.
00:16:04
◼
►
Because podcast feeds, they only include one size image in the feed, and it's the full
00:16:09
◼
►
That could be a couple of megs and 3,000 pixels wide.
00:16:13
◼
►
If you're showing a list of search results, you just need something that's 100 pixels
00:16:17
◼
►
wide to show a little thumbnail.
00:16:19
◼
►
You don't need the 3 megabyte, 3,000 pixel one, and that would take a long time to load,
00:16:23
◼
►
so that list would load slowly.
00:16:24
◼
►
There's a huge advantage in generating your own thumbnails server side.
00:16:30
◼
►
That's something that's somewhat difficult to not do if you're running a podcast app.
00:16:35
◼
►
There are simpler ways to do that.
00:16:36
◼
►
You can outsource that to a CDN with built-in image resizing functionality.
00:16:40
◼
►
You can have very simple services that do that.
00:16:43
◼
►
It costs a little bit more usually, but you can have that be an isolated box you don't
00:16:48
◼
►
want to think about.
00:16:50
◼
►
Also, I used to download those thumbnails to the phone, because the phone has to display
00:16:57
◼
►
small thumbnails a lot.
00:16:59
◼
►
And so does the Apple Watch and everything else.
00:17:01
◼
►
And a lot of these, like the Apple Watch, has memory constraints.
00:17:04
◼
►
And so for a long time, I would download multiple sizes of those images when you would add a
00:17:11
◼
►
I would download those to the phone and to the watch, instead of having it resize them
00:17:15
◼
►
Well now, the hardware is so good, even on the watch, that I don't need to resize them
00:17:21
◼
►
server side except for search results.
00:17:24
◼
►
Now, for your regular podcast subscriptions, like when they change their artwork when you
00:17:28
◼
►
add a new subscription, it just downloads one.
00:17:30
◼
►
It just downloads the regular one, and it doesn't even touch my servers.
00:17:32
◼
►
It goes directly to the publisher, downloads the one master artwork file, and then generates
00:17:37
◼
►
thumbnails from that, even on the watch.
00:17:39
◼
►
And the hardware is now fast enough and good enough I can do that, and it doesn't run out
00:17:42
◼
►
of memory or crash or give me high CPU usage terminations or anything like that.
00:17:47
◼
►
And there's so many things like that.
00:17:48
◼
►
Now, I could even do things like recommendations on the phone.
00:17:52
◼
►
I don't yet, but I'm moving towards being able to do that.
00:17:56
◼
►
And I think this is an important balance to consider as we move towards this new world
00:18:02
◼
►
of having a lot of really complex AI models and model-powered features.
00:18:09
◼
►
The iPhone is really good at running certain types of AI models and ML, I don't know, many
00:18:17
◼
►
of the terminologies, but you know what I mean.
00:18:18
◼
►
All the different AI, ML kind of models.
00:18:22
◼
►
And if you can make something run locally, it might not be quite as powerful as something
00:18:28
◼
►
running server side, but it's free.
00:18:32
◼
►
It takes nothing from you.
00:18:34
◼
►
It just takes Apple enabling certain functionality, or it takes you shipping a model and, you
00:18:39
◼
►
know, there's various methods Apple has to encrypt and protect those models if you want
00:18:43
◼
►
to ship it with your app without having people steal it.
00:18:45
◼
►
There's all sorts of stuff like that.
00:18:46
◼
►
And I think this is really underused in apps because most apps currently that are using
00:18:51
◼
►
AI models are big company apps.
00:18:55
◼
►
Or there's stuff that is just kind of capturing the value in, let's just make something
00:19:00
◼
►
that's a front-end to open AI's web interface and put an interface on that and ship it.
00:19:06
◼
►
And there is value in that.
00:19:07
◼
►
But ultimately, the significantly better business for most people to be in, if you can, is to
00:19:14
◼
►
do stuff on device where you're not running any servers, you're not running any API
00:19:18
◼
►
keys for anybody.
00:19:20
◼
►
You are just running stuff on device and you don't have to deal with throttling or, well,
00:19:26
◼
►
not server side throttling, you don't have to deal with the massive scaling cost of that.
00:19:31
◼
►
And I think moving into this world of AI stuff, it is going to be really tempting.
00:19:35
◼
►
It already is for lots of people.
00:19:37
◼
►
Really tempting to look at what is now capable and what will become capable in the near future
00:19:41
◼
►
and say, "Oh my God, I have to rush to build an app against that right now."
00:19:44
◼
►
And set up servers and bounce stuff through an API or whatever, or run your own models
00:19:48
◼
►
and your own expensive rented hardware or whatever it is.
00:19:50
◼
►
It's so tempting to see that opportunity there.
00:19:53
◼
►
To say, "Oh my God, if I just set up a farm of high GPU servers with this four gig model
00:20:02
◼
►
that if I just do that, I'll have this amazing powerful app feature that I can ship."
00:20:08
◼
►
And you can, and that's an option, but you can also probably do quite a lot, probably
00:20:14
◼
►
more than you think, with the hardware in people's phones locally for free and not
00:20:20
◼
►
having to run any of that stuff.
00:20:22
◼
►
And I think there is opportunity on both sides of that and the opportunity on the side of
00:20:28
◼
►
the phone is going to be the one that is dramatically underused because most people don't know
00:20:33
◼
►
about it, don't see it, or underestimate the downsides and costs of running servers.
00:20:39
◼
►
Whereas if you are out there taking advantage of stuff you can do on the phone, not only
00:20:43
◼
►
will Apple like you a lot, and I think that will add, it will increase your chances of
00:20:48
◼
►
being featured and stuff, which is nice, but also you'll be saving yourself all that
00:20:53
◼
►
time and in many cases you'll be providing a better experience because there won't
00:20:57
◼
►
be network latency or it will work offline or things like that.
00:21:01
◼
►
So there's a lot of value in doing stuff locally and whether it's the cool new AI
00:21:05
◼
►
stuff that is cutting edge now or whether it's really old stuff like image resizing,
00:21:09
◼
►
there's so much you can do locally on devices now.
00:21:13
◼
►
The devices are so, so vastly powerful.
00:21:16
◼
►
You have no idea, if you haven't really pushed these devices to do something computationally
00:21:20
◼
►
that you think will be really slow, you don't know how fast these things are.
00:21:25
◼
►
Because everything I try to make the iPhone do that I think is going to be really slow
00:21:28
◼
►
ends up flying by.
00:21:30
◼
►
And I'm like, "Well, that was stupid to worry about.
00:21:32
◼
►
Why did I ever think this would be a problem?"
00:21:35
◼
►
So anyway, do things locally when you can.
00:21:39
◼
►
It is really, really powerful.
00:21:41
◼
►
It is really nice and you can usually achieve at least 80% of what you want and then not
00:21:47
◼
►
have to run servers.
00:21:49
◼
►
And believe me, running servers is so much more than adjust.
00:21:52
◼
►
Anyway, we are brought to you by Indeed.
00:21:55
◼
►
When it comes to hiring, trust your gut.
00:21:56
◼
►
But what if you can give your gut some help?
00:21:58
◼
►
When you want to find quality talent fast, you need Indeed, the hiring platform where
00:22:03
◼
►
you can attract, interview and hire all in one place.
00:22:07
◼
►
Don't spend hours on multiple job sites looking for candidates with just the right skills
00:22:10
◼
►
when you can do it all with Indeed.
00:22:12
◼
►
Find top talent fast with Indeed's suite of powerful hiring tools like matching, assessments,
00:22:18
◼
►
virtual interviews and more.
00:22:20
◼
►
And if you hate waiting, Indeed's US data shows over 80% of Indeed employers find quality
00:22:24
◼
►
candidates whose resumes on Indeed match their job description the moment they sponsor a
00:22:29
◼
►
Instant Match really is incredible.
00:22:32
◼
►
Sponsor a job and Indeed will match you with quality candidates whose resumes on Indeed
00:22:35
◼
►
fit your job description right when you post.
00:22:38
◼
►
With Indeed, you can start hiring fast.
00:22:41
◼
►
Join over 3 million businesses worldwide using Indeed to hire great talent fast.
00:22:46
◼
►
Indeed knows when you're growing your own business, you have to make every dollar count.
00:22:49
◼
►
So that's why with Indeed, you only pay for quality applications that match your must
00:22:53
◼
►
have job requirements.
00:22:55
◼
►
Visit Indeed.com/undertheradar to start hiring now.
00:23:00
◼
►
That's Indeed, I-N-D-E-E-D dot com slash under the radar.
00:23:04
◼
►
Indeed dot com slash under the radar.
00:23:07
◼
►
Terms and conditions apply, cost per application pricing not available for everyone.
00:23:10
◼
►
Need to hire?
00:23:11
◼
►
You need Indeed.
00:23:12
◼
►
Our thanks to Indeed for sponsoring this show and all of Relay FM.
00:23:15
◼
►
Yeah, and I think something you said there that I think is just, it's in general one
00:23:20
◼
►
of those things that I think was very important for me to understand early on in my career
00:23:25
◼
►
is the difference between free and any other price, which applies when we're talking about
00:23:33
◼
►
like on the marketing side, that the difference between being free and a 49 cent app is transformative
00:23:39
◼
►
and radically so.
00:23:41
◼
►
But there's just in general, that same pattern happens time and time again, that as soon
00:23:45
◼
►
as you can get something to go to zero, it's fundamentally different than if it is any
00:23:51
◼
►
non-zero number.
00:23:53
◼
►
And I think this is an example of where that comes into play that is just so different
00:23:58
◼
►
anytime you have a situation that there is a per user cost to you, suddenly your business
00:24:04
◼
►
model and your scaling and what success looks like is radically different than if you have
00:24:10
◼
►
no per user cost, that the actual marginal cost of your product goes to zero, suddenly
00:24:15
◼
►
a lot of different things are open and possibilities that you just couldn't be otherwise.
00:24:20
◼
►
In addition to all the other reasons of like being able to sleep at night and not having
00:24:23
◼
►
to have infrastructure that you worry about and have to maintain and deal with and compliance
00:24:28
◼
►
with all kinds of rules, like just in general, there is just all these different things that
00:24:32
◼
►
are sort of transformatively different as soon as you can get that side of things to
00:24:37
◼
►
So I think that's just important to keep in mind of anything, that anytime you can make
00:24:42
◼
►
a choice to move the marginal cost of your user to zero, always sort of, if you're on
00:24:48
◼
►
the fence between two, always choose that, I think would be the advice I would give.
00:24:52
◼
►
And I think also, it's one of these challenging places where I think it's important to, the
00:24:59
◼
►
other lesson I've learned to me if I'm like putting together my like, you know, Dave's
00:25:02
◼
►
rules for indie development is to spend, you spend your time on things that uniquely differentiate
00:25:09
◼
►
your product rather than things that your user will take for granted.
00:25:15
◼
►
And because like, it is so easy, I think sometimes for me to say, it's like, it's like, you know,
00:25:22
◼
►
multi-device syncing as a great example of this.
00:25:25
◼
►
It's like, as soon as you build it, it'd be, it just, it like its value just like disappears
00:25:32
◼
►
and becomes just like a given, like it becomes table stakes.
00:25:35
◼
►
But if you don't have it, it isn't a problem in the degree that you would think it would
00:25:39
◼
►
be like, I mean, widgetsmith, for example, like you would think in some ways it's like,
00:25:43
◼
►
it's like, I've never done syncing for it.
00:25:46
◼
►
Like they're, if you have widgets, you can't really move them from device to device.
00:25:50
◼
►
Okay, that's fine.
00:25:52
◼
►
You know, people work around it or they rebuild them if they want to.
00:25:55
◼
►
The reality is most people just have one device.
00:25:58
◼
►
Like I just saw in the news the other day that WhatsApp, like one of the most popular
00:26:01
◼
►
messaging apps in like the world, just finally allowed you to install it on two phones concurrently
00:26:08
◼
►
for the same account.
00:26:09
◼
►
It's like, they've been doing, it's like, this is like one of the most popular apps
00:26:13
◼
►
like in the world used all over the place, super successful all over the place.
00:26:17
◼
►
It's like, they didn't have syncing and you don't need it because it's like, it
00:26:20
◼
►
becomes this, it's just, it's not a point of differentiation to the degree that you,
00:26:25
◼
►
the effort required to maintain and manage it is.
00:26:27
◼
►
And so whenever I think of these features or when I think of if I'm going to build
00:26:31
◼
►
something and then it's just a wrapper around an OpenAI API call or something, it's like,
00:26:37
◼
►
that's not a real, a strong point of differentiation.
00:26:40
◼
►
Like there may be a app there, there may be a market there that, but the part that you're
00:26:44
◼
►
building, you know, is in that same way of you have to, you're just competing against
00:26:49
◼
►
everyone else who's building a wrapper.
00:26:51
◼
►
And maybe you can find a point of differentiation that, you know, is compelling there by building
00:26:56
◼
►
a super amazing wrapper with super awesome features, but you're not differentiating
00:27:00
◼
►
based on your content and trying to go down the road of like differentiating on content.
00:27:05
◼
►
Like if you're trying to build your own, you know, well, I'm going to build my own,
00:27:09
◼
►
you know, image generation model.
00:27:11
◼
►
It's like, great, good luck.
00:27:12
◼
►
You're competing against OpenAI who has hundreds of millions of dollars and the backing
00:27:17
◼
►
of like all of Microsoft's cloud infrastructure.
00:27:22
◼
►
You're going, you're building this thing that is going to, isn't actually going to
00:27:25
◼
►
be a point of differentiation to the degree unless you are wildly successful with it,
00:27:29
◼
►
in which case you have all kinds of other problems and you're not an indie anymore.
00:27:32
◼
►
And like, you know, congratulations, you're now like a full, fully fledged VC funded startup
00:27:36
◼
►
with lots of other problems and issues, but you're not going to end up, the end result
00:27:41
◼
►
of that path is not like the happy indie lifestyle of making software that you enjoy making,
00:27:47
◼
►
that is, you know, you're excited about and you can, you know, sort of turn off your
00:27:51
◼
►
computer at the end of the day, walk away from your computer happy and smiling.
00:27:55
◼
►
That just isn't where I think that path goes.
00:27:57
◼
►
So like, it's like, hey, my two rules are like, never touch servers and then only build
00:28:01
◼
►
features that actually differentiate you.
00:28:04
◼
►
Don't build things that become table stakes as soon as they exist.
00:28:06
◼
►
Yeah, that's, that's incredibly good advice.
00:28:09
◼
►
Because I was saying earlier, like, you know, like you were saying with sync, like no one,
00:28:13
◼
►
no one cares about sync once they have it.
00:28:15
◼
►
It's just taken, taken for granted instantly.
00:28:18
◼
►
And there's so many features like that, you know, any kind of, you know, account backup
00:28:22
◼
►
system, you know, like all that, it logging, logins and password resets and like, there's
00:28:27
◼
►
so much stuff like that.
00:28:28
◼
►
People just expect that to be there.
00:28:30
◼
►
And that's, that's not an area where it's worth spending a ton of time to make yours
00:28:34
◼
►
like extra special or, or good or anything like that.
00:28:37
◼
►
Like, it's just, just, you know, some of the people always expect to be there, make it,
00:28:42
◼
►
just make it work and move on to the things that, that matter to you and to your users
00:28:46
◼
►
in more concrete ways.
00:28:48
◼
►
You know, features they can actually see, things that will differentiate your app from
00:28:52
◼
►
competitors, like that kind of stuff.
00:28:54
◼
►
That's so much more important.
00:28:55
◼
►
And like running backend servers really well, trust me, I can tell you from experience,
00:28:59
◼
►
I run backend servers pretty well.
00:29:01
◼
►
No one cares.
00:29:02
◼
►
I don't even care.
00:29:03
◼
►
Like, no one cares.
00:29:05
◼
►
It's just something that is not worth, it's not worth your time if you can help it.
00:29:09
◼
►
So anyway, good luck everybody trying to avoid servers in this era of open AI, API stuff.
00:29:18
◼
►
And good luck preparing all your questions for W3C Labs and we will talk to you in two