493: Mobile Development at thoughtbot with Stephen Hanson
Giant Robots Smashing Into Other Giant Robots - En podcast af thoughtbot - Torsdage
We are thrilled to announce the third session of our new Incubator Program. If you have a business idea that involves a web or mobile app, we encourage you to apply to our eight-week program. We'll help you validate your market opportunity, experiment with messaging and product ideas, and move forward with confidence toward an MVP. Learn more and apply at tbot.io/incubator. We look forward to seeing your application in our inbox! __ Co-host Will Larry interviews Stephen Hanson, the Director of Mobile Development at thoughtbot. The two explore the complexities of mobile app development, focusing on the advantages and disadvantages of React Native and Flutter. Stephen, who initially started as a full-stack web developer specializing in Enterprise Java, discusses React Native's cost-effectiveness and the convenience of having a unified codebase for iOS and Android platforms. However, he notes that Flutter might be a more suitable choice for high-performance needs. Both hosts emphasize the nuances of the mobile ecosystem, covering topics like in-app purchases, push notifications, and the strict guidelines set by app stores like Apple's. They agree that a comprehensive understanding of these aspects is crucial for an entire development team, including designers and project managers. Additionally, Stephen shares that the driving force behind his career is the opportunity to create apps that enhance people's lives. Stephen wraps up the discussion by detailing thoughtbot's goals of improving mobile development practices within the company and the broader developer community. __ React Native Flutter Follow Stephen Hanson on LinkedIn. Visit his website: shanson.co. Follow thoughtbot on X or LinkedIn. Become a Sponsor of Giant Robots! Transcript: WILL: This is the Giant Robots Smashing Into Other Giant Robots Podcast, where we explore the design, development, and business of great products. I'm your host, Will Larry. And with me today is Stephen Hanson, Director of Mobile Development here at thoughtbot. Stephen, thank you for joining me. STEPHEN: Hi, Will. Thanks for having me. I'm excited to be here. WILL: Yeah. I'm excited to talk about mobile development. But before we get started, tell us a little bit about who Stephen Hanson is: your personal life. STEPHEN: You know this because we often talk about our families when we get together. But I have two young kids, two and four years old. When you say personal life to anybody who has young kids, that's what we're talking about. [laughter] WILL: Yes. STEPHEN: So, they're keeping me busy but in the best way. WILL: Yeah, definitely. And I totally understand that. So, I know we talk about this often, but you like to woodwork. You like to work with your hands like most of us in tech. Like, we think so much with our head and mental that we try to find something to do physically, and yours is woodworking. Tell me a little bit about that. STEPHEN: Yeah. I think it's exactly what you said. I think working on a computer all day, you know, many years ago, I was like, what's something I can do with my hands, right? Something a little more physical. So yeah, fine woodworking has been a hobby of mine for quite a few years. And we were even chatting the other day about, you know, I'm trying to take time during the day to sneak out to the garage for 15 minutes, you know, during my lunch break or whatever to just get that mental reset and just work on something. WILL: Yeah. I know that you built your office that you work out of. I've been wanting to ask you, one, how did you do it? Two, how did you have the confidence to do it [laughter] to make sure that it was going to...how can I say this? I would be afraid that would it still be standing [laughter] after a little bit? [laughs] STEPHEN: Yeah, to be honest, that was definitely a fear. Yeah, I built my office in 2020, you know, COVID hit. All of a sudden, I was working fully remote. And we had another kid on the way. You know, we didn't have space in the house. So, I was like, what am I going to do? [laughs] I was already doing woodworking, but I didn't have any construction or carpentry experience. So, yeah, I definitely had the confidence issue. And I think, you know, I was just like, I don't know, let's just give it a try. [laughter] That's really all I can say. I didn't have the skills yet. But I watched a lot of YouTube and read a lot of [laughs] forums or, you know, just found info wherever I could, so...[laughs] WILL: Yep. And it's still standing today, correct? [laughs] STEPHEN: Correct. Yeah. [laughs] No, I'm just sitting in, like, a pile of rubble right now. [laughter] WILL: That's awesome, yeah. It's kind of like development sometimes for me. Like, you just got to take that leap sometimes, so... STEPHEN: You do, right? It's like, you know, fake it till you make it. [laughter] WILL: Yep. That's awesome. Awesome. Awesome. So, tell us a little bit about how did you get started in development in general? And then, how did you get started in React Native? STEPHEN: Yeah. So, I started out as a full-stack web developer. So, I didn't initially set out and say, "I'm going to build mobile apps," right? And I started out in 2011. I was working in Enterprise Java. I worked for American Airlines for a couple of years, and then I did enterprise consulting. I eventually made my way to, like, Rails and front-end development. And around 2016, 2017, I was freelancing. And eventually, clients started asking me to build mobile apps. [chuckles] WILL: [inaudible 04:16] STEPHEN: And I didn't know how to build mobile apps. So, I did what any web developer would do who doesn't build apps, and I used web technology. So, those first couple of apps that I built were hybrid apps. I used Ionic. And those are, you know, web apps that you package in a Native Wrapper. So, developing these apps, I literally developed them in a browser, right? And they're web apps. [laughs] And that was my first experience building apps. Even if they were web-based, I still had to work with the native app stores and learn, you know, app review guidelines and implement some native functionality, even though it was through, like, the Ionic wrappers. You know, people kind of trash on hybrid apps, and sometimes for good reason. But that wasn't a bad first experience for me or outcome, honestly. The clients were happy. They had apps in the app stores that were working for a pretty reasonable development cost. So yeah, that was my first experience in mobile. The end result isn't something I'd be necessarily proud of today. [laughs] WILL: I think that's all devs. [laughs] STEPHEN: Yeah, you know, [laughter] yeah, I -- WILL: Looking back at their work, yeah. [laughs] STEPHEN: I was talking about that. I could look back to something I built a month ago. [laughs] WILL: Yes. [laughter] STEPHEN: You don't have to go back far. [laughter] WILL: Yeah, so true [laughs]. You started working with the client when you were freelancing. So, how did you go from the hybrid web apps to actually saying, okay, I want to change, and I want to go all in on React Native? STEPHEN: React Native came out around that same time I was building those hybrid apps. So, the hybrid apps were 2016, 2017. React Native came out in 2015. So it was out, but it was still pretty new. And I was really interested in React Native right from the beginning, but I was also a little intimidated by it [chuckles]. So, when those first clients came to me for mobile apps, I didn't feel confident enough to say, "Yes, I can build you a React Native app." But a year or two later, I was working for another client on their Rails app. And I was building an API for their new React Native app. You know, I was really interested in React Native. So I said, "Hey, [chuckles] why don't I help out on the app side, too?" And they were like, "Sure, that sounds great." So that was kind of where I got my foot in the door with React Native. And then more opportunities like that just kept popping up over the next year. So, I got to work on a couple of other React Native apps. And like we talked about, I just started calling myself a React Native developer [laughs]. The rest is history. WILL: Yep. So true. We'll touch more on that later. But what would you say to a client who is trying to figure out if they should build native versus React Native? STEPHEN: There's a few things to consider when making that decision. But I think, usually, what I've seen is it comes down to budget and user experience. The bottom line is React Native is going to be a lot cheaper. You're basically building one app instead of two, right? Most of your code in a React Native app is going to be in JavaScript, and you can reuse all of that code across Android and iOS. If you're building a native app, you're just building two completely separate apps. So, it's just going to be cheaper to build that React Native app, and a lot of times, that's what it comes down to. For most companies, it can be really hard to justify that extra cost of building a completely native app for each platform. But then the question is when we talk about how can you justify the cost? Well, what would justify the cost, right? [laughs] I think probably the biggest trade-off when you build a React Native app versus a purely native app is there is a little bit of a performance penalty by building in React Native versus native. So, I think apps that will need to have a very flashy cutting-edge experience with lots of user-driven animation and effects, you know, when you get into that domain, I think that's where we see pure native starting to make more sense. But most apps and users would never feel that performance penalty of React Native. So, for most apps, that's not really something that enters into the equation. WILL: I want to dig into something you said. You were talking about if you do go native, you usually have to build an iOS and an Android separately. But with React Native, you could do it together. So, for someone who's maybe never done either one of them, can you kind of dig into, like, what does that look like? So, when you say I have to build an iOS and an Android portion versus I can do one codebase for React Native, can you walk us through kind of what that looks like, just a sample feature? STEPHEN: When I say React Native is a single codebase and, you know, native apps, you're building two apps, the way React Native works is you're basically building a React app. So, all of your business logic is going to be in React. And when your React code renders some UI, that gets translated into native UI. But your business logic is still going to be living in that JavaScript React app. So, one, when I say performance penalty, that's what I'm talking about is: there's a little bit of a performance penalty communicating back and forth between your JavaScript thread and the native system thread. But when we talk about one codebase versus two, that's what a React Native app looks like. You basically are working on a React app. It's one codebase with one set of business logic. And when you say, "Show a modal on the screen," that gets translated into a native Android modal or a native iOS modal, but in your code, you're just saying, "Show a modal." [laughs] So, you're just writing that one time. So yeah, a React Native project is just one codebase. Now, one thing that we haven't really touched on is in a React Native app, you do have the ability to drop down into native code. So, you have access to the native Android project and the native iOS project in your React Native app. So, you can write completely native code if you want to. But the appeal of React Native is you don't have to, you know, unless you get into one of those situations where you need to do something native that isn't supported out of the box with React Native or by an existing third-party library, or you want to have a very performant, very interactive part of your app. Maybe there's a reason you want to do that in native. You know, you do have that option in a React Native app of dropping down into that native code level. But to contrast that with a purely native project, you will have two completely separate codebases, one for Android and one for iOS. You'll have a development team for Android and a development team for iOS, you know, typically with different skill sets. The Android project will be Java, Kotlin. And your iOS project is swift. So, just in every sense, you really have two different projects when you're working on a purely native app. WILL: Okay, yeah, that makes sense. So like, for React Native, that show modal is just however many lines to show that one modal, and it does it for iOS and Android. But when you talk about native, you're saying that; however, iOS says to show that modal, you have to do it that way. But then Android, you also have to do it the Android way. And one developer, unless they know both of them, may not be able to handle both for those cases, correct? STEPHEN: Yeah, exactly. React Native abstracts away those underlying platforms. So, you really just need to know React Native for most cases. Though, there's definitely a benefit of knowing the underlying platforms. WILL: Definitely. Especially, like you touched on if you wanted to go into that native portion to add in a feature. You know, for example, I know we both worked on a project where we had a scanning app. And we had to tap into that native portion and React Native in order to get the scanning app to work, correct? STEPHEN: Yeah, that's right. We had to support some barcode scanning devices and hook into those barcode scanning frameworks that were proprietary [chuckles] to those devices. So yeah, we had to build native modules for Android and iOS to support those. WILL: Gotcha. Okay. I want to touch back on something you said earlier about the flashy experiences. You said sometimes you may not see it or whatever, but sometimes, if you want that flashy experience, it's better to go the native route. Can you explain that a little bit more? STEPHEN: So yeah, it's kind of what I was touching on a second ago. You know, in a React Native app, you have the JavaScript thread that is always running and coordinating UI changes with business logic. So, you've got your business logic in JavaScript. You've got the UI in native. And those need to be coordinated to interact. So, that's kind of where that performance penalty can happen. You know, again, most apps and users would never feel this penalty. I've never been, like, using my phone and been like, oh, this is a React Native app; I can feel it, you know. [laughs] It's not something that typically enters the picture for most apps that we work on. But there are certain types of apps that might be more important, you know, highly interactive games or things that just need to have that extra flashiness and interactive flashiness specifically, where it could make sense to build that natively. Another interesting thing in the React Native space is React Native recently re-architected their rendering engine to be written in C++ and be more efficient. So, this performance overhead might be a little bit less of a trade-off. They've re-architected the way that React Native JavaScript talks to the native layer, which might make this even less of an issue going forward. WILL: I looked it up for the podcast. But do you know some of the companies that we probably are familiar with, like they built apps on React Native? Can you name a couple? STEPHEN: Yeah, I was recently looking at this, too. And, you know, the big one is Facebook, right? Facebook built React Native. So, they're the sponsor of that project. So, Facebook and Facebook Messenger, I believe those apps are built with React Native. I don't know if the entire apps are or not [chuckles]. Do you know by chance? [laughs] WILL: React Native on their website says, "Hey, we're going to showcase these apps that they're built in React Native." So, I'm guessing a huge portion of it was built in React Native, so... STEPHEN: Yeah. That's a good point. Yeah, you're right. They're showcasing it there. So yeah, you know, other ones, you know, lots of brands, Shopify, looks like PlayStation. I'm looking at the list now on the React Native website: Pinterest, Flipkart, Discord, Walmart, Tesla, Coinbase, Mercari. Yeah, I mean, it's just a lot of big-name apps built in React Native, including quite a few that we've [laughs] that we've built. [laughter] MID-ROLL AD: Are you an entrepreneur or start-up founder looking to gain confidence in the way forward for your idea? At thoughtbot, we know you’re tight on time and investment, which is why we’ve created targeted 1-hour remote workshops to help you develop a concrete plan for your product’s next steps. Over four interactive sessions, we work with you on research, product design sprint, critical path, and presentation prep so that you and your team are better equipped with the skills and knowledge for success. Find out how we can help you move the needle at tbot.io/entrepreneurs. WILL: If I'm absolutely sold on getting that flashy experience, is native the only route to go? STEPHEN: I think until pretty recently, that would have been your option [laughs]. But Flutter has been picking up a little bit of momentum. So, Flutter is developed by Google. And it's kind of a challenger in that React Native space. It kind of has the same write once, run anywhere, you know, philosophy as React Native. You have one codebase. But they tout kind of being a more performant option than React Native. So, it compiles down to native ARM or Intel code, which can give better performance without, you know, not needing that JavaScript bridge kind of handling that communication between the UI and the business logic. WILL: So, when would you use Flutter versus React Native? STEPHEN: I kind of keep going back to, like, you know, we talk about the performance overhead of a React Native app. I don't think that's even on the map for the vast majority of apps. Like, this isn't a performance penalty that you can typically feel. So, looking at Flutter versus React Native, React Native has several advantages. I think the biggest one is it's React. So, every team has React developers already on the team, pretty much nowadays. So, you know, if you've got an organization that says, "Oh, we need to build a mobile app," they probably already have a team of React developers somewhere working on their web app [laughs]. So, there's a big benefit of kind of centralizing their team around that technology. You know, you can have a little bit of cross-pollination between web and mobile, which can be really nice. I think, similarly, it's a lot easier to find and hire React or React Native developers right now than it is to find and hire Flutter developers. So, Flutter is written in Dart, and it has its own front-end framework. So, this isn't necessarily a technology that you're going to have on your existing team. Like, I've never worked with Dart, personally. It's not nearly as common as React developers. You know, that, to me, is going to be a big downside. You know, the talent pool is a lot smaller for Flutter/Dart developers. Also, the ecosystem with Flutter being newer, it's not as established. It doesn't have as large of an ecosystem as React Native. So, for those reasons, I think React Native is still, at least for us, like, it's usually where we would steer a client over Flutter, unless they're in that category of, like, they're really going for something, you know, groundbreaking. And, you know, the choice is either, you know, they've ruled out React Native. They need to get that native performance, and maybe they could achieve that with Flutter, and maybe Flutter would be a good option then. WILL: Okay. You mentioned that—and I agree with you—like, you probably have some React devs on your team somewhere. Most companies does. So, say if I am bought in, I'm going all in on React Native, and I have React web developers on my team. Is that an easy transition for those developers, or what does that transition look like? STEPHEN: Yeah, this is something...I think you and I have talked about this a lot because we both transitioned from React Web to React Native. And, you know, it wasn't all that easy, right? [laughs] WILL: No, it was not [laughter] at all. [laughter] STEPHEN: So yeah, you know, it is a fallacy to say, "Hey, we've got a React team, you know, let's just start tomorrow on building an app, and it'll be smooth sailing. And, you know, no one needs to learn anything, and we'll be good to go," right? [laughs] So, you know, what I always say is a React web developer can successfully work on a React Native app. But I don't think they have the skills yet to lead that initiative because there's just so much to the mobile ecosystem that needs to be learned. And really, you know, my first couple of React Native apps, I wasn't the lead developer. There was somebody on those projects who really knew that space better than I did. And that was really helpful for me to have. How about you? What about your first, like, React Native project? What did that look like? WILL: It was at another company, and the exact words paraphrasing was, "You know React, so you can easily work on React Native." And so, I got on the project. And I really struggled, to be honest with you, because there's a lot of things that I didn't know: in-app purchases, push notifications, how to deal with Apple store, Android store, deploying to those stores. Like all of those things, navigation is totally different than React navigations and routes. It was a lot. It was a lot more than they led on to what it was. Eventually, I caught on. It took me a while. I needed to work with some more senior React Native developers, and I was able to really pick it up. But yeah, it was tough. I'll be honest: I struggled for a while because I went in feeling like I should have known all those things because that's the way it was conveyed to me. Now that I look back on it I was like, there's no way I could have known those things. It's just a different language. So, I had to get in there and learn it. And I even...I'm trying to think I've learned a couple of new languages. But it's almost like learning a new language just with, you know, the, like I mentioned, the in-app purchases, push notifications. It's just totally different. STEPHEN: Yeah, that's been my experience also. I think the challenges weren't, like, coding [laughs] because, you know, building a React Native app is coding in React. The challenges that I faced were, like you said, it's just the mobile ecosystem and learning all the intricacies, the functionality that users have come to expect in mobile apps, you know, like password manager, integration, and background execution modes, and deep linking strategies, all that kind of stuff. You know, if you don't know what questions to ask or what features to be thinking of, it's just really hard. And [laughs] I think it's more than just the developer needing to know that too. I think anytime it comes, you know, down to building an app, the whole team needs to have that mobile background. It's just a completely different platform than building for the web, right? So like, product owners, project managers, designers, developers all need that context so we can be prioritizing the right features and building a UI that matches the patterns that people have come to expect in a mobile app. And then, of course, developing those apps using the, you know, the proper native modules. WILL: Yeah, definitely. And I [chuckles]...you mentioned that it's mostly on, like, the mobile side. I don't know the best way to say that. But, like, I can tell you, when I first got onto the React Native project, there were numerous features that I could implement, and to a certain point to where I had to go that mobile. So, like, I was like, oh yeah, I can learn these new components that's in React Native. Okay, I got it to work. It's finished. You know, my PM would be like, "Well, it's not completely finished because you have to deploy it." And I was like, oh, I have no idea what I'm doing now. Like, I just know [laughs]...I know up to this point. STEPHEN: [laughs] WILL: But anything over that, I'm like, yeah, I have no idea. STEPHEN: Especially with consulting, right? With consulting, you need even more expertise, right? The clients are counting on you to build their app. And that's where, you know, having that deep, deep familiarity where you can say to a client, "This is how we're going to do the deployment process, you know, and I need, you know, X, Y, and Z to help set it up. And here are the deliverables, and here's when we'll have it," that kind of thing. Like, it really takes it up a whole nother notch what you need to know. WILL: Definitely, yeah. Because I think compared to mobile, I feel like web development can almost be like the Wild Wild West. And what I mean by that is, like, there's no rules for you to push out a website in web. Like, you know, you build it. You push it out. It can be out there, you know. Whoever is hosting it, unless you go against their rules, maybe, but their rules are very relaxed and stuff like that. Mobile, there's a totally different set of rules. Because, like, I was laughing not too long ago. There was rumors that Elon Musk was going to remove the blocking feature on Twitter [chuckles]. And it was funny because all the mobile devs they came out. And if you're a mobile dev, you know this. Apple is very strict. STEPHEN: [laughs] WILL: If this is a social media app that you're building, you have to have that blocking feature, which I agree it needs to be there. But it's funny, like, all the mobile devs was like, yeah, that's not going to work. Good luck [chuckles]. Good luck being an app again. STEPHEN: Yeah, [laughs] good luck. WILL: Like, they're going to kick it off. And yeah, they're very big on kicking it off if it doesn't follow those rules and things like that. So yeah, for React Native, you have to learn those rules, or, like I said, they won't approve it. They won't push it out to their store. STEPHEN: Yep, exactly. Yeah. I feel like the new one at every client project; I have to say, "We have to offer a way to delete your account in the app," because [laughs] that's a new one that launched last year, and I think has just started being enforced more recently. Like, all those little gotcha rules, you know, like, if you don't know about that, then you're going to go to submit your app to the stores, and you're going to get rejected every single time. [laughs]. WILL: And they're not shy about rejecting you [laughs]. STEPHEN: Yeah. But I would say, like, a lot of the rules, I'm like, yes, this is amazing that we have these rules, you know. It does help keep the community safer like things like blocking. But then there's the other rules of, like, Apple's like, hey, you've got to use our payment system and pay us 30% of every sale. WILL: Yes [laughs]. STEPHEN: I was, like, you know, there's some evil stuff happening there, too. WILL: I totally agree. And we ran into that issue. We had an app that used Stripe. And we actually had to remove it in order to use in-app purchases because...I forgot the rules around it, but it was essentially for digital content. I think it's what it was. And so, we had to use Apple's in-app purchases. So yeah, I totally agree with you on that. STEPHEN: Yeah. I feel like I've been a part of so many apps where we're, like, reading those rules. And we're like, okay, you know, it's like, we're watching a live stream of birds. WILL: [laughs] STEPHEN: You know, like, the birds aren't digital [laughter], you know. It's like, [laughs] where does this fall in the rule? [laughs] WILL: Yes [laughs]. I've done that, too [laughter]. Yep. It's almost like, you know, I feel like lawyers, okay, like, is this what this rule is, or the law what is written, or does this fall underneath that? So yeah, totally, totally agree. STEPHEN: Yep [laughs]. WILL: So, you've been here a couple of years at thoughtbot. What has been your experience building React Natives here for clients at thoughtbot? STEPHEN: Yeah, yeah. I've been at thoughtbot for about five years now. And I have been building React Native apps that whole time. And, I mean, I started at thoughtbot a little more in the full-stack space, web development, and have transitioned to where I'm mostly only building React Native mobile apps now. It's been a great experience. I think that React Native is really a sweet spot of; we're able to build these apps really efficiently and much less expensively than when we're doing pure native. And the end product is a really good app. So, it's been a great experience, you know, React Native is really...it has a really nice development experience. You know, it's the JavaScript React ecosystem. And we use TypeScript, and we have a really good developer experience with it. And then we're building apps that clients are really happy with and with a good budget. So, I think it's kind of that, you know, like, win-win-win kind of scenario where everybody is happy. And yeah, I don't see it going anywhere. And I think we're going to be building React Native apps for quite a while to come. WILL: Yeah, I totally agree with that. Where do you see React Native and mobile dev going here at thoughtbot in the next six months or even the next year? What are your goals for the mobile team? STEPHEN: We've got a couple of goals. One of them is around kind of what we've talked about with the mobile space in general. This isn't really specific to React Native, but it can be. But, consulting in the mobile space is challenging because there's a lot of mobile-specific domain knowledge that a team really needs to have. So, that's something that we've started looking into is, like, how do we build up our resources internally and then, hopefully, externally as well to help guide us on our projects and ensure that we have, like, you know, we are developing apps consistently and efficiently every time? So, that's something we're looking into is, like resources to help our teams—not just developers, but project managers, designers, and developers—help us navigate the mobile space. Okay, you're going to do push notifications. Here's the library we use. Here's things to think about, and interactions to think about, and iOS-specific functionality that we could support, and Android-specific functionality that we can support. You know, you're going to do deep linking; do you want to use universal links, or do you want to use a different strategy, a scheme-based link? So, basically, building up that set of resources so that our teams are all able to consult and build efficiently and consistently across the board. So, that's kind of goal number one. And then, goal number two is to kind of bring some of that out into the community a little bit more. So, thoughtbot is very well known in the Rails space for all of the open-source content we've put out and blog posts, and courses, and books. I mean, there's just so much on the Rails side that thoughtbot has done. And we're just a little bit less mature on the React Native side in terms of what we've put out there. So, that's kind of the second goal is giving back, helping others kind of do that same thing. I feel like we have developed our practices internally, and we're building some great apps. And it's kind of time to contribute back a little bit more. WILL: Awesome. I'm looking forward to reaching those goals. If you can go back and give yourself advice, what would you tell yourself? STEPHEN: I would maybe say, read the documentation [laughs]. I don't know when I got into mobile; I think I just jumped in. And, you know, we've talked about some of the mobile-specific domain, and not knowing what you don't know, and app review guidelines. I feel like early on, I just responded to challenges as they came up, as opposed to just digging into, you know, Apple's documentation and Android's documentation and just really understanding the underlying operating systems in stores. That's probably a piece of advice. If I could go back, I would just start at the documentation, you know, go to developer.apple.com and read about all of the underlying APIs of StoreKit and, you know, associated domains and all of these sorts of things. Just learn 'em, and then you know 'em. [laughs]. So, maybe that could have saved me some heartache if I just was a little more intentional about, okay, I'm getting into app development. I'm going to set aside some time and just really learn this stuff, as opposed to kind of where I had one foot in the door, one foot out of the door for a while. And I think that kept me from just sitting down and really going deep. WILL: That's really good advice. Just read the documentation. And that's not just Apple. STEPHEN: [laughs] WILL: That's a lot of departments, sections of my life. So, yes, I like that. [laughter] STEPHEN: I actually...that's something I did early in my career. So, I started as an Enterprise Java developer in 2011, and I was using the Spring framework. I downloaded the entire PDF. It was, like, 250 pages, the documentation [laughs]. And I remember just being on, like, airplane flights, and I just read the documentation, just cover to cover. That served me so well. I was, like, the expert, you know [laughs]. I don't always do it, but when I do, I'm like, oh yeah, why didn't I do that sooner? [laughs] WILL: Yeah, totally agree. I like that. What is the wind in your sails? What motivates Stephen? STEPHEN: Like, I think what attracted me to software development is just being able to build stuff, you know, probably the same thing that attracted me to woodworking. So, I think what motivates me is that prospect of, hey, I'm building an app that people are going to use, and it's going to make their life better. So, that's really what gets me up and gets me motivated. It's less so the actual coding, to be honest. It's really the prospect of, like, hey, I'm building something. WILL: Awesome. Yeah. Is there anything that you would like to promote? STEPHEN: If you're interested in building a mobile app, come talk to us. We'd love to build your mobile app. Go to thoughtbot.com/hire-us; I believe hire-us. We would love to talk to you about your mobile project. So, don't hesitate to reach out. We'd love to hear about what you're interested in building. WILL: Awesome. Well, Stephen, it was great to chat with you. It's always great to chat with you about mobile development and just personal life things. So, I really appreciate you being on the podcast today. STEPHEN: Thanks for having me, Will. It was a lot of fun. Always good talking with you. WILL: You can subscribe to the show and find notes along with a complete transcript for this episode at giantrobots.fm. If you have any questions or comments, email us at [email protected]. You can find me on Twitter @will23larry. ANNOUNCER: This podcast is brought to you by thoughtbot, your expert strategy, design, development, and product management partner. We bring digital products from idea to success and teach you how because we care. Learn more at thoughtbot.com.Special Guest: Stephen Hanson.Sponsored By:thoughtbot: Are you an entrepreneur or start-up founder looking to gain confidence in the way forward for your idea? At thoughtbot, we know you’re tight on time and investment, which is why we’ve created targeted 1-hour remote workshops to help you develop a concrete plan for your product’s next steps. Over four interactive sessions, we work with you on research, product design sprint, critical path, and presentation prep so that you and your team are better equipped with the skills and knowledge for success. Find out how we can help you move the needle at: tbot.io/entrepreneursSupport Giant Robots Smashing Into Other Giant Robots