ACTUALLY Useful Beginner Projects: QA to Software Developer

ACTUALLY Useful Beginner Projects: QA to Software Developer

• 682 views
vlogvloggervloggingmercedesmercedes AMGMercedes AMG GTAMG GTbig techsoftware engineeringsoftware engineercar vlogvlogssoftware developmentsoftware engineersmicrosoftprogrammingtips for developerscareer in techfaangwork vlogdevleaderdev leadernick cosentinoengineering managerleadershipmsftsoftware developercode commutecodecommutecommutetech careerrole changequality assuranceqa testerqa engineerremote jobsai news

A viewer wrote in to ask about transitioning from a QA to a developer role and wanted feedback on working on more complex projects. How does one start to advance in the projects they're building and learn skills that are ACTUALLY useful to be a software developer?

Let's find out!

📄 Auto-Generated Transcript

Transcript is auto-generated and may contain errors.

hey folks I'm just driving home got a question from the comments this is from I don't know if I'm saying this right from Su slays suss uh I'm a QA tester manually Testing mobile devices self learning programming for a few months to transition into development I can build small projects like to-do list and simple games but I struggle with tackling more complex projects feels overwhelming what strategies for learning approaches would you recommend to help me bridge the gap from beginner projects to skill that are actually useful in a developer role cool so uh thank you so much for the question I think it's a good one I think this will be a helpful thing for others to to kind of think through so I'll give my perspective on this if you want questions answered please leave them Below in the comments like this viewer or

you can look for Dev leader on social media that's my main YouTube channel as well with edited down videos tutorials things like that so check that out um and otherwise let's dive into it so I think two two kind of different angles here um and I just want to kind of acknowledge it because it's in it's built into the question almost which was around like uh talking about building projects and then the they had asked like for actual useful developer skills right um but the thing that I wanted to just kind of call out right from the beginning is that I think we can talk about building more complex projects of course I think that's something that uh self-proclaimed I'm an expert at making things more complicated because uh you know I built a lot of stuff that was just for fun and let it

grow to uh ridiculous capacities I suppose um so I can talk through that but when we talk about like useful developer skills um I think oh my phone just fell oh no I got to try to maneuver this okay oops that's the brake not the gas we want the gas how did that happen that's so weird um sorry I'm all flustered now uh the other other skill set though that's worth addressing that I don't think you actually just get to do um from building projects or more complex projects at least on your own is going to be all of the stuff that just comes into software development that has nothing to do with programming right like how do you uh how do you communicate effectively with people of different experience levels and backgrounds um you could talk about time management skills or prioritization skills like

these are things that you could do in your own personal projects for sure it's probably less about yeah actual coding part um I mean there's going to be things like debugging problem solving all this kind of stuff but there's so many different things in software engineering that if we're just trying to take the lens of more complex projects I feel like we're not doing the other things justice so um what I'm going to do in this video is talk through like you know working towards building more complex projects and then time permitted will talk about like all the other stuff uh not in detail but uh you know how to to try and get some exposure to other things that help a lot in software development that aren't just code so hopefully that will be a good watch and hopefully it's not actually 45 minutes

to get home cuz that's not okay um okay so when it comes to building more complex things let's take couple uh points this person was making they said like hey like I could do um like a to-do list or something right um there's ways that we can either add complexity to this by taking um the core thing and then uh adding more sort of to the system itself like the backing system or we could make this just a small part of something else right so like just to give you an example you want to build something more complicated you could uh like a to-do list could be part of uh a calendar app right so you just make the thing that you built a small component of something else that's that's more big I guess the the word for that called bigger not more big

sorry this this enormous truck was uh was switching lanes and I couldn't tell so was very distracted by that they seemed like they were getting close to the Lane but their signal wasn't on so I almost went into the same spot as them and uh that would have ended poorly for me so you could basically take your small application and make it a component of another application right say you could build a calculator okay could you make a calculator component and you could reuse the calculator component into to something else right you could put a calculator component into a macro tracker for for food and nutrition you could put your to-do list uh component into a calendar application you could put um or like make a habit tracker or something and you could make a put your calendar into your habit tracker I don't know

like you can you can basically take these things make them components so they're reusable in other things now you're adding layers of complexity in now you might say well Nick that's not really that complicated like all I have to do is like sort of refactor some of the code around my my to-do list or whatever and now it's a control or a component I can reuse like that's really not that bad but where you get into some interesting things in terms of complexity it's just like having a bigger code base to work in right so now you have a couple of different apps that can leverage your to-do list or your calculator component and you're like oh well in this context in this application I actually want um some slightly different functionality from the calculator or the to-do list whatever it is okay well now

you have that code reused in multiple spots how are you going to refactor it safely right how do you version your apis or like what are you are you going to um from C land we have nougat packages right so you're going to have a new nougat package or you might have like a a module or something like is it a new release breaking API changes like what is that going to look like you can practice doing all of these things and it doesn't matter that you're the only developer on it cuz you know for me I I might tell myself I don't care I'm going to break all the apis like I'm it's just me um and if I'm breaking it for some other project I'm not even working on now like that's futur Nick's problem I don't care um so that might be

the case uh but you could also take the opportunity to practice this right it's like this is complexity how do you want to approach it okay well I don't want to I don't want to break the apis and I want to make sure that I can make a new version of this thing and anyone can consume it okay so do you have like a V2 like do you have an interface and you're changing the implementation of the thing for your component like you can make this stuff more complex even if on the surface it's not really that complicated going through it the first time that's a whole new learning experience but that's a real type of thing that you do right it's not that building a calculator app or a to-do app is like it's bad or it's useless no you're going to be learning

different things that way but a lot of the time you'll get Flack for this kind of stuff is like well it's it's just so simple and so basic sure good for learning a set of skills and for practicing some things but because it is basic you don't really get exposure to some other complexities like navigating larger code bases versioning apis and when I talk about versioning apis I don't just mean like a a rest API or something like that I mean like literally like a like a method or a function signature that you have to to change how is that going to look right the the bigger and more complex the code base gets the more stuff there is to manage so when your code base remains pretty small it's relatively easy to navigate and you switch to a new project and the code base

still maintains like you know pretty small size pretty easy to navigate so I I want to talk about the other angle to this um and then I want to give you an example so I mentioned that instead of just like making something a component and making it a small piece of another app look how fast this guy's going we're not going to catch him we're not doing that he driving a gigantic Honda SUV so we don't need to prove ourselves um but let's take a different approach which was like uh I'm thinking about more of like a system perspective so let's take the to- list okay so you have a to-do list and maybe your very simple to-do list is a user interface um and it doesn't have to be a web app or a mobile app it could be any of these things it

could be literally a console application okay it doesn't matter and your first version of this to make your to-do list is that you can select an option whether or not you're clicking it or typing option one doesn't matter you type in your to-do list item you can remove some you can reorder them I don't know you have a couple of different things that you can do very simple to-do list kind of application now the next step is like well I want to persist it okay so a lot of the time the first things that we learn we're building applications like this is like how to write to a file and how to read from a file okay so now we modify our to-do list to go support this okay so so far I think this is still probably considered pretty simple from the probably from

the perspective of the the commenter with this question right they could probably do that so let's try to increase the complexity well let's instead of using a like a a file that we're going to read and write from let's instead use a database so what's a database to work with Okay well one of the most simple ones and actually one of the most widely used databases in the world is light you don't need a server for it you can just use a file but it's a database so now you're going to switch your to-do list to go read and write records to a file that is sorry that is a sqlite database so you're changing the complexity by the way each time we're doing this we're updating this code we're doing this in iterations another good reason for doing this is that you're working on

an existing code code base and learning how you can modify existing code it's not just let me start a new application follow the tutorial that says here's just how to do a sqlite thing and you say look I copied and paste it and I'm done no you're going to be changing your existing code updating it to go do this new thing why because that's a good skill to be able to work on for real software development we don't just make a new project every time we want to go build something something or add features right like you're you probably if you're working somewhere there's probably a product or service that's in place that people are buying customers are paying for so you're going to be working on that there's an RS5 in front of me it's very nice okay so what's the next layer of

complexity we can do okay well database sitting on my desktop is no longer okay I want to have my to-do list writing to a database that's hosted in the cloud okay that's one bigger step of complexity okay now we're able to do that you pick your database provider you could use Azure AWS is neon is a thing right I don't know who has free hosting or whatever else but you pick some database provider you go do this awesome that's more complexity again it's an iteration of what you've already done so you keep your to-do list in place now you're refactoring the code away that goes and writes uh reads and writes from the sqlite database you're changing your provider and if you're finding oh when I want to just go pick another database I have to like rewrite my entire higher data access layer maybe

that's a good sign it's a good sign for something for you to pay attention to should you have to go rewrite your data access layer every single time you're changing your database provider I would hope not but the first few times you do this absolutely that would be normal I wouldn't expect people to just know that right away right you might have been writing SQL queries in your code and they have sqlite specific syntax and that doesn't work with postgress or MySQL maybe for your your to-do list app it's not that complicated but maybe or maybe um the way that your your your object relational mapper om maybe you're not even using an omm which is fine right you're learning about this stuff it's cool and now you're like hm I want to go map these uh these records with this new database type but

I have to redo all of this code like man I never want to do this again sure but people have thought about these things right there's om's I mean not just for this reason but ORS can help you with that because they provide you a code interface where you can talk to the OM and under the hood it does the translation from SQL or whatever your database provider is to these objects in memory right one of the benefits of an orm is that abstraction level you might not have ever heard of that so this is a good opportunity maybe you're like okay now that I got it working in the cloud I'm going to go refactor this to use an omm now awesome right now maybe you're in a position where your stuff is agnostic to the database underneath super cool what's another layer of

complexity we can do let's host our Notes app in the cloud so maybe you already started with a web service that's lovely good for you you can go pick your own cloud provider and go you know host it there what is deployment look like right do you have continuous uh integration continuous deployment hooked up maybe with GitHub actions or something so there's another whole thing to go build right we just started with a note or I can't remember was it to-do list or notes sorry I'm I'm all over the place um right but we started small now we're just adding in all all these other things now some people might say yeah but that's still not complex like it's not complicated it's not that complex yeah but if you're just getting started every one of these new things is a new thing for you to

learn and explore so if you didn't start with a web app like cool here's a chance to go try refactoring your code into a web app was there anything in the data access layer you can keep and maybe you just rewrite your UI in whatever your favorite frontend tech is right if you were already a web application you don't have to worry about that cool maybe different experiment I want you to be able to also build and release a console application can you re can you split your code so that your front end is truly separated from your back end and now you have like a backend that can be just console uh application very thin on top of a uh of your back end and I mean we're talking about a to-do list so it's probably not really that complicated but now you have

essentially two apps one of them that you deploy to the cloud another one that's just a console app that gets built but they share the same code like this is where you start to even though the scenario is contrived right it's a to-do list it's really not that complicated we can introduce levels of complexity and these are everything that I've talked about is a helpful thing that you could be learning about so sure the next time you hear like to-do list is like a useless project everyone has that on their resume yeah but did they do that with their to-do list if you're brand new and as a software developer you could take your simple to-do list and make it stand out a lot more compared to someone else's to-do list so why not okay the um the example I wanted to give you guys

from my own experience um and part of this is like depending how you look at it not in good practice so I've talked about um hobby projects and stuff before as like a as a learning mechanism um and I think that espec maybe not at this point in my in my career but for a majority of my career I would say um I could look back to this uh role playing game that I was building as as probably one of the best sources of learning um programming for me and then you might say well Nick I bet it's cool then I bet it would be a really cool game and the answer answer is well no it's not done you can't play it and no it probably never will be done um so like is that good like probably not from a from a software

development perspective you probably want to be able to focus on iterating getting something shipped and being able to keep iterating on it um but for me this was something that there was more enjoy in building the thing than actually having it finished I just really liked putting stuff together and I did this for years and years like this game is over 20 years old now and it's been refactored it's been Rewritten it's been whatever um it will unless I retire because I came into so much money that I never actually have to work again um I probably won't ever finish this maybe that should be a life goal or something is actually Nick needs to ship his RPG um but it's like it's one of those things like I love to build it it was so much fun uh I don't even know if playing

it would be fun probably not but but coming up with the systems and adding the layers of complexity and like this is a really fun cool thing for me so again if we take how the example started um one of the first literally like one of the first things I built was a text based role playing game in Visual Basic 6 good old VB6 a wind fors application and you could basically click a button that was like a tack skeleton and you would just Spam clicking it I think there was like rats and skeletons and then like you'd get golden experience and then you would level up and then you would add points into a stat with another button so like you it you did couldn't really do anything and then I made it so you could pick the different monsters you were attacking this

is cool and then I'm like well I need items in the game right like what's a roleplay game without items so it was like okay I'm going to hardcode CU you're getting gold from these these monsters you're killing I'm going to hardcode this list of like whatever like a hundred different like swords I came up with names for and then you could go buy them from the store but I'm like okay this doesn't make sense cuz you can only attack like rats and skeletons and maybe zombies or a couple things I added so then I expanded those lists to have more monsters so then it was different item types but now it's really dumb because like you're only attacking but like I always play spellcasters always so we need skills now I need a skill system so you keep following this train of thought I

had features that were like if you ever if you're a role playing game kind of person um there was like more complex systems in like than Diablo 2 would have had maybe even Diablo II at this point um not like Path of Exile is certainly significantly more complex but that's the kind of thing that I was trying to build systems like before Path of Exile came out I was trying to design things that were like that complex I can't say I like succeeded at that level of complexity certainly not but in my head I was like that's what's fun I want to build complex systems so if you're not familiar with Path of Exile and for those of you that are I'm probably going to butcher this cuz I'm not even I don't know like I like the game but I'm not like good at

it um you could like almost everything is basically like an item and they have like a really complicated crafting system so you can like modify or enhance items in different ways um and because everything's like an item kind of has this cascading effect uh really complicated passive tree uh for your skills there skill system was in like items that you would socket into your items like just just nuts and then all these different game mechanics and game modes so this was something something that allowed me to just keep programming and building more complex things and then I would reach a point where I'm like take a break and I come back to it and I'm like man like there are so many things that the way I architected this or designed this like it's just not going to scale because now I have these other

crazier ideas and then I would rewrite it and then I kept having this pattern where I would rewrite it and rewrite it and then I got to a point where I'm like why am I doing that like I'm throwing away my code every time like I need to understand how to refactor things or do what's called like a I don't actually hear anyone in the industry call it this but in um on social media or blog post and stuff like a Strangler fig approach which is coined by Martin Fowler where you can basically take parts of your system and you strangle them out by sort of uh writing in new components to replace them and you basically keep putting in these new components to strangle out kind of like weeds right um strangle out the other older parts so like that's more of an approach

I use now but this let me build way more complicated things than just my initial you know click a click a button to attack skeletons um I got to build it in XNA which was a game engine kind of thing before Unity then Unity came out and I was like I got to build it in unity uh I tried doing multiplayer versions of it um you name it right this was just a playground for me that I could keep building more and more complicated things so my my point with telling you this is that you can take something that starts trivial right a Wind forms application that you can attack skeletons by pressing a button it's pretty damn simple it's probably easier than a to-do list and that's what I started with and then I just kept adding layers of complexity into it um you

know by the time it was like doing uh stuff in unity it was a 2d game that you could walk around kind of looked like Pokemon so I needed to do like uh pathf finding algorithms and stuff for AI to be able to walk around in combat like that's not how it started though so couple takeways from from all of this is that you can layer in complexity in terms of like how deep you go on something that's where I was trying to talk about like the database changes and hosting stuff you can change it in terms of the breadth of coverage which is like your to-do list or calculator whatever becomes a component in just a bigger application right CU being able to work in a bigger code base is a skill that you want to get good at and then I tried to

walk through some ideas around like refactoring your code letting it evolve over time because again if every time you go to program something it's like I'm going to start from scratch I'm going to follow this tutorial almost copy paste it but I'm always starting with a clean slate um it's Pro I don't know I don't have stats on it but I feel like that's probably statistically something you're not doing as often as you might expect in your career it's not that you'll never work on new stuff but you know it's pretty rare that you join a company they're like welcome to the team um I want you to be the first person to create the project and you're going to make the first like entry point to the program like probably not it's probably like hey sorry about our code base it's a pile of

by the way all of them are um but you know we have customers and we need to support this and we need to add features we might also have a rewrite going on on the side or we're you know rewriting parts of this uh application or system but it's probably an existing thing that's been around for some time so um all of that to say that my recommendation for this person for for building more complex things is that you can take simple things and make them more complex um kind of a sounds like a a backwards strategy in general for software development but if you're doing this kind of thing to practice and learn I don't think there's anything wrong with that I just think you need to understand that you're doing it intentionally because if it's not intentional um and you kind of carry

that forward into like the real world like imagine if uh me from building this role playing game if every time I got to work on a project I was like wait wait wait but like what about the itemization and they're like Nick this is a this is a finance app and I'm like yeah but we need loot drops um we need more complex systems like probably wouldn't pan out so well um sorry I know that's silly but you know we we don't we don't want to be creating complexity in um like for no reason in software development but being able to practice navigating and I do think is a is a good skill um super quick cuz couple minutes away from home I wonder if there's some time to talk about some of these other skills right I didn't want to neglect it entirely um

there's a bunch of stuff that's outside of just code that could be really good things to focus on try to get a head start um if you are in boot camp or you're in college University if you have opportunities where you're doing stuff in teams if you're like me I didn't like team projects and stuff in class um I didn't like School in the first place so just like it was one of those things that felt forced I don't want to do it I would honestly just like those are good opportunities to like try practicing communication and stuff um I would say if you're trying to work with your teammates and it feels like it's a pain in the ass it's actually probably good practice um it's probably good practice because if you're finding that communication's challenging um obviously could be your teammates right could

be anything uh but if you're in a situation where it is challenging or people can't communicate their timelines and etas and stuff like I totally get that that's frustrating like don't please don't misinterpret what I'm saying I'm just trying to to to say hey that might be something that like I hope it registers in your head the next time it happens unfortunately that like hey Nick was saying this might be a opportunity because it is like it's like you're going to work in teams where things aren't going perfectly smooth in real life so if it's happening while you're in school whether it's boot camp College University and high school whatever like acknowledge that right like hey this wh like why does this interaction suck right now like oh it's one person on the team they're not pulling their weight okay but like like you know

if one person on the team is not pulling their weight that's holding the whole team back what are you going to do about it are you just going to sit there and be like this sucks and like we're going to fail the project or like how do you steer it back on track how do you demonstrate leadership in that situation you know has that person surfaced any challenges they're having if not how do you get them to do that like there are so many things that you can try practicing I didn't even know where to start and I feel like for me like I was not thinking about any of that I was like this is I don't want to do this so I'm just trying to to put this in front of you as a a potential opportunity because I certainly didn't treat it

that way oh come on guy on the bike just move over a little bit like I don't get it this is my problem with bikes this guy's on a a street bike he's riding his bike but he's he's not in the bike lane and he's not on the road he's like driving in the middle so I can't pass him without feeling like I'm about to run him over but also he's got like 5T to the right of him where he can just move over anyway I'm home I hope that helps thanks so much for watching and I'll see you next time

Frequently Asked Questions

These Q&A summaries are AI-generated from the video transcript and may not reflect my exact wording. Watch the video for the full context.

How can I transition from building simple projects like to-do lists to more complex projects as a beginner developer?
I recommend taking your simple projects and adding layers of complexity to them. For example, you can make your to-do list a component of a larger application like a calendar app, or add features like database persistence, cloud hosting, or API versioning. Iteratively refactoring and expanding your existing codebase helps you learn real-world development skills like managing bigger codebases and evolving software over time.
What strategies do you suggest for learning useful developer skills beyond just coding?
I believe useful developer skills include communication, time management, and prioritization, which are often overlooked when focusing only on coding. You can practice these by working in teams during boot camps, college, or other group projects, even if it feels challenging. Handling difficult team dynamics and improving communication are valuable experiences that prepare you for real software development environments.
How did building a complex hobby project like a role-playing game help you learn programming?
Building my role-playing game was a playground where I kept adding complexity over many years, starting from a simple text-based game to more advanced systems like itemization, skills, and AI pathfinding. Although I never finished it, this iterative process taught me how to architect, refactor, and evolve code. It was fun and helped me develop deeper programming skills by continuously challenging myself with new features and complexity.