DevQuestions with Tim Corey
I am Tim Corey. I teach coding online and my inbox is full of questions from current and future developers. I wish I could sit down with each of you and share the answers I know will help you go further, faster in the world of development. This podcast is the next best thing. On this podcast, I will answer the biggest questions people are asking! Send us to your suggestion for a future Dev Questions at https://suggestions.iamtimcorey.com/ To keep the podcast coming, like, subscribe, rate, and share it with your friends and colleagues. See why thousands of students have chosen to learn to think and code like a professional developer at www.DevForge.com.
DevQuestions with Tim Corey
052 What Does A Software Architect Do?
Use Left/Right to seek, Home/End to jump to start or end. Hold shift to jump forward or backward.
What does a software architect do? How do you become a software architect? What do I need to learn to become a software architect? These are the questions we will tackle in this episode of Dev Questions.
Website: https://www.DevForge.com/
Ask Your Question: https://suggestions.iamtimcorey.com/
Sign Up to Get More Great Developer Content in Your Inbox: https://signup.iamtimcorey.com/
Welcome to the Dev Questions Podcast with Tim Corey. Join us each episode as we tackle the questions you are asking about a career in software development, understanding the industry, and new technology. If you're just starting out or you want to grow stronger as a developer, this is the place to get your questions answered. Now, here's your host, expert developer and online educator, Tim Corey.
SPEAKER_01So, what does a software architect do? What's their job? How do you become a software architect? And where does it land on the growth chart as a developer? This is uh based upon a question that David sent in that I wanted to touch on because this is a pretty popular buzzword, and it seems like no one has clearly defined it. So let's talk about software architects, who they are, what they are, and how they become software architects. Let's start with defining software architect, because there is not one definition for a software architect. There are a lot of different definitions based upon which organization you work for, because different organizations will throw that title around when what they mean is lead developer, or they mean uh project manager, or they mean person over the development team, or and the list goes on. Software architect, though, in general, means a person who can set up the direction for the software, who can design how the software is going to work at a high level. So we're talking about um, let's just give a microservice example. If you're building your application, they might come and say, you know what, instead of creating one monolith, we're gonna create these microservices and kind of piece out how they're gonna interact and um what technologies will talk between the two and between the two two different microservices, that is, and how that will interact with the kind of main application, possibly, and what backbone will be used to connect all of them, and maybe if we're gonna bring Kubernetes into the mix, how that's gonna work, and they'll kind of map out your your full software package. That's basically what a software architect does in the general sense. A software architect's job is to design or architect the software. Think of architecture in general. So, who is the architect when building a building? What do they do? Well, they're the ones that kind of can lay out what the building's gonna look like, the the overall structure. They may not get into the the weeds of where do you put outlets, but they may get into the here's how the room's gonna be shaped, here's how the structure is gonna be built, maybe even here's what type of materials gotta be used. There's a lot of pieces that an architect could sign off on. But in the software world, it's similar, where we design out the application and then we build it. Well, a software architect's job is more in the design phase of that. But I had a question the other day come up on YouTube was you know, planning out software. Isn't that the software architect's job? And the answer is no, it's not. It may be that you get direction from a software architect, but those directions typically involve things like, okay, I want you to build a microservice that talks via um event grid and it's going to do this task. That's more of a software architect's job. But the actual planning of step-by-step, okay, we're going to and kind of structure out the application, answer all its questions, that's still on you as a developer. Even if you think the software architect did all of that, you still need to go through it. You still need to make sure that all the questions are answered and that you can figure out how to write all that software and it all is going to interact properly. Planning is still your job. Even if you're given the plan, it's still your job. So architects don't typically get too deep in the weeds when it comes to the actual solution. But again, that does vary depending on the company, depending on the structure of your organization. So that's kind of the general idea of what I'm going to talk about when it comes to software architects. Now, people ask the question okay, so I'm a junior developer, I become a mid-level developer, then a senior developer, and then software architect, right? So that's that's kind of the career path. And the answer is no, that's not really the career path. It can be the career path, and in some organizations, that will be the career path. In that, you know, the software architects are the ones that have the most experience in your software and they can do that job. But it really does take some differences in skills. There's a lot of overlap between a senior developer and a software architect when it comes to design skills, when it comes to laying out not UI design, but um your application design, figure out how the different pieces are going to work together. And really that comes because of experience, because you've both seen these problems before and you know how to address them. So there will be some overlap, but taking a senior developer and making them a software architect can be a bad move. Because while they have those skills to kind of see the big picture, sometimes because of just experience, sometimes because of skill, um, they also may be better fit as a developer writing the actual code. And you may find a person that um maybe is not a senior developer or um isn't kind of bent that way, they may be a better fit for an architectural role, a person who's more invested in big picture, in how things are built and how things fit together, and really researching and getting that technology put together. That may be a better fit for a person like that who might not be the most senior-level person on your team. So it's a question mark. How do you become a software architect? And the answer is it depends. Okay, that's the answer to every question in software development. But it depends because it depends on your team environment. It depends on what your software architect is required to do. If your software architect is tasked with taking the project from design all the way through to completion, they may have to have more project management skills. And that's not necessarily something that a developer has naturally. That has to be trained. And so if you're training in that, you aren't doing software development necessarily. So there's a balance there, or maybe they're more management where they're managing teams and people. Well, developers aren't always management material. Shocker. Um, introverted people, by and large, aren't great at working with people, huh? So just because you move up the ladder, per se, in in software development does not mean you move over into software architect, just like it doesn't mean you should move up into management. That's a common misstep for developers. Getting to the point where you step into a role you don't feel comfortable in because you're the one that has seen the most. So be careful of that. Be careful trying to say that it's the next step on some type of journey. It's not. It all depends on the person, the situation, and what you're looking to get out of that software architect role. Now, who makes a good software architect? I'm gonna say that developers make good software architects, which I know I just said not every senior developer can be a software architect, and that's true. But on the flip side, not every project manager makes a good architect. Okay. Um, in fact, probably less project managers make good architects than developers. And the reason why is because development is complex. Development is not just about saying, ooh, layers technology, this layers technology, mash them together and somehow make magic. We know that there's pitfalls with that. We know that just because um this bit in Java is awesome and this bit in C sharp is awesome doesn't mean you should do both. Now that's a contrived example, but that's the kind of thing that you need to understand as a software architect. How the pieces fit together normally, so you know what you can expect. So you know, okay, for this type of environment, we probably need a NoSQL database. Or, you know what, a SQL database right here fits well. Or, you know, we really need to have a wind form app in order to get something quick out the door. But we need some power in the UI, and it has to be a desktop app, so WPF is the way to go. Or we need a web app, which one and I know, okay, you know what? Probably for this example, Blazor WebAssembly works best because you want some offline capabilities. We already have an API, and so these are things that a project manager might not know, and it's gonna be very hard to train them into. So knowing the development world and being up on it and being current is a massive benefit to being a software developer. The other massive benefit to being a software, I'm sorry, software architect. The other massive benefit to being a software architect is experience. I would not trust a software architect who has not built an application themselves. Um, they may exist and I could come to trust them, but right out of the gate, that makes me very nervous. Because if you have not built an app, it's hard to anticipate how an app gets built. So if you're coming out of college or you're coming out of the foundation C sharp course series, you're coming out of a boot camp, and you're like, okay, my goal is to become a software architect. That's my next step. Don't start applying for software architect positions. I don't think it'll go very well. Okay. You need to have the experience of having seen how apps are built, and have the experience of going, oh, that didn't work, and figuring out how to make it work, or figuring out that this is a problem. There is so much that comes from experience as a software developer. I can train you in every bit of a C sharp syntax, and you still won't be more than about a junior level developer. That's why I say the foundation C sharp series, it'll get you to the junior level developer stage or mid-level, but only based upon your practice. Because that experience of actually building applications is what will make the difference. And that's the same thing if you learned every if you memorized every part of .NET, you still would only be a junior developer. It's not until you actually learn how to apply and have done it that you start to move up those ranks. And the reason why is because theory is not the same thing as practice. So the real world isn't just a neat little box like a textbook is. It's not just this cute little example that always works. Okay. Um software development tutorials, they have this problem where they create these little applications that just work. And so when you see a new technology and it just kind of works and fits together, and there's, you know, there's never a problem, it makes you feel like that's the real world. And it's not. And I I'm I'm not taking myself out of this category. I do as too, because you don't want to show off, oops, that didn't work, oops, that didn't work. I wonder how to do this. I'm gonna Google that. You don't want to show it off too much. I do. I mean, I do some because I need to show you that this is how real development gets done. Real development is a bunch of problems, it's a bunch of debugging, and you got to figure out how to do that and learn to do it better. And that comes from experience. So you need to have experience. So, as a software architect, uh what I'm gonna look for from a software architect is experience in development. Not just a year, not just two years, but something more in depth. I want to see that you have built something or been a part of building something that is in some way significant. Not size necessarily, but maybe complexity or maybe just innovative in some way, but you need to have built something. So that experience is one of the things I'm gonna look for right off the bat. And then I'm gonna look for how do you solve problems? Okay, so I'm gonna talk you through that. I'm not gonna do any weird whiteboard examples, but we're gonna kind of talk through, okay, this is a scenario. What would you do? And just kind of talk it through. Not nothing formal, but if you can't tell me what the things to look out for are, then I'm not sure how you can be a good software architect. So if I ask you the question, okay, um, I want you to build for me a to-do app, what do you do? And you say, okay, so I I get out, you know, my my SQL application, I I'm gonna build for you a you know a.NET 5 win form application. Okay, but I didn't tell you where it should run. I didn't tell you how many users are gonna use it. I didn't tell you the major functions of it. I just said to-do list application. You kind of guessed and assumed. That's not a good thing. Assumptions are bad. So you need to come back to me and say, okay, so who's gonna use this to-do app? Um, where are they gonna use it? Are they gonna use it on their mobile phones? Are they gonna use it on their desktops only? Is this something that we need to deploy to a lot of different devices? Maybe a web app. Um, is this something we have to have offline use with, like a progressive web app or a desktop app with syncing capabilities of the database? Speaking of which, are we gonna keep all the tasks local only? Are we gonna sync them back to the cloud somewhere? If so, we're gonna need some kind of cloud involved. You see those questions you start to ask, you start to expand out what are the requirements, and you start to talk about the big high-level pieces. You know what we're gonna get, we need to get a cloud involved, we're gonna need to um have the web involved. You want to install in a lot of places easily, or we're gonna have to have a lot of different types of apps, a mobile app. We want to do Xamarin, so you have one app for Android and iOS, or do you want to do a native iOS and a native Android? Um desktop. Are we gonna do straight desktop? Are you gonna do an Electron app? We're gonna do a UWP app. Uh, are we gonna do a progressive web app with Blazor? So you have it on the web and on the desktop. All these questions that come out of that make me see how you architect and how you think through the big picture. Now, yes, we can then zoom in on one part of it. Let's talk about the the cloud. What would you do there to support a to-do list? We can start zooming in on, well, you know, it might be best to do a NoSQL database like Cosmos DB because you talk through the reasons why. It doesn't have to be the perfect answer, but what it should think talk through is what are the big picture pieces that you're gonna architect? How would you do the actual job? So that's the next thing. And then as we're talking, what I'm gonna look for from a software architect, I'm gonna look to make sure you understand the flow, the process, and how to communicate that. So if you can design a process, that's excellent. But if you can't tell people that, that's kind of hard because part of your job is communicating your vision. And if you can't communicate that clearly to people, then you have a hard time communicating that to your developers. So there's a lot of parts to be a software architect. It's not an entry-level job, it's a job that comes from having experience because that's what's gonna get you um the tools you need in order to do the job you need to do. You're not gonna train for software architecture. Even if a college gives you a degree in software architecture, you're not properly trained to be a software architect. Just gonna tell you that straight up. So be careful how much money you spend on a degree that probably won't get you what you need. Okay. So, and again, this is my opinion. You may say, Oh, you know, Tim, you're wrong. Cool, cool, do your thing. But this is what I'm gonna look for when it comes to a software architect. Okay, so that's kind of my answer to how to become one, what one is. And I think the last question would be do you need one? And the answer is to some extent, yes. You need somebody, you need someone to figure out where the overall application is going to go. Sometimes that'll be your lead developer. Sometimes it's by committee, where maybe you have three or four developers total. And so you say, okay, we're gonna figure out what this next piece is, and you kind of map it out in the whiteboard, you talk through the different pieces and you kind of brainstorm together. That can be really powerful. Having one person just choose often leaves gaps. Whereas if you have multiple people and they're kind of picking apart, well, what about this? What about that? Um, have you thought about this? Answering those questions, even if the answer is always you got it right in the first place, answering the questions will help reveal the full extent of your application. It will test what you're building before you ever build it. And so that can lead to really powerful results. So sometimes architect by committee is the best way to go. Sometimes that was be a manager, then it used to be a developer, that now transition into a management role that can work. Um, it really is important they keep up to date, to not just remember what architecture was like back in 2005. Because I tell you what, things change. Things change rapidly. And if you don't keep up, then it's hard to use the best tools for the job when you don't know those tools exist. All right, so that's my thoughts on software architecture. Thanks for the question, David. Great question. If you have a question you'd like to see answered, go to IamtimCorey.com and go to the podcast page and fill out that form. Thanks for listening. And as always, I am Tim Corey.
SPEAKER_00Thank you for joining us for this episode of DevQuesti. You can also send your questions to questions at IamTimcorey.com. Until next time, remember, you are too smart and your time too valuable to waste it making all the mistakes Tim did. When you're ready to learn to think and code like a professional developer, head over to imtimcore.com and enroll in a course.