BrandGhost

AMA - Principal Software Engineering Manager at Microsoft

4:07 - Start here! This AMA will feature questions submitted from my Discord community: https://www.devleader.ca/discord-community-access/ But as time permits I'll take questions in the chat or submitted to me on social media. In the future, I'll provide a landing page where you can submit questions ahead of time. Submitted questions: - What is a software architect? - As a programmer, should I aspire to be an architect? - How much and what kind of influence does a senior engineer have vs an architect? - How do I get an offer at Microsoft? We want the secrets! - How do I build my network to aid in job searches? - Do you believe "One becomes a good programmer when their old code needs to be modified to support new needs instead of just moving on to new projects"? - Related to the previous, is this why you focus so much on refactoring?
View Transcript
e awesome stuff I think this is live now I'm just checking on my other screens to make sure the feed's coming through and it is so that's good news I'm going to try not to watch them directly because it's delayed and it's super distracting um so yeah this is pretty cool this is going to be an AMA I reached out to folks in my scord Community tried to get a couple of questions seated um it's really tricky to schedule one of these because the think about scheduling a meeting at work you're usually able to kind of look at people's calendars and stuff but when you put out something like this for the Internet it's like what's the best time right so I figured I was just going to record it and I just pick a time that I could do it at so Monday night kind of a little bit before bed seemed like a good fit for me at least I figured I try to keep this to about an hour in length so it's 9:30 p.m. here in Seattle area and uh wrap it up at 10:30 and yeah so I have questions that I've written down from the Discord Community I have a couple of extras just to kind of seed conversation um some some types of questions that come up I do talks like this at Microsoft not regularly but I uh Mentor early in career folks um so that has a a grouping of questions about career progress and stuff like that that comes up pretty regularly I've done a couple of amas at Microsoft um even with like a significantly more senior people as me or significantly more senior people than me and uh those have been really cool too um just because people ask questions you kind of get to hear from from me and then from people that have been in Industry even longer than me so um yeah I'm going to try to monitor the chat I think uh it looks like it's sending to the video feed so that's good and I thought this was kind of cool because uh totally coincidentally I had tried doing a couple of live streams last year and they were more centered around like how to write code so I was walking people through building some really simple applications and I think it was almost like exactly a year ago that I did my last live stream so I do want to try doing more of these this one like I said will be focused more just around General software engineering uh a bunch of the questions that I have are kind of career focused um so probably not like you know programming Centric but of course if people have questions like that then if there's time and whatever that I'm happy to kind of touch on that kind of thing but um yeah it's a few minutes into this so I might as well kick it off and as I'm going through this feel free to ask questions in the chat and like I said I'm I'll try to Monitor and then that way I can answer you on the on the Fly here so okay starting with some questions from Discord the first is around U like what is a software architect so uh there's a follow-up question to this and I'll try to kind of touch on both of them but it's uh like as a programmer is being a software architect something that you should plan to Aspire to okay so starting off with what a software architect is with any type of role really the definition of it is going to vary from you know company to company organization to organization um I can tell you that from working at a startup before Microsoft we had software architect roles I think conceptually they probably aim to be a similar thing but in practice they just weren't which is fine uh because I think fundamentally when it comes to any role like you being in the role you want to make sure that you're aligned with your manager doing what's expected of you so in general I would say that a software architect position and I'm going to kind of give you a few different flavors of this but generally someone in that position is doing more um like highle system design they are thinking through uh sort of the direction that you might have products and platforms heading in technically so for example if you had a large company that had a lot of products and services you might have architects in these various areas that are trying to make sure that as we are progressing on these different products and services that people aren't um you know Reinventing the same thing across teams and silos over time that kind of thing can happen of course and maybe they start to identify these pockets of hey like these couple of systems maybe should be the same thing and they will schedule work to be able to make sure that teams can get that kind of thing addressed over time so trying to get alignment in Tech direction is a big thing um they could be looking even further ahead than what people just actively have in place and trying to make sure that hey like in the next few years like we should be thinking about heading in this direction adopting these technologies that kind of thing um I would also mention that the role of a S software architect this is the crappy thing about live streams I can't edit it so I can't fumble my words and just have to kind of roll with them I guess but uh yeah software Architects are generally participating a lot more in like design reviews and stuff like that so uh they might have their own design docks and stuff they're putting together at high levels and then across the different teams with other software Engineers there might be design docs being proposed you pull in Architects and stuff to be able to make sure that that's in line with the direction that they're trying to head in and that kind of thing I would say and this is where it starts to really um vary from org to org and Company to company but generally software Architects are spending less time writing lines of code that's not to say that they don't write code um but I would say that you know even it's smaller companies they probably start start to take their hands off a little bit more but at small companies like you know I was managing teams at a small company for eight years and coding like every day too so it's a lot more common at small companies that everyone is trying to you know help progress in whatever way they can with the product and service so uh at big companies though because you're interfacing with more teams and things like that the likelihood that you have dedicated time as a software architect just to sit there and start contributing code it's just reduced so not that it doesn't happen it's just that it's reduced uh the next part so hopefully that that clarifies things like I said it's not it's not written in stone but generally it's a kind of more high level thinking about the direction of the technology so as a programmer should we aspire to be saw for Architects this is interesting I think that like what I would say traditionally people here and maybe this is you know changing which would be good but I think traditionally what people hear is that like the path forward at some point is manageable and I completely disagree with that because I think it's a very different skill set being a software architect is a lot more in line with being a software developer and that kind of progression so is it a good fit um perhaps uh but I I think if you keep in mind the types of things that I was mentioning like you're a lot more focused on highlevel design forward direction of Technology keeping alignment across teams and parts of the organization with that technology direction if that interests you like highle system design and that kind of thing then then perhaps it's a really good fit uh I think that if you're someone that really appreciates just you know getting dedicated time to you know create software and you know code solutions for for challenging problems that might start to feel not as rewarding the other challenging thing with answering this is that the different sort of career structures and career progr aggressions that you'd have at different companies will look different right so I think uh the the company was at before Microsoft before I left it would have been like engineer senior engineer and then like architect would have been the progression of that so like if you wanted to keep progressing in your individual contributor role as a software engineer it kind of made it such that you would be heading in that direction whether or not that's the case now different story but that's one example that could exist out there right now in other cases it might be that that's just uh like a Divergent path on the on the career ladder so to speak so if you wanted to maintain being able to contribute you know individually writing code spend not spending as much time like say in meetings and you know uh coordinating between different teams and perhaps there's dedicated rules for that so I just think it's about what your interests are coupled with what's available um so if you're interested in staying at a company that maybe forces you in that direction like that might be what you're looking at uh not necessarily something that I'd uh you know try to stick to or not explore other options just checking the chat here oh it looks like this is definitely spam so that's very cool no I I'm not interested uh okay so hopefully that kind of helps uh with you know programmer aspiring to architect I might as well touch on the manager part because I think it's kind of related to this type of question I know the question was about programmers to Architects but manager comes up a lot I think too and what I would kind of caution with this is It's a similar thing but more exaggerated in terms of focus areas and skill set so I would say that for folks that are like hey I'm going to keep you know progressing in my career I'm going to I'm a junior engineer I'm going to become senior and then at some point I'm going to be a manager because that is the stepping stone um I just I want to caution you that they're they're just different roles and sometimes it's not obvious until people are are doing that transition uh I've I actually started Dev leader it's 2024 I started Dev leader in 2013 so uh a long time ago 11 years ago and I started it because I was in this position where I had taken on management and being a manager and working as a software engineer at the same time I figured I need to do a lot of learning I'm going to start blogging about you know my experiences doing this not to say I'm an authority on it because absolutely not I had no idea what I was doing I was just starting but I wanted to create Dev leader originally for that so I to kind of touching back on that original point though the challenge is that you're experiencing so many different things that aren't just writing code when you're managing teams and you'll probably hear me say a lot that I think that the biggest challenges in software engineering are not technical problems like Engineers are very good at solving technical problems I think the biggest challenges in software engineering are working with people um sometimes as software Engineers we might not be exposed to all of these different types of things but it's maybe the case you're not paying attention to them as well because there's a lot of interpersonal conflict that comes up a lot of conversations that I'll have one-on-one with people about how they can do better communicating that kind of thing so I spend a lot of time focused on people right in my current role at Microsoft I do not write code I was writing code a ton at the previous company um and just check in the chat yeah I I'll touch on that question that's a good one uh so thanks William the company that I was up before I was coding alongside all of my management you know uh expectations but the current role I have is just managing people in startup world for me I worked and this is no one's fault except my own like I love to do it but I was working non-stop so if you're managing teams of people truly if you have more than like five people you really don't have time to be doing other things like if you're still contributing to the code base my opinion not a rule here but my opinion is probably that you are either not investing enough time with your people on your team or you are maybe doing you know Parton my language like half ass code or you're making time like you taking extra time uh for your work so I think that to balance things properly once your teams start to grow in size you you really just don't have time to be coding as a manager it's not to say that it cannot be done but I think you start making trades so for folks that are like this is my career path like yeah it was mine um actually was kind of almost like accidental from being in a startup like hey you're you can talk to people you know the code like do you want to manage the engineers coming on and I stuck with it but the skill sets are certainly a lot more um you know on the human skills so definitely something you have to think of uh and I would say too that in terms of like project management product management that kind of thing you end up layering in a lot of that there's a level of you know architecture expectations in an engineering manager role all these different things get layered in and again when you start doing that and making sure you're focused on on the engineering teams like there's just not time to code it's the reality of things okay so that that's kind of just me building off that architect question um the next part this is actually a multi-part question uh so how much and what kind of influence does a senior engineer have versus an architect I kind of touched on this a little bit but uh so I won't spend too much time on answering this specifically but I do think that as a senior software engineer obviously you're going to have input on you know the especially in the area that you're working in like the architectural Direct and things like that so the I would argue like kind of the architect's role is at a macro level the direction of the architecture and within a team or a smaller group and stuff like uh senior software engineers and things like that you know you might be putting design docs together having your team sign off on them other teams that are going to be interfacing and perhaps even Architects right like I said coming into that so you do get that kind of influence as a senior software engineer it's just not as Broad and I would say usually you're probably having like Architects kind of sign off on saying like yeah that makes sense they might not know the specifics of the domain you're working in as well as you right so you would be the subject matter expert but they're looking at your solution or your proposed solution going that seems to check out like I trust that you know what you're working on but that seems to check out with the rest of the direction that we're heading in so it would be more um I guess like wider area for a software architect versus a senior software engineer and this is these are generalizations right it's really hard to answer this as like a blanket statement because anyone listening to this might go well that's not the case where I work and probably right there's going to be exceptions and deviations from this but just trying to give you a generalization um this is a great question how do I get an offer at Microsoft uh we want to hear the secrets uh I I actually uh I guess it's uh probably not that surprising being on social media and stuff I get people asking me all the time like hey like can I get a referral hey like how do I get a job um the reality is like and you can if you are someone that's asked me you can you know reply to this but I tell people you get a job at Microsoft the same way that everyone else does you go to the careers page and then you look for the job and you apply for it the reality is yes there is like referrals and things like that but I would never Microsoft aside I would never refer people that I haven't worked with and that's not because I don't want you to be able to get a job or something like that I don't do that because it puts my reputation on the line as well right I want to make sure that if I'm putting someone forward for a referral that I can stand behind that it just would be wrong it's like against my morals to do that but ultimately even if I wanted to refer someone they still have to apply on the careers page so there's no secret you apply on the careers page uh but if you're if this question was more about like how does it look to try applying and getting a job and interviewing and stuff like that uh it is like a big tech company right so a lot of the stereotypical big Tech interview things apply here so depending on it's going to change from role and level and stuff like that but uh generally speaking uh several of interviews and this is to get different perspectives from different people also at different levels and they focus on different things so you might get coding questions in all of them you might get coding questions and system design questions mixed in so these types of things will come up and the interviewers are also looking there for certain characteristics and things that when they get back together after they can talk and you know uh kind of evaluate make sure that people got to hear a fully rounded perspective on the candidates definitely um you know I'm not a big fan of doing like Elite code problems and uh grinding like system design interview questions I think that if you're looking to apply at Microsoft or other big tech companies it's a pretty typical thing um so the way that I talk about approaching these types of things I made a few videos and written articles on this as well but if you are trying to apply to Microsoft or other big Tech I think about these in different phases because one of the first steps is making sure that like your resume gets noticed right because what like what good is the interviewing skills if you can't get noticed with your resume so putting in effort to you know craft a good resume make sure you have visibility apply to the right job rules things like that that's a whole set of skills and amount of effort you have to put in next step is okay cool you start getting the interviews and things like that I would say that especially for big tech companies Microsoft included having practice with things like lead code is very good and I say that because you're going to be put on the spot to do a programming question you're going to want to be able to talk through it there's probably algorithms and data structures involved and I don't like about lead code problems and similar interview questions where people just try to trick you like oh you know the optimization and you do it in one line kind of thing like that's kind of silly defeats the whole point um so I would focus on making sure you can walk through that with your interviewer like here's how I'm thinking about uh you know stepping through this how I'm approaching the algorithm making sure you're asking clarifying questions right you don't want to make assumptions you want to ask them get it clarified move forward and the same thing with your system design questions that you might get they're purposefully left vent right if you do some research and homework on this you will find this is part of the strategy you get I need you to build a system that processes payments for movies okay and if you just start building it it's like did you did you ask the right questions about what you're building right so part of that is making sure you can say like well how many users do we are we thinking about uh supporting concurrently are we are we prioritizing like latency like are we thinking about um you know movies being released and we have to make sure we can handle burst traffic like all this kind of what payment gateways like there's a million questions you could ask but you want to start asking some questions to narrow in the direction you're going in and as you're building it keep asking questions and getting the direction so the other part beyond that will be more like I guess you call them like soft skills like talking about experiences and things like that uh this can look up bunch of different ways but I would honestly just say like practice going through different parts of your career your resum things like that just take some notes like you just want to be comfortable being able to draw from different experiences that you've had right think about challenging conversations you've had at work projects that failed projects that were awesome just these different scenarios and again like you're allowed to pause and kind of reflect in the interview nothing wrong with that but you don't want to be scrambling and going i' I've never had a project not be perfect like really it's software so like you probably have um but yeah like I would say there's no secrets but you have to be able to practice going through those interviews and I should to round that whole question out the third part is a lot of those skills for the uh system design well system design is still good but a lot of the coding practice problems I really personally don't feel like translate into stuff that I do day-to-day I let me back up engineering manager slightly different They Don't Really translate into work that I see software Engineers doing day-to-day including when I was writing code personally so I think that it's an important skill it's just not as important when you're on the job it's good for interviewing um how do I build my network to Aid in Job searches I think this is a great question and I'm glad that more people are thinking about this um something I'm just going to kind of give you one example that I've seen working really well for people but I would say like getting online and sharing your learning I think is an awesome way to connect with people to get visibility but what I would caution against is you don't want to be learning something and try to pretend that you're an expert people can see right through it it's really can I say the word cringe like am I I don't know if I'm too old to say that it's cringy it's obvious but what's really cool is just being like hey like I'm learning this thing and here's what I'm learning so you get a bunch of different benefits from this one is that when you talk about what you're learning uh I was talking about this on social media literally today but when you talk about what you're learning you find different ways to convey what you think you understand to different audiences you find out very quickly if you know what you're talking about because if you're like I don't even know how I would explain this to someone like maybe you don't know it as well as you thought it's a really good like gut check next part if you're open and transparent about hey I'm learning this here is like kind of the summary of what I think I've gathered from that you will have other people if you have if you start to do this frequently other people chiming in and being like yep that's right or nope not quite of course online you're going to get all sorts of things in between with mean people and whatever else but you know keep keep moving along it's the internet but you start to get these connections of people that go oh yeah like Nick posts about this kind of stuff like oh interesting like oh he's learning about this like I know about that actually let me see if I have something to add in I think that's really good and the process of doing this you start to build up a bit of a I don't want to say like a on necessarily an online presence or like Creator influencer type of thing that's a bit more just active been a bit more extreme but doing that can help you network with people you could consider blogging about the stuff you're learning putting stuff on GitHub uh I don't personally like I don't think you have to have projects and stuff on GitHub I think it anything's helpful right anything you can do is helpful but requirement I just don't think uh any company that's saying You must have stuff on GitHub to be like hired like probably don't want to work there personal op op but I'll say it uh but yeah on that not build projects I think it's a great way to learn you can start talking about what your building and that kind of stuff it all feeds together but that's how I would suggest networking um especially if you're online posting content you see other people like I work at Microsoft cool like connect with me then build your network you'll see oh this other person works at Microsoft in this space let me follow them and see what they're up to oh they're using this technology hm I wonder if I to go you know play around with that and see what that's all about um like it's a network right just start connecting with people start interacting I think there's a lot of opportunities um what else okay so that's networking this so this was an interesting question do you believe and then there's a quote um and the quote might not be exact here but uh one becomes a good programmer when their old code needs to be modified to support new needs instead of just moving on to new projects so I think the quote here is trying to say like instead of just building something and going cool park it onto the next thing and keep going along um that you have built something that is lasting I think this is kind of what it's after building something that's lasting and then you're going oh like we have the next wave of like enhancements that need to go into this obviously depending on what you're building this could look very different but the followup question to this was about refactoring so I don't know if I would like this quote seems very specific I think there's a lot of things that make good programmers so maybe I'll start by saying I don't you know specifically agree with this is it is it a part of it or a way to look at it sure but um I don't think that is what makes a good programmer I think a good programmer I mean I should have thought about this before I opened my mouth I guess but I think a good programmer is obviously able to write good code that can be tested that can be uh read easily that can be uh like it extended easily so if you're like to the point of this question if you're coming back to it wanting to add more things um that you can you can enhance it without just having to go oh like guess guess we painted oursel into a corner here and we have to do something else so being able to enhance things test them readable for the most part um that's on the technical side but I always say like good programmers like you're work as software Engineers right you're working in teams like there's so so much focus on the technical skills that I think everyone just completely forgets the soft skills the people skills I see it all the time like all of the time for over a decade right people hyperfocus on technical stuff you will be working in teams almost I can almost guarantee it and if you're not thinking about how do I collaborate well how do I communicate well if you don't practice these things like you'll get into the workforce and you might feel like oh crap maybe I'm not so good at communicating things clearly maybe I have challenges collaborating with people in different scenarios right like those are things you want to work on so I think all of those factor into what a good programmer is but the the next part of this question like focusing on refactoring um I think refactoring is like one of the most important things that you can be doing like have as a skill set as a software developer the reason I say that is because and I'm trying to digest this quote a little bit more because I don't know the context of the quote um but the reason I think refactoring is so important is because if you're just throwing away the things you build rewriting them like there is so much waste that comes with that and I think that anyone who is just kind of like always jumping to a rewrite I don't think that you're learning some important lessons and maybe that's maybe that's a loaded thing to say um but I don't think there's like there's lessons I think that you're not learning and practicing by not refactoring so what I mean by that is you build something gets to a point and you go we can't continue to enhance this because I don't know like the code's not set up properly you go okay well guess we start from scratch and this time this time we'll do it the right way okay then what do you think happens you go build it again it's not as good for a long time because it's missing features you started writing the code in a really nice way and after longer than you thought it gets to a point where you go cool we did it this is awesome and you wait a little bit longer and you go man we can't add feature this features to this anymore we you know we painted ourselves into a corner again we have to rewrite this and you do it all over again so it's not that rewriting is the end of the world or you should never do it but I think when you don't practice refactoring things you don't understand the different you don't understand as well the different path patterns practices uh designs and stuff that you want to put in place to say this thing that I'm putting in place here will allow us to extend this easier and you have to be careful because if you do this to an extreme you almost get nothing done because you go I can extend this infinitely I actually personally fall into this Camp a lot with my personal projects just because it's the style of programming and design that I like to do so in professional projects I have to be very careful about do we really need to think about extending this in this direction like could we come back to this later pay a little bit of extra you know debt down to do this but the reason I focus on refactoring so much is that I think you need to be able to have that skill set to continue having soft rol um yeah I think that's how I would wrap that one up I want to jump to William's question in the chat and sorry I wanted to get through my Discord uh questions that came in so Williams question says do you think AI will take many Dev test jobs even it uh even it is also even if it's also created some jobs um yeah I think the way that I would think about this is like I see and who like the hard thing is like who knows right because maybe someone will watch this video in 10 years and go what an idiot how could he think that trying to be careful about my future self going oh man like you shouldn't have said that uh but my personal opinion here is that at least currently right AI that we're dealing with is large language models I think it's doing some incredible stuff totally very impressive so I'm not trying to to discredit it I think what we will see over the next few years is that there are things that we do in testing roles software engineering roles right that are things that can be repeated easily right I just think about like Automation and there's stuff like as unfortunately as programmers we go hey I'm a programmer I can automate that right and then the two second task that takes you ends up being you know a week to automate but we do that kind of thing because we're trying to save ourselves time and I think AI over the next little while especially is going to start really chewing away at some of that stuff so I I don't think in the short term it's just going to you know obsolete software Engineers testers that kind of stuff I would say um on the testing side like I have worked with dedicated testing roles before and depending who's watching this I have I want to be careful about the language I use because I don't want to misrepresent what I'm trying to convey if you were doing manual testing roles that only that only involve clicking through a script you know like next press this button next enter this text okay test case passes like if if it's strictly just repeating things I think that your role is already Obsolete and it was obsolete before AI it's not to say that there is no value in testing it's not what I'm saying I'm saying that there's in my opinion very little value in having a human being do things that are extremely repeatable so if you were a test and all that you were doing was having a script put in front of you to click things I would say in my opinion your time is much better spent learning how you could go automate this then you can go focus on doing other things and I wanted to say this part because when I say go focus on doing other things I think that if you're the type of person that's extremely complacent in what you're doing you will probably be the part of the first group that finds themselves going wow like AI is doing my job and it's because as AI is able to do more things more effectively you are not putting yourself in a position where you're going cool AI is able to do that I'm going to take on a different Challenge and continue to build up my skill set focus on these other things that need attention right like you you take your time time back to go focus on the next biggest high priority thing that you can do a good job of so I I think it's a bit of a mindset thing I use testing as an example here I'll use I'll just make up another one um off the top of my head if you were a programmer that spent most of your time hopefully this isn't most people but if you spend most of your time just doing code reviews right maybe maybe AI gets to a point where you know we have linting in place already we have compile time stuff static analysis like add in AI to do some extra analysis on top of that maybe AI in the short term helps close the gap in a lot of uh like PLL requests and code reviews I think there's other value in that like you can learn about what people are doing but if you just want someone to sign off on like is this good if you were spending all of your time doing that I think you'll probably be obsolete pretty fast but again like I think you should be focusing on what's the next big challenge as a software engineer as a tester that I could be going to do um and then on the last part of this right like even as it's creating some jobs like yeah like there's a lot like there's just a lot of stuff that's coming up right now you could be someone building tools that like have an AI layer to them right to help out with things I think AI is like super good or obviously it's great at a lot of things but a a really good use case that I like is like creativity right hey I need to refactor this code and like I know that there's a problem that I'm trying to address ask a large language model like here's the problem here's the code like maybe you're not familiar with a bunch of different refactoring techniques or design patterns architecture Styles you could ask it and it could do it and explain it for you right it might not be perfect but like that creative Pro of like oh I didn't think about you know if I restructure these objects this way like yeah like that could be a huge help so I see a lot of opportunity and I think personally because I see a lot of opportunity I don't see it so much as like a a scary risk because I'm seeing it as replacing some of the boring mundane things so that's my my stance on it um if we wait a little bit longer and I start going oh like maybe maybe it all Leets engineering managers right because if we don't have software Engineers like I don't know who I'm going to be managing right so we'll see I think it's going to be a really interesting time uh but personally I'm not scared about it because I'm seeing it as opportunities so thanks William I I hope that answer kind of makes sense um but yeah that's my my stance right now well I'm going to scroll through some other questions unless other folks have them in the chat um what skills oh mistakes yeah I can talk about mistakes in my career um I'm going to talk about some like Engineering Management mistakes first because they're very relevant to me but I think for for you folks I'm going to uh as I'm talking going to try to see if I can think back to some stuff that maybe I messed up as a software engineer um and try to share some stuff on that but yeah early on uh as an engineering manager that was balancing teams the and and writing code I think something that I messed up on early was this misconception of how much time needed to go into managing teams so that's one part so for me early on what I used to do I think early on I was managing like up to 13 people at one point I think that's the most I've ever managed at one point in time so up to 13 people or so plus coding and what that meant was that I would go a couple of weeks where I would only be coding and almost like not ignoring the team but really not doing like a good job managing and then I would go oh man like this this is bad like you you got to focus on the team and then I would focus on the team for like two weeks straight catching up and then not code and stuff and I had this big pendulum shift back and forth and then I really had to think about like how do you manage your time better so that you're doing these things evenly now the reality was I was just working a ton so I ended up just kind of fitting it all in but over time what happened when like especially now right like I'm not writing code that's one of the biggest advantages right now is that I have more time to be with the team another another quick one I'll share I've been fa very fortunate as a software engineering manager that I've had like really awesome people to work with and I think a mistake that I made early on was assuming that people that are just like really good at software engineering right they're they're super high performers like great people skills like great software developers like just thinking oh well they're doing good so like Pat them on the back and say great job but what I didn't realize was like it's really just like a a super lazy terrible way to manage people and I thought that managing was going to be primarily just focus on people that were having challenges and trying to you know help skill them up help them navigate that stuff but I did not pay enough attention to you know more um you know like high performers that really needed a bit of push in their career Direction I wanted to keep them engaged I think I just got really lucky to be honest and by the time I learned that I started to like it made managing harder because instead of just saying hey you're doing a good job I wanted to go back to these people and say you're doing a great job because they are and here are the areas that I think you can focus and to do even better right sometimes it's really hard for constructive criticism when someone's doing well to like to pick apart and find bad things cuz they might not have like huge flaws or something but you can change the framing a little bit to say things like you do these things amazing and I think these other areas like compared to the amazing things you're doing these are good opportunities to level up as well so just investing more time into that I'm just going to read this question from the chat can you please share how you started your journey on becoming principal software engineering manager and is it your goal to become a manager or it depends on the current situation yeah so my I'll share like my story right um I like it was coincidence I think I became a software engineering manager like a few months into my first role outside of University so to back up a little bit in University it was a 5-year program but I had six internships I basically did not have breaks so it was like school internship school internship it changed a tiny bit at the end but I had six internships so I had two years of working experience like at real companies before graduating and then my first job outside of University was at a startup and this was a digital Friendzy company and was there as a sare engineer for a little bit and as a startup they're like well we're growing and kind of said we don't have managers like do you want like are you interested in trying this like sure because the we had a awesome uh HR person uh and I I owe a lot to her in my my career development but one of the things she said she encouraged me she's like you you can be the judge but she's like you do a great job talking with people people understanding them like navigating things like I think you could do this well and it's not something that I had even considered because I had just graduated and I'm like I'm writing code programming is cool I love it you want me to manage people I don't even know what that means but sure like the company needs it I'm happy to try it um and then kind of stuck with it so over those eight years multiple times a year she would meet with me and she would say what do you think do you think it's time that you go you know back to just being a developer or do you think it's time that you you know Go full into management she said I'm not trying to pressure you I'm just trying to gauge where you're at and by the end before I left that company I was like yeah management I had finally started to realize that my own impact as a software developer was not as great as being able to help those around me and I'm a little bit biased right because I was early on at that comp I had built a lot of their you know uh initial products and stuff it ran like a lot of prototyping so I always felt like if I'm coding I'm helping create these awesome new things uh but by the end of it I was I felt like I was running around just helping people and I started to realize like like yeah this is for me like the management part so that's kind of like what happened for me um but then from there like going to Microsoft I was hired in at a principal level so I feel like you know things might have been different if I started in big Tech I might not have had the same opportunity so definitely owe it a lot to like startup culture and that kind of thing so for other people not my story now but for other people I do think there are absolutely other people that are in this situation where they go hey like I'm you know I've been a technical person for a while individual contributor and now you know their team is growing their manager like I really need some help as this team's scaling up like do you think you could do this similar to to the situation I was in and I think some people kind of just fall into it and I've talked with people that are like hey I'm new to like I've been a s like a senior principal level software engineer for years and I've just become a manager holy crap this is way different than I thought right so I think some people fall into it um and they they start to learn about what's you know expected of them and what's different right and then I think for other people I've definitely coached people that that had said like you know as more more Junior like maybe intermediate level right like I really like being able to help Mentor people coach people on things as we're doing these projects it's really great to work with the interns the Juniors or even just help bring on other people to the project like it's not that their like coding skills are lacking or anything like that but they really gravitate towards these other things that like are not just coding and I think some people identify that for themselves early that they like that and then I can help kind of you know push them along that way in their career so hopefully that helps answer but my experience was definitely accidental I don't regret it I think it's been an awesome Journey so I'm happy with it I see another question here um most memorable lessons challenges difficulties when you started being a manager um yeah um biggest okay I have a lot of things kind of flashing through my head right now biggest challenges for sure um I've had to let people go um it sucks it's it's terrible um and I should back up I've had to let people go like not even as part of layoffs I mean like I've had to fire people and it's awful I hate it um it's part of the job unfortunately for individuals that I've had to do this with um I can say that I work with them right I work with them try to address gaps and things like that communicated with them still it's it's so hard it's the like you think about constructive criticism conversations and it's really hard to give someone like constructive criticisms you're doing that really difficult I think it's difficult for many people and then you get to the point where you have to say it's not working right like the it's so hard to do but at the same I'm going to share a really cool Twist on this in just a moment but it's so hard to do but a way that you need to try framing it is like if it's not working for this person you're almost doing them an injustice by forcing them to be in this spot where they're like I can't succeed right you try you work with them you try to skill them up or address whatever challenges there are and ultimately at the end of the day if it's not a good fit like making sure that they can have opportunities elsewhere in their career like it sucks but I think that's a way to to think about it and the thing that I want to share that's the Twist on this is I actually had someone that I had to let go I had to terminate this person and it was awful right there they're it's never good it's awful and I ran into this person years later I don't maybe four five six years later and I remember seeing them and being like Oh no like oh no like that's someone that I had to fire and you know came up hey we're small talk and they they broke the ice and they said I just wanted to let you know like that was really hard but I think that it was the best thing that happened to me right I know that it wasn't working I know that you know we tried working on it it wasn't working I ended up going to this other place and I was a great fit there and I remember hearing that and being like okay like it's almost like this uh I had this like baggage that I was carrying or like every time you let someone go it's like oh man this is terrible but these people end up finding these awesome opportunities where it works well for them so just try to keep that in mind um most memorable lessons uh okay I want I want to share something it's maybe not a lesson but I think the most the most rewarding awesome thing because I want to spin this around a little bit and have something positive the most rewarding awesome thing is having people that I've managed become managers and not because I'm trying to say like oh they I don't know like they they got the position that is like they have to be a manager kind of thing CU we've already talked about different career paths and stuff not everyone should be a manager I have worked with a handful of people where I manag them and I was like I think you will be a great manager just the way that they work with people they have the technical abilities as well and I've had two people in particular that were like no like not for me don't like the people side of things I'm happy to coach people Happ to help with interns like that's that's fine but I don't want to deal with people right like that I draw the line at that I don't want to deal with people and I've watched them become managers and they're absolutely killing it they're doing so good at it and it's just I don't know it's like so rewarding to be like I knew it and you're doing so good um so yeah done that with a couple people I had another another guy work with I podcast with him his name is Graham we have a podcast called uh dude wears my code uh Graham is someone that I had on my team he was a tester but he took on like a test strategist role so he really he really worked like a software architect but in a testing position and he ended up going on to being an engineering manager as well and he's incredible at it he's actually a director of engineering at a startup and um and we have a podcast where we literally meet up uh we try to do it once a week but you know life happens and we meet up and we talk about like what things are you learning as an engineering manager like let's talk about these experiences so for me that's one of the most rewarding things is like seeing people kind of move to these different stages in their career um I've had I've had a couple of people leave uh at least what they've told me I think two people in my entire career have left and that's not that never happened before until Microsoft not this this not Microsoft's fault or anything but I'm just kind of framing up for you like eight years of my professional career managing no one had left my team uh like no one had quit and at Microsoft I had a couple people quit and I think in one case it was really like you know really appreciate you as a manager but like I think that I'm not doing myself a favor by exploring other companies you know early on in their career still it's like it's hard like I'm not going to argue with that right I did the same thing with my internships I had six of them right I got to explore so I get that perspective um proba in that situation I'm assuming pay was probably really good which leads me to the next person I had someone leave and they took they were I think a junior engineer and they took a role that was paying more than I get paid as a principal level engineer engineering manager it's like yeah like that's for for that that pay jump I was like that's a life-changing amount of pay difference like I'm not I'm not going to you know say that that's a wrong thing to do like if we can't compete with that we can't compete with that so losing people's hard for sure but again I always try to think about my role as an engineering manager is making sure that I can help people do their best work that they can the second part to that is helping them advance in their career I would love to do that and keep the people people on my team if I can't I would like for them to stay within our organization if I can't I would like them to stay within our company at least and if I can't I need to make sure that at the end of the day I can say I tried everything I could to give this person their best opportunities and if that's not here I need to see them succeed somewhere else and I will be holding them back if I try to keep them here so it's hard when people leave but I think that's the way that I try to look at that um I don't see any other questions in the chat I hope those I hope those answers help by the way um if you're still on here because I can't really see who's on the live stream if you're still here though and you want to have any follow-ups or that just let me know happy to try diving in um just scrolling through some other questions here man project management and large scale software development yeah challenging challenging for sure um I think the biggest part here is um okay let me let me I'll wrap up this question quick and then I'll jump to the one of the chat thank you by the way for your questions um I think it's not so much like the size of the project that's the issue I think it's the size of the organization and I say that because I've seen big projects work really really well lots of I don't like using the word agile anymore but like lots of you know being Nimble moving fast I've seen a lot of that happen on big projects when there's not a lot of red tape in place and people feel like they're empowered to make progress you have you know good um connections with your product owners they understand the customers really well um you have autonomy within the teams to try and make sure you can deliver things like when you start getting into bigger organizations there's more processes in place because the organizations get so big and I see that being kind of challenging so just wanted to kind of say project management in large software projects not really the big thing it's really about in my opinion size of teams uh organizational maturity um the bigger the or the the more difficult it is oh boy something in my eye okay can you share your role at Microsoft and can you compare it with your past experience and how it helped you your role Microsoft yeah okay so I'll answer the last part of this difference between a principal and non-principal principal is just um uh name for a level so at Microsoft then levels are really oddly numbered I'm not sure where the numbering scheme comes from um but like a level 59 and 60 would be like a junior and principal starts at 65 so principal is just the title that you are given once you hit level 65 at Microsoft so difference between principal and non-principal the same as saying like difference between senior and and principal um honestly uh scope of it this is the same between all the roles like or all the levels scope of impact right um your amount of impact increases scope of impact the different teams and organizations that you're interfacing with that increases right so at principal level you're doing cross teamwork larger impact um so it it just scales up as you go but that's the the principal versus non-principal part but my role at Microsoft compared to past experience yeah um I mentioned this a little earlier my past experience was coding the entire time that I was managing and that's like I think the biggest difference right biggest difference was that the other big difference is that in my previous role I knew and I'm not trying to sound arrogant about this but I was around at the company since like right near the beginning I think it was employee number eight and that includes like sales and marketing people so uh very early in on the engineering team and I had seen like every product that we had we had one product before I got there and it had a a counterpart to it I rewrote the counterpart from scratch like me alone in the beginning and then from there I was prototyping a lot of the new product so I had this sort of like I don't know like advantage in my management that I knew a lot of the product background I knew a lot of the original code bases because I wrote them and I don't think that's a requirement for managers by any means but it's something that I could lean on right I could you could pull me into any conversation on any team and start talking about something and I would have a lot of the context again not trying to sound arrogant about it but I have a lot of the context because I built a lot of a lot of the initial parts that people were talking about so I just had I had a lot of experience across many areas Microsoft is very different because it's enormous I'm in the office 365 side of things um for folks that are familiar with it it's in an area called substrate substrate is an enormous area in and of itself um before before this year I was managing deployment teams so we made sure we were deploying the uh monolithic and micr services uh across the entire fleet of hundreds of thousands of machines like I don't know all those services not at all I don't know all of our deployment stack even after working on it for three and a half years like there's so much history there right I don't have that luxury at Microsoft um fortunately like I worked in C A lot we use a lot of C at Microsoft as you might imagine uh despite maybe what people are seeing in the news and stuff it's yeah it's almost all C and I can lean on the C part but I don't have the context of knowing the code bases and again like why does that matter I just think that it was something that I could lean on a lot it meant that I could talk with other Engineers other stakeholders if people wanted to get super technical I could say yeah like I can go show you the the class I can show you the line of code that's causing this problem Microsoft I can't do that I have to say I will find you the engineer who can do that so it makes it very different so um I felt like that was a superpower that I had before and now at Microsoft I just don't have that superow and I I need to rely on my team a lot more um future of software engineering in the next 10 years yeah I I think going back to that AI question I think I don't I don't think that soft wrench engering will be replaced by AI do I think it will be heavily influenced by it yes do I think it will look very different in 10 years yes um you know are we going to be writing as much code by hand like probably not but this just goes back to my point from earlier I think that the actual Act of writing code like there may be like we even see it now like uh if you watch my YouTube videos there's a lot of the time I'm coding live and I'm just pressing Tab and it's because co-pilot like it knows the other code I've written it knows what I want to write next it's already happening where it's making the coding experience much much faster so I think a lot of that will continue to be more optimized just feel like a better experience and yes I think that as you know over the next few years we'll start to see more things like I don't know um I'm trying to think about like really boring things or like things that just feel like they're uh I don't know like monotonous like in software development you have two different Frameworks you have to link together right like you're like oh I have to or I have to Port some code or whatever like give that to the AI let it glue those pieces together let it you know transcribe that code from from java to C um all that python code that exists out there yeah we want that on C right so I think there's going to be tasks like that that just become so much more easy like I think it will feel a lot more fluid to work uh as a software engineer in terms of moving code and stuff around integrating with systems but I can see um I can see a lot of software development moving more towards like a product Focus I could see it moving more towards like a system design type of thing um you know the more the the the more advanced a gets the more we can trust it right give you an example you might ask an llm right now Implement an algorithm that does X and make it performant you get the code back and you're like okay well there's bugs in the code first of all right I think that will get better and then you're looking at it and you're like depending on how skilled you are you might say okay that's actually not as ADV uh as U as optimized as it could be so you asked the llm again hey optimize this more and it tries right maybe it gets a little bit further but then it adds more bugs in so I think that that type of process it will get much better at so are you going to have to know as many of these like algorithms and data structures like I think the understanding is always valuable but I don't think you're going to have to use them explicitly I don't think you're going to consciously have to sit there and go oh here I go choose a linked list for this algorithm because I think you'll just be able to say hey AI I need an algorithm that does this point it to some other code that you have and I need to interface it with that go do it right like I see that being a lot more of the direction versus like completely replacing software Engineers but um 10 years is a long time 10 years is a long time so it's hard to say but that's my my kind of prediction at least for the next next few years maybe maybe we'll do another AMA with this this exact same question in a couple years and we'll see off I was um I'm going to log off in here just a moment so I'm going to take this one last question and again thank you because these are really good questions but we'll end with this one um why is monolith still more common over modular monoliths for medium to large apps what are the challenges in adopting a modular model strategy can you some recommending good learning resources yeah um on on resources I'm going to give a shout out to um and Sorry by the way I don't know NE necessarily where you're coming from I know obviously you're on you're on YouTube uh putting this in the chat but um if you follow me on LinkedIn or um these people are also on YouTube making videos like um uh Milan who makes c videos uh like uh he's awesome and uh my goodness this is the thing with doing it live it's like I know I can picture their faces and stuff but I'm like I can't think of their names uh code opinion Derek comart um Derek has an extremely good way of explaining things where like he you if you wanted to debate Derek I feel like he can debate any side of it and win because it's not about like being absolutely right or absolutely wrong I think Derek does and it's from code opinion Derek does such a good job of giving you context so in this particular situation if you have x y and z yes this will probably be better right if you have these conditions if not maybe this way and here's why he just does such a good job of explaining that so um I would say Milan who you probably know if you're watching my videos on C stuff you probably watch him a lot he posts a lot on Twitter uh LinkedIn uh Derek does uh as well um on all those platforms they have great YouTube videos though so definitely check them out there's others I am I'm so sorry it's just like I'm on the spot being like I don't know like what's going through my head um those two come to mind right now um why is a monolith still more common so the the way that I look at a monolith and a modular monolith and people watching this like depending on how pedantic you want to get about it I think like a a modular monolith is just a monolith it's just that you've written the code in a modular way and I think that by prioritizing having modular pieces just allows you to extract them easier so I don't I don't have stats about monoliths being more popular I think there's probably just lots of monoliths that have been built but I would say maybe a monolith is more popular or common than a modular monolith because people aren't maybe that awesome at making modular code um or having an idea how they want to break out modules from things like personally I um if you watch you know my content or read my articles I talk a ton about plugin architectures so I'm extremely biased the other direction and to an extreme right I I know that I I overdo it but I love writing stuff with plugins in it but that forces me to like I need to write code that's modular or else I can't make a plugin for it so I force myself into that pattern so I do think that maybe it's just a lack of like of understanding how to write modular code I think it's a different mindset perhaps but I don't know the the stats on it personally so I can't even I can't tell you here's how it is because I don't know if that's necessarily a true statement but um challenges in adopting a modular modelin strategy kind of touched on that I think it has to do with the fact that you need to start thinking about at least this is how I do it I start thinking about pieces of my system Derek could do a much better job explaining this I feel like an idiot about to open my mouth about this but I think if you consider the potential domains that you have and how those might be possible to be pulled out into different Services right like I need a user Management Service I need something that does payments I need something that does notifications like to me those are features right and you could have domains around those features I might be using the wrong words here um sorry Derek if you ever watch this but I I think that my head goes in that direction features I try to organize them that way maybe do some plugins some vertical slices but all of those things start to create like modularity then from there it's like cool this thing's scaling up like the way that we're we're managing our users right now we need to start having multiple instances of this because we need way more Pro I'm just making this up we need way more processing so we have to scale this out horizontally but we don't want the whole app right or maybe in the beginning you don't care maybe you're like we need we need more user management support cool scale out the whole modular model like who cares right um you're still going to get more you know user uh Service uh instances because of that um I I think dererk made a video on this recently about like deployment um patterns versus like how code is structured um certainly like a decoupled deployment like I'm coming literally Lally from a deployment team saying this deploying stuff all together with a lot of teams deploying really big software is a nightmare it's an absolute Nightmare and the reason it's a nightmare is because when one thing is wrong and everyone's bundled together what do you do when everything's decoupled for deployment at least right you have flexibility it doesn't mean that it's easy you at least have flexibility when it's all tied together not so flexible just super high level perspective on that so yeah I I think that some of the challenges are honestly just thinking through how you would take a code base and start untying code that's probably very coupled together I think that's how how I would start to approach it is start pulling these pieces apart into logical groups features um but I I think you know if you didn't have that in mind and you just started coding stuff putting it all together and it's working and then a year or two into it you go oh crap like like why does I don't like why does our um notification system like have access to our payment database like obviously making this up but you might just have pieces that are so coupled together that you're like oh crap how do I how do we back out of this right so I think that's probably one of the biggest challenges but um great question thank you I hope I hope that helped that's just my perspective on it but we'll wrap things up here I think uh again thank you so much for the questions in the chat I am going to be trying to live stream I want to try doing it once per week to give you some context I started taking content creation more seriously last year and I said three long form videos a week and one blog article per week I'm starting off the year I got a couple um couple weeks couple months in I couldn't even write a blog article per week with my videos like could not do it so it took a long time I think it took me until August before I could start getting one article per week out with my three videos now I'm doing I think I'm almost at six or seven if you include the newsletter for articles and my three long form videos I would like to supplement my videos with one live stream every week um but it means I have to start getting some time back somehow so I want to try doing this uh AMA I thought was really cool I have plans for doing code reviews I don't know if I'll maybe I'll alternate between them or something like that but um I have some Discord members that were volunteering to to say like hey like yeah I'll share some code with you um I told people anyone that wants to Jenkins what's the Jenkins comment about uh for code reviews I was saying to people like I'm not going to I'm not going to you know make fun your code or anything like that I I want to make sure that like I'm reviewing your code the way that I would review anyone's code right I want to give you like positive feedback navigate through it give you that experience and not just be like hey look at this how silly this person wrote their code um oh message deleted open source uh pet projects yeah we're we're I got to close off this live stream I got to get to bed um I do have a GitHub there's tons of stuff on there um but I don't really have I made a couple um I had um there was a tech company a good friend of mine started in uh Kitchener waterl where spent a lot of my adult life before going to Microsoft um they made uh the Mayo I'm not sure if people know what that is it was like an armband that you could wear that picked up um you know it could sense like uh why can't I think muscle activity so you could move your hands had gyroscope and everything so I wrote a c interface for that which was really cool that was open source um I'm not Super Active with open source not because I don't believe in it but I just I don't have time I don't have time for all the stuff I want to do for myself so it's really tricky but yeah uh do have GitHub you can check out stuff there um but a lot of a lot of the videos I put out I try to make make sure the code that you're seeing in the video I'm putting that onto GitHub there's a Dev leader repo that has a lot of that stuff too and I try to when I can link it in my blog articles as well just so people can reference it but that stuff's not like open source projects it's just code for examples cool awesome thanks um yeah I think roit if uh you might have missed the beginning of this video but I did say that a lot of people reach out to me asking for jobs and stuff at Microsoft um I would suggest watching the beginning of this video but or this live stream it will be recorded and posted but yeah unfortunately the answer to that is you have to go through the careers page this is I said it earlier in the video so I'm not making it up that's just the way to go forward so um you'll see any careers posted there all right folks thank you so much um this is really cool for me so hope you got to learn something and if you have other questions and stuff that you want answered in the future for these find me on social media shoot me a message you can check out the Discord um that is a paid membership there's a public Channel but it's rate limited and I don't have time to respond to people there because that's why I made a paid Community for it but you can reach out to me on social media too leave comments on videos and just say hey for your next AMA can you you know talk about this happy to just make a list and get it done so thank you so much um yeah this was fun we will see you hopefully next week I can do this again and we'll see how things go take

Frequently Asked Questions

What is a software architect and should programmers aspire to become one?

A software architect generally focuses on high-level system design and the technical direction of products and platforms. If you're interested in high-level design and aligning technology across teams, it might be a good fit for you. However, if you prefer hands-on coding and solving specific problems, you might want to explore other paths.

How can I get a job at Microsoft?

To get a job at Microsoft, you should apply through the careers page just like everyone else. While referrals can help, they don't replace the need to apply. Prepare for interviews by practicing coding and system design questions, and be ready to discuss your experiences.

What challenges do managers face in software engineering?

One of the biggest challenges is managing people and navigating interpersonal dynamics. It's not just about technical skills; it's about helping your team succeed and addressing performance issues when necessary. Balancing management responsibilities with technical work can also be difficult, especially as team sizes grow.

These FAQs were generated by AI from the video transcript.
An error has occurred. This application may no longer respond until reloaded. Reload