489: Landing Web Clients, Native App vs Web App, and Dave Wants LinkedIn Friends

Download MP3

What's needed to start a tech business in 2021? Is VS Code on the web usable? Why would you choose a native app over a web app in 2021? And be sure to follow Dave on LinkedIn.



Chris Coyier and Dave Rupert in silly sunglasses and a sign that says Shawp Tawlkk Shough DOT COM

Chris Coyier and Dave Rupert

This episode is with just Chris & Dave, ShopTalk Show's hosts. Chris is the co-founder of CodePen and creator of CSS-Tricks, and Dave is lead developer at Paravel.

Time Jump Links

  • 01:17 The new tech business checklist
  • 13:13 Troubleshooting solo
  • 16:44 Sponsor: VideoPress
  • 19:04 VS Code on web
  • 28:34 Why make a native app over a website in 2021?
  • 37:04 How long can you stay logged in on the web?
  • 39:59 Sponsor: CodePen
  • 41:07 Follow Dave on LinkedIn so he can win
  • 45:01 How has Paravel been successful landing big clients?


[Banjo music]

MANTRA: Just Build Websites!

Dave Rupert: Hey there, Shop-o-maniacs. You're listening to another hard-stop edition of the ShopTalk Show.

Chris Coyier: [Laughter]

Dave: I'm Dave--in the shed--Rupert and with me is Chris--in the booth--Coyier. Hey, Chris. How's it going?

Chris: Oh, absolutely perfectly fine. I love that phrase, hard-stop edition. It's kind of true, you know, because we're both busy people. We're not professional podcasters. I mean we are because we're going on 500 episodes of the show--

Dave: Getting close.

Chris: And it's a business, we make money, and we are always evolving it, so it's a business to itself. But the reason we're able to participate in this niche of podcasting is because we're busy developers ourselves.

Dave: Yeah. No, I think about that a lot. I am in a weird career transition a little bit, just like responsibilities-wise.

Chris: Mm-hmm.

Dave: It's just more of the same but a little more serious. You know? Higher stakes, I guess. I don't know.

Chris: But you're living it, right? It's not like we're sitting around, like, "You know what would make a good podcast?" You're like, "No. You know what I need to do to manage my team better and produce some amazing product? It's a lot." [Laughter]

Dave: Yeah. No, you're reading my blog drafts folder right now.

Chris: [Laughter]


Dave: I wrote down this thing. Well, let me close the postmortem because I've had a whole week-long outage that's just been driving me absolutely bananas. But I've been going through--

Right, so you want to start a company. Right? you've started a company. People start companies all the time, right? Every day.

Chris: They do. Every day.

Dave: You call Delaware, and you say, "Give me a company, and they--"

Chris: A list of technology companies? Yeah. You'll find CodePen at the bottom of that stack somewhere.

Dave: Yeah, and they'll give you a company, Delaware. They love to give companies away.

But I was thinking about all the systems you need, right? You need a legal system, some kind of legal process. That's for incorporation documents, privacy policies, terms of service, contracts, terms of use, patents, trademarks.

Chris: Okay, so you can get a bank account and whatever. Yeah.

Dave: Yeah, if you get sued, "Oh, no! What do I do?" You need a corporate email system or a Google Apps--

Chris: My hard-stop edition is to talk to a lawyer, so I hear you. I hear you.

Dave: So, you need a corporate email system or apps, Google Apps or Office 365 or something to manage email. Right?

Chris: Yep.

Dave: And users in and out of the system. You need a user authentication system for your app. That's probably a third-party service of some kind. You can make your own, but if you're doing Auth0 or Okta or single sign-on - something.

Chris: These days, who's got time for that?

Dave: You need a user emailing system, something to send emails to somebody, right?

Chris: Mm-hmm. Yep.

Dave: Like MailChimp.

Chris: Ideally, with some observability, too, so it's not just some secret API. PHP can send an email, but you should probably not do that.

Dave: Well, and Stan can buy an email list off the dark Web and email people from his Outlook, but that's not what you want to do. You want to do it professionally, right?

Privacy controls, thanks to GDPR, so you have to accept.

Chris: This list is for any application ever, right?

Dave: Any app. This is getting off the ground, right?

You need a code repository, version control system (they're kind of tied together), GitHub, GitLab, BitBucket. You need a hosting--

Chris: Yeah, and some unspoken culture around it, too, of course, that there's no documentation for.

Dave: Yeah.

Chris: Just go ahead--

Dave: No. It disappears. It's just like, "Surprise! We use this." You know?

You need a hosting system, right?

Chris: Yep.

Dave: Like AWS, Netlify -- wherever your database lives -- Heroku. These are all ones I've used in the past.

Deployment system, GitHub actions, Travis, you know, something that takes the code from the repository and puts it on the server. It could be Jim's FTP client.

Chris: Mm-hmm.

Dave: Then you need a security and privacy process. If somebody comes to you (thanks to GDPR) -- if somebody comes to you with a data profile request, "I want you to give me all the data you have collected on me--"

Chris: Yeah.

Dave: You have to be like, "Yes, we can provide that." [Laughter] You know?

Chris: Yeah. Yeah. Yeah. Yeah.

Dave: It's like, "I don't know. Uh, I'll just go to your user profile."

Chris: It's a little liberal.

Dave: Yeah.

Chris: You can kind of do an SQL dump and usually that tends to work, but it doesn't have to be pretty is the point. But yeah.

Dave: Yeah, but you have to have this model in place, right, or notification of breaches, right? You update your privacy policy. You have to email everybody in the app. You have to figure out these things. Even permissions, like, "Can this user do this operation?"


Chris: Oh, like a literal permission system? Oh, Dave. Let me be the first to tell you [laughter] that that's a very good idea.

Dave: Yeah.

Chris: And that you can live without it for a long time and you'll regret it. That's all I'll have to say about that.

Dave: See. Even basic, like, "Can so-and-so delete everybody?" Nope. [Laughter] That command is restricted to a few people.

Then just recently I had a week and a half outage, man. I signed up for Century because I just was like, "I have to know what's going on. Something is wrong, and none of my bells, none of my whistles are going off. I don't know what's wrong." I just put Century in here, and then I found out the problem. There was a literal--

Chris: Is it a production only, like your dev spins up just fine?

Dave: Well, no. [Laughter]

Chris: Okay.

Dave: No. That was part of the issue. Dev was not coming up, and it was sort of a long -- but that's sort of like into, you need these processes. Like, how do you develop? You need these manual culture reinforcers, too. It's a lot of work to have a company, a functioning company. That's the whole point I was trying to make.

Chris: Yeah. It's a lot. The checklist is pretty thick, and you didn't even get into what makes a company unique or valuable or interesting.

Dave: I have not even talked about what lines of code you have or the customers you have or how you get customers. I have a whole other list of ten more things. This is like a proto-blog here, mouth blogging. But payment system, that's optional but probable.

Chris: Right.

Dave: That's my whole next section: optional but probable. A payment system, project management system, content management system, credential management (like 1Password or Keybase).

Chris: Yeah.

Dave: However you share passwords locally or with your team. A design system. Some kind of A/B testing framework. Some sort of user research process that you have to invent. Social media management process, like how are you going to do that.

Chris: Hmm.

Dave: All these stuff you need, man. This is so much.

Chris: That's why -- [loud exhale]. I kind of subscribe to the approach of "don't screw around with it too much."

Dave: Sure.

Chris: Pick industry leader stuff every single time unless you have a really good reason not to. We're talking Heroku, GitHub, Notion, MailChimp.

Dave: Mm-hmm.

Chris: Pick the big player. I hate to say that because little startups should be able to win your trust, too. But they will. They'll find a way. They'll find their customers. They'll become the player that they need to be - in a way.

But I think of all the things that you mentioned, there are good answers to those questions. They're hard. You have to think of them. It sucks to screw up, but the Web has been around long enough that there are answers to these things that feel okay.

Dave: Yeah.

Chris: In my opinion anyway.

Dave: No. No. But it's funny. Any company that starts has to assemble all these--

Chris: They do.

Dave: I just named 20 different services - or whatever - like 20 different checkboxes.

Chris: You don't have to do them on day one, either.

Dave: Yeah.

Chris: You piece them together over the first couple of months that the company exists, I think. That's what the founders should be doing, in a way.

Dave: Yeah. You piece these all together, but you still have to build the whole idea of the thing.

Chris: Yeah.

Dave: You know?

Chris: Right. But that's the hard part and it should be the hard part.

Dave: That should be the hard part, but you have to do all this other stuff, too, like integrating single sign-on isn't fun.

Chris: Nope.

Dave: It doesn't help my product other than the fact that people can use it.


Chris: Right. I'd like to tell you that it's outsourceable, but I feel like that might be a sore spot for you at the moment. Tell me.

Dave: Wah!

Chris: [Laughter]

Dave: No, and I'm very curious because we built a whole auth system, and the auth system is fine. It's working, but it's like a local authentication strategy. But then if somebody is like, "Yeah, that's cool, except it has to work on my Office 365 Enterprise account."

Chris: Yeah, well--

Dave: You're like, "Darn!" [Laughter]

Chris: It's early, though. You can just say no. That's a possibility, too.

Dave: Yeah, I guess so, and then everyone gets an address or whatever.

Chris: You never want to just be like, [snarly voice] "No." You say, "Oh, that's a great idea. I'd love to do that at some point. At the moment, I can't prioritize it or give you a timeline, but it matters to our team. I really appreciate you telling us what the needs of your team are because it matters to what we do."

Dave: Yeah. It's like you've got that. You don't want to invent hurdles, but yeah. You can build stuff on the fly. You don't need all of it upfront. But I think for any mature product, you need all these things in place.

Chris: It is interesting. Is that a draft blog post?

Dave: Draft blog post.

Chris: The new business checklist - or whatever.

Dave: Maybe, yeah.

Chris: Yeah.

Dave: Just like ten systems you need in place to start a tech company - or whatever.

Chris: It's true if you do pick those top industry players. I said that maybe with a little more bravado than I should have because they tend to be the ones that cost the most money, too. If you do have to email 3,000 people on MailChimp and you do need private repositories with a 10-person team, and you do need all these things, that's money, man. You might be kicking out thousands of dollars a month for all these services for a product that--

Dave: Just to get off--

Chris: Yeah, just to get off the ground -- for a product that you aren't even 100% sure is a real deal thing.


Dave: It's just wild. I don't know. As I was fixing a gigantic outage, I just was trying to figure out, "Why isn't this working?" It was like a perfect storm of, like, there was a bug in the code. Then I signed up for Century. Found the bug. Then I deployed it. Guess what. The GitHub action wasn't working. It gave me a green checkmark, but it wasn't working because there was--

Chris: Oh, so it completed. It just didn't do what it was supposed to do.

Dave: There was a get problem on the target server, and I didn't find that out until late last night. I just was like, "Man! This has just been a--"

Chris: Can you tell? You probably can. Can you configure a GitHub action to "if on fail, then tell Century, please"?

Dave: You know it was weird. It's the get SSH or SSH action or something like that.

Chris: Mm-hmm.

Dave: But it goes in with the GitHub workspace authenticate, like scope, right? The workspace's scope. Then it triggers get pull. It says get pull - get pull.

Chris: Oh, that's how you're doing deployment, like reverse? You're not pushing files up. You're pulling them from the server.

Dave: Yeah. I guess, in theory, you could sync to it. It's all GitHub, so it could just pull. You know?

Chris: Yeah, I get it. I get it.

Dave: I didn't set it up, so I'm wondering if there's another way.

Chris: I rarely see that because it means then your production servers have get on them, which is just slightly weird.

Dave: Right. Right. We're still in the development part of it.

Chris: Yeah, I get it.

Dave: Yeah. You'd think you'd just want to ferry files over. Right? Copy, basically.

Chris: Hmm. I don't know, but it wasn't erroring properly, I get you.

Dave: Yeah. you can type get pull and get pull is like, "Great. I worked." I didn't get anything, but yeah, it worked.


Dave: Or at least the CI wasn't like, "Oh, man. Get pull is really mad here, so it just totally failed." But I figured it out. The deployments are back working. Everything works.

Chris: Yeah. Did that fix the app?

Dave: Well, the fixes I made plus everything.

Chris: Yeah.

Dave: We're back in action finally.

Chris: Ah... Congratulations. That's got to feel good.

Dave: Well, but I'm just like, "I'm going to have 10,000 milkshakes. I deserve it."


Dave: Go get a big dog.

Chris: Yeah. Did you feel alone, too? That's what I worry about sometimes with people who are in a position like you're in. There's nobody to ask. There's nobody to commiserate with. The buck has to stop with you. If it doesn't, we're dead. I have the weight of the entire world on my shoulders.

Dave: It's a lot. This can be therapy here.


Dave: It is, and I phoned a few friends because I just was like, "Hey, can you just sit here with me while I try to figure this out?" You know?

Chris: Mm-hmm.

Dave: Then we got it. Getting it up working locally was a bit of a deal just because I couldn't still connect to the production mongo and stuff like that. But anyway, I phoned a few friends and think I got it.

Chris: Mm-hmm.

Dave: Yeah. When you're by yourself, it's just like, "Man. That's a bummer." [Laughter] Then when you're also by yourself, you're kind of sitting there, like, "Man, there's an infinite amount of work here. I'll just be logging on every day to code." I don't wake up a single day, Chris, and say, "Man, I just don't have anything to do."


Dave: That's not going to be my life for the next 20 years.

Chris: Yeah. And it can be tired-making, you know? You have to either find a way to come to terms with that or find a way to not have that be the case anymore. That's tough.


Dave: Well, and it's like, I just read The Manager's Path, which is pretty good book.

Chris: Mm-hmm.

Dave: I think we talked about it here. There are different hierarchies of management or ownership of a company and stuff like that. The more technical route is you're concerned with all these 20 systems in place and are they working and functioning, are you leaders of technology, and stuff like that? CTO sort of stuff, you know.

Chris: Mm-hmm.

Dave: Maybe that's a separate job than actual code committer, but when you're at a small, bootstrap-y sort of situation, you are committing code, and so you have to kind of do both.

Chris: Yeah. You're saying maybe this changes when the company turns to 20 people. Then it changes again when it changes to 50. Then it changes again when it changes to 100 and those roles get kind of split out and more defined. Whereas, at three people, you have all the hats.

Dave: I have to do all the hats and write all the codes. But maybe at 20 people - or whatever - I can start narrowing my focus on one big job - or something - three big jobs.

Chris: Right, but you won't realize that you won't be any less stressed. [Laughter]

Dave: Oh, yeah. Well, yeah, because now it's depth versus breadth, I think, is sort of the thing. You know?

Chris: Mm-hmm.

Dave: That's what I've been thinking about a lot, too, is you can have broad knowledge of a bunch of subjects (breadth) or you can kind of pursue depth, like in-depth knowledge on one thing (or ten things).

Chris: Mm-hmm. So, sorry, Dave. Hopefully, you'll get through it.

Dave: Yeah. Literally, as we're recording this, I am 9000% more chill because I have solved my problem. [Laughter] It was a rough couple of weeks, and it's just that thing. You're like, "Well, it didn't work today. I guess I'll log in tomorrow and figure it out." [Laughter] I'll try to get there.

Chris: Yep. Let's do a sponsor really quick. Does that sound good?

Dave: Hit it.


[Banjo music starts]

Chris: This episode of ShopTalk Show is brought to you in part by VideoPress for WordPress. It's part of the Jetpack umbrella, Jetpack being this suite of plugins that help your self-hosted WordPress site have all kinds of superpowers like security and performance and extra features and all that.

VideoPress fits in there just perfectly because it makes video on WordPress way better. I'm using it and loving it.

You don't need a plugin to do video on WordPress. I can just have a movie on my desktop and be blog-blog-blogging a blog post. Drag that movie on there. It's going to upload that video to my media library. But the ultimate output in WordPress is just going to be an HTML video tag, which is fine. It's not like it's broken.

It's just that, compared to how great WordPress is at outputting images and all kinds of performance formats, this basically does nothing. Then your own Web server is responsible for the bandwidth and the responsibility of serving large image files. The HTML5 player isn't that great. It's not exactly CDN-backed. The images aren't optimized. They're not necessarily served in the best possible format. It's just not as great.

Whereas VideoPress, you install it. You only pay for it by itself (if you want it) or it comes as a part of Jetpack complete. You flip a switch and now it's on.

Your workflow does not change. It's not like, "Now go over to and upload the video," like you would have to on YouTube. It's the same exact workflow. You drag the video file onto the WordPress block editor and away it goes.

It still goes into your media library, but it gets uploaded to the VideoPress cloud as well. Now, you get a better video player, more features, picture-in-picture and speed adjustments and all that stuff that you don't get from the native tag. Then it's cloud-hosted, so it's way faster. Your server isn't responsible for the speed of it, so your server isn't buckling under the weight of serving video, which it's not designed to do. The video is optimized. It's served in all these fancy, adaptive bit rate ways for mobile and all that stuff.

Everything is better about video, and you had to learn and do very little. You just pay for VideoPress and flip a switch. That's it. Thanks for the support. That's my spiel. Bye-bye.

[Banjo music stops]


Dave: Hey. Okay. Well, sorry. I've just been complaining this whole episode.


Dave: Chris, what's going on, on your end there?

Chris: No! Not at all. Not at all. Not at all.

Dave: Yeah.

Chris: That's the way the world works. I'm trying to think of some interesting things going on.

I outputted my VS Code the other day. It was the November update - or something. There's always good stuff. It's an interesting project to follow because so many of us use it.

Dave: Mm-hmm.

Chris: We just can't wait to see what they do next. There was some stuff, like, "We're going to have an October where all we do is close bugs." They had a big chart in there that showed they closed thousands of bugs, or something. Sometimes, you've got to do that, the snowy winter of closing bugs.

Dave: Yeah.

Chris: Even the biggest projects need that kind of focus. But then they said, "Well, but we also launched that Did you see that? It's literally just instantly you go to that website, and it's just a copy of VS Code, which is an interesting choice when you make the product the homepage.

Dave: Mm-hmm.

Chris: I always think that's an interesting thing there.

Dave: Yeah. Yeah. No login. I didn't log in.

Chris: No, nothing. It looked cool. And it said in their notes, "Hey, a lot of the teams were working on this. So, if they didn't close as many bugs, well, they'll do that in November." Yadda-yadda. It was just interesting insight into their team functionality.

Looks pretty neat, though. The first thing I did was Ctrl Tilde - or whatever - because I like to see how are you doing a terminal then?

Dave: [Laughter]

Chris: You open it up and it says, "No. No terminal. Sorry."

Dave: No terminal.

Chris: No.

Dave: It's not quite--

Chris: But you can -- but you do open (from your computer folder)--

Dave: Mm-hmm.

Chris: So, that's a file input, I guess.

Dave: Oh, okay.

Chris: You know? That's cool. The point of this is literally like it works the same way as it would on your computer, I guess, which is probably slower. Right? It has to be slower, doesn't it?

Dave: Well, no because it's all cached and loaded on your system.

Chris: Yeah, but if you execute a 'find in project,' are you telling my computer (Mac OSX) to execute that search or are you uploading every single file of my entire project, executing that search on a server and then returning it?

Dave: Maybe it's an LS command or something. I don't know. Maybe that's all the file API stuff, like an origin trial kind of deal. Like it just knows.

Chris: Yeah, right, that it is your whole machine and it can communicate with the whole system in a way that's fast. Yeah.

Dave: Yeah.

Chris: It does appear to be smoking fast. Not particularly slower. If anything, maybe a little faster than my other VS Code.

Dave: [Laughter] A little lighter, less plugins going on.

Chris: But what does this mean, though? It means you could certainly open it on your iPad, right? Or will it say, "Meh. Not supported"?

Dave: Well, yeah, there may be things it doesn't do, or it's only remote only because it doesn't have--


Chris: Right. I could have at least fricken' read the blog post. My God. I'm the worst podcaster. I just opened it up and thought, "Cool!" You know? Just like all the blog posts about Photoshop in the browser. They were all just like, "Look. This is a thing."

Even the post on, which is just hopping with great Web development blog posts, was just kind of like, "We worked with some people and we pulled it off. Cool." It really wasn't like -- it didn't get into, like, "Yeah, but can I use it? What is it like to use it? Is it fast? Is it slow? Do I need creative cloud subscription? Is it for real? Should I trust it for a real project?" It didn't really--

The press coverage didn't seem to ask the meaty questions, so I kind of held off on blogging about it until I can give it a try. I feel kind of the same here, like, what's the real deal here? Is this usable? Who is it for?

Dave: Well, yeah. I guess that's the question, too. Who is it for?

One thing I noticed, Microsoft has a brand new laptop, like a $200 laptop for kids. It's kind of like a Chromebook-y competitor.

Chris: Hmm.

Dave: It's called Windows Cloud, I think - or something like that. But it's a $269 laptop. I was watching a video of it. My son was like, "I want that." You know? It has Minecraft Education Edition and stuff like that, so very geared towards schools. It's something to think about - maybe. I don't know. Maybe the Web is winning against native.

Chris: That's what you see when you see this? Certainly, this app is a big part of the toolchain. Obviously, I'm interested because it's a code editor in the browser and I happen to be in that market.

Dave: Mm-hmm.

Chris: It's not as shocking to me because it's like, you've seen CodeSandbox, right? Have you seen StackBlitz, those things? Those are also VS Code in the browser.

Dave: Mm-hmm.

Chris: Only they actually run your code and there is a terminal. They have build processes and everything. To me, those are way ahead of this, but this is from Microsoft.

Dave: Right. Right.

Chris: So, it's different, right? Those were like, "Oh, we took the open-source project and we managed to shoehorn it to work with our thing," and that's super cool. Yeah. It's a little limiting.

Then, just to finish the thought, there's also get pod. Have you seen that? Also, fricken' VS Code in the browser - but with a little bit of superpower, like there is a terminal.

Dave: Okay. Okay.

Chris: If you're like, "Oh, VS Code is cool, but there's no terminal. How do I run a preview, for example?" What's the point of editing code if you can't see what you're doing? That's that like my life's central thesis, so I'm going to ask that question.

Dave: Mm-hmm. [Laughter] No.

Chris: Get pod handles it in a cool way, and then there's, like, before VS Code launched, just a few weeks, remember, there's that thing where it'd go to a GitHub repo and press the period key. It also opens--

Dave: GitHub, yeah, it opens your repo.

Chris: VS Code and thing, but it was preloaded with the repo. Then there's a little bit more to it because you can make changes and save it and commit it back to the GitHub repo and stuff. This VS Code in the browser stuff has a lot of angles to it.


Dave: Mm-hmm. Mm-hmm. Well, yeah. I think it's cool. I think it's also maybe like a tool to sell more services, too. I imagine this all works better when you have GitHub actions building a CI because it could run that as your terminal. You know what I mean?

Chris: Mm-hmm. Mm-hmm.

Dave: Something like that, and that's where your feedback comes from. That's where your tests run and all your code. I bet there's a better -- I think it could be. Maybe that's what makes it better is sort of like integrated into the dev environment.

Chris: Yeah. I'm curious--

Dave: This Photoshop thing is really wild because Photoshop was like, "We're going Flash big time," because they bought Flash or owned Flash. Then they built everything in Flash. Then it's like Flash isn't working anymore, so then they kind of did a Java thing. Now they're doing Web components and WASM and stuff for all the actions. It's starting to work, and it's going to show up in the browser. That stuff is really cool to me. I think it's kind of incredible that they are investing that way for the future.

Chris: It is, and I did spin it up. It does work. It's fricken' Photoshop in the browser, so the news that just says it's Photoshop in the browser [laughter] turns out was kind of the accurate way to say that.

Dave: But you've got to think, too, one of their bigger competitors is Figma, which is Photoshop in the browser, kind of. A design tool in the browser.

Chris: Yeah, which they're clearly way ahead, in a way, as far as user research and figuring out how people use this and onboarding teams - yadda-yadda.

Dave: Yeah. Yeah and so Figma is ahead or Figma is a competitor. I think about Notion. That's a Web app. Guess what. That's a Web app. Discord - Web app. Slack - Web app. VS Code - Web app. Everything I use, Chris, is a Web app. [Laughter]

Chris: Yeah.

Dave: It's all working. I mean you and I, right now, we're talking over Riverside FM.

Chris: Yep.

Dave: Not a sponsor, but they could be for a good price. But no. [Laughter] Riverside FM.

I remember when we started out this show. There are probably 200 incidents of us saying, "I don't know if I feel comfortable recording in the browser, a podcast," because we have to record locally.

Chris: Oh, it took you a long time to agree to that. Yeah.

Dave: Guess what we're doing. We do this. We do our videos.

Chris: Mm-hmm.

Dave: I do Aside Quest in the browser. We're doing this in the browser. We are online studios now. [Laughter] It's just kind of incredible. I don't know.


Chris: It is! And there's so much momentum that way. And it seems like -- and I'm so glad, right? That's where more of my skillset is. Thank God, I made some right choices in life and there's going to be money to be made here. It's awesome. Yay!

Then, you know, you see a little momentum the other way. It's easy to get bummed out the exact opposite direction.

Ethan had a post about the app banners. Every fricken' mobile website there is, it's trying to convince you to download the native app instead and how horrible the mobile Web is. That's why amp exists. There are popups galore and trackers and janky JavaScript. Ah, the Web sucks.

It's easy to get bummed out the other direction, I find. But I have a little bit of a checklist we could go through. I'd love to get your quick, ten-second thing on this.

Dave: Hot take.

Chris: This is the hot take, which is why would you make a native app over a website? What is the actual 2021 (going into 2022) checklist of reasons why you would not pick the Web? Mobile-only, let's go mobile-only instead of this desktop VS Code stuff.

Here's some of the checklist. You don't even have to think of them unless you have ones. I'll give them to you and then we'll talk about it.

One of the reasons is because you get the icon on your home screen.

Dave: Check. Yeah. Want it. I want it.

Chris: Right, but what's the Web answer to that? At the moment, I think it's like, "Well, you can add to home screen any website.

Dave: Add to home screen. Yeah.

Chris: Which is BS because nobody will do that.

Dave: Chrome on Android will give you a bit more of a PWA prompt.

Chris: Which is a pretty good answer to it, I think. I think that's cool.

Dave: Pretty good. Pretty good, right?

Chris: Then is there an app store. Let's do app store. That would get your icon on a home screen, wouldn't it?

Dave: That would get your icon on a home screen.

Chris: Certainly not happening in Apple land, but does Chrome put them in there? Does Android have PWAs in the app store?

Dave: Chrome's story is you create a TWA (trusted Web app), which is basically a signature around your app. Basically, it's your manifest, but you used your Google Play identifier to sign it. Does that make sense?

Chris: Yeah, that's fine. It's a PWA with a little juice on top.

Dave: Yeah, so if they need to kick your app because you're installing or mining crypto, they'll just ban you, like if you violate the app store policies.

Chris: Okay. That's interesting. But there is a story for it.

Dave: Windows Store, you can use. It's actually cruising the Web for [laughter] sites right now, and it'll chuck them in their store.

Chris: Oh--

Dave: For PWAs right now.

Chris: That's also weird in the other direction.

Dave: Well, a little weird because, yeah, you don't control. Maybe you have to claim it before it'll go online - or something - but they're just kind of like, "Hey, we can--"

Chris: What if you're Slack? What are you doing? Are you building--? I'm curious. Clearly, they use electron, right? They have Web-based technologies there. Can you electron wrap your Android app? Is that what they do? I don't know.

Dave: I don't know. I wonder. I think it's similar. It's probably a different code base for them, but it's probably similar. It's probably just kind of a phone gap-y kind of thing.

Chris: Right.

Dave: Something more fancy, or it's probably even some React native kind of thing.

Chris: Yeah.

Dave: We're going to try to use native controls whenever we can. I think, for me, that comes down to what makes native more competitive, like why I would choose native would be purely animation, like scroll performance, like scrolling a list of 10,000 items and animation performance like sliding views left-right.

Chris: Yeah.

Dave: You play a video on iOS and, if you're in the Twitter app, it'll grow. It's a very smooth easing into a full-screen video, right?


Chris: Oh, you get the -- okay. So, let's do that one. You get the-- Are they faster and smoother, native apps? Is that a given, or can you make a Web app just as good?

Dave: I think you have to work your ass off to make a Web app biscuit. You know? Not everyone gets the nuance.

You know when you kick a photo off of the Twitter app? That's a pretty cool experience.

Chris: Yeah.

Dave: To just kick it off your app. You could do that, in theory, on a Web app. I'd love to see experiments around that. But I don't think it's that--

Chris: You're not limited, let's say. For the app on the home screen, there's a solution to that. Phones could just make that better if they wanted to, or iOS or operating systems for phones.

Dave: Mm-hmm.

Chris: The app store thing, they could make that better. They could allow websites into it. There are answers to it. There are ways forward with it that aren't inconceivable. Is the speed thing inconceivable? Is the answer there, like, "Well, browsers just have to get better," or UI kits for mobile apps on the Web need to evolve to be better?

Dave: Like mobile performance kind of stuff?

Chris: There's like Swift UI. You use Swift UI; you get a thing. Could Apple say, "We're going to make Swift UI for the Web?" they're absolutely not going to do that, but they could do that.

Dave: [Laughter] They should. Yeah. I mean that's kind of like what Ionic is. It's basically Apple UI and Google UI kind of marrying it. Material UI, I guess.

Chris: There's a way forward there. It's not inconceivable that websites get really good at having just as good of experiences.

Dave: Yeah, and Ionic's little capacitor thing has a lot of native integrations, too. You want the camera. It can get the camera.

Chris: Okay.

Dave: I think, if you're in an app context, this is maybe the other thing. If you're in an app context, you don't have to ask for permission like you do on a website.

Chris: Oh... Because you've already done the permissions as you downloaded it?

Dave: Yeah.

Chris: There were some kind of permissions thing, isn't there?

Dave: Yeah. I think, as you download it, you just kind of agreed or your first boot.

Chris: Right.

Dave: I think that setup is probably a little bit better.

Chris: There are a couple of things built in there. There's API access that you talked about that you get them and it's a little smoother. It just works. I think you probably do have to ask. I feel like you download Twitter, and you're going to post a photo. The first time, it still asks you.

Dave: Like, "Can't access camera roll." Yeah.

Chris: It's not that different than the Web.

Dave: Not that different, no.

Chris: Not to me.

Dave: Yeah.

Chris: But then do you have the full set of access at all? Is there still some lingering APIs on devices that are native app only? Surely there are, right?

Dave: Yeah. I'm sure. Like contact picker, I think they're working on -- a lot of this stuff, they are working on.

Chris: Right, so there are answers there. But the answers are, "Wait because the Web is underpowered compared to a native app because it doesn't have the same access."

Dave: Right. Right. Yeah.

Chris: Interesting.


Dave: I forgot what I was going to say. I feel like there's one other thing native apps do well.

Chris: Well, there's a bunch. Let's talk speed. Web apps have to download stuff from the network whereas an app, you had to pay that cost when you downloaded the app, but all the resources, probably (mostly for the app) are just in it. Can the Web ever compete with that? Is the answer service workers?

Dave: Yeah. I think progressive Web apps can definitely compete and/or provide a better experience. You went to the website. It said, "Hey, do you want to download a progressive Web app?"

Chris: Yeah.

Dave: You've already downloaded the website, and so you click yes. It saves index.html. It can save as many files as it wants up to like 40 megs or the website, so it can basically just chuck every single Webpack file it has.

Chris: Yeah. There's no distinct advantage for native apps.

Dave: No.

Chris: PWAs have the same vibe going on.

Dave: Mm-hmm.

Chris: Yeah.

Dave: One thing I think is maybe an advantage, like UI kit stuff.

Chris: Yeah.

Dave: Like the glass effect on your little mail app (month, day).

Chris: Mm-hmm.

Dave: I think there's stuff we don't have on the Web. I can't be like, background glass. [Laughter] Maybe you can do it in an electron app somehow.

Chris: Right. You get that for free rather than having to elaborately create it, if you even can do it at all. Yeah, okay, so that's a pretty big deal.

I have a couple ones like the login thing I've been a little obsessed with. Only just as a user. I have all these apps. I'm logged into them. If I want to use them on my phone, I open them, and I use them. I rarely ever am logged out of them, as I open that app. It seems like I'm just logged in forever on there.

Dave: Mm-hmm.

Chris: On the Web, it's never that way. I go to the website, and I'm off.

Dave: Two weeks max, yeah.

Chris: Yeah. Two weeks max, and even then it's like, "Well, I was logged in, in Safari, but now this is Twitter's little Web view, so I'm not actually logged in there because that's a different browser," and all that. It seems like they get booted easier.

What if it's your mission in life to have a website that just tries to have the most epic (stay logged in) experience ever, but not totally throw away security? Can it be done well?

Dave: Yeah, I don't know. I mean, in theory, you could create a cookie that expires in the year 3030.

Chris: Yeah. I heard you get six months. That's on iOS, at least.

Dave: That's the hard limit of six months.

Chris: Something like that. Then some people were telling me, "Oh, yeah," but really, maybe you don't even use a cookie. You put a JWTT in local storage or something. Maybe that buys you even longer. But then it's a little risky, a little less secure, maybe, than whatever native apps are doing. Or you can do rotating token, like whenever anybody uses the app, you re-auth again, get a new token, replace the one you currently have. It still has a time limit.

Dave: Mm-hmm.

Chris: My guess is that it's just trickery. Whatever you do, the tech isn't as good as native apps. You've got to resort to trickery. Even then, it's never going to be as good.


Dave: You know one thing I was thinking, have you used TikTok before? You know the teen sensation, TikTok?

Chris: Sure.

Dave: Got some dance. Oh, no. Oh, no. That sort of thing, you know, TikToks.

Chris: Hmm?

Dave: This could be quality, too, but there's a big difference between the Web app, which never loads -- it takes 85 minutes to load -- and the native app, which is very fast, very fluid. It shows me videos. It's starting videos before I even open it up. You know?

Chris: [Laughter] Yeah.

Dave: You go open that on the Web and it's like 45 minutes of white page. It could be quality here, but you know.

Chris: It's interesting they did it at all. Instagram didn't for a long time - famously. They were just like, "Screw the Web."

Dave: Yeah.

Chris: "We don't even want to go there."

Dave: "Not our target market," yeah. [Laughter]

Chris: So, I wonder why they bothered at all. I would think they bothered at all because URLs.

Dave: URLs. I think, as cool as TikTok is, it still depends on people sharing crud.

Chris: People sharing, yeah. Yeah.

Dave: Yeah. Then they even biffed that up. Have you seen the TikTok--?

Chris: URLs alone wins this whole list. As I was creating this list, I'm thinking, "Man, this sucks." There's a lot of stuff that actually still native apps, you can reasonably argue that they have it better. Yeah. But not really, but they don't have URLs, so case closed - to me.


[Banjo music starts]

Chris: This episode of ShopTalk Show is brought to you in part by CodePen. I'm here to tell you to go pro on CodePen.

CodePen Pro is awesome now and it's only going to get way, way more awesome. I happen to know, as I work on and get to decide those features. I'm so excited about the future of CodePen Pro.

Of course, as we do that, eventually, over time, CodePen Pro is going to get more expensive, so you might as well get on one of those grandfathered plans. That's what I'm saying.

Of course, today, you get a bunch of features as well. A big one is privacy in that you can make your pens and collections and projects private on CodePen, meaning that nobody can see it unless you very explicitly share the URL with them. That's a big one.

Let's say you need an image in a pen. You drag and drop an image. We'll host the image for you, and we'll optimize it, and we can resize it for you if you want, serve it in the right format and all that stuff, things that can happen just with URL parameters for your images and other assets that you upload to CodePen. We'll handle all of that for you. It's a pro feature.

There are things like collab mode, working in real-time with other people on it and a bunch of more features. Upgrade to Pro at

[Banjo music stops]


Dave: I feel like the circle is closing. As somebody who is starting a product and company, I would be hard-pressed to find a reason to make a native app because, immediately, I've compressed the number of people who can use this down to people who want to go download this on the app store. You know?

Chris: Hmm.

Dave: It's not like just log on with your company ID or whatever.

Chris: If you're targeting companies, I think that especially behooves you to go to the Web.

Dave: Yeah.

Chris: I think it's hard to get everybody at a company to provision an app store downloaded app.

Dave: Yeah. I signed up for LinkedIn. Chris, follow me on LinkedIn.

Chris: Yeah. Will do.

Dave: My coworkers made me do it.

Chris: Like right now? [Laughter]

Dave: You can follow me now.

Chris: Okay.

Dave: Yeah. I'd like to be your friend on LinkedIn. What's interesting, and everyone listening needs to follow me because I'm in a competition with my coworkers, even though they don't know it. [Laughter]

Chris: To have the most followers?

Dave: Just be the biggest. Just be the best LinkedIn-er at the company. [Laughter]

Chris: Yeah.

Dave: Yeah.

Chris: Sure.

Dave: Every day, LinkedIn emails me. I swear to God it's every day. They're just like, "Hey, bud. You should download the app, man. LinkedIn is so cool." I'm just like, "Never. Never in a million years." [Laughter] Maybe if I was looking for a job, but I don't want to use the app. I just want to use you as a business Pokemon collector. That's what LinkedIn is for.

Chris: I just had to accept you because you already friended me, apparently.

Dave: Chris, I have asked so many people to be my friend. [Laughter]

Chris: Yeah.

Dave: I just keep being like, "Hey, be my friend. Be my friend." What's funny is it even was like, "Hey, buddy. Slow down. Not everyone friends this many people on LinkedIn. Make sure it's sincere." I'm just like, "Hey, I've been a businessman for 15 years now. Please. I've collected a lot of friends in the business. Don't chide me, LinkedIn."

Chris: [Snickers]

Dave: I think it just was giving me the, like, "Hey, you're a spammer. Ease up."

Chris: Yeah. Oh, I see.

Dave: I'm enjoying LinkedIn because I log in and I'm like, "Hey, I know that asshole."

Chris: I don't think you can dabble. Yeah. [Laughter]

Dave: [Laughter] Hey!

Chris: Hey!

Dave: You're that old asshole. Vitali, all right. Here you go.

Chris: Yeah. Yeah, totally.

Dave: I accepted Vitali.

Chris: I'm like, Zeldman? Active over here, buddy.

Dave: Hey, let's go. Be my friend.

Chris: You signed up some retweet device over here, so you look real active.

Dave: Oh, I'm just--

Chris: Maybe--

Dave: Yeah, so I'm just -- hey, you'd be--

Chris: I don't think you can dabble, though. I've tried to dabble. I think you're either in or you're out (on LinkedIn). You make it part of your daily or it's not useful.

Dave: No.

Chris: Because otherwise, my inbox -- my inbox is epic.

Dave: Yeah. Yeah. Yeah.

Chris: Thousands of posts in there. Then I get overwhelmed, and I'm like, "No. I can't do this right now."

Dave: Yeah. No. For me, it's just now I'm on a mission to beat my coworkers, so that's all.

Chris: Yeah.

Dave: [Laughter]

Chris: Give it a couple of weeks.

Dave: Life goals. You know?

Chris: Yeah.

Dave: Goals. You've got to have big goals and then sub-goals, you know?

Chris: Mm-hmm.

Dave: Yeah. So--

Chris: Yeah. Fair enough. Let's see. How are we doing? I think we can talk a little more. Maybe we'll do a question from somebody, huh?

Dave: One question on this question and answer.


Chris: Aaron Stremmel. This is a good one because it's about you, so you get to talk about -- because you do a lot in life, but you also do client work. Of course, right?

Dave: Mm-hmm. Mm-hmm.

Chris: You've been doing it forever. Aaron's question is about that. "I'd love to hear some kind of backstory on how you've been so successful with Paravel, particularly about landing big clients."

We've talked about this before, but maybe with some fresh perspective here. We know that you've worked with a large pizza company.

Dave: Mm-hmm.

Chris: We know that you've worked with a very large computer creation company that we talked about, and it may or may not have been in this very episode. You land big clients. If somebody goes out on their own, even if they're great, and is like, "You know what? I want my next client to be Google," or something, are you going to get that? No. That's just hard, right? Maybe you will, but that's what Aaron wants to know. How do you do it, man? You're an agency co-owner. It's your job to land big clients. How do you do it?

Dave: This is all a grain of salt, right? I think it comes down to luck and hard work. It's a little bit of grit and a lot of luck.

Chris: Mm-hmm.

Dave: I just want to put that out there. Privilege all factors into this as well, so think about this with a grain of salt.

We work hard, and then we got on Dribbble. I think, like Cameron Moll or somebody got Trent on Dribbble, and we all got on Dribbble. We were really active in those early days of Dribbble, Small Scene, and we got a little bit of notoriety. Then we did these bunch of pixel-perfect Web designs and these kind of famous Web designers like Jason Santa Maria were like, "Oh, we should hire Paravel to do these designs I have," and we started working with Jason Santa Maria on stuff.

Chris: Mm-hmm.

Dave: It's a long history, but we kind of worked hard. We shared our work. We blogged about our thoughts, and people--

Chris: You were everywhere then.

Dave: People paid attention.

Chris: Yeah, man.

Dave: I'm not good at Dribbble, but I had Dribbble, and you just talked about your product that you were launching - or whatever.

I think the modern-- Back when we started, Chris, it was like CSS Galleries were the thing. You know? If you land in a CSS Gallery, oh, you got hundreds of business from that. Now, probably not much anymore. It's probably Product Hunt or something.

Chris: Yeah. Dribbble is still cool, but I doubt it's going to have that same kind of vibe. It's going to be harder to be noticed, and it probably has changed in what it's doing for people over the years.

Dave: I think it's changed, and I think it's still good. I think the game sort of changed. You could kind of be like, "Here was a composition I did," and now it's very, like, "Here's an icon I spent 10,000 hours on." [Laughter] The vibe kind of changed, and so there's still good design, though. I want to put that up there.

But then I blogged. Trent blogged. Reagan got a blog. We were blogging. We were sharing work. We started talking at conferences, talking at conferences, meet-ups, or started at meet-ups and then built up to conferences.

I did a podcast for Austin for like a year or two. No, like three, five years - I don't even know - 100-something episodes of a podcast about the Austin tech scene. I talked to a lot of people in Austin about what they were doing.

Then we started this podcast. We're now coming up on 500 episodes of this podcast, weekly, showing up, doing the work.

Chris: Mm-hmm.

Dave: That's only to say that's the grit, and we've gotten some work through the podcast and thanks to anyone who listens and hired us. But I think it's, too, speaking at things and showing up and doing the work. It's probably way too much and I'm a workaholic and don't follow me, but don't follow in my footsteps.

Chris: Sometimes that's what it takes, though - I've got to say.

Dave: It takes hard work and grit. Who do I look up to now? Cassidy Williams, she puts herself out there. She's working on Netlify. She's making content for Netlify. Then what? She shows up on GitHub, their little universe thing. She's hustling, and not like hustle culture, but she's making TikToks. She's doing things consistently.

There are people now kind of getting into the streaming game. They're showing up consistently, streaming. It's so -- I think that's some of what it takes. You're going to have to budget actual work and for-fun work.

Chris: Maybe a little wow factor, right? Just because you were there on Dribbble doesn't matter. Just because you make a TikTok isn't like, "Cool. Made the TikTok." It has to be awesome. It has to catch people's eye for some reason.

Dave: Yeah.

Chris: Because you're so unique or so funny or such a good designer or so clever or so articulate or so something that it's noticeable.

Dave: Yeah.


Chris: Aaron, you put your website on here. Just to be frank (because you mentioned for critique) -- we'll decide if we're going to put it in the show notes or not for you -- but it's fine. But I hate to tell you, man. It has no wow factor. There's nobody looking at this thing and being like, "Holy crap! That's the company that we need to hire." I don't think you're going to get those kind of clients from looking at this, and that's just as honest of critique as I can offer. It looks kind of like stock photography. Looks kind of like an old-school WordPress theme. I don't know, but it's certainly not going to get you Microsoft.

Dave: Yeah. I could probably give constructive criticism. On a podcast, that's a little hard, but yeah. Keep working on design shops and text sizing, white space. I see already kind of three or four different fonts. It's stuff like that, you've got to iron out. Find your sensibility. Find what you're good at. Then find what you're not good at, too. That's a big thing.

We figured we were good at the design and responsive design. We had to learn all that. We were doing all this back-end stuff, and then we realized, "Hey, we don't like doing that, [laughter] and we're mediocre at best at that, so let's not do that anymore. Let's hire people we like to do that part."

I think that's it, too. You can always hire people to work with you. I think that's the thing, too. Find friends.

That would be my big thing about Dribbble, talks, meet-ups, and everything. Make friends. That's it. [Laughter] Not that nepotism plays big into it, but if you want somebody to tweet about that cool project you did, have friends.

Chris: Yeah. Right.

Dave: There's--

Chris: There was a lot of good advice in there. I think that was pretty solid, Dave.

Dave: Was that okay? I rambled.

Chris: Work hard. Be lucky. [Laughter] But also, a little wow factor. I mean that one came from me. Maybe you disagree.

Dave: I think, yeah, there's grit, friendship, wow factor, and luck, in the right time, right place.

Chris: Yeah. Right.

Dave: And probably privilege mixed in there, too.

Chris: Yeah.

Dave: Figure out what your levers are. [Laughter] Do you have some privilege, some luck that you can kind of boost or turn up the gain on? Figure that out.

Chris: Heck, yeah.

Dave: All right.

Chris: Thanks, Dave.

Dave: Hey, this was a very business-y episode, hard stop edition of the ShopTalk Show. Thank you for downloading this in your podcatcher of choice. Be sure to star, heart, favorite it up. That's how people find out about the show.

Follow us on Twitter for 16 tweets a month. We're doing videos over on the real CSS-Tricks YouTube channel. Join us in the D-d-d-d-discord at

Chris, do you got anything else you'd like to say?