PodSearch

Under the Radar

209: Binary Stars

 

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.

00:00:06   Under the Radar is never longer than 30 minutes, so let's get started.

00:00:10   So I had a delightful discovery this week that it seems like you may have tripped, fallen,

00:00:16   and come down deep into the rabbit hole of making custom watch faces, which is a place

00:00:20   that I have been for years now.

00:00:24   And it was absolutely delightful to see you sort of join me at the bottom of that rabbit

00:00:28   hole and sort of be exploring this topic.

00:00:31   But as much as I love talking about the actual watch face stuff, partly I think it was just

00:00:35   an interesting sort of insight for us to talk about where the project you were doing was

00:00:40   very much more of a copying-oriented project.

00:00:45   And so I think let's start talking about what it was and then I think talk a little bit

00:00:48   about copying in general and kind of the good, the bad, and the ugly of that.

00:00:52   Yeah, absolutely.

00:00:54   So as some people may know, my favorite Apple Watch face by far is the solar face.

00:01:01   And not the new like round one that has a whole bunch of stuff on it that I frankly

00:01:05   don't really understand.

00:01:07   The old solar face that's just like the curve across the screen that has the sun going up

00:01:12   and down every day.

00:01:13   It looks pretty all blue in the middle and everything.

00:01:15   It has pretty sunrise and sunset.

00:01:18   And it has room for only a handful of complications.

00:01:20   And the reason I got on this track was because this is the face I use on my Apple Watch way

00:01:25   more than anything else.

00:01:27   And I kind of wanted to customize it, thinking, "How--" it only has two complication slots.

00:01:32   They're very limited.

00:01:33   And I was thinking like, "How could I fit more information into those?

00:01:36   How can I make those better?

00:01:39   And is there a place for overcast to do that?"

00:01:42   And then I got into this rabbit hole of designing complications and I thought, "Well, what would

00:01:47   be a lot easier is if I could just replace the solar face, if I could just use, say,

00:01:53   the Infograph Modular Face, which has that big rectangular complication in the middle,

00:01:58   and put a solar graphic there that I would, I guess, render myself, and then use all of

00:02:04   its complications.

00:02:05   That face is full of complications.

00:02:06   And it has the nice new round graphical ones that are quite nice in a lot of ways.

00:02:10   And so I figured, you know, maybe I can make myself a modern solar face equivalent with

00:02:16   Infograph Modular by just replacing the center complication with a picture of the sun that

00:02:21   does what the solar face does.

00:02:22   So I got into this experimental phase of like, "How could I replace--" like, how hard would

00:02:28   it be to copy the solar face, to do exactly the graphics that it does, or at least do

00:02:33   a very close approximation?

00:02:34   You know, my other alternatives for what I was going to be working on for that day were

00:02:40   like, you know, stuff I didn't want to do.

00:02:42   It was like, I have to find this really obscure syncing bug in Overcast, and that's currently,

00:02:47   you know, happening in the beta.

00:02:48   And I thought, well, I can do that tomorrow.

00:02:51   And maybe today I'll do this fun exercise of, let me try to replicate the solar face

00:02:55   and see how far I get.

00:02:58   And that sent me down this wonderful rabbit hole that you said of like, what you can do

00:03:03   with Apple Watch complications, you know, the sizing and the positioning.

00:03:06   And you know, these days it's actually, you can do quite a lot, especially if what you

00:03:10   want to do is just render a giant image.

00:03:13   Then it's fairly trivial if you are okay doing it on only the handful of faces that will

00:03:18   support full color image complications.

00:03:20   But I was.

00:03:22   And so I started doing this.

00:03:23   And you know, the first thing you got to do is you got to figure out sun calculations.

00:03:27   You got to figure out like, the angle of the sun, like where it is in the sky at any given

00:03:31   time of day in any given location.

00:03:34   And so you have to then, you know, start looking at libraries that can compute that, and then,

00:03:38   oh, well, most of them aren't in Swift, and you got to then, you know, convert it to Swift

00:03:43   or build your own or import some other giant one and figure out the part you have to use

00:03:47   from there.

00:03:48   And so it was all these like wonderful rabbit holes, none of which are related to my actual

00:03:53   job, none of which will ever result in anything most likely that I could actually use or anything

00:04:00   like that.

00:04:01   But all of which, it was a fun exercise.

00:04:05   And I did eventually, and I'll link in the, or I'll make it the chapter art for this

00:04:10   episode, I did eventually get pretty close to how the solar face looks.

00:04:15   I didn't match everything exactly, in part because it was too hard or in part because

00:04:19   I had my own opinion on how certain things should be done.

00:04:23   But for the most part, it's pretty close.

00:04:25   And I started thinking like, could I actually ship this as a complication for Overcast?

00:04:32   And there's lots of reasons why I probably shouldn't do that.

00:04:36   One of which is to calculate the sun appearance correctly and sunrise and sunset times correctly,

00:04:42   you have to know the user's location.

00:04:45   And there is no way, there's no reason a podcast app needs to know user's location.

00:04:50   And even if I made it some kind of like fun little thing, like it's like buried in the

00:04:53   settings, I would have to like add it to my privacy policy, add it to my app store privacy

00:04:58   label now and all that stuff.

00:04:59   And I'm like, you know what, this is not a thing that my app should do.

00:05:02   This is a thing that like, if I'm going to ship this, it should be its own app.

00:05:07   That it would be, maybe my theoretical future perfect weather app that I've wanted to make

00:05:13   for years and have never made and probably never will make.

00:05:15   Because I even thought of that, I'm like, well, weather APIs right now are kind of in

00:05:19   flux.

00:05:20   Let me not do that right now.

00:05:21   This is not a good time.

00:05:23   And so I decided, I probably shouldn't ship it yet or ever for that reason.

00:05:29   But I also thought like, I have almost directly ripped off an Apple face.

00:05:34   I have made a very close, very obvious, very blatant clone.

00:05:40   That is weird to have to ship that or to want to ship that and to try to profit from that.

00:05:46   Like, you know, questions arise of what it get through app review even, which is a valid

00:05:51   question.

00:05:52   And I think the answer is probably but you know, I couldn't be so sure that it wouldn't

00:05:56   cause problems later.

00:05:58   But you know, it's also just kind of weird to say like, here's this thing I made, quote,

00:06:03   but it's a direct clone of something else.

00:06:07   And it was not accidentally, a totally like, legitimate, intentional direct clone of something

00:06:14   Apple did.

00:06:16   And that was it was kind of an odd feeling.

00:06:18   And I thought, you know, I could I could try to make it my own, I could try to like, you

00:06:21   know, adjust it in different ways.

00:06:23   And, and, you know, the code is no pun intended, modular.

00:06:27   So I like I have all the style information is all separated out, a lot of parameters

00:06:31   are separated out.

00:06:32   So I could like, you know, just customize it to a different a different appearance and

00:06:37   you know, change some of the colors here and there or the geometry here and there, but

00:06:41   it would still look a lot like the solar face and work a lot like the solar face.

00:06:44   So no matter how I do it, it's it's a copy.

00:06:47   And that's a little uncomfortable.

00:06:49   Yeah.

00:06:50   But I think the experience that you've gone through, and I think that is nevertheless,

00:06:55   like hugely beneficial.

00:06:58   Like it's one of these things that have watching you do this.

00:07:01   And I feel like this is something that I find you have found my in my own career being incredibly

00:07:07   helpful is there is something very, very instructive about looking at what someone else is doing,

00:07:15   or has done, where you know, a sort of like having the knowledge that a solution exists

00:07:21   because someone else has done it, and then trying to copy it trying to work out how they

00:07:26   did it trying to imitate it as best you can, can be so helpful from a learning perspective

00:07:32   that you're, you're expanding your toolset, like in this case, you're getting better with

00:07:38   clock kit, you're getting better with the graphics libraries, you're getting better

00:07:42   with Apple Watch development, like you're expanding your tools, but you're doing it

00:07:45   in a context that has such this clearly defined end goal that like, in the end, if you can

00:07:52   make a complication that looks exactly like the Apple Watch Solar Face, like you've done

00:07:55   it.

00:07:56   And if at any point you're like, I don't know what I should do, like what you know, how

00:07:59   should I make it look when the sun is close to the horizon?

00:08:04   You have an example, you have a reference, you have a thing that you can copy.

00:08:07   And this is where like, many times in my career, I've done gone down this kind of road route,

00:08:12   I sort of just purely as almost an academic exercise, I try and copy something.

00:08:18   And if so often it is useful, because that that that experience is a great way to like

00:08:25   build a skill.

00:08:26   It gets tricky, certainly, as you're saying, when you get to the end of that process, like,

00:08:30   you feel like you've made something, you've made something that is cool and is is interesting.

00:08:35   And obviously, you wouldn't have made it if it wasn't cool and interesting, you wouldn't

00:08:38   have copied something that you didn't think was interesting.

00:08:41   So like, you've now recreated this thing, and it sort of feels like you made it.

00:08:45   But you also didn't really totally make it either.

00:08:48   Like you're, you're imitating a lot of choices that someone else made.

00:08:53   And so that part starts to get tricky.

00:08:54   But I definitely think like this experience is is awesome.

00:08:58   And something that I would strongly encourage people to do is like, if you see something

00:09:02   that some other designer or developer has done, try and copy it and learn from that

00:09:07   experience is like super cool.

00:09:08   Because now at the end of this, like, you know, you have a whole bunch of more tricks

00:09:12   and things.

00:09:13   And it's like, I don't think this should be like, this should not go into overcast.

00:09:15   And it probably doesn't make sense necessarily as a standalone app unless it became part

00:09:21   of something much bigger, where like the app is not just the copy, the app is doing lots

00:09:26   and lots of things.

00:09:27   And this is just a small part of it.

00:09:29   Or it's dramatically kind of extended beyond that.

00:09:32   And it's like, relevantly and kind of coincidentally, we recently we both discovered that while

00:09:36   you were going down this road, I've also been going down a vaguely similar road in widgetsmith,

00:09:41   where I now have added some widgets that show the sun's path throughout the day, which it's

00:09:47   like that part Apple didn't doesn't own isn't like, you know, it's like they don't own all

00:09:51   of astronomy.

00:09:52   And it's like the end of sort of the graph that I'm doing is similar to the solar face.

00:09:57   But in my case, it's looks visually very different, because it's styled and themed based on the

00:10:03   user's theming. And I'm not going down nearly as far down as they do, or you did, in terms

00:10:09   of doing cool graphic effects and things, because those wouldn't actually work for me

00:10:12   when if you have like, you know, a hot pink background and purple text, making the sunrise

00:10:18   sunset look any way reasonable on that context wouldn't make any sense.

00:10:22   And so like, I'm free from that.

00:10:24   And so for me, it's like, I certainly, it was sort of inspired by what Apple had done.

00:10:29   And, but I think in the end, I've ended up with something that is sort of transformative

00:10:34   and extends and improves in that concept in a way that is makes it my own rather than

00:10:39   sort of as a copying.

00:10:40   And it's like that distinction, hopefully, at least we'll find out if Apple agrees, when

00:10:44   I submit this update for widgetsmith, but it's like that distinction is an important

00:10:48   one that there's a difference between something that is purely it's like trying to imitate

00:10:54   something 100% and trying to sort of copy and take something from someone else versus

00:11:00   just, you know, copying for the purpose of being inspired.

00:11:04   And it's like, if you're not in that inspiration phase, if you're on the other side, then it's

00:11:07   like copying is tremendous from a learning perspective of, you know, I imagine how I

00:11:12   can't speak for you, but I imagine you've learned a lot from this experience.

00:11:15   And who knows how that will come to benefit you, but I'm sure in some ways, it will.

00:11:18   Oh, yeah, I mean, that's part of the reason why I did this and why my one day became two

00:11:24   and a half days of work.

00:11:26   Because I was having so much fun, you know, figuring out, you know, reverse engineering,

00:11:32   what they what they were doing, basically looking at the solar phase and playing with

00:11:36   the little time travel feature that otherwise I hate because I always accidentally trigger

00:11:40   it.

00:11:41   But in this case, it made it really easy to reverse engineer the effects they were doing.

00:11:45   But but it was it was interesting to to be able to break it down by, you know, graphical

00:11:50   things and be like, all right, well, here, that's that's obviously, you know, a gradient

00:11:53   here and they're overlapping the second gradient as the sun sets.

00:11:56   And then they're, this was like, it's two gradients, actually, and one of them is being

00:11:59   scaled and one of them is blending, you know, alpha blending itself out as it goes like,

00:12:03   and you can you can start looking at things and realizing the components that are going

00:12:07   into it.

00:12:08   And as you experiment, you can you can figure all that stuff out.

00:12:10   And, you know, even though I'm probably not going to ever do anything useful with this

00:12:15   exact copy of their thing, it did teach me to look at things in a different way.

00:12:21   It taught me certain graphical techniques.

00:12:23   And most importantly, than all of that, I'm now a little bit better at Swift.

00:12:29   Because I'm still new at Swift, I'm still very new at it, I'm not an expert yet.

00:12:33   And in order to do this, I had to do a whole bunch of Swift coding.

00:12:38   And some of it was, you know, pretty trivial, like, oh, I made this, this sun library that

00:12:43   was basically a Swift translation of this JavaScript thing I had found to do the calculations

00:12:48   of positioning and stuff.

00:12:49   But then I also, you know, for the graphical stuff, I had to dive in and do not only a

00:12:54   lot of work in an API that I was familiar with, which was core graphics, but in your

00:13:01   language I wasn't.

00:13:03   So like, this is the first time I've used core graphics from Swift.

00:13:06   And a lot of the stuff that I expected to be worse in Swift or harder was actually fine

00:13:12   or even easier in some cases.

00:13:14   So that was good to learn both that, that Swift is actually better at this stuff than

00:13:19   I would have expected, and also to learn, like, oh, actually, I can make this even better

00:13:25   by using some of Swift's language features.

00:13:27   And things like in core graphics, they have the save G state and load G state for basically

00:13:34   pushing and popping off all the different transformation matrices and stuff in all the

00:13:38   different states.

00:13:40   And the Swift API for that is ugly.

00:13:42   It's just save G state and load G state as methods.

00:13:45   And that's how it is in Objective-C as well.

00:13:47   But one thing I always do in Objective-C is when I use those, I, after the save G state,

00:13:54   the entrance to that logical block, I put an opening brace.

00:13:58   And I have, I indent everything that's in the transaction, and at the end I put a closing

00:14:02   brace.

00:14:03   In C-based languages, that's fine.

00:14:06   You can put opening and closing braces to define blocks wherever you want.

00:14:10   In Swift, you can't, because Swift interprets that as a trailing closure.

00:14:14   And so it said basically, like, I tried that after the save G state call, and it's like,

00:14:19   this call doesn't take a closure argument.

00:14:21   What are you doing?

00:14:22   And so I made an extension on CG context.

00:14:25   And the extension was like, you know, perform transaction.

00:14:28   And that takes a closing, that takes a trailing closure.

00:14:31   And so I was able to format my code in a way that made more sense to me.

00:14:35   I was able to improve this API for my own use by using Swift extensions and Swift syntax

00:14:40   and everything.

00:14:41   And so it's like, oh, I'm getting better at this.

00:14:43   Another example was, I was looking at the gradient, the main, like, blue sunlight gradient.

00:14:49   And I noticed that Apple seemed to have, like, two brightness phases, like an early one,

00:14:55   like, towards the center that's super bright, and then it falls off really gently and goes

00:14:59   towards a dimmer one at the end.

00:15:01   But it's not a linear transition.

00:15:03   And CG gradients are linear.

00:15:07   You can't specify a custom curve, like an ease in out or a quadratic.

00:15:13   You can't specify a custom transition curve for CG gradients.

00:15:18   So I dove in further and found there's this other object called CG shading, where you

00:15:22   can do that.

00:15:24   And so I did that.

00:15:26   And I did a custom ease in out CG shading based gradient.

00:15:30   And that matched the look better.

00:15:33   And so I realized, you know, A, not only is this is probably what Apple is doing in their

00:15:37   solar face, but B, now I've had to dive even further into Swift, the language, and core

00:15:44   graphics into areas I've never used before.

00:15:47   And so it was-- and a lot of this is, like, very low level stuff, because I had to start

00:15:51   doing stuff.

00:15:52   Like, I had to use my first unsafe mutable pointer.

00:15:54   That was fun.

00:15:55   And so I had to learn how those worked.

00:15:57   And I had to use a function pointer.

00:15:59   Like, all sorts of crazy stuff.

00:16:01   That, like, you know, in my experience with Swift and Overcast so far, I just haven't

00:16:07   had to do that, or I've been avoiding it.

00:16:09   And so by doing this whole copying exercise, I have actually gotten tremendous value in

00:16:14   just advancing my knowledge of Swift.

00:16:17   And that will help me everywhere.

00:16:19   So even if I never ship this in anything, it was a fun exercise to do for a couple days.

00:16:25   And it made me better at this skill that I really kind of desperately need to get better

00:16:30   at fairly quickly.

00:16:32   Yeah.

00:16:33   And I think what's great there is because you were copying, because you were imitating

00:16:37   something specific, it has this delightful sort of property of pushing you to do something

00:16:44   that you wouldn't necessarily have done otherwise.

00:16:47   Like, if you were just, like, coming up with this yourself, you would have done the linear

00:16:51   gradient.

00:16:52   And it'd be like, huh, that looks all right.

00:16:53   And it's like, you wouldn't have in your mind necessarily, like, hmm, it's not quite what

00:16:57   I want necessarily.

00:16:58   Like, maybe you would.

00:16:59   Maybe you would have seen it and be like, huh, actually, I want an ease-out gradient

00:17:02   here.

00:17:03   But it's like, because you are kind of, and your goal is very specific, and it's copy-oriented,

00:17:09   it's like, you kind of have to do that.

00:17:11   And it naturally forces you beyond just, like, the easy path where it's like, you know, it's

00:17:18   obvious.

00:17:19   And that's where real learning starts to happen.

00:17:21   That's where things get interesting, is once you're off that easy path where, you know,

00:17:26   you think, oh, it's like, now you've used an unsafe pointer or whatever it is, and now

00:17:30   you have the sense of it's like, okay, if you actually do need to do that in something

00:17:34   that, you know, something tells me with all of your audio stuff in Overcast, eventually

00:17:40   something like this is going to come up again, where using function pointers and unsafe stuff

00:17:45   is inevitably going to happen.

00:17:46   And it's like, it's not going to be the first time you've done it.

00:17:49   And that is, when you come to that problem, it'll be different, it'll be a different API,

00:17:53   but it'll be slightly less scary.

00:17:54   And if you need to, you can be like, huh, I remember I've done this before, let me go

00:17:58   and see how I implemented it and how that code ended up looking.

00:18:02   And so that learning value of it is just so powerful.

00:18:04   Oh, yeah.

00:18:05   Yeah, because I mean, certainly, my entire audio engine is written in C, not Objective

00:18:10   C, C. And pretty much everything it does, if you brought it into Swift, would be labeled

00:18:15   unsafe, because that's just how C works.

00:18:20   But yeah, certainly, I would definitely need all that.

00:18:22   But hopefully, hopefully, I can just continue to use that for a long time without modifying

00:18:27   it.

00:18:28   Sure.

00:18:29   Anyway, we are brought to you this week by Hotjar.

00:18:30   Do you have a website?

00:18:31   Did you put time and energy into getting that website live?

00:18:34   Do you want that hard work to go to waste by not knowing what your visitors are doing

00:18:37   when they visit your site?

00:18:39   Of course not.

00:18:40   You know that each visit to your site is an opportunity to gather important data to help

00:18:43   you convert more visitors into customers.

00:18:46   You might not know that you can unlock that data now with Hotjar.

00:18:50   Hotjar is a behavior analytics and user feedback service that helps you understand the behavior

00:18:54   of your website users and get their feedback through heat maps, session recordings, and

00:18:58   surveys, which help take all the guesswork out of how visitors use your site, making

00:19:03   it easier to convert visitors into customers.

00:19:06   You can learn more about this now at Hotjar.com.

00:19:11   And if you want to try Hotjar Business right now for free for 90 days, that's a whole three

00:19:16   free months with no credit card required, my favorite kind of trial, just click the

00:19:21   link in our show notes or wherever you see the link for this show.

00:19:26   So see how visitors are really using your website, collect user feedback, and turn more

00:19:31   of your visitors into customers.

00:19:34   And when your free 90-day trial ends, you can just add your payment details to keep

00:19:39   the business plan or just downgrade to a free account.

00:19:42   So don't miss out on that important data from your site's visitors.

00:19:46   Learn more at Hotjar.com.

00:19:49   And if you want to get that 90-day trial, click the link in our show notes.

00:19:53   Our thanks to Hotjar for their support of this show and Relay FM.

00:19:58   So I'm curious, Dave, you know, going back to the topic of copying and like how to copy

00:20:03   well and how not to and what to do with stuff you've copied, I think there's a lot of distinctions

00:20:11   and lines here not to cross that I feel like our industry as a whole does not do a great

00:20:17   job of doing, of like walking this line, walking this fine line well.

00:20:24   There's so much copying out there.

00:20:25   I mean, and in certain areas it's worse than others.

00:20:27   Like I know it's really bad in games, but certainly it's not that much better in apps

00:20:31   either.

00:20:32   There have been multiple complete ripoffs of the Overcast UI and like there's this one

00:20:39   app, I forget what it's called.

00:20:40   It was this Italian app that was like, it copied everything, like the entire now playing

00:20:46   screen, the control screen, like everything.

00:20:48   It copied everything from Overcast.

00:20:51   It was also orange.

00:20:52   Like it was shameless in how far it went.

00:20:55   I haven't seen it in a few years.

00:20:56   It probably got taken down, but like it was quite something.

00:21:01   And meanwhile, Overcast is not the first podcast app in the store and some of the features

00:21:07   in it I didn't invent.

00:21:09   Like certain things, and I invented certain things that other apps then went and did and

00:21:14   there's ways to do that well and there's ways to do it badly.

00:21:17   And I think what you were saying earlier is important that like if you're copying something

00:21:22   just directly and you change like nothing about it or you change only very trivial things,

00:21:29   that's kind of, you know, that's not on the right side of that line.

00:21:34   But there are ways to use other apps for inspiration or to use other apps features for inspiration

00:21:40   or if you do have to copy someone else's feature, there's ways to do it in more tasteful ways.

00:21:46   Like for me, the way I always define it is like, first of all, am I drawing inspiration

00:21:53   from more than one source?

00:21:55   If you're making a podcast app and every single thing you do is extremely similar to the same

00:22:01   other podcast app, like if you're taking inspiration only from Overcast or only from Apple Podcasts

00:22:06   or only from podcasts or whatever, like and your app looks just like one of those, that's

00:22:13   not great.

00:22:14   But if you're making a podcast app and you take elements from multiple different apps

00:22:18   and kind of blend those together in your own way, that's okay.

00:22:22   Then it's okay if some of the elements came from other apps, you know, like then, 'cause

00:22:26   I feel like that's like a more transformative use.

00:22:28   Or, you know, if you are, if you're making, you know, say a weather app and you take inspiration

00:22:35   from a different category of apps, like if you take inspiration from games and build

00:22:39   it into a weather app, like that's a more transformative use of those ideas and I feel

00:22:46   like that's easier to make, you know, tasteful and comfortable.

00:22:50   Whereas if you're copying only from one place and making something that is very similar

00:22:55   to the thing you are copying, that's uncomfortable and, you know, borderline unethical.

00:23:02   And so it's a very fine line to walk and it's hard to get that balance right if you're actually

00:23:06   planning on shipping what you make and profiting from it.

00:23:10   Yeah, and I think if there's this element of copying where it's, is what I'm doing,

00:23:17   like seeking to deprive the original author of something?

00:23:22   Or is it sort of its own separate thing?

00:23:26   You know, is it, am I trying in, you know, like the person who is exactly copying Overcast,

00:23:31   like what is their end goal there?

00:23:34   That they're gonna like out Overcast, Overcast, and like if their app is in no way better

00:23:39   than Overcast and is exactly the same as it, like they're not creating value there.

00:23:44   They're not doing something where it's in any way like, you know, moving things forward.

00:23:50   It is only going to be taking things from you.

00:23:53   It's going to cause confusion for your customers potentially.

00:23:56   It's going to, like it's seeking to take something without giving anything back.

00:24:01   And like, a lot of this is, there is a certainly a tricky element of this that, and sometimes

00:24:06   there are features and things that you need to implement because that's where the market's

00:24:10   going.

00:24:11   It seems like every social media platform needs stories now.

00:24:13   And it's like, it started off as a bit of a joke, but now maybe it's just like the reality.

00:24:17   That's just like, that's table stakes for a social social network is that they have

00:24:20   some kind of ephemeral story like infrastructure.

00:24:23   It's like, that's just, that's just part of the system now.

00:24:26   And so like not doing it just on principle is also sort of problematic.

00:24:30   But it still is always something that I think is important to keep in the back of your mind.

00:24:34   And I think it's easy when you're, it's easy to let copying let you avoid sort of actual

00:24:44   thought too.

00:24:45   And this is a trap that I found myself falling into sometimes where I'm dealing with a problem.

00:24:51   I have a tricky UX or a sort of user interface thing that I'm trying to deal with.

00:24:56   And it's like, I just end up like, who, you know, which app do I do I know of that probably

00:25:01   has done this well?

00:25:03   And then I just like go and look at how they did it.

00:25:05   And if I just go and look at how they did it and copy it without any original thought,

00:25:10   without using that as an input, instead using that in some ways like as the output, just

00:25:15   holistically, it's like, I'm missing out both on the opportunity to think critically

00:25:20   about what I want to do.

00:25:22   And I'm probably not, I don't fully understand why they did it the way they're doing it.

00:25:26   And it becomes problematic in a lot of ways.

00:25:29   Whereas if I am going to another app, it's like, you know, I'm trying to make my like

00:25:34   subscription purchasing screen.

00:25:37   And I go and look at a bunch of apps that have that I think have good respectful, you

00:25:42   know, nice subscription screens.

00:25:44   I go to the if I go to those and they're lovely, you know, and like, I'm in sort of take the

00:25:49   best parts of both of many of them or apply my own sort of special sauce onto it and kind

00:25:54   of collect sort of trying to synthesize a bunch of things into some into a new thing.

00:25:59   Like that feels great.

00:26:00   That feels useful.

00:26:02   And that involves me sort of thinking critically, I think maybe a good place to start is if

00:26:07   you're copying doesn't involve you having to think critically, if it is just take this

00:26:14   thing and put it into something else.

00:26:16   Like if there is no middle step there where you're thinking about it, and you're sort

00:26:19   of making your own choices and putting your own tastes and flares into it, then you're

00:26:24   probably on the wrong side of this.

00:26:25   And this is not something that you want to be doing.

00:26:27   Yeah, like, like you at some point, you should have to think either how should this look

00:26:33   or how should this work?

00:26:34   Or both?

00:26:35   If you don't have to act because like that's that's designed like and that's ideas, right?

00:26:38   And if you if like, you know, if I'm copying the solar face, exactly, I don't have to make

00:26:43   those choices.

00:26:44   I just look at what Apple's face does.

00:26:46   And I say, Hey, how do I do that?

00:26:48   Which is different.

00:26:49   How do I implement that is very different than how should this look or how should this

00:26:53   work?

00:26:54   You know, if if you it like, if I have to actually ask those questions, then I'm changing

00:26:58   it then it's like, okay, how what what should the face do?

00:27:03   If you are in a place that doesn't have sunrise or sunset?

00:27:06   Or what should the face do?

00:27:07   You know, transitioning, you know, between the you know, day and night?

00:27:11   Or how, how should this look on a totally different type of like, you know, if it's

00:27:16   a white background, and and the sun is not represented by a big gradient, like, well,

00:27:20   how should that be designed?

00:27:22   And what should happen at the edges and stuff like that?

00:27:24   Like, there are lots of questions that could be raised in that copying, that suggest that

00:27:30   that's probably becoming something more, it's probably becoming more transformative and

00:27:33   more original.

00:27:35   But if it is, if it if your only question is, how do I implement this thing over here

00:27:41   that I saw?

00:27:43   That's probably just copy.

00:27:46   Yeah, it's like you got to know you're to be asking yourself why they did what they

00:27:49   did, rather than just what they did.

00:27:51   Right?

00:27:52   It's it's and that's where it'll actually grow and develop and improve you probably,

00:27:57   where you understand, huh, why did they do their gradients that way?

00:28:00   It's like, huh, because it does.

00:28:01   Yeah, it does kind of give it a nice effect.

00:28:03   And like, then you've learned something, then this is an improvement, both, you know,

00:28:06   this is a learning process for you.

00:28:07   And I will say to that, like copying is also like, don't think it's a great place to

00:28:13   often get started.

00:28:14   And it is something that I've done many times where my first design, like the very rough,

00:28:20   basic version of something is much more of a copy of someone else's work.

00:28:25   And that's a great way to sometimes get started, get the very rough, like frame up of your

00:28:30   app of like, how do how would I go about this, you if someone else has done something similar,

00:28:34   and then you're using that as a jumping off point, like it just make sure that you don't

00:28:38   ship that version one that you take that version that was very much a copy, and then you iterate

00:28:42   on it, and you change it and you improve it.

00:28:45   Like that's where it can often be a great place to start, though, it's just like, you

00:28:48   know, let someone else have done sort of the initial scaffolding that you can use and then

00:28:53   go and dive in and make your own impact from there.

00:28:57   Like that's also a great use of this kind of an approach where I suspect if you spent

00:29:01   another two and a half days on this face, you would continue to improve and extend and

00:29:05   change it and eventually it would end up something that was reminiscent of Apple's solar face,

00:29:11   but was your own thing and you wouldn't be in any way feel like a copy that would feel

00:29:15   like no, this is my own thing.

00:29:17   It's it's different in ways that are important to you or you think make it better.

00:29:22   Thank you for listening, everybody.

00:29:24   And we'll talk to you in two weeks.

00:29:26   Bye.

00:29:27   [BLANK_AUDIO]