Today’s economy is run on software. However, if you are not a coder that doesn’t mean you can’t start a modern company. Coding for Entrepreneurs is a platform designed to help non-technical entrepreneurs who don’t have any prior coding experience in building projects for their companies. Coding for Entrepreneurs recently launched a new series called “Try Infrastructure as Code with Linode” (that rhymes), which covers tools like Terraform, Ansible, Puppet, Chef and SaltStack. Justin Mitchel, Founder of Coding for Entrepreneurs, joined us to talk about why he started the company and how it helps non-technical entrepreneurs.
“Initially I set out to help non-technical entrepreneurs. That was my goal because that’s what I was. Now I still have that as part of the DNA because it always will be. But the other part is also helping any kind of developer get better at these skills that I’m so passionate about,” said Mitchel on the latest episode of TFiR Let’s Talk.
He talked about why developers and DevOps teams should learn Infrastructure as Code (IaC) practices and tools, and the benefits especially with the skill shortage. He also talked about the Try Infrastructure as Code with Linode program and the tools he chose for the program.
Here are some of the topics we discussed:
- How would Mitchel define IaC and what value does it bring to developer or DevOps and operator teams?
- Why should modern software developers learn these IaC tools?
- With the shortage of cloud-native skills and the increasing complexity of cloud computing, how can budding entrepreneurs continue to build new products and companies?
Guest: Justin Mitchel (LinkedIn, Twitter)
Company: Coding for Entrepreneurs (Twitter)
Show: Let’s Talk
About Justin Mitchel: Justin Mitchel is a father, coder, teacher, YouTuber, best-selling Udemy instructor, and the founder of Coding for Entrepreneurs. He also hosts a five-part Linode LIVE!
About Coding for Entrepreneurs: CodingForEntrepreneurs.com is a series of project-based programming classes for non-technical founders. If you ever thought about starting a web-based business or project, these are the series for you.
The summary of the show is written by Emily Nicholls.
[expander_maker]
Automated & Unedited Transcript
Swapnil Bhartiya: Hi, this is your host Swapnil Bhartiya and welcome to TFiR Let’s Talk. We have with us, Justin Mitchel, founder of Coding for Entrepreneurs. Justin it is great to have you on the show.
Justin Mitchel: Thanks Swapnil. Thanks for inviting me. I’m excited to be here and chat with you.
Swapnil Bhartiya: So first of all, tell us what is Coding for Entrepreneurs? What is it all about?
Justin Mitchel: Yeah, so about 10 years ago, maybe a little bit more than that, I was starting a business with a friend of mine and he was incredibly technical, I was not. And he had to get a job to stay in the U.S. And that left me with, do I continue with this business or not? I decided I want to continue with the business so that meant I was going to learn how to code myself. I did in less time than I ever thought was possible. I was able to rebuild everything in Python, which is really what resonated with me.
And then once I did all that, I had this aha moment I need to teach other non-technical like I was, how to do all these things. So I wrote this class and I put it together on a weekend. And then here I am 10 years later still doing it.
So yeah, that’s kind of the short way of how I got here. And I mean, every little bit along the way, it’s like the more I learn, the more I want to teach. So it’s a really exciting journey.
Swapnil Bhartiya: So is the idea behind this initiative, this project, is to help developers or help kind of founders, creators of a company, as you yourself talk about?
Well, sometimes when it comes to small and medium businesses, in most cases, one man show that one person is doing literally everything, all the way from marketing to sales, to writing code for that.
Justin Mitchel: Yep. So initially I set out to help non-technical entrepreneurs. That was my goal because that’s what I was. Now I still have that as part of the DNA because it always will be. But the other part is also helping any kind of developer get better at these skills that I’m so passionate about, right? So it’s really morphed into a variety of things.
Now if you are an entrepreneur and you are a solo guy, doing all sorts of things, I think it’s important to actually have your hand in understanding how some of these things are executed, right? So even like video recording, like what we’re doing right now, you don’t have to be an expert at it, but you should dabble a little bit so you know what’s going on so you can better manage the process. I feel the exact same way as writing software and building actual software applications.
Swapnil Bhartiya: How would you define infrastructure as code and what value does it bring to developer or DevOps and operator teams?
Justin Mitchel: Infrastructure as code to me is, instead of logging into the console to spin up all of your services, that’s one piece, right? So instead of logging into the console, you have a big document that really tells the service that you’re going to use, all of the things you need from it. And the reason you have it as a document like this is because you can now have version control just with provisioning these services, right?
So if you need 10 virtual machines, you can use this document for that, right? So that’s one piece of infrastructure as code. The other piece is, how these are actually configured, right?
So each virtual machine, you have 10 virtual machines, three of them you want to be web servers. One of them you want to be a load bouncer, two of them you want to be a worker and all that, that’s then the other piece of infrastructure as code that is again, a bunch of documents that you just write out exactly how you want these things to work. And once you apply this on both sides, infrastructure as code makes all that happen and it does it in a way that’s clean, easy repeatable and also something that’s resumable, which I think we can talk about as well.
Swapnil Bhartiya: Let’s also talk about the importance, why software developers should learn these tools.
Justin Mitchel: There’s so many reasons to this answer to me. One of them being, if you’re just generally interested how your software actually runs, going deeper and deeper is something that I highly recommend and learning infrastructure as code tools will help at least get part of the way there, right? You probably at one point want to also do everything manually, so you have a really good grasp of all of it. But that’s going even deeper, right? So I think that the interest needs to be there. That’s one thing.
But really the stability of your system, that’s what it’s really all about, is to make sure your system is incredibly stable and you’re not necessarily relying on third party services in the way that you can’t just switch to another service, right? So using these tools correctly, IaC tools, you can switch between cloud providers pretty easily, or you can use a lot of them all at once, also pretty easily with the same sort of tools, right?
So like Terraform, for example, if you want three virtual machines on Linode, no problem. If you want to use AWS for S3, also no problem. And that can all be on one document. Of course there’s some configuration to get there. But that gives you a lot of flexibility over your infrastructure. And let’s say for instance, AWS, S3 goes down for some reason. It’s unlikely that it’s going to happen, but these things happen. Everything breaks all the time, that’s their ethos over there.
Anyway so if S3 goes down on AWS and you want to just really quickly switch over to the Linode’s Object Storage or DigitalOcean Spaces or whatever, you can do that. Infrastructure code makes it really easy to make that switch. Granted some of the data loss might be in there and stuff like that, there’re some downsides. But that ability to do that is really important.
So if you’re a software developer and you’re like, oh, I need static files. Where am I going to put my static files for my virtual machine? I just laid out an example of how you can use infrastructure as code to be able to move around. The other thing is when you’re talking to… If you’re a freelancer or you’re talking to a manager about all this stuff or it’s your own business, you have to make a good case for why you need to learn infrastructure as code or why you’re going to leverage these things.
And to me, it’s about having a stable system in place. And if you’re a software developer and you’re too reliant on assuming that other developers or other DevOps people are doing things correctly, it’s going to leave you in a precarious spot when things go down because then management’s going to go, “Hey, why aren’t the static files loading what’s going on? You need to fix it.” And you’re like, “Uh, I don’t know how to fix it.” That’s another reason to be using these tools, is to be able to recover a lot quicker or kind of manage the whole system better. I think I said that a hundred times already, but that’s the point.
Swapnil Bhartiya: Earlier this year, you released a series of courses called Try ISE with Linode. You covered a lot of tools, of course, Terraform, Ansible, Puppet, [inaudible 00:06:51], Chef and SaltStack. First of all, tell us, why you choose these particular tools? Is it because of their popularity or of course, they’re kind of defacto in their own space or they do bring a lot of value to developers?
Justin Mitchel: Yeah, so each tool has its own flavor of how it does something, right? These tools are the most popular and probably the most established. There are a few new tools in the space that are really exciting that I want to learn more about and at some point I’ll need to cover. But the general idea, these are very popular tools, they’ve been established for quite some time now, but the reason I covered so many of them is because of that flavor, right?
So if you’re a Python developer, you might really stick with Ansible. You might really, really like Ansible or SaltStack right? And that’s the thing, maybe you’re not a Python developer and maybe you like something else or maybe you’ve never even touched Python, but trying out these different flavors I think is really important to see which of these tools really resonate with you.
And what I wanted to do with that series is give you an introduction to that tool, but doing something very practical and that’s deploying a Docker based web application so that you can actually do it on all of these different tools from zero so that you can pick which flavor you like and dive deeper. Because I want to ignite that spark of diving deeper into a tool if you really, really like it. And then hopefully I can be along the way of your journey for that. But of course there’s so many other great tools and resources to learn even more on these tools.
Swapnil Bhartiya: If you look at, we talked about CNC, Cloud Native, the whole landscape is changing. The rules, the [inaudible 00:08:34], the titles are changing. The lines of blurring, whether you’re a developer or DevOps or dev server ops. It’s not about full tech developer, but still a unicorn developer, but still you do have to do a lot of things. And in some cases, developer, they tend to kind of stay away from infrastructure. They just want to deal with APIs to get the services they need. But I think it’s also important for them to know about these tools or technology like infrastructure as code. So talk about why they should learn or know about these things.
Justin Mitchel: Sure. Let’s start with something even more fundamental. Why even learn how to code? Why know software at all, right? There’s no code tools that are fantastic that basically do the work for you, right? So that’s one layer higher than just using APIs directly yourself, right? And I think so much of it is about unleashing your own creativity to solve novel problems and hopefully either save a bunch of money or just bring a bunch of value.
So you can use no code tools to bring a bunch of value to automate things, right? But if you want to bring even more value, I think you need to dive a little bit deeper and actually write the software yourself. That way you can start interacting with these APIs and not necessarily leveraging somebody else’s value, what they thought through, their ideas, right?
Which of course you could use these things together, especially once you start knowing how to write code, you can use no code tools together, right? But we’re not talking about no code. We want to talk about the infrastructure as code. So why even go there? Why not just use a bunch of APIs? Well, there’s a lot of business case to use a bunch of APIs. Absolutely. Whatever gets you going up faster. But the thing is when these APIs go down, what do you do? What are you left with, right?
We need to actually have some resiliency built in to handle that problem. The other thing is, what if a company that you use that’s an API service, they do something that you just simply don’t agree with, right? Your team does not want to support that team at all, any longer, what do you do? How do you recover from that? So if you want to move your virtual machines from one place to another, what do you do, right?
The other thing is platform tools like Heroku, fantastic tools. It’s really nice to spin something up quickly, but the problem is you don’t actually have control over how your application is running. So if there’s other services that you need for that application to run, you don’t have full control over it. You’re using their control, their system, what they’ve set up.
Now this is good and bad. There’s some pluses and minuses of this. And there’s a ways around it. Docker helps a lot, but overall it still is leaving you stuck with what they laid out for infrastructure. Or if you want to actually design something that works one way for a certain part of the world, or another way for another part, how do you go about doing that?
You need to be able to control the infrastructure to make those sorts of things happen. Or the other part is, something that we’re not really discussing, what if you’re trying to do something new and novel in artificial intelligence or blockchain that no offerings out there can do it except for using an actual raw virtual machine? Yet another reason to actually know how to control the infrastructure itself.
So yeah, I mean the software developer that’s hesitant to jump into infrastructure as code, I totally get it. It took me a while to really dive in and get to know it myself. But I made so many mistakes trying to provision virtual machines to just run. The mistakes didn’t happen when I was doing it. It was six months later when I was coming back to it. I’m like, what is this script that I wrote to make this thing work? It’s not working. I needed something a little bit better, something a little bit more opinionated. And that’s why these infrastructure as code tools are really, really useful for that as well.
Swapnil Bhartiya: There’s been one more thing that is happening. Number one, there is a shortage of skills. Folks who do have… I mean, as we were talking earlier, some of these technologies come so fast that you barely know people who know about the technologies. Forget about those who can manage them in production. So can you… given that skill gap and also as you said, folks who want to run their own companies or developers, they should know about these technologies, but sometimes these can be very, very intimidating also. So can you talk about what kind of advice you have for such either business owners or developers who kind of look at these technologies and get all intimidated? So how would you convince them so that, hey, you should learn about these technologies?
Justin Mitchel: Yeah, the skill gap problem is tricky because on one hand, if you don’t know anything about even just writing a simple Python application or JavaScript application or Ruby, if you don’t know those things, it might be really intimidating. But if you know those things really well, then taking one step further, it’s not as intimidating.
But my advice is if you have any sort of web application, which you probably do, it would be well worth your time to learn a little bit about how these things are managed and provisioned and configured, learning CICD, even just learning conceptual things will help you a lot with the management process. But I think these tools, especially the infrastructure as code tools, I think those are very little programming actually. A lot of the logic is already thought out for you. So you’re really wanting the result. That’s kind of what this is all about. You’re looking for a result, right?
So as a manager, as an entrepreneur, as a business, you want something from, let’s say, Linode or AWS, you want something from them. You want to store all your static files somewhere, or you want a virtual machine to run your web applications, or you need a database solution, right? These are the things that you want. Infrastructure as code is not about actually writing a bunch of code to make those things happen, instead, it’s like, hey, give me a database. That’s it. That’s all you’re saying. You don’t really care how… It’s declarative. You don’t care how it gets there. It just comes, right? So the reason I’m bringing that up is because you, as a manager are going to ask for, hey, I want this. Okay, great.
That’s what infrastructure as code tools do. You want engine X running on three virtual machines. You don’t have to worry about how all that actually happens. You just say, that’s what you want, you hit apply and it does it, right? It actually gets to be that simple. So when we talk about building a [inaudible 00:15:19] application in Python, that is not as simple. I can’t just say, oh, I need a webpage with a form that collects data. It’s not really that simple. It actually takes a lot of time to make that happen and all the logic and the control flow, right? Whereas infrastructure as code, I just say what I want and it makes it happen. So I think actually IaC tools are quite a bit more simple to execute and to understand than trying to learn how to code and build web applications.
So just, I would… My advice is just generally just dive in and try things out. And the reason I gave you all those different flavors with both the video series and the ebook is so you can do that, so you can try these different things out. But realistically, if you are hiring somebody that is going to be building out your infrastructure or building out a web application for you or any other kind of software, I think it’s really critical that you understand how, at least on a small level, how all of these things work because when that person leaves, and I say, when on purpose, because everyone’s eventually going to go on to something different, including you as a founder or a founder coder or whatever, eventually that role is going to be needed to be replaced.
And when that happens, you’re going to need to have something in place that’s going to ensure that the transition is not catastrophic. I think infrastructure as code tools are fundamental to that, right? Even in software, even web applications themselves aren’t as fundamental as the infrastructure as code tools when it comes to doing all this stuff.
So to me, if you’re really hesitant in this area, you’re hesitant because, well, maybe because you’re afraid of really just getting into it and you’re afraid of breaking things, but that’s all part of the process. We all went through that as non-technical people, as technical, even to this day, when I’m learning something new, I’m not afraid of it anymore. I just want to break everything and find out all of the problems, all the challenges that come up with doing that.
And the reason I create these courses, the reason I teach is because I’ve gone through all this stuff so I can actually show you how to break those things in a way that makes sense that you can recover. Yeah, I could probably talk for hours on different various things out of advice on actually getting your hands wet with… our hands dirty with all these different tools. But the general idea is just get it started, break things, everything’s easily to be recovered. You can always go back, you can always start over. But it’s really important to understand how all of your software is running. And I think infrastructure as code tools do that.
Swapnil Bhartiya: Justin, thank you so much for taking time out today. And of course, talk about this initiative that you’re doing with Linode to help folks understand not only the importance of these IaC tools, but also actually help them, how they can get it started and also kind of become master of what they’re doing. So thanks for sharing those insights and I’d love to have you back on the show. As you said, there are so many other tools we can talk about. Thank for your time today.
Justin Mitchel: Thank you so much Swapnil. I had a great time. Hopefully I didn’t go too long on any given question, but I really had so much fun and I definitely want to talk to you again and just dive into all the different things that we can.
[/expander_maker]