257: Working in Public
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS app development.
00:00:04
◼
►
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 Dave, you and I are both much more in public this past week than we usually are, even for podcasters, which is saying a lot.
00:00:18
◼
►
Yeah, yeah, no, and usually I would say we're relatively quiet.
00:00:22
◼
►
Which is a couple of quiet, independent engineers, just heads down on our desk by ourselves doing our work, and not so much this last week.
00:00:30
◼
►
Yeah, so you have been doing this design notes diary series of blog posts on your site,
00:00:37
◼
►
and it's all about all the different design decisions that you're facing and trying and different experiments you're doing with Podometer++, and that's really cool.
00:00:46
◼
►
And then I've been, I just released my new database layer as open source, and again, disclaimer here, nobody should use this yet.
00:00:56
◼
►
It's super, super early, and it might change in very large ways, so don't build anything against this yet.
00:01:00
◼
►
But anyway, so I just released my open source thing called Blackbird, which is basically my take on a SQLite layer for Swift.
00:01:07
◼
►
And so we've both been kind of in public in ways that we normally aren't, you know, both as just people in general usually aren't this public about their work,
00:01:16
◼
►
and then I think there's also a layer here that you and I work alone, and most people never see these processes.
00:01:26
◼
►
Most people never see the code we write, and most people don't see the design iterations we go through while we're building things,
00:01:32
◼
►
and the different considerations and experiments we do, and how we arrive at the final setup or the final features or the final designs.
00:01:41
◼
►
Almost all of this work is usually behind the scenes and only exists in our heads and our computers.
00:01:47
◼
►
And so I think it's really interesting that we've both, coincidentally at the same time, gone public with parts of our work that are usually private when you're an independent developer.
00:01:58
◼
►
Yeah, yeah. And I don't know exactly why. I'm sure it's not a pure coincidence, but there's definitely something to why we both started doing it.
00:02:06
◼
►
But for me, it's been really interesting to, yeah, there is something different when you're making something with an expectation that someone else will look at it.
00:02:18
◼
►
Just fundamentally. It's the kind of way that if you have a boss or a coworker or someone, and you expect someone else is going to look at something.
00:02:29
◼
►
Or even, I mean, it's like the way you tidy up your house before guests come over.
00:02:35
◼
►
You just behave differently if you expect that someone else is going to see what it is that you're doing, what you're working on, whatever that is.
00:02:44
◼
►
And for me, and for what I've started to design notes, it was this interesting thought of, part of it got started with all of the drama that I have no interest in getting into on the show, but about Twitter and where that's going.
00:02:55
◼
►
And a lot of the community that I have there, and for the last 13 years, it's been essentially my office workplace.
00:03:05
◼
►
That's where I would interact with, talk to, and be with my coworkers, for lack of a better word, even though they're not really my coworkers in a traditional sense.
00:03:14
◼
►
And then that all started feeling like it was going away, or who knows what the uncertainty there made me really start to think, what is this, what value, what purpose is this community doing to me?
00:03:27
◼
►
And there's certainly a part of it that is the human connection part of that, that is helpful and interesting and somewhat unreplaceable.
00:03:36
◼
►
You can't just pretend, I can't create a person and actually pretend that they're real.
00:03:41
◼
►
But I was realizing that a lot of the benefit I get from posting things on Twitter or talking about things is there is something in capturing something, writing it down, condensing notions, ideas, things that I have.
00:03:56
◼
►
In the case of Twitter, it was turning a vague idea into 280 characters that clarifies and crystallizes and improves that idea for myself.
00:04:07
◼
►
And especially both because someone else is going to see it, so there's a certain amount of ego or whatever, of ego is into that and making sure that it's a good, thoughtful, clearly thought through idea.
00:04:19
◼
►
And then some of it is just through that process. And it was just interesting, I was like, you know, I think I'd be really curious to see if I could get a lot of that same value by writing down what it is I'm doing during the day.
00:04:33
◼
►
It doesn't take that much extra time because I'm doing it anyway. I'm not sitting down to write a blog post. I'm just happening to take notes, essentially, while I work and doing it in a structured way.
00:04:42
◼
►
And I'm about a week into it and it's been really interesting to do this with the expectation that I, like the only reason I publish it is because if I don't publish it, then I don't have that external accountability and slight pressure.
00:04:55
◼
►
But it's not really for an audience. Like if people read these, that's great. Like, sure, I hope maybe it's useful, maybe it's interesting. I have no idea.
00:05:04
◼
►
But my own value I get from making it public, by making it something that I put into it, has been really interesting because I'm thinking through design ideas and having a record of them as I go.
00:05:15
◼
►
And so far, it's been really cool. And it's just, who knows, it's experimental, but it reminds me of the concept of like rubber duck debugging, where you have put a rubber duck on your desk and you explain the problem you're having when you're debugging something to the rubber duck in the process of having to explain it.
00:05:32
◼
►
It's a real thing. It's like a whole Wikipedia page and everything.
00:05:35
◼
►
I've never heard of this.
00:05:36
◼
►
There's a Wikipedia page and everything for this rubber duck debugging. But it's the concept that, I think it was from like one of the old like pragmatic programmers books.
00:05:43
◼
►
But anyway, it's that concept that if you have to explain something, you will very often find issues with it or problems with it that are hard to capture if you're just looking at the problem and, you know, just sort of going through it in kind of that more direct way.
00:05:57
◼
►
It's because you have to come at it from another direction. And so it's essentially I'm rubber duck debugging my design process by talking through all the things that I'm doing and why I'm doing them.
00:06:06
◼
►
And then, you know, I come back and look at it like, huh, that's interesting.
00:06:09
◼
►
And I'm, you know, it's just it's been a very interesting process of trying to engage a different part of my brain that an indie usually doesn't get to because I just am quietly in my room doing my work.
00:06:21
◼
►
And I feel like it's been so far, it's been interesting to see the things that I'm missing out as a result.
00:06:26
◼
►
That's really interesting. Yeah. I mean, because, you know, obviously, you know, I think one way to to broaden the rubber duck idea is like, you know, you I've always heard that one of the best ways to make sure you understand something is try to teach it to somebody else.
00:06:39
◼
►
Because teaching really requires you to know way more of something than than you might initially think if you haven't tried it.
00:06:47
◼
►
And if there's any like gaps or hand waviness about your knowledge that usually comes up if you try to teach someone else, especially if they start asking questions, you're like, I actually don't know why we do it that way or whatever, or I'm not sure why it works that way.
00:07:02
◼
►
So, yeah, so I think overall, like, you know, one of the biggest challenges of any development is that you don't have that water cooler, you don't have that, you know, the lunch with your co workers, you can casually discuss things, and you don't usually have people working on your code with you or looking at your code.
00:07:21
◼
►
And so it can be, you know, not only is it like, you know, kind of personally, a difficult thing, sometimes you can just feel alone, which that's, that's its own issue right there. And that's, that's a major issue. And usually, you know, you have to have some kind of outlet for that, whether that's, you know, online social network stuff, or, you know, private private chat groups, or different, like, you know, local groups of, you know, whether it's a co working space, or, you know, some kind of, you know, local developers, you know, group kind of thing like that, you know, some cities have that kind of stuff.
00:07:50
◼
►
Some cities have that kind of stuff.
00:07:52
◼
►
So that can solve a lot of the social angle,
00:07:55
◼
►
but a lot of the coding angle, or looking at your code,
00:07:59
◼
►
or having other people evaluate it or suggest it
00:08:03
◼
►
or point out ways you can do things better,
00:08:05
◼
►
that's something that's really hard to get
00:08:07
◼
►
as an indie in general.
00:08:09
◼
►
And there's a lot of value when you work in a group,
00:08:12
◼
►
on a team or in a big company, there's a lot of value
00:08:15
◼
►
in some of the overhead that comes with that,
00:08:18
◼
►
whether it's code review or other people performing QA
00:08:23
◼
►
on your code for you, or test processes,
00:08:26
◼
►
different strategies, pair programming,
00:08:29
◼
►
there's all sorts of ways where basically other people
00:08:32
◼
►
can have input and can perform QA in some way on your code,
00:08:37
◼
►
and vice versa, and you can see their code
00:08:39
◼
►
and you can learn from other people's code.
00:08:41
◼
►
And in the indie world, your only options for that
00:08:46
◼
►
in the indie world usually are open source,
00:08:50
◼
►
or I guess there's, maybe there's other stuff
00:08:52
◼
►
I'm not thinking of, but that's for the most part,
00:08:54
◼
►
you get a lot of that from open source.
00:08:56
◼
►
And the value of open source stuff is partially
00:08:59
◼
►
that if you need to do something real quick
00:09:01
◼
►
and you can find a library to do it,
00:09:03
◼
►
well there you have an option to do it.
00:09:05
◼
►
That's probably most of the value,
00:09:06
◼
►
but to me a huge part of the value in open source
00:09:09
◼
►
is seeing how other people solve similar problems
00:09:12
◼
►
that I face, because that's what I don't have
00:09:15
◼
►
by not working on a team.
00:09:16
◼
►
I can't look at other people's code and say,
00:09:18
◼
►
oh that's a good idea, I should be doing things that way,
00:09:21
◼
►
or wow, I never would have thought about that technique
00:09:24
◼
►
or that pattern, or even like wow,
00:09:27
◼
►
I didn't even know about that API existing,
00:09:30
◼
►
there's a lot of that when I see other people's code.
00:09:32
◼
►
And so I don't usually get a lot of that,
00:09:36
◼
►
and so for me, my development, as much as I love it,
00:09:40
◼
►
it does feel very lonely, and I love a lot about that,
00:09:45
◼
►
but that is a factor that, it's hard to get past that
00:09:49
◼
►
sometimes, where you feel like, well, here I am,
00:09:52
◼
►
I'm facing this problem and I'm totally alone in it,
00:09:54
◼
►
and if I can't figure it out,
00:09:56
◼
►
it's just not gonna get solved.
00:09:58
◼
►
Or I'm gonna try it my one way,
00:10:02
◼
►
and that's gonna be how it goes,
00:10:04
◼
►
because no one's gonna see it
00:10:06
◼
►
and no one's gonna tell me otherwise,
00:10:07
◼
►
and so I hope I'm doing this a good way that will work
00:10:11
◼
►
and doesn't have any massive pitfalls I'm not aware of.
00:10:14
◼
►
So with open source stuff, that's kind of flipped
00:10:16
◼
►
on its head, and part of the reason why
00:10:19
◼
►
I wanted to do Blackbird as open source
00:10:23
◼
►
is in part because it's replacing FC model,
00:10:26
◼
►
which is my really old Objective-C version
00:10:28
◼
►
of the same kind of idea, a SQLite model layer,
00:10:31
◼
►
and I'm fully aware, there's lots of things that do this,
00:10:34
◼
►
I don't need to write my own libraries,
00:10:36
◼
►
there's lots of libraries that do the same thing,
00:10:38
◼
►
I like writing my own libraries,
00:10:40
◼
►
because then I know how everything works
00:10:42
◼
►
and it makes me a better programmer.
00:10:44
◼
►
So, and I can customize them to be exactly what I need
00:10:47
◼
►
and prioritize exactly what I wanna prioritize.
00:10:51
◼
►
But anyway, so FC model was open source,
00:10:54
◼
►
and it never had that many users,
00:10:55
◼
►
I mean, I think I would be surprised
00:10:58
◼
►
if there's more than 10 apps that ever shipped
00:11:00
◼
►
that used FC model, it's a very small number of users.
00:11:04
◼
►
However, that small number of users that it had
00:11:08
◼
►
was actually valuable to me, because I actually did get
00:11:11
◼
►
a couple of nice bug fix contributions
00:11:15
◼
►
and little enhancement requests from people over the years,
00:11:19
◼
►
and again, it's a very small number,
00:11:21
◼
►
maybe, probably fewer than 10 total
00:11:24
◼
►
of even any kind of contribution or bug report,
00:11:27
◼
►
but those were valuable to me.
00:11:29
◼
►
And so I wanted to do the same thing with Blackbird
00:11:32
◼
►
in part to get the value to me,
00:11:34
◼
►
and in part to try to help other people,
00:11:37
◼
►
to say, okay, look, I don't know
00:11:39
◼
►
if this is gonna be helpful to people,
00:11:40
◼
►
I don't know if I'm doing anything in a novel way,
00:11:42
◼
►
I didn't actually look at most of the other
00:11:44
◼
►
Swift or SQLite Swift wrappers,
00:11:48
◼
►
I didn't really look at them,
00:11:49
◼
►
I looked at a couple to find out,
00:11:51
◼
►
how do you do codable compliance and stuff like that,
00:11:54
◼
►
that's about it, the rest of it I kinda did on my own
00:11:56
◼
►
with my knowledge of SQLite, and trying to do things,
00:11:59
◼
►
the modern Swift async and ascendable and codable
00:12:03
◼
►
and actor-based everything, everything super modern.
00:12:06
◼
►
And part of that was to teach me
00:12:10
◼
►
how to use all that modern stuff.
00:12:12
◼
►
With this, I have taught myself so many new
00:12:16
◼
►
either APIs or techniques or tools,
00:12:19
◼
►
this is the first time I've ever used a Swift package,
00:12:21
◼
►
this is the first time I've ever used DocC
00:12:23
◼
►
and all the built-in documentation features,
00:12:25
◼
►
first time I've ever used any kind of Swift unit testing,
00:12:28
◼
►
the only other unit tests I ever did
00:12:30
◼
►
were for FC model back forever going objective C.
00:12:33
◼
►
First time I've used actors, first time I've used sendable,
00:12:36
◼
►
like there's, and first time I've built
00:12:37
◼
►
a Swift UI property wrapper, like there's so much here
00:12:41
◼
►
that this was my first time ever using,
00:12:42
◼
►
and it forced me to learn a lot
00:12:45
◼
►
about all these different tools and APIs and techniques,
00:12:49
◼
►
and I'm still in my early days with all this stuff,
00:12:51
◼
►
obviously, I just started using them,
00:12:52
◼
►
you know, I'm still a noob,
00:12:54
◼
►
but I'm really happy I was forced to do this,
00:12:56
◼
►
and a lot of that work I would not have been forced to do
00:13:01
◼
►
if I was just writing it for myself in private
00:13:03
◼
►
and didn't open source it,
00:13:04
◼
►
like I probably would never have written the documentation,
00:13:07
◼
►
I wouldn't have nearly as many unit tests,
00:13:10
◼
►
I wouldn't have, already, like our friend Guy English
00:13:13
◼
►
already contributed a performance counter thing
00:13:15
◼
►
using OS log and that whole system,
00:13:18
◼
►
so that you can see like cool graphs and instruments
00:13:20
◼
►
about query performance and stuff,
00:13:22
◼
►
like I didn't even, I've never used OS log,
00:13:24
◼
►
I would never have known how to do that,
00:13:25
◼
►
and I would never have thought to do that,
00:13:27
◼
►
and so, and then someone else pointed out
00:13:30
◼
►
the new sendable warnings and how to enable those,
00:13:34
◼
►
all the Swift concurrency warnings,
00:13:35
◼
►
and so I enabled those and built it and got my 88 warnings,
00:13:39
◼
►
and then slowly, yesterday, worked through them all
00:13:41
◼
►
and slowly made it more sendable compatible
00:13:44
◼
►
for future concurrency stuff,
00:13:46
◼
►
and that's gonna save me time in the future
00:13:47
◼
►
when all that stuff becomes more prominent in the language,
00:13:49
◼
►
and so, and not to mention the fact
00:13:51
◼
►
that it might save me from some concurrency bugs,
00:13:53
◼
►
which are really hard to usually track down.
00:13:55
◼
►
So all of that, I would not have polished it to that level,
00:14:00
◼
►
I would not have documented it,
00:14:01
◼
►
I would not have tested it to that level,
00:14:03
◼
►
like all of that happened because I was doing it in public,
00:14:06
◼
►
because I had an audience looking at me,
00:14:08
◼
►
and even if that audience is gonna be 10 people ever,
00:14:11
◼
►
like that's still an audience,
00:14:13
◼
►
and because of that, as you were saying,
00:14:16
◼
►
when you know someone is watching,
00:14:18
◼
►
you do things differently,
00:14:19
◼
►
and not have any kind of sinister thing,
00:14:21
◼
►
just you hold yourself to a higher standard
00:14:23
◼
►
when other people are watching,
00:14:24
◼
►
and so I'm totally doing that here,
00:14:26
◼
►
and I'm not too interested in doing that
00:14:29
◼
►
with a lot of code I write,
00:14:30
◼
►
but something like this,
00:14:32
◼
►
where it's a small, isolated unit of my code, of my apps,
00:14:37
◼
►
it is more broadly applicable than most of what I write,
00:14:40
◼
►
like this could be useful to other people,
00:14:42
◼
►
whereas most of what I write
00:14:43
◼
►
is not gonna be useful to other people except my app,
00:14:45
◼
►
and it's so important, it's so foundational,
00:14:50
◼
►
that I really wanna make sure I'm holding myself
00:14:52
◼
►
to the highest standards with this particular package,
00:14:54
◼
►
because if this has any bugs in it,
00:14:57
◼
►
then the whole app is gonna be on shaky ground,
00:15:01
◼
►
so I'm really happy with having done this,
00:15:04
◼
►
and I think it really has quite a lot of benefit.
00:15:07
◼
►
We are brought to you this episode by Setapp.
00:15:10
◼
►
There's an app for everything these days.
00:15:12
◼
►
Some are great, others not so much,
00:15:14
◼
►
so how do you quickly find the right app for you?
00:15:17
◼
►
Setapp is a great way to discover apps
00:15:19
◼
►
for every professional with a Mac and iPhone.
00:15:22
◼
►
It has 240 plus apps,
00:15:24
◼
►
all available with a single subscription.
00:15:26
◼
►
From coding to design to everyday chores,
00:15:28
◼
►
such as decluttering your menu bar
00:15:30
◼
►
or cleaning up your storage,
00:15:31
◼
►
Setapp has top tier software to keep at hand.
00:15:35
◼
►
Now imagine what you could do with 240 high quality apps
00:15:39
◼
►
all packed into one subscription.
00:15:40
◼
►
Whether you need to develop, design, or create,
00:15:42
◼
►
there's an app for almost any task.
00:15:44
◼
►
You don't need to look in tons of places
00:15:45
◼
►
to find what you need.
00:15:47
◼
►
With Setapp, you can think about your tasks you have to do,
00:15:49
◼
►
not your apps.
00:15:51
◼
►
Setapp has a dedicated curation team
00:15:53
◼
►
that only selects the highest quality apps.
00:15:56
◼
►
New apps are added regularly, updates are always free,
00:15:59
◼
►
and all of the apps are their full featured pro versions.
00:16:02
◼
►
No like little trial thing, no limited stuff,
00:16:05
◼
►
all these are full featured pro versions of their apps.
00:16:08
◼
►
And this is a great value.
00:16:10
◼
►
Instead of paying the equivalent in licenses,
00:16:12
◼
►
which would be like $8,000,
00:16:13
◼
►
there's just one flat monthly fee of $9.99.
00:16:17
◼
►
So until December 31st, hurry up,
00:16:19
◼
►
use code UNDERRADAR to get a month of a free trial.
00:16:23
◼
►
Head over to setapp.com and look for a link
00:16:25
◼
►
to redeem the code in the footer.
00:16:27
◼
►
And that code, once again, is UNDERRADAR.
00:16:30
◼
►
So go to setapp, S-E-T-A-P-P dot com,
00:16:33
◼
►
use code UNDERRADAR.
00:16:34
◼
►
Our thanks to Setapp for their support of this show
00:16:37
◼
►
and all of Relay FM.
00:16:39
◼
►
- Yeah, so it's really interesting
00:16:41
◼
►
to hear you talking through that process
00:16:43
◼
►
of the benefits and the things that you see
00:16:45
◼
►
when you open source something.
00:16:47
◼
►
As someone who I don't believe I have ever open sourced
00:16:50
◼
►
really anything of substance or meaning,
00:16:53
◼
►
maybe a few snippets and things
00:16:55
◼
►
that I've published over the years,
00:16:56
◼
►
but nothing particularly meaningful.
00:16:58
◼
►
And I think there definitely is a part of it for me
00:17:01
◼
►
that I don't feel, that's funny what I say,
00:17:06
◼
►
I don't feel proud of the way that I code
00:17:08
◼
►
in a way that I would,
00:17:10
◼
►
I don't know if I could tidy up my living room enough
00:17:13
◼
►
from an coding perspective before I would feel comfortable
00:17:16
◼
►
to have someone come in and sit down.
00:17:18
◼
►
Like it's a bit of a mess.
00:17:20
◼
►
It's a bit of like 13 years of independence
00:17:23
◼
►
of having to not having to worry about other people
00:17:26
◼
►
that it only has to make sense to me.
00:17:28
◼
►
And of course it makes sense to me
00:17:29
◼
►
because I'm the one who wrote it,
00:17:31
◼
►
which is probably not a great thing.
00:17:33
◼
►
It's probably not the best way to write things.
00:17:37
◼
►
But on the flip side, it also is super efficient
00:17:39
◼
►
and works for me because it's a very highly tuned process
00:17:44
◼
►
for me and for my development,
00:17:46
◼
►
but it probably makes me largely unemployable
00:17:48
◼
►
because if I ever went and had to write code
00:17:50
◼
►
for as part of a team or something,
00:17:53
◼
►
I don't even know, that sounds like a disaster,
00:17:55
◼
►
but it is really interesting to hear you describe it.
00:17:58
◼
►
And it's like, I've been sort of browsing around
00:18:01
◼
►
in Blackbird and it's interesting
00:18:04
◼
►
because a lot of the stuff,
00:18:05
◼
►
it's like, I don't know how this works.
00:18:07
◼
►
I'm looking at this and I would say
00:18:08
◼
►
that I'm a relatively competent Swift developer.
00:18:12
◼
►
I do this professionally, been doing this for a long time,
00:18:14
◼
►
looking at like, I don't know what you're doing here.
00:18:17
◼
►
There are all kinds of keywords and all kinds of stuff.
00:18:19
◼
►
It's like, this is way over my pay grade.
00:18:21
◼
►
I don't know what's going on.
00:18:22
◼
►
And that's cool.
00:18:23
◼
►
- I mean, in all fairness, that could be my fault as well
00:18:26
◼
►
for doing something in a convoluted and under-documented way.
00:18:30
◼
►
- Maybe, but it's also just,
00:18:32
◼
►
in some ways, for me as someone
00:18:35
◼
►
who's just reading this code, it's very cool to see
00:18:37
◼
►
and be like, huh, that's really interesting.
00:18:39
◼
►
I didn't know, I mean, I get a tremendous amount of value
00:18:42
◼
►
from the Hacking with Swift series that Paul Hudson does,
00:18:46
◼
►
where he just builds stuff.
00:18:48
◼
►
And it isn't necessarily that what he's building
00:18:50
◼
►
is something that I'm, I mean, sometimes it's something
00:18:52
◼
►
that I will use more directly and specifically,
00:18:55
◼
►
but it's just looking at someone else's process.
00:18:58
◼
►
And often you'll run into these very small details
00:19:01
◼
►
or things that they're like, oh, yeah,
00:19:03
◼
►
that's actually a really clever way to do it.
00:19:05
◼
►
I remember when I was, especially with early days
00:19:07
◼
►
with SwiftUI, where there was very little
00:19:09
◼
►
limited documentation, it was everything was new,
00:19:11
◼
►
and it's like, he would show me how to do,
00:19:13
◼
►
he would just sort of show, oh, you know,
00:19:15
◼
►
what if you wanna have a view that you pass into a method
00:19:18
◼
►
to be generated somewhere else, or to be reused or things?
00:19:22
◼
►
And it's like, I had no idea how to do it.
00:19:23
◼
►
It was just like getting into generics and stuff
00:19:26
◼
►
that hurts my brain, and I, I mean, anything with generics,
00:19:29
◼
►
I can't deal with.
00:19:30
◼
►
Generics is one of those subjects
00:19:31
◼
►
that just never works for me.
00:19:33
◼
►
But it's like, the way he explained it, it worked.
00:19:35
◼
►
And I look into some of your code, and I'm like, huh,
00:19:37
◼
►
like, I can kinda see where this, you know,
00:19:38
◼
►
the async/await stuff is coming,
00:19:40
◼
►
and it's just useful.
00:19:42
◼
►
And it's like, it's useful for me in that sense,
00:19:44
◼
►
but it's like, the funny thing is,
00:19:45
◼
►
I think the bigger value, it's like,
00:19:47
◼
►
you get the value of writing it for an audience,
00:19:50
◼
►
regardless of whether there's an audience.
00:19:51
◼
►
Like, there is some value for me,
00:19:53
◼
►
but that's almost like the secondary, like, side benefit,
00:19:56
◼
►
that even if that didn't exist, like,
00:19:58
◼
►
if zero people ever looked at this code,
00:20:00
◼
►
the value you've gotten from it is still there,
00:20:03
◼
►
which is just kinda cool.
00:20:05
◼
►
- That's true, yeah, it's like, you know,
00:20:06
◼
►
if you clean up your house 'cause someone's gonna come over
00:20:07
◼
►
and then they cancel and they don't come over,
00:20:09
◼
►
your house is still really clean.
00:20:11
◼
►
- Yeah, exactly.
00:20:12
◼
►
- You still benefited from that.
00:20:14
◼
►
- Yeah, and I think that in some ways
00:20:15
◼
►
is kind of the cool part of this,
00:20:17
◼
►
because I think the lesson from it applies
00:20:20
◼
►
regardless of, I guess, audience or reach or whatever,
00:20:25
◼
►
that it isn't necessarily that, like,
00:20:29
◼
►
I imagine, you know, whatever,
00:20:30
◼
►
Blackbird has 217 stars right now,
00:20:33
◼
►
and 13 people watching it, which is,
00:20:35
◼
►
I don't know if that's a big number, it's a number.
00:20:37
◼
►
- I have no idea.
00:20:38
◼
►
- It's like, if those numbers were like zero
00:20:40
◼
►
for both of those, it's like, okay,
00:20:43
◼
►
the person who wrote it is still getting that benefit,
00:20:45
◼
►
and it's like, that's what I'm running into
00:20:47
◼
►
with my design notes blog, is it's like,
00:20:50
◼
►
I'm getting a lot of benefit from it.
00:20:52
◼
►
Like, I have no idea, I haven't heard from you.
00:20:53
◼
►
It seems like maybe a handful of people
00:20:56
◼
►
have been reading it, which is cool, I suppose,
00:20:58
◼
►
and it's useful sometimes to get some feedback,
00:21:00
◼
►
but it's just the interesting part of this is the value,
00:21:05
◼
►
it's like, you and I can sort of own that value
00:21:08
◼
►
and take control of it, regardless of whether
00:21:11
◼
►
it actually goes big, or if Blackbird becomes
00:21:14
◼
►
the foundation of huge amounts of Swift apps going forward
00:21:19
◼
►
and all this stuff, like, cool, that could be nice,
00:21:21
◼
►
but it also doesn't really matter.
00:21:23
◼
►
Like, you're getting a lot of value for Overcast
00:21:25
◼
►
and for your own development and for learning things
00:21:28
◼
►
and being, you know, that improvement you own
00:21:32
◼
►
and are in control of, which is just kind of cool.
00:21:35
◼
►
To me, like, that's the value here.
00:21:37
◼
►
Even if I never got a single comment or pull request
00:21:41
◼
►
or issue report or star or, you know, special wings
00:21:45
◼
►
or whatever else, I have no idea how much this stuff works.
00:21:47
◼
►
I don't usually do a lot of stuff on GitHub
00:21:49
◼
►
besides like a Git host, you know?
00:21:51
◼
►
But, you know, whatever works, like,
00:21:55
◼
►
I'm getting a huge amount of value out of having
00:21:58
◼
►
done this in public, and this is why,
00:22:00
◼
►
and I think, you know, going back to what you've been doing
00:22:02
◼
►
with design notes, that has to be helping you as well
00:22:06
◼
►
in the sense that you're making these decisions
00:22:09
◼
►
and it probably doesn't, it probably at some level
00:22:12
◼
►
feels like you have to justify your decisions
00:22:14
◼
►
because you are then writing down, like,
00:22:16
◼
►
you are taking screenshots and you're saying,
00:22:18
◼
►
here, I tried this, here's the problem I'm trying to solve,
00:22:22
◼
►
here's different ways I tried to solve it,
00:22:23
◼
►
I kinda don't like this, this didn't really work,
00:22:25
◼
►
this one I like, here's why,
00:22:27
◼
►
and I'm gonna proceed with that, you know?
00:22:29
◼
►
And to me, like, that's, you know,
00:22:30
◼
►
when I have blogged things, and maybe I should be doing
00:22:33
◼
►
more of that, you know, I found similar value
00:22:36
◼
►
in just trying to write down my idea requires me
00:22:40
◼
►
to solidify my ideas and to often,
00:22:43
◼
►
oftentimes I would write a blog post
00:22:45
◼
►
and I'd get halfway through and realize,
00:22:46
◼
►
wait a minute, my argument here makes no sense.
00:22:50
◼
►
And then I'd like either cancel it or totally rewrite it
00:22:53
◼
►
with a whole different point of view
00:22:54
◼
►
and that'd help clarify my thoughts.
00:22:56
◼
►
In the same way, like, you are clarifying
00:22:58
◼
►
your design decisions by being forced to actually
00:23:01
◼
►
write them down and explain them,
00:23:03
◼
►
you are going through a very similar process of,
00:23:07
◼
►
like, you know, having to actually think through them
00:23:11
◼
►
in a more comprehensive way than you normally would.
00:23:14
◼
►
- Yeah, no, exactly, and I think it's, yeah,
00:23:17
◼
►
I can say for sure, it's been really interesting
00:23:20
◼
►
to do that, to just, like, I imagine in a large organization
00:23:25
◼
►
this is, you'd have a design review process, right?
00:23:27
◼
►
You'd be like, I would, a designer would come up
00:23:29
◼
►
with something and you'd sit down
00:23:31
◼
►
and everyone would sit around a conference table
00:23:32
◼
►
and you'd walk through it and it's like
00:23:34
◼
►
you'd have a level of critique
00:23:36
◼
►
and I'm in some ways creating that for myself,
00:23:40
◼
►
that I am being a critic of my own work
00:23:42
◼
►
because I have to, you know, I'm documenting,
00:23:45
◼
►
it's the thought process that went into it
00:23:48
◼
►
and there's a certain amount of, yeah,
00:23:51
◼
►
it's like accountability and review internally
00:23:55
◼
►
that, you know, that that creates
00:23:56
◼
►
and I think it's been, yeah, very incredibly helpful
00:24:00
◼
►
as a result that there is something,
00:24:02
◼
►
yeah, it's just a different thing if you think,
00:24:06
◼
►
if you have to explain why something is better
00:24:08
◼
►
than something else, like, it's, I think a little bit
00:24:12
◼
►
it's been helpful that it slightly slows down the process
00:24:14
◼
►
and like, it gives me a little bit of,
00:24:17
◼
►
I have to be a little bit more methodical,
00:24:19
◼
►
like, it's not really slowing me down dramatically
00:24:21
◼
►
but it's like, I'm taking, every time I stop
00:24:24
◼
►
because I have an interesting design,
00:24:25
◼
►
take a screenshot of it, write down like two sentences
00:24:28
◼
►
about it, it's that slight pause,
00:24:31
◼
►
I think has actually been super helpful
00:24:33
◼
►
in the same way that I think makes me think of when
00:24:36
◼
►
I'm dealing with a coding problem and I am struggling with it,
00:24:39
◼
►
I'm struggling with it, I'm struggling with it,
00:24:40
◼
►
I, you know, get up, go downstairs, make a cup of coffee
00:24:43
◼
►
or go take a shower or, you know, go for a walk with my wife
00:24:45
◼
►
or whatever that looks like and just spend, you know,
00:24:48
◼
►
a small period of time away from the problem
00:24:50
◼
►
and I come back to it and I'm, I know the answer,
00:24:53
◼
►
you know, it solves itself, it's,
00:24:56
◼
►
and I think so much of that is, it's so easy being
00:24:59
◼
►
just one person with no real inputs to interrupt
00:25:02
◼
►
or distract me to just keep bearing down on a problem
00:25:06
◼
►
until I get to wherever that ends up
00:25:09
◼
►
rather than making, you know, taking three steps forward,
00:25:12
◼
►
taking a step back, looking around,
00:25:14
◼
►
making sure we're going in the right direction,
00:25:16
◼
►
go three steps forward, take a step back, look around,
00:25:18
◼
►
like, that, you sort of incremental process is so helpful
00:25:22
◼
►
that I've found so far to be really thoughtful
00:25:26
◼
►
and make sure that I'm not going down dead ends,
00:25:28
◼
►
that I'm just not seeing because I'm looking at the ground
00:25:30
◼
►
in front of me rather than up ahead of where I'm going.
00:25:33
◼
►
- Yeah, that's really a way to look at it.
00:25:35
◼
►
- Yeah, and it's like, I hope these things are helpful too,
00:25:38
◼
►
like, it's, I mean, it's one of those funny things
00:25:39
◼
►
where so many of these things that I'm,
00:25:41
◼
►
like, I'm writing about are like little tools
00:25:44
◼
►
or little processes that I've used that it's like,
00:25:48
◼
►
I imagine they would be helpful to other people,
00:25:50
◼
►
like, yesterday I was writing about how I've found
00:25:53
◼
►
that reminders is like the world's best way
00:25:55
◼
►
to capture like little issues with your apps
00:25:57
◼
►
because you can take a screenshot, you can, you know,
00:26:01
◼
►
mark it up with a pen to say what the issue is
00:26:03
◼
►
and attach it to a reminder, instantly syncs to your Mac,
00:26:06
◼
►
and it's like, that was something that I just like discovered
00:26:08
◼
►
over time works really well and it's like wrote about it,
00:26:11
◼
►
but otherwise, if I didn't have a venue to talk about it,
00:26:14
◼
►
they're like, that would just be a thing that I knew
00:26:15
◼
►
that hopefully, that's just sort of like
00:26:17
◼
►
that no one else would know
00:26:18
◼
►
unless they discovered it themselves,
00:26:20
◼
►
and so like there is something cool kind of fun
00:26:21
◼
►
to be able to, you know, to share our expertise
00:26:25
◼
►
in a way that maybe benefit, you know,
00:26:27
◼
►
may additionally have benefit to anyone else,
00:26:29
◼
►
like even if that benefit didn't exist, we get our benefit,
00:26:31
◼
►
but it's also kind of cool that it may have
00:26:34
◼
►
that knock-on effect outside of ourselves.
00:26:36
◼
►
- Yeah, you actually taught me about reminders.
00:26:37
◼
►
Like, first of all, I didn't know
00:26:38
◼
►
you could attach screenshots to reminders.
00:26:39
◼
►
Second of all, I didn't know
00:26:40
◼
►
that you could create custom lists.
00:26:42
◼
►
Like, I just thought that the, like,
00:26:44
◼
►
the four big square buttons and reminders,
00:26:46
◼
►
those were the four lists and that was it,
00:26:48
◼
►
and I never even saw that right below that
00:26:50
◼
►
is a thing called My Lists, and you can add to that
00:26:54
◼
►
and you can customize, and then you also pointed out
00:26:56
◼
►
that you can set one as your default view,
00:26:58
◼
►
which I also would never have thought to look for
00:27:00
◼
►
or ask about, so you've now, like, yeah,
00:27:03
◼
►
I think there's a lot of value in publicizing what you do
00:27:07
◼
►
in some way, because, you know, even just,
00:27:10
◼
►
if somebody can pick up some little detail of how you work
00:27:13
◼
►
or how you write code or how you design or whatever it is,
00:27:17
◼
►
you know, you give off, like, one little remark somewhere
00:27:20
◼
►
and that could really help somebody.
00:27:22
◼
►
Like, you know, we can all think back to things
00:27:25
◼
►
that we have seen or read or, you know,
00:27:28
◼
►
people who have said something to us
00:27:30
◼
►
that, like, this one thing stuck with us
00:27:32
◼
►
for years afterwards and we're like,
00:27:34
◼
►
oh my god, that's an amazing idea,
00:27:36
◼
►
or this one thing, like, changes the way you think about
00:27:39
◼
►
a certain kind of problem or changes the way you deal
00:27:41
◼
►
with a certain problem in your life
00:27:43
◼
►
or challenge or workflow, and so,
00:27:45
◼
►
you know, the effort of sharing, you know,
00:27:47
◼
►
it might feel like that, you know,
00:27:50
◼
►
not a lot of people are listening or watching
00:27:51
◼
►
or maybe you don't think you have anything to offer
00:27:53
◼
►
that hasn't already been said, but trust me,
00:27:55
◼
►
like, we all do, everyone has something to offer
00:27:58
◼
►
and, you know, don't assume that what you're saying
00:28:02
◼
►
is something everyone already knows, because it's not.
00:28:05
◼
►
And there's always little details like that
00:28:06
◼
►
that I pick up whenever I read stuff, you know,
00:28:09
◼
►
even just simple posts on Twitter people write,
00:28:11
◼
►
all the way to, like, different blog posts
00:28:13
◼
►
and, of course, people like Paul Hudson,
00:28:14
◼
►
who I have to commend Paul for basically being, like,
00:28:17
◼
►
the documentation for all of Swift and Swift UI,
00:28:20
◼
►
because Apple won't write any, so good job, Paul.
00:28:23
◼
►
His documentation is amazing and has helped me
00:28:25
◼
►
tons along the way, and literally,
00:28:28
◼
►
every time I look something up, like,
00:28:29
◼
►
every time I Google some problem,
00:28:31
◼
►
I land on, oftentimes, his site, or at least some site
00:28:34
◼
►
or some blog post or some Stack Overflow post even,
00:28:37
◼
►
where I will learn something in almost all of those,
00:28:39
◼
►
and sometimes it is just, like, a little aside
00:28:43
◼
►
or, like, one little sentence buried in the corner,
00:28:45
◼
►
oh, well, you know, by the way, as you know, Bob,
00:28:47
◼
►
you know, this, and I'm like, wait a minute,
00:28:48
◼
►
I didn't know that.
00:28:49
◼
►
Like, and so, all that stuff is very, very helpful,
00:28:52
◼
►
so I strongly encourage everyone, like, you know,
00:28:55
◼
►
share your knowledge, publicize your work,
00:28:57
◼
►
write blog posts, write Stack Overflow answers,
00:28:59
◼
►
you know, whatever it is, because that helps people.
00:29:02
◼
►
It helps people a lot, and oftentimes
00:29:04
◼
►
in ways you might not expect.
00:29:06
◼
►
- Yeah, and it's this funny, like, tension
00:29:07
◼
►
where it's like, on the one hand, selfishly,
00:29:09
◼
►
I want everyone else to share what they do.
00:29:11
◼
►
Like, I love it when people share.
00:29:12
◼
►
It's super helpful for me, and selfishly, I want that.
00:29:14
◼
►
And I think, hopefully, a little bit of the theme
00:29:16
◼
►
of today's episode is understand that that is selfish
00:29:19
◼
►
for yourself as well, because you benefit
00:29:22
◼
►
just by the process of putting that out there.
00:29:24
◼
►
You get a lot of benefit, and it's like,
00:29:27
◼
►
it's one of these, like, it's a win-win.
00:29:29
◼
►
Like, you get that benefit regardless
00:29:30
◼
►
of if anyone gets benefit from it,
00:29:32
◼
►
and more likely than not, other people are gonna benefit
00:29:36
◼
►
from it, which is just, like, double awesome, yeah.
00:29:38
◼
►
- Well, thanks, everybody, for listening.
00:29:41
◼
►
Thanks for sharing all your knowledge out there,
00:29:42
◼
►
and we will talk to you in two weeks.