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 ◼ ► As we approach WVDC, I am in a huge time crunch, as I'm sure you are, you know, just trying to get our apps ready, because we know that our summer and our fall and, you know, the rest of our year is about to be at least probably likely derailed.
00:00:34 ◼ ► Yes, redirected and largely affected by whatever happens at WVDC and, you know, especially now, you know, this time that a new platform is so heavily rumored that new platforms seem to be the most effective derailments for developers' plans, with the exception of maybe when the entire OS changes its theme or adds dark mode.
00:00:58 ◼ ► And yet, as we approach this, you and I are also both trying to do, like, polished UI work in different ways.
00:01:07 ◼ ► And I notice, you know, so you published this post yesterday on your blog talking about trying to match the continuous curvature of system round recs as a path.
00:01:18 ◼ ► So trying to figure out the math behind generating that path so you can use it as part of other shapes.
00:01:23 ◼ ► You're doing this at the same time that I'm in the middle of this, you know, huge overcast Swift UI basically rewrite and I spent three days for the last few days trying to fix this little tiny animation bug where I built my expanding cells for the episodes where you tap the cell and it expands to show, like, that row of orange buttons on the bottom.
00:01:49 ◼ ► Not only did I have to get that animation exactly right, but it was whenever the little subtitle shows the little cloud symbol for a streaming episode, the little cloud would flicker by like half a pixel as the animation would go.
00:02:05 ◼ ► It would go flick, flick, flick, flick, flick. And it took me three days to figure out, like, somewhere there was a value I had to be rounding to avoid partial pixel alignment.
00:02:14 ◼ ► And it was the biggest pain in the butt. And for the most part, most of my customers wouldn't even be able to see it or wouldn't even be seeing cells that are showing any symbols.
00:02:25 ◼ ► So I probably shouldn't have spent three days on it, but I did anyway. And you spent how long trying to match the system curvature of rounded corners?
00:02:35 ◼ ► You're better off than me. But it strikes me as this is always a huge struggle that I have, that I fight and that I often lose trying to maintain the balance of the amount of time I'm putting into something for the gain it will get me.
00:02:52 ◼ ► And what is a responsible amount of time to spend when I'm in a time crunch? Because right now we are in a significant time crunch in this WBC lead up. This is not a time to be opening up new doors that just lead up out into the weeds.
00:03:08 ◼ ► I know this is a bunch of mixed metaphors. But this is not a good time to start opening up cans of worms and spending huge amounts of time on tiny details necessarily.
00:03:19 ◼ ► But sometimes you gotta do that just for your own satisfaction. I would feel crappy if I shipped this app knowing that there was this little tiny animation flicker every time you tapped this icon.
00:03:31 ◼ ► Because that to me says this app is sloppily made or the person building this wasn't paying attention.
00:03:38 ◼ ► Even though many times things are shipped for much better reasons than that. Like yeah, that person did notice but their boss wouldn't let them fix it because it would take two weeks or whatever the case may be.
00:03:47 ◼ ► So I think I want to talk about this week kind of this balance of doing this kind of polishing work, getting these little details right, even if it takes you a huge amount of time.
00:04:02 ◼ ► And I think this is just like fundamental, it's like fundamentally like the process of design is finding this line is making these trade offs between things be like what level of polish sort of the how many levels of detail are you going to polish your app to?
00:04:23 ◼ ► How many places are you going to try and just make it perfect? Where are you going to spend that effort to optimize something? Where are you going to abandon a behavior if you can't get it quite right?
00:04:33 ◼ ► That's like a path that increasingly I find myself sort of having in the back of my mind. Is getting this feature perfect worth the effort it would take or is there a better way to do this to structure it?
00:04:44 ◼ ► And especially I find with SwiftUI work that I'm doing, I much more often find myself now being like, huh, this is being really weird in SwiftUI, I don't know why.
00:04:53 ◼ ► Something I'm doing just isn't animating correctly or isn't looking right. Is there a different way that I can do this?
00:04:59 ◼ ► Which in some ways is a cop out, in some ways is just like this pragmatic thing of I don't want to fight the tools for two days or two weeks or however long it would take.
00:05:08 ◼ ► So I'm just saying, you know what, I'm just going to restructure things, which works sometimes. It's kind of like I'm not very great with my grammar and in my writing.
00:05:16 ◼ ► And sometimes I'll have these sections where it's like I'm sure I'm supposed to use a semicolon, but I never know when is the right time to use a semicolon.
00:05:24 ◼ ► And so you know what I'll just do? I'll just rewrite the paragraph so it just wouldn't be appropriate.
00:05:28 ◼ ► By the way, for the record, honestly, that is usually the right call for things like semicolons. If there's a better way to write this sentence where you don't need these kind of crutches that can harm legibility, you're better off not using them and just rewriting the sentence.
00:05:45 ◼ ► And I think that's exactly the same thing in design so often is the case. It's the sense that in order if I need to do all of this really clever fancy work in order to make it happen and to make it a good UI, is this the best UI?
00:06:01 ◼ ► Am I going down a route where I'm creating something that is going to be brittle and fragile and confusing because it's trying to be clever? And that's this tension that I just always feel. And at the same time, it's also very rewarding work.
00:06:16 ◼ ► On the balancing side, the reason I think you and I continue to do this kind of thing where we take a UI and just kind of want to push it in a difficult direction that requires effort is because when you get it right, when you do hit that magic where it actually works,
00:06:32 ◼ ► and is smooth and fluid and delightful and surprising in the good way, not in the bad way, that's a wonderful feeling and it's really cool. And so you don't want to just completely give up. But it's such this trap.
00:06:48 ◼ ► I can't speak for people who are coming into the Apple developer community now, but I think in the time period where you and I came into it, it was very much a community that loved kind of like lauding this kind of work.
00:07:04 ◼ ► And so this is like the ultimate goal of being a good Apple developer, being a good designer, is all of these kinds of, you know, the insane attention to detail going way beyond what you need to do just because it's beautiful or cool and it's very easy if you do this kind of work to, you know, get the likes on Mastodon or whatever being like, "Yeah, you're doing it. That's great."
00:07:25 ◼ ► But just, you know, doing this work for that reason, because it's easy to get kind of accolades or, you know, sort of you have people like you in the community is not a great reason to do it. It's probably a better reason to do it if it's really going to enhance the user's experience, not just, you know, free for your own benefit in that way.
00:07:41 ◼ ► And so I find it such a tension, though, that there is it's this never ending battle between the straightforward and the, you know, it's like this, there's that next level and it's unfortunately it isn't one of these things where very often that next level is, you know, commit the resulting improvement in your user's experience is not proportional in any way to the amount of time it takes, you know, it is very much the situation that you put it in this is this very, you know, tiny detail will take huge
00:08:10 ◼ ► amounts of time and you could have, you know, built a maybe you could have built a whole feature or a mini feature into the application that would have enhanced the user's experience way more than making this one line look just perfect when it sweeps around a corner.
00:08:22 ◼ ► Like that gets really hard but and it's also like I think something that I run into a lot with my own apps is that sense of, you know, it's like I want, I want to make them, I want to make them good, not just for my users but there is an element of like this is there's a pride in the craftsmanship part of it and, you know, with my vision question understanding the way, like, Apple curves its lines is largely to was at any rate was doing that not even for me.
00:08:51 ◼ ► I was doing that not even for an for an app that I intend to ship right now it's it was just like for my own education and my own ability to be a better developer and like that work is very important but if I do too much of that and just like I'm a better developer who isn't shipping anything and that's bad too.
00:09:07 ◼ ► So, like, yeah, it's a it's like there it's one of these unfortunate topics where there's no right answer there's just a maybe a sense of getting better at finding that line and drawing that distinction over time and being comfortable that sometimes I've shipped things that were not perfect, and I'm comfortable with that.
00:09:24 ◼ ► And sometimes I've shipped things that are overly perfect, and no one ever noticed except for me, and that's also totally fine.
00:09:30 ◼ ► A few years ago I started referring, I think on the show I started referring to, like that super, you know, awesome design work that maybe is not worth your time but but you know you do it for your satisfaction I started referring to it as indulging in this kind of in design like this is indulgent design work because that I think that's a good way to think about it like you are indulging in this for yourself like it's mostly for your own satisfaction.
00:09:55 ◼ ► And there is value there for sure. But you know, but don't tell yourself that you really need to necessarily do it. And, or that your customers will benefit from it as much proportionally as the time you're spending like I was looking as I was fighting my stupid, you know, cell expansion animation bug.
00:10:12 ◼ ► I was considering all options I'm like you know what, I'm trying to be good and not dive into tons of hacks because at this point, part of the journey of trying to find this bug included basically rewriting vStack using the new SwiftUI custom layout mechanics.
00:10:29 ◼ ► I basically tried to rewrite vStack because when I wrote a really simple vStack debug didn't happen. And so, then it's like all right now I got to tweak to get all this behavior right now you know when the text doesn't fit shrink the views proportionally with their, with their priorities, I've written all this stuff.
00:10:45 ◼ ► It was, it was not going well. And eventually and the fix ended up not needing all that thank goodness and it ended up like I didn't have to use any of that I ripped it all back out went back to vStack and just you know hit like around rounded a value of like in one of the animation parameters and that was it.
00:11:02 ◼ ► But, you know, during all that time I was, I decided let me look around like, you know, I was really, I was really in the dark, I was in a dark place and I was like do I really even need to do this in an animated way, or is there some other way I could present these buttons.
00:11:15 ◼ ► Let me see what other podcast apps do you know I keep I keep like 10 or 15 podcast apps installed on my phone. So I can occasionally refer to them usually with the with the goal of like, I'm doing a new thing, and I don't want to just rip off some other app directly
00:11:29 ◼ ► I want to like have I want to make sure my take on it is, you know, as original as it can be. So usually I go to the other app just to make sure I'm not ripping them off. In this case I was going to their after see like what how did they solve this problem.
00:11:40 ◼ ► And without naming names, there's a lot of really good podcast apps out there that are nicely designed. There's a lot that aren't. And the ones that are really nicely designed aren't necessarily like the really, really high market share ones.
00:11:55 ◼ ► And so I was when I was going through the ones and seeing like which ones have, you know, comparable or better market share to overcast. I was shocked how really basic and sloppy the UIs were in a lot of cases.
00:12:07 ◼ ► And I was trying to see I was trying to compare to what to what they do. So I could, you know, maybe, you know, maybe have a solution arrive in my mind of like, Oh, wait, they, you know, their animation is timed differently, or they don't animate this stage, but they
00:12:20 ◼ ► they animate this stage. Like, that's kind of what I was looking for. And instead, what I found was a whole bunch of apps that didn't waste any time on this at all. And instead, just kind of hacked crap together with, you know, no animation, you know, no fancy tools, like it was, it was interesting to see, you know, in the sense and I'm not saying this to brag, because, you know, obviously, my my design work is not perfect. And there's tons of tons of areas for improvement.
00:12:44 ◼ ► But I'm saying this, that like these apps, some some of which had more market share than I do. They didn't spend all their time doing that. And yet they still have pretty good market share. And so it kind of showed, maybe this is not a good use of my time. Like I maybe I shouldn't be, you know, like what you were saying, like, kind of the, the community that that that we see ourselves as part of, maybe I shouldn't be trying so hard to please that community.
00:13:13 ◼ ► But on the other hand, I want to I want to please that community like and and that's that's the tension. I would love to someday win an ADA that is, in my opinion, that is the highest honor Apple can bestow on developer is an Apple Design Award.
00:13:30 ◼ ► I've never won one. I've never even as far as I know been under consideration for one, because frankly, my design work isn't good enough for one. And over time, I hope to make it good enough for one, but I know I'm not there yet.
00:13:42 ◼ ► And someday I would love to be there. And that would be such an honor. And yet, if you look at, you know, the actual market value of that, what you know, what would that do to my app sales?
00:13:55 ◼ ► Nothing, basically, like, it's not it's not a meaningful thing. Like there's a small amount of PR, and when they announced it at the BBC or whatever, but it's not that's not a massive thing for your business.
00:14:04 ◼ ► It's basically nothing, you're basically doing it for your own honor and satisfaction. And I think there is a place for that. And that's what makes this so tricky is that sometimes you do need to, you know, make the back of the cabinet nice.
00:14:17 ◼ ► Sometimes you do need to actually, you know, make things for your own satisfaction or make things good for your own satisfaction. Like when I designed voice boost to voice, you know, voice boost in overcast is a button.
00:14:29 ◼ ► That's it. It's one button. It's on or off. The actual voice boost system, the actual code is basically a channel strip. Like if you've ever seen in an audio editor, you've ever seen a channel strip?
00:14:40 ◼ ► It's like it's this the stack of effects that you can apply to a track and you can move them around and then anywhere you want. You can adjust all the parameters. You can have different stages in and out.
00:14:49 ◼ ► Voice boost to I built all that that is actually a channel strip effectively this pipeline that you can stack all these different modules, you can control the different parameters. And the way I actually shipped it to my customers is just one preset.
00:15:03 ◼ ► Well, two technically, there's a different one when you're using the phone speaker. Otherwise, so two presets and it could be doing so much more.
00:15:11 ◼ ► And I built it to do so much more. But I just haven't yet had like the time or the ability to put that in the UI yet. And so on some level, you can say this entire thing was wasted, or at least much of this capability was wasted.
00:15:24 ◼ ► I could have made it so much simpler and spent less time on it. But I wanted to do it for my own satisfaction. And for you know, and maybe in the future, you know, I can expose some of these features if I if I ever get around to making the UI for it.
00:15:37 ◼ ► First after we write the entire UI of the app, but once I once I get there, but you know, that I did that work. For me, mostly that was mostly indulgent work for me. And I think as long as you're not like losing too much of your time to it, like as long as you're still able to ship your software.
00:16:00 ◼ ► I don't necessarily think it's that you can never do indulgent, you know, over the top design or engineering work. It just has to be in balance.
00:16:10 ◼ ► We are brought to you this episode by Indeed. What's a game where no one wins? The waiting game.
00:16:17 ◼ ► When it comes to hiring, don't wait for great talent to find you find them first with Indeed. When you're hiring you need Indeed.
00:16:24 ◼ ► Indeed is the hiring platform where you can attract, interview and hire all in one place.
00:16:30 ◼ ► Instead of spending hours on multiple job sites, searching for candidates with just the right skills, you can use Indeed's powerful hiring platform that can help you do it all.
00:16:39 ◼ ► Indeed streamlines hiring with powerful tools that find you matched candidates. With Instant Match, over 80% of employers get quality candidates whose resume on Indeed matches their job description the moment they sponsor a job.
00:16:51 ◼ ► According to US Indeed data, US's Indeed hiring platform really is great because it gets you one step closer to the hire by immediately matching you with quality candidates.
00:17:03 ◼ ► Even better, Indeed is the only job site where you only pay for applications that meet your must-have requirements, making it an unbelievably powerful hiring platform, delivering four times more hires than all other job sites combined according to Talent Nest 2019.
00:17:18 ◼ ► Join more than 3 million businesses worldwide that use Indeed to hire great talent fast. Start hiring now with a $75 sponsored job credit to upgrade your job post at Indeed.com/undertheradar.
00:17:32 ◼ ► Offer good for a limited time. Claim your $75 credit now at Indeed.com/undertheradar. That's I-N-D-E-E-D dot com slash undertheradar. Terms and conditions apply.
00:17:45 ◼ ► Need to hire? You need Indeed. Our thanks to Indeed for their support of this show and Relay FM.
00:17:51 ◼ ► Yeah, and I think there is definitely something in this that of being aware of why you're doing this kind of work and being like honest and reasonable with yourself about it in the sense that this kind of work or just in general, like really good design. I think it's easy to if you're if you've been in baby in the Apple developer community for a long time, you would potentially come away with the impression that good design is not a good design.
00:18:20 ◼ ► Good design is what makes products successful. Like that is a statement that you might start to believe that it is the design of the thing that will lead to its success and define its success.
00:18:32 ◼ ► And if that were true, the level of design detail and the level of craftsmanship that you express in your work is the like number one thing that you can do to influence the success of your business.
00:18:44 ◼ ► Like that is a reasonable thing that you could believe as a result. Having been doing this for 15 years, I'm quite confident that that is not at all true.
00:18:53 ◼ ► Yeah, it's a good enough design is probably an important prerequisite in terms of to be able to have successful product. It needs to work, it needs to be understandable and do a reasonable job in terms of making sure people can understand how to use it. But beyond that, that is an you know, the beyond that extra work is serving a different purpose is communicating something either to your customer communicating something to your customer,
00:19:22 ◼ ► communicating something to your community of people you care about communicate something to, I don't even know, like to app review or to the Apple app store editorial team, whatever it is, like it is a different thing that you are trying to communicate that is valuable potentially.
00:19:38 ◼ ► I think in terms of thank you and I both intrinsically we value this as something that we find important. And we find in joy, you know, joy and sort of pleasure in creating, but I think increasingly it's the importance of understanding that that work is not going to come back to you likely in terms of the general success number of downloads number of referrals word of mouth, all those kinds of things that is not likely a connection that it is, you know, it is useful in some ways, but it is separate from the success of your app.
00:20:07 ◼ ► Like the success of your app, you can have far more to do with something that solves a problem that people really have in a way that is clear and understandable. And you have some mechanism by which you can acquire new customers on a reliable basis. Like if you have those things, that's much more those are like the 99% of your success of your app, whether it gets traction, whether it has staying power, whether you'll be able to get people to convert to subscriptions, you know, show ads, whatever it is, like, all of those things are far more based on those kind of factors.
00:20:36 ◼ ► And the design of the app is just like, as long as it's good, as long as it's good enough, as long as it's kind of like works in a reasonable way, it's fine. And you I think you can prove this, if you just go into the App Store, look at popular apps, it is not that they are this kind of this very, you know, whimsical, detailed, you know, groundbreaking design with lots of fluid animations and using these things that would have been, you know, that when you see like, wow, that's amazing. It's, you know, groundbreaking. It's like, no, it's like it's not a good idea.
00:21:05 ◼ ► It's like, no, it's like, it's stopped more stock UI, you know, wrapped up in, you know, with solving a clever problem in clever way. It's stock UI, if you're lucky, or it's, you know, it's, you know, react native or like some kind of cross platform. Yeah, exactly. It's like here, this is basically a web view.
00:21:23 ◼ ► And it's like, that's good enough. And that can be good enough. And I think that's, like an important thing to be honest with yourself about that. I do think, like, I used to think that there was a direct connection between the quality of my design and the likelihood of my success. I do not believe that is the case anymore. I think they are related vaguely, but it's like in the in the coefficients of correlation factor or whatever. It's like it is the it is a very small coefficient that is, you know, maybe slightly more
00:21:52 ◼ ► there to be useful. But primarily, that's not that is not a reason to do this kind of work. Do this work because you enjoy it do this kind of work because you think it's fine. It's interesting because it enhances your ability to think it you know, lets you solve interesting problems in a way that keeps you excited. Like, I've been doing this job for 15 years, like I need to find interesting thing problems to solve, and not just you know, find better ways to keep counting people's steps or making their widgets like I would find that very tedious and find it hard to continue to want to do it.
00:22:21 ◼ ► I'm very encouraged to continue to want to do do my job on a day to day basis. And so I invent these little problems. I indulge in that work, and that's fine. And that's, you know, a strategy that I'm using to enjoy my work and hopefully, you know, enhance the experience of some of my users. But you know, I used to sort of deceive myself that this was also furthering the products themselves. And I don't think I have that same feeling anymore that it's it's in it's valuable, but not in actually move my, you know, business my business forward in that way.
00:22:51 ◼ ► Yeah, I think maybe there is that distinction to draw between something that you're doing
00:22:57 ◼ ► as a labor of love versus as a business. And you can have some overlap between those two
00:23:04 ◼ ► categories. Some of the things--you can put some labor of love style of effort into your
00:23:15 ◼ ► if you actually look at real life, you know, physical businesses, if you look at, you know,
00:23:18 ◼ ► if you walk into a store, you can kind of tell, like sometimes the store owner, they've
00:23:24 ◼ ► made this their entire life, and they've put tons of craft and care and polish into every
00:23:37 ◼ ► go into successful businesses, oftentimes a lot of those, you know, polished edges aren't
00:23:44 ◼ ► there. A lot of the detail isn't there. But they do good business, and they're more focused.
00:23:51 ◼ ► Those are, I think, two different goals and two different motivators. And if you can manage
00:24:03 ◼ ► much over the craft and spend too much time over the craft and polish angles, oftentimes
00:24:08 ◼ ► that's going to come at the expense of the business. And so, look, if you are doing something
00:24:17 ◼ ► you know, financially, and you don't really need your apps to be great businesses, then
00:24:21 ◼ ► you can indulge in all this stuff. And you can do it. And that's great. It's like somebody
00:24:32 ◼ ► cool hobbies like that, and they can put tons of craft into that. But that's not their business.
00:24:38 ◼ ► Meanwhile, if, you know, in your business, you have different competing priorities, and
00:24:48 ◼ ► going to be a problem for you. But if you are shipping things enough to keep the business
00:24:58 ◼ ► it. You know, but it's, again, it's all about, like, it's keeping things in balance. I mean,
00:25:10 ◼ ► polishing your app is great. You know, ultimately, when I was having my animation glitch journey
00:25:21 ◼ ► try to avoid the problem, I was getting more and more discouraged, thinking, I really don't,
00:25:30 ◼ ► my own layout. I don't want to remake V-Stack. I want to just use V-Stack and figure out
00:25:38 ◼ ► it and deal with all the weird ways it's going to be different or have shortcomings compared
00:25:42 ◼ ► to the system component. And so, ultimately, I'm glad that worked out in a way, like, I
00:25:57 ◼ ► we can, like, exploring is fine on your way to finding a bug, but then being able to tear
00:26:06 ◼ ► is I want to prefer, you know, like, if you look at Overcast now, the shipping version,
00:26:18 ◼ ► That's gone in my new version because that took so much work and introduces so much complexity.
00:26:25 ◼ ► And yeah, it's nice and fancy, but it is ridiculous in terms of what it took to do it. And, you
00:26:36 ◼ ► can do to that now playing screen, how I can modify it, what I can add to it. It's really
00:26:45 ◼ ► so, that's held me back. So, in the new version, I'm like, you know what? I'm not going to
00:26:49 ◼ ► be that polished in that one area. I'm going to just have a slide-up card transition. Like,
00:26:54 ◼ ► what everyone else does with everything else, I'm just going to have a slide-up card because
00:26:58 ◼ ► that took no effort and gives me maximum flexibility on how that screen is designed, what's in
00:27:03 ◼ ► it, how it works, et cetera. And that, I think, using – I was out of balance before. I was
00:27:12 ◼ ► preferring all the superficial little details. I was trying to make something nice for the
00:27:23 ◼ ► I'm one of the only members of that community who's self-employed. And so, I think, you
00:27:28 ◼ ► know, I have a different balance of my needs here. And so, I was very, very happy in my
00:27:34 ◼ ► new design to give that up and say, you know what? Instead of doing all that, I'm going
00:27:39 ◼ ► to be better served overall by keeping this component simple and making something that's
00:27:48 ◼ ► in the future to, you know, easier bug fixes and more versatility and the ability to change
00:28:09 ◼ ► is you're trying to do. Don't trick yourself or sort of lie to yourself that what you're
00:28:18 ◼ ► design and, you know, minuscule detail, really polishing things out is cool, is awesome.
00:28:24 ◼ ► You and I both enjoy it. It's fabulous. But understand what it is, that it is an exercise
00:28:33 ◼ ► your skills as a developer, which is important, but, you know, is one aspect of you. And it's
00:28:48 ◼ ► your app, that ultimately, if you have a limited amount of time, spend it on the things that
00:28:57 ◼ ► app better to make it more reliable. You know, it's much, it's having a great experience