PodSearch

Under the Radar

10: Designed by a Programmer

 

00:00:00 ◼   ► Welcome to Under the Radar, a show about independent app development.

00:00:03 ◼   ► I'm Mark Arment.

00:00:04 ◼   ► And I'm David Smith.

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

00:00:09 ◼   ► This week we wanted to talk about how you can be, kind of like us, independent developers

00:00:14 ◼   ► who work for yourself without having a full-time designer or trying to minimize how much of

00:00:20 ◼   ► a designer's time you need.

00:00:23 ◼   ► Because oftentimes people who are working for themselves can't afford a full-time designer

00:00:28 ◼   ► or much design at all from other people.

00:00:31 ◼   ► And sometimes even when you can afford it,

00:00:33 ◼   ► if you're working on like a small app

00:00:35 ◼   ► or you need to get something out quickly

00:00:37 ◼   ► or you're not sure of the market of something,

00:00:39 ◼   ► you often want to keep your expenses on that app very low.

00:00:42 ◼   ► And it's often hard to justify having a full-time designer

00:00:47 ◼   ► or having lots of hours from a contract designer

00:00:50 ◼   ► helping you out there.

00:00:51 ◼   ► So we kind of wanted to talk about the reality and process

00:00:54 ◼   ► of being a programmer who kind of does your own design,

00:00:59 ◼   ► and how that works out, and then other things later on

00:01:04 ◼   ► about things like how you can do programmatic style assets

00:01:07 ◼   ► versus static assets in your apps.

00:01:09 ◼   ► So, David, what has your experience been

00:01:12 ◼   ► with design for your apps?

00:01:15 ◼   ► - So I do most of the core design of my apps myself,

00:01:22 ◼   ► which is definitely-- it's a mixed bag in terms of what that ends up doing.

00:01:27 ◼   ► But for the reasons you just outlined, it's a hard thing to hire a designer,

00:01:33 ◼   ► especially, I find, at the first app, or the first version of the app,

00:01:37 ◼   ► which is a little bit backwards in some ways.

00:01:39 ◼   ► But for the way that I make apps, I don't know

00:01:43 ◼   ► if the app I'm making is going to be worth putting a lot of time,

00:01:47 ◼   ► and energy, and resources into.

00:01:48 ◼   ► And so for a lot of my apps, the first version

00:01:50 ◼   ► is just a couple weeks of work.

00:01:53 ◼   ► And the concept of hiring a designer,

00:01:55 ◼   ► even just the time overhead, the cost aside,

00:01:58 ◼   ► if I could find a really inexpensive designer,

00:02:01 ◼   ► the cost overhead in terms of time, of going back and forth,

00:02:04 ◼   ► and getting everybody on the same page,

00:02:07 ◼   ► and then waiting for the assets, and doing all that,

00:02:09 ◼   ► it doesn't work as well for me.

00:02:10 ◼   ► And so I tend to just sort of hope for the best

00:02:15 ◼   ► and design things.

00:02:16 ◼   ► And the result is maybe it's a bit mixed,

00:02:20 ◼   ► But what I find though is at least once you have some experience designing apps, the core

00:02:27 ◼   ► design questions, I guess this would be the UX design.

00:02:32 ◼   ► I'm not really as familiar with the terms, all the different, like UI, UX.

00:02:34 ◼   ► Please don't email us.

00:02:35 ◼   ► And graphic design, maybe other three kinds of design, I don't know.

00:02:40 ◼   ► Making an app that sort of works right and is functional and intuitive, that part I think

00:02:47 ◼   ► I think I have a good handle on and I can make apps that do that.

00:02:50 ◼   ► They just tend to not be pretty.

00:02:53 ◼   ► And in general I found that people are pretty forgiving about things not being pretty.

00:02:57 ◼   ► They'd rather it be functional, and so you can kind of get away with a lot more than

00:03:01 ◼   ► you may otherwise have.

00:03:04 ◼   ► And definitely this has been a lot easier since people don't expect apps to be pixel

00:03:07 ◼   ► perfect anymore.

00:03:10 ◼   ► There was a time when it was really hard if your app didn't have the crazy textures and

00:03:14 ◼   ► everything is just aligned just so. Right now you're building an app that has to be

00:03:19 ◼   ► 4s size, iPhone 5 size, iPhone 6 size, iPhone 6+ size, then you have iPad, you have 1x iPad

00:03:31 ◼   ► and 2x iPad, and iPad Pro. And so your design has to scale to everything anyway, and so

00:03:38 ◼   ► you can get away with, I feel like in some ways, a lot more because you're trying to

00:03:42 ◼   ► to design something more fluid anyway.

00:03:45 ◼   ► - Like in some ways it's more like a web design, you know,

00:03:47 ◼   ► now whereas before it was this very like texturally

00:03:51 ◼   ► and graphically rich style in like the iOS 6

00:03:55 ◼   ► and earlier days.

00:03:56 ◼   ► And then since the iOS 7 style UI with, you know,

00:04:00 ◼   ► all these clean flat colors and the thin text everywhere

00:04:04 ◼   ► and lots of white space, I think it has shifted more

00:04:07 ◼   ► into what web design kind of always was where, you know,

00:04:10 ◼   ► because you have to design for so many screen sizes

00:04:14 ◼   ► and be ready to adapt to new ones that might come out

00:04:16 ◼   ► that we don't even know about yet,

00:04:18 ◼   ► now you are kind of forced to make things simpler

00:04:21 ◼   ► and more reliant on like text flow and stuff like that

00:04:24 ◼   ► and less about like these giant baked-in images

00:04:28 ◼   ► and also those are just out of style now,

00:04:29 ◼   ► which has been such a huge benefit to people like us

00:04:34 ◼   ► who don't have or can't afford full-time design help.

00:04:38 ◼   ► It's been a huge boon for us.

00:04:41 ◼   ► - Yeah, but I think of course it probably ends up

00:04:43 ◼   ► with meaning that we become much more reliant on,

00:04:47 ◼   ► I feel like there's a certain,

00:04:49 ◼   ► and I don't really know where I learned these,

00:04:51 ◼   ► and I think you actually have a better handle on these.

00:04:53 ◼   ► Some people ask you, but like,

00:04:54 ◼   ► there's certain, it seems like there's a certain basic set

00:04:57 ◼   ► of like rules about layout,

00:05:00 ◼   ► about how you structure like typography

00:05:04 ◼   ► or the white space of a page

00:05:07 ◼   ► and to make it look right.

00:05:08 ◼   ► And when it isn't, at least at this point now,

00:05:12 ◼   ► I have enough of a sense of it.

00:05:13 ◼   ► I don't necessarily know why it's wrong,

00:05:15 ◼   ► but I know it is wrong.

00:05:17 ◼   ► And I pick that up just sort of as you go.

00:05:19 ◼   ► But once you, it's more important in some ways

00:05:21 ◼   ► because things aren't pixel perfect,

00:05:22 ◼   ► that you just have these basic elements

00:05:25 ◼   ► of good design under your belt.

00:05:27 ◼   ► And this is something I noticed in all of your apps,

00:05:29 ◼   ► as you've gone, it always seems to have

00:05:31 ◼   ► that nice, clean, sharp look.

00:05:34 ◼   ► Where do you think you learned to do that?

00:05:36 ◼   ► Well, I mean, there's these different parts of design, right? So there's the graphical

00:05:42 ◼   ► artistry part of it, and that's things like textures, things like designing rich icons,

00:05:48 ◼   ► stuff like that. That part I have never been good at, and I probably never will be good

00:05:53 ◼   ► at, and I'm okay with that. That part I'm happy to outsource and pay whatever it takes

00:05:59 ◼   ► to get a great app icon made. If the textures ever come back in style, I hope they don't.

00:06:05 ◼   ► they probably eventually will.

00:06:08 ◼   ► And then I'll cross-site bridge when I come to it,

00:06:11 ◼   ► 'cause that will basically drive my costs up substantially.

00:06:14 ◼   ► (laughs)

00:06:15 ◼   ► But--

00:06:16 ◼   ► - It's all right, you can just have retro apps

00:06:17 ◼   ► that are without texture, it'll just be retro,

00:06:20 ◼   ► it'll be fine.

00:06:21 ◼   ► - Yeah, it'll just become an affect rather than,

00:06:23 ◼   ► this is what people do.

00:06:25 ◼   ► But I think, so there's different parts of design,

00:06:29 ◼   ► the graphical stuff I really can't do,

00:06:31 ◼   ► but the rest of it, as you mentioned,

00:06:33 ◼   ► like the rest of what you encounter in most app design, things like layout, basic text

00:06:39 ◼   ► and typography, spacing, I've just kind of slowly developed my own sensibilities for

00:06:47 ◼   ► that over time by starting some of it started in web design, but also just kind of paying

00:06:53 ◼   ► attention and developing a feel for it over time, which is totally unhelpful. I recognize

00:06:59 ◼   ► like, if you're listening and trying to figure, you know, trying to answer the question, like,

00:07:02 ◼   ► how do I become familiar with the basics of design? Like, I don't know. I can't tell you

00:07:06 ◼   ► that. There's probably some decent books about it that are made for this purpose. I'll try to

00:07:12 ◼   ► find them and put them in the show notes if I can. But I just, I haven't gone that path. I've just

00:07:18 ◼   ► kind of slowly developed a sensibility by just like kind of paying attention to designers and

00:07:23 ◼   ► to design, even though I've never really been trained as a designer or considered myself one.

00:07:28 ◼   ► done. And a lot of it is just like, you know it when you see it. When you lay something

00:07:33 ◼   ► out in a way that is visually pleasing, you yourself will notice that this looks good

00:07:40 ◼   ► in most cases, because you are also a person. You are also a user of this app. So you kind

00:07:47 ◼   ► of play with it, following some basic principles. You can kind of play with it and work it out

00:07:52 ◼   ► until it looks really good. But what you said is also correct. People are very forgiving

00:07:56 ◼   ► of this. I mean, God help you if you ever look up screenshots of Instapaper 1.0. To

00:08:03 ◼   ► some degree, in many cases, it doesn't matter as much as people think it does. Design is

00:08:09 ◼   ► kind of like good marketing where it is really nice to have, if your app is going to become

00:08:17 ◼   ► big and successful, you probably need good design. But you can get an app out there and

00:08:25 ◼   ► and you can start building a market for yourself

00:08:27 ◼   ► without having professional quality design,

00:08:29 ◼   ► it is not like a strict requirement for success.

00:08:33 ◼   ► And in many cases, in many markets,

00:08:37 ◼   ► especially the more narrow the market gets,

00:08:39 ◼   ► the more specialized or professional a market gets,

00:08:42 ◼   ► the less design is valued or the less it matters.

00:08:46 ◼   ► And so if you're making an app like,

00:08:48 ◼   ► you know, for somebody to get their job done,

00:08:50 ◼   ► and it basically needs like four buttons and a text field,

00:08:54 ◼   ► then it doesn't really matter to a lot of,

00:08:58 ◼   ► whether that's really pretty or not

00:08:59 ◼   ► is probably not going to affect your success

00:09:01 ◼   ► in that narrow market as much as it would

00:09:05 ◼   ► in a mass consumer photography app, say.

00:09:08 ◼   ► So it really depends on what you're making

00:09:10 ◼   ► and how much this is worth.

00:09:11 ◼   ► But ultimately, good design is something

00:09:13 ◼   ► that if you can do it, you should do it.

00:09:15 ◼   ► And if you can afford it, you should do it

00:09:18 ◼   ► in almost every case.

00:09:19 ◼   ► But that could be very expensive.

00:09:22 ◼   ► I mean, hiring a professional designer could cost

00:09:26 ◼   ► hundreds to thousands of dollars per day of their work,

00:09:30 ◼   ► and it's really, it can be, it adds up so quickly.

00:09:34 ◼   ► Just to get an app icon made,

00:09:37 ◼   ► you can get an okay icon made for a few hundred dollars.

00:09:42 ◼   ► To get a great icon made might cost a few thousand dollars.

00:09:45 ◼   ► I mean, again, this is big money we're talking about

00:09:48 ◼   ► for independent programmers,

00:09:50 ◼   ► because most designers, most of their work

00:09:52 ◼   ► comes from corporate clients.

00:09:54 ◼   ► So you have to build in all these high prices.

00:09:57 ◼   ► You have to account for how much of a pain

00:10:00 ◼   ► corporate clients are to deal with,

00:10:01 ◼   ► how much overhead you're going to have

00:10:03 ◼   ► for every billable hour that you can actually get paid for.

00:10:06 ◼   ► You have to account for all that

00:10:07 ◼   ► and price things accordingly,

00:10:08 ◼   ► whereas when you're an independent hiring designer,

00:10:12 ◼   ► these prices are often out of reach.

00:10:14 ◼   ► So it does help to familiarize yourself

00:10:17 ◼   ► with the basics of design,

00:10:19 ◼   ► or to hire a designer for the stuff that really matters,

00:10:22 ◼   ► like your app icon and maybe like a once over

00:10:26 ◼   ► of your main interface, but not to have somebody

00:10:29 ◼   ► that you're like paying every single day

00:10:30 ◼   ► or every single month ongoing.

00:10:33 ◼   ► So it depends, and it depends a lot

00:10:34 ◼   ► on the people you can find.

00:10:36 ◼   ► If you can find a great designer who will take on your work

00:10:40 ◼   ► for a price you can afford, great, that's awesome.

00:10:43 ◼   ► But I have found that to be very difficult

00:10:45 ◼   ► most of the time myself.

00:10:47 ◼   ► - Yeah, 'cause I think the difficulty there

00:10:48 ◼   ► Because it's the best designers are, if you're not paying them well, then they're

00:10:57 ◼   ► kind of ripping them off.

00:10:59 ◼   ► That's the nature of, if they really are that good, then they should be, in some ways,

00:11:05 ◼   ► they should be well paid for their work, and doing that probably with clients who can do

00:11:11 ◼   ► it.

00:11:13 ◼   ► So you end up with a lot of small independent apps.

00:11:17 ◼   ► The economics just don't tend to work out.

00:11:21 ◼   ► And in some ways, you're probably better off.

00:11:24 ◼   ► Rather than spending that money on that design, it's like training, buying yourself books,

00:11:32 ◼   ► or spending the equivalent amount of time that you would have spent in money just trying

00:11:37 ◼   ► to practice and get better at it yourself.

00:11:40 ◼   ► Because that's certainly a skill that isn't going to go out of use or become useless to

00:11:45 ◼   ► you.

00:11:46 ◼   ► Once you have a stronger sense of design, that's only going to help your programming.

00:11:52 ◼   ► That's never going to ever come back to you or bite you to be like, "Oh, no, now you

00:11:56 ◼   ► know too much about design.

00:11:58 ◼   ► Your apps are getting worse."

00:12:00 ◼   ► It's a good thing to invest in.

00:12:01 ◼   ► If you can afford it, great.

00:12:05 ◼   ► My guess is you're probably then either working for a bigger company or just somehow very

00:12:11 ◼   ► wealthy, I suppose.

00:12:12 ◼   ► Yeah, I mean, you can look at it also as like, can you afford any other kind of staffing

00:12:16 ◼   ► or help?

00:12:17 ◼   ► Like, if you can afford to pay other programmers to be with you to help make bigger and more

00:12:22 ◼   ► complex apps, then the cost of a designer relative to other programmers is very reasonable.

00:12:28 ◼   ► But if the idea of paying another programmer to help you out is completely out of reach

00:12:33 ◼   ► because the economics aren't working out, it's probably also going to be challenging

00:12:36 ◼   ► to pay a designer.

00:12:39 ◼   ► Anyway, in much less expensive news, we are sponsored this week by Hover. Hover is, quite

00:12:45 ◼   ► simply, the best way to buy and manage domain names, and it costs way less than hiring a

00:12:50 ◼   ► full-time programmer or designer. Now, when you have an idea for a project, naming it

00:12:54 ◼   ► can be difficult. Once you finally get that name, you want to be able to quickly and easily

00:12:58 ◼   ► get the domains you need. Hover provides a simple, fast, and hassle-free method of buying

00:13:02 ◼   ► domain names. It is very easy to search for new domains, search for domains that are available,

00:13:07 ◼   ► you enter the phrase you want or some keywords if you don't know an exact name and they will

00:13:10 ◼   ► find available matches for you and show you a list of all the crazy new TLDs that are

00:13:15 ◼   ► available with that name. They have of course you know the nice old ones dot com, dot net

00:13:19 ◼   ► and all that stuff but they also have all the crazy new ones dot plumbing, dot coffee,

00:13:24 ◼   ► dot sexy if you go that way. All these TLDs they have recently lowered their prices on

00:13:28 ◼   ► pretty much all of them. So dot com domains are now just $12.99 a year and all this includes

00:13:34 ◼   ► free whois privacy for all their domains. They believe that you should not have to pay

00:13:38 ◼   ► extra to keep your private information private. And they have fantastic customer support if

00:13:43 ◼   ► you ever need it. Hover offers a no hold, no wait, no transfer telephone support policy.

00:13:48 ◼   ► They are famous for this and there's a good reason why. When you call them, you talk to

00:13:51 ◼   ► an actual human being. There's no robots, no menus, but if you do prefer robotic communication,

00:13:56 ◼   ► They also have great support documents and guides

00:13:58 ◼   ► on their website for getting everything you need

00:13:59 ◼   ► as well as email support if you need that.

00:14:02 ◼   ► And don't forget their Hover valet service,

00:14:04 ◼   ► where if you want, if you have a bunch of domains

00:14:06 ◼   ► somewhere else, or even just one,

00:14:09 ◼   ► any number of domains you have somewhere else,

00:14:10 ◼   ► you wanna transfer them over to Hover,

00:14:12 ◼   ► they will, if you want, do the whole transfer for you.

00:14:15 ◼   ► Because I've never met anybody who said,

00:14:17 ◼   ► "You know what I love doing?

00:14:18 ◼   ► "Domain name registration transfers."

00:14:19 ◼   ► No, not a single person ever wants to do that.

00:14:22 ◼   ► Hover will do it for you if you want.

00:14:23 ◼   ► It's fantastic, there's so much great stuff at Hover.

00:14:26 ◼   ► Check it out today, go to hover.com to try them out,

00:14:28 ◼   ► use code Swift at checkout,

00:14:31 ◼   ► and you will get 10% off your first purchase at hover.com,

00:14:34 ◼   ► and show your support for Under the Radar

00:14:35 ◼   ► and all of Relay FM.

00:14:36 ◼   ► Thank you so much to Hover,

00:14:38 ◼   ► use code Swift to check out for 10% off,

00:14:40 ◼   ► thank you so much for sponsoring this episode.

00:14:43 ◼   ► - All right, so I think the next thing

00:14:44 ◼   ► that we wanted to dive into a little bit

00:14:47 ◼   ► is something that I know, I think,

00:14:50 ◼   ► I've heard you talk a lot about this,

00:14:52 ◼   ► and it's something that I know I've started doing

00:14:53 ◼   ► a lot more in my own apps,

00:14:54 ◼   ► is once you have your design--

00:14:57 ◼   ► and this is especially for the graphical assets in your app,

00:15:00 ◼   ► so button icons or images of any kind--

00:15:06 ◼   ► you can either pre-render that image,

00:15:08 ◼   ► so have it come out of Photoshop or Illustrator

00:15:11 ◼   ► or whatever design tool, Sketch, whatever it is that you're

00:15:14 ◼   ► using, render it out as a PNG, put that PNG--

00:15:17 ◼   ► well, I will put all three of the PNGs,

00:15:18 ◼   ► like the 1x, the 2x, the 3x version of that asset,

00:15:22 ◼   ► add it to your project and bundle it in that way, or you can programmatically generate

00:15:28 ◼   ► it, either as like in the draw rect of a UI view or generating an image that you put in

00:15:34 ◼   ► a UI as you turn into a UI image. And I know I think we've both been on the path towards

00:15:42 ◼   ► less and less static assets and more and more programmatic assets. And so it's probably

00:15:47 ◼   ► something that's worth talking about some of the reasons why we do that.

00:15:51 ◼   ► Oh yeah, I mean like for me, static assets are a liability for future work because anything,

00:15:57 ◼   ► any kind of image, like, you know, suppose I hire a designer to make like toolbar icons

00:16:02 ◼   ► in my app, which I've done before and it's often worth doing. So I have these toolbar

00:16:06 ◼   ► icons and then Apple comes out and says, "Oh, by the way, you know, there's going to be

00:16:10 ◼   ► a new iPad resolution, it's now going to be iPad at 3x." Then you need new versions

00:16:15 ◼   ► to those icons that can be rendered at 3x. You can attempt to do it yourself, but generally

00:16:21 ◼   ► you won't have like a source vector file. You will have like a stack of PNGs that the

00:16:27 ◼   ► designer gave you when you paid them two years ago. And so you can try to make it or resize

00:16:33 ◼   ► it yourself, it'll probably look bad. You probably shouldn't do that. So oftentimes

00:16:37 ◼   ► you have to then go back to the designer and pay for even more of their time for them to

00:16:41 ◼   ► do something that's really very trivial that they probably don't even want to do because

00:16:44 ◼   ► That's pretty uninteresting work. Dig up old files and re-render something out as a different

00:16:49 ◼   ► resolution and everything. So it's this kind of clunky procedure that, if you rely on graphical

00:16:56 ◼   ► assets that are baked into static images, you have all this liability whenever the technology

00:17:02 ◼   ► changes under you. Or if you just want to tweak the design. Like, what if you want to

00:17:05 ◼   ► make all the line widths half a pixel narrower in the next version, in the next design? That

00:17:12 ◼   ► becomes very difficult if you just have a bunch of images and you have to re-render

00:17:16 ◼   ► all those assets out.

00:17:18 ◼   ► On the other hand, if you have all those images and stuff, there's a lot of upsides to that.

00:17:23 ◼   ► Your app, first of all, will load faster because you won't have to be drawing these things

00:17:27 ◼   ► every time.

00:17:30 ◼   ► Certain art styles are only really possible in static images and become pretty impractical

00:17:35 ◼   ► to impossible to recreate with like quartz drawing commands in a draw-rect function.

00:17:42 ◼   ► So there are definitely advantages and disadvantages. Generally speaking, programmatically generated

00:17:48 ◼   ► images make your app bundle very small. This is one of the reasons why Overcast is only

00:17:51 ◼   ► something like 7 megs. It's a very, very small app bundle because I have almost no images

00:17:55 ◼   ► in it. Almost everything in Overcast is generated procedurally. So it makes your app bundle

00:18:00 ◼   ► very small, it makes it very easy to adapt to new devices and new sizes, but static images

00:18:07 ◼   ► almost certainly will load faster. There's also the OS will cache them, any kind of UI

00:18:13 ◼   ► image, image named call, those kind of things that cache, the GPU will cache certain things,

00:18:17 ◼   ► the frameworks will cache certain things. Generally speaking, for speed of operation,

00:18:23 ◼   ► you want static images, but for ease of programmer work,

00:18:28 ◼   ► programmatically generated stuff can be a lot easier.

00:18:32 ◼   ► - And I think the biggest thing too is with programmatic,

00:18:35 ◼   ► there's even like probably just the philosophy of it,

00:18:40 ◼   ► of making sure that, like what you're saying,

00:18:42 ◼   ► the biggest thing that I think you're pointing out is

00:18:44 ◼   ► if your art assets need to be, or are ideally in some format

00:18:51 ◼   ► that you're going to be able to scale and adjust and re-render later, at the very least.

00:18:58 ◼   ► Right.

00:18:59 ◼   ► If you are using a completely, like, if you have a designer, or even if you're in with

00:19:03 ◼   ► yourself, like if you're going to, if you're building things in such a way that you cannot

00:19:09 ◼   ► just easily scale them up and down, like, keeping them, you know, having vector artwork

00:19:13 ◼   ► in Photoshop or Illustrator or Sketch, or doing it in some way like that, that you can

00:19:18 ◼   ► scale up and down, it's a ticking time bomb for at some point you're going to need something

00:19:24 ◼   ► different.

00:19:25 ◼   ► Like, there was a time when we just had one X everywhere, and then there was two X and

00:19:29 ◼   ► one X, and then now there's three X as well, and it's always going to change.

00:19:35 ◼   ► Everything like, one of the few, I don't know if we'll ever get to four X, but something

00:19:41 ◼   ► else is going to happen.

00:19:42 ◼   ► Like, all of a sudden, for a long time I think I had the thought that the iPad was always

00:19:46 ◼   ► going to be 1024x768 in terms of functional size.

00:19:51 ◼   ► And it's like, no, it turns out they're going to—because when they went to the MIDI, they

00:19:53 ◼   ► kept the same resolution, they just smushed it a bit.

00:19:56 ◼   ► And with the Pro, though, it's like, oh no, here's this massive new screen.

00:20:00 ◼   ► And so the most important thing is to be able to, over time, have those assets be dynamic

00:20:09 ◼   ► and to change over time, whether that's rendered in your app, which like you were saying, sometimes

00:20:13 ◼   ► Sometimes that's good, sometimes it's bad, like it's some trade-offs, but whatever form

00:20:17 ◼   ► you're doing it in, it needs to be something that you can very easily, if all of a sudden

00:20:22 ◼   ► it's like, "I need them at a different size," even if it's not a different resolution, even

00:20:25 ◼   ► if it's just like, "You know, I think the alignment on this isn't quite right.

00:20:29 ◼   ► I need to make it a bit smaller."

00:20:31 ◼   ► Being able to re-render that from source rather than taking the image and resizing it, which

00:20:38 ◼   ► is never going to look good.

00:20:40 ◼   ► you need to be able to say, "Let's re-render this from the beginning in the exact dimensions

00:20:45 ◼   ► that I want it to be." And if you can do that, then your workflow is good. If you can't,

00:20:52 ◼   ► then you probably need to fix it, because you're just waiting for it at some point down

00:20:56 ◼   ► the road to come back and bite you.

00:20:57 ◼   ► Yeah, and even there's a hybrid approach you can do here, which I've employed for all my

00:21:03 ◼   ► watch assets. In some contexts in the OS or in the frameworks, in some contexts you can't

00:21:09 ◼   ► do a programmatic rendering of something. You have to have an image in the app bundle

00:21:14 ◼   ► with a certain name. So things like your launch icons, like your app icon just can't be programmatic

00:21:20 ◼   ► in iOS today. Other things like in WatchKit, in WatchOS 2 I would imagine it's more flexible,

00:21:27 ◼   ► but in WatchKit, WatchKit 1, many things had to be static images. There were certain things

00:21:34 ◼   ► that--

00:21:35 ◼   ► >>Erik: Everything had to be static images.

00:21:36 ◼   ► - Everything, right.

00:21:38 ◼   ► And so with Overcast, what I did,

00:21:40 ◼   ► I have my themed buttons that are in the app,

00:21:44 ◼   ► and those buttons are all generated by just calls

00:21:47 ◼   ► to one of my appearance manager functions

00:21:50 ◼   ► in my custom appearance class,

00:21:52 ◼   ► and you just specify what size canvas

00:21:56 ◼   ► to render this icon into,

00:21:58 ◼   ► and the line width and the color,

00:22:01 ◼   ► and some of them will display things,

00:22:03 ◼   ► like the seek buttons that have the number of seconds

00:22:06 ◼   ► inside of them that will be seeked, sought, whatever it is.

00:22:09 ◼   ► Like that's all customizable by the user

00:22:13 ◼   ► and so like those buttons just,

00:22:14 ◼   ► you know like there's a function that just says

00:22:16 ◼   ► render seek button at this size with this color,

00:22:19 ◼   ► this line width and with this number in the middle.

00:22:22 ◼   ► And the function has a text drawing call

00:22:23 ◼   ► and it went in the middle of all these shapes

00:22:25 ◼   ► and by the way Paint Code is a great app

00:22:27 ◼   ► for generating the code for any kind of non-trivial shape.

00:22:31 ◼   ► Recommend that.

00:22:32 ◼   ► But then, you know, and then it just wraps it

00:22:34 ◼   ► in like an image context where it just

00:22:35 ◼   ► does a transform that scales it.

00:22:37 ◼   ► So I can render this image that the source is in a 100 by 100

00:22:42 ◼   ► grid or whatever I set paint code to,

00:22:44 ◼   ► and then just scales that with CG code to whatever output

00:22:49 ◼   ► size you wanted it at.

00:22:51 ◼   ► And so when you have a context like WatchKit

00:22:54 ◼   ► where you're required to have static images,

00:22:57 ◼   ► I have a special build mode that I can set the app in where it

00:23:00 ◼   ► just generates those for me in every configuration

00:23:03 ◼   ► that it might ever need with my current code.

00:23:06 ◼   ► So it literally just calls that function

00:23:08 ◼   ► and renders out static assets

00:23:10 ◼   ► that I can then include in the app bundle.

00:23:13 ◼   ► So that kind of hybrid approach, I think,

00:23:15 ◼   ► has a lot of advantages.

00:23:16 ◼   ► It is more complex.

00:23:17 ◼   ► It will not save any space in your app bundle,

00:23:20 ◼   ► but it will allow you to use these images

00:23:23 ◼   ► in calls like ImageNamed and in context

00:23:27 ◼   ► where you need static images,

00:23:28 ◼   ► and it preserves all the load time optimizations,

00:23:32 ◼   ► the caching optimization on the platform.

00:23:34 ◼   ► So the hybrid approach I think is worth considering.

00:23:37 ◼   ► But ultimately, I love doing things programmatically

00:23:40 ◼   ► because I think you're right,

00:23:41 ◼   ► it feels more semantically right.

00:23:44 ◼   ► If I have a graphic that is just like,

00:23:47 ◼   ► a circle with an arrow going into it,

00:23:50 ◼   ► why does it need to be a bitmap file somewhere?

00:23:52 ◼   ► Why can't that just be represented as vectors?

00:23:55 ◼   ► It seems as a programmer,

00:23:57 ◼   ► and I recognize this isn't how design works,

00:23:59 ◼   ► but it seems as a programmer,

00:24:01 ◼   ► that is the most correct way to represent that, is by vectors. And this isn't true

00:24:06 ◼   ► for everything, of course, but so much of what we do today and the current styles of

00:24:11 ◼   ► interfaces, that is true for. And it just feels right. It feels right to represent it

00:24:16 ◼   ► as a function. And even in many ways, like I mentioned in my scaling technique earlier

00:24:21 ◼   ► with these function calls, a lot of times something really simple like drawing an X,

00:24:27 ◼   ► an icon that's just like a big X or a plus sign. I would like I render that in a 1.0

00:24:33 ◼   ► scale graph like it's you know one by one and it's like all right, draw a line from

00:24:37 ◼   ► 0.5 to 0.5 you know like and then just render that to any size like that that is actually

00:24:42 ◼   ► easier and simpler to write and to conceptualize than having 16 different PNG files that have

00:24:50 ◼   ► different thicknesses and everything and sometimes you need the dynamism you know if you offer

00:24:55 ◼   ► for things like if the icon has to be rendered

00:24:59 ◼   ► at different colors, different fonts

00:25:01 ◼   ► for any kind of embedded text, different line thicknesses,

00:25:04 ◼   ► or if it's something that's being reflected in the UI

00:25:07 ◼   ► that is some kind of dynamic element,

00:25:09 ◼   ► like if you have some kind of UI widget

00:25:12 ◼   ► where you're showing progress.

00:25:14 ◼   ► Do you actually wanna render out a progress bar

00:25:17 ◼   ► at 100 different widths for all the different percentages,

00:25:21 ◼   ► or do you, which I actually did for my watch app,

00:25:24 ◼   ► (laughs)

00:25:25 ◼   ► Or do you want to just have one that you can call a function

00:25:30 ◼   ► and you can generate it at whatever value you need?

00:25:33 ◼   ► So in a different, there's obviously different needs here

00:25:35 ◼   ► in different situations.

00:25:36 ◼   ► Usually I prefer to go programmatic wherever possible

00:25:40 ◼   ► for my image generation because usually the downsides

00:25:44 ◼   ► are either non-existent or very, very small

00:25:46 ◼   ► and the upsides are quite big.

00:25:48 ◼   ► - And I think too, one thing that I like about,

00:25:51 ◼   ► more I've gotten into doing programmatic rendering is it keeps my, it matches well with my ability.

00:26:00 ◼   ► So if I open Photoshop, which I don't really have that much business getting into, but

00:26:05 ◼   ► I can do a lot of stuff there that probably ultimately doesn't look very good. Like I

00:26:12 ◼   ► can overdesign and try and be clever than I actually am. Whereas when I'm writing it,

00:26:19 ◼   ► even in paint code or just like in core graphics calls like it limits and constrains me in

00:26:25 ◼   ► a but I find to be a positive way that like I understand core graphics in a way that I

00:26:30 ◼   ► don't understand Photoshop. And so it's constructive for me to like, okay, I can only do like 10

00:26:38 ◼   ► drawing operations or whatever it is like you can do in core graphics like functionally,

00:26:41 ◼   ► it's like you can stroke a path, you can fill a shape, like there's a few basic things.

00:26:46 ◼   ► And so if I make my art assets align with that, I'm probably not gonna reach beyond

00:26:52 ◼   ► what I'm actually capable of doing.

00:26:54 ◼   ► Or as if I go into Photoshop and like, "Oh, I can do layer styles.

00:26:57 ◼   ► Ooh, that's pretty.

00:26:58 ◼   ► Ooh, let me go into this here.

00:26:59 ◼   ► Oh, I can blur this over here."

00:27:00 ◼   ► Like doing stuff that I have no business doing.

00:27:04 ◼   ► And so at least if I keep it as programmatic and simple, then I'm not exceeding that.

00:27:09 ◼   ► And I understand it too.

00:27:11 ◼   ► Like that's maybe another part of it.

00:27:12 ◼   ► Like we're saying from the beginning of like,

00:27:14 ◼   ► if you're doing this all yourself,

00:27:16 ◼   ► like it's one of the dangerous things too in some ways

00:27:19 ◼   ► is if you're an external designer

00:27:23 ◼   ► is making something for you,

00:27:25 ◼   ► that you have no way then of recreating.

00:27:27 ◼   ► - Or adjusting.

00:27:28 ◼   ► - Or adjusting or tweaking.

00:27:29 ◼   ► Like I don't understand it, then I can't change it really.

00:27:34 ◼   ► And that's just, has definitely come back

00:27:37 ◼   ► to bite me a few times where I just need

00:27:40 ◼   ► change something slightly and I can't because it's a baked PNG and so it's like I just have

00:27:45 ◼   ► to make do or I need to try and get back on my designer schedule to make a really minor

00:27:50 ◼   ► adjustment for them and work out the contracting for that.

00:27:53 ◼   ► If it's nice and easy and understandable, it's probably going to be better down the

00:27:58 ◼   ► road and I think so for me, this is where I'm heading.

00:28:01 ◼   ► I do very few static images anymore.

00:28:05 ◼   ► I tend to do a lot more programmatic things,

00:28:08 ◼   ► or at least storing my assets in a form

00:28:11 ◼   ► that I can easily re-render and regenerate.

00:28:14 ◼   ► And I can look at it and I'm like, yep,

00:28:16 ◼   ► I understand what that's doing.

00:28:17 ◼   ► I see the lines it's drawing, the shapes it's filling,

00:28:19 ◼   ► and that makes sense to me.

00:28:21 ◼   ► - Yeah, and the result of that usually isn't as good

00:28:26 ◼   ► as what you can get with a pro designer,

00:28:27 ◼   ► but it's one of those things where you can get

00:28:32 ◼   ► two thirds of the way there for a lot less cost

00:28:36 ◼   ► and with a lot of other benefits.

00:28:38 ◼   ► So that isn't always worth it, sometimes it is.

00:28:41 ◼   ► And sometimes you don't have a choice.

00:28:43 ◼   ► So it's nice to be able to do the minimum required

00:28:48 ◼   ► with the resources you have rather than being forced

00:28:52 ◼   ► to go and spend a lot of money you don't have.

00:28:54 ◼   ► So it's good to have this option.

00:28:57 ◼   ► - Exactly.

00:28:58 ◼   ► - All right, I think that wraps it up for this week.

00:29:00 ◼   ► Thanks a lot to our sponsor this week,

00:29:01 ◼   ► Thanks a lot for all our listeners.

00:29:03 ◼   ► Please recommend us to friends and rate us on Overcast

00:29:05 ◼   ► and iTunes and everything and we will see you next week.

00:29:09 ◼   ► - Bye.

00:29:10 ◼   ► [