BrandGhost

Your Software Will NEVER Be Perfect And Why You Should Be Okay With That

It's time to face the music. You're never going to write perfect software. It doesn't matter how much time and effort you put into it. While that might feel lousy to hear (and I don't mean to hurt your feelings), have some peace in knowing that we have amazing tools and processes (like refactoring!) that can help us navigate the inevitable. Have you subscribed to my weekly newsletter yet? A 5-minute read every weekend, right to your inbox, so you can start your weekend learning off strong: http...
View Transcript
all right so I have some news that's going to be probably a little bit difficult for you to hear but I think you need to hear it that application that you're building it's not going to be perfect the first time you do it in fact I would bet money that it's probably never going to be perfect and that has nothing to do with the fact that you're not trying hard you're not applying best practices and you're not doing your best job but the reality is no matter how much effort you put into that it's probably never going to be perfect so yes I'm opening up this video this way to get you a little bit triggered but I think this is a really important topic for all of us in software engineering because it's so easy to get focused on this idea of looking for perfection in the things we're building and sometimes when we're striving for that Perfection we actually hold ourselves back and we can be in situations where we never even start or when we do start we iterate so hard on particular things looking for Perfection and we never make it to the next step and why I think this is such an important topic for all of us in software engineering is when we're in this state as beginners or Junior software Engineers a lot of the time the things we're learning are outside of work and that's okay that's good you have a ton of different options to learn from boot camps from building your own projects whatever it happens to be but the difference when you're learning this way if you're building things or just trying stuff online the difference is that you're going at your own pace and it doesn't matter if you don't get it done if as soon as you transition from building things like this into a situation where you have paying customers things change and I feel like a lot of people don't like to hear this because they're already getting in their mind that I'm trying to say oh you don't have to try hard to make it you know good architecture or something else because it's never going to be good anyway you might as well just rush things out and ship things to the customer as fast as possible and that's not what I'm trying to get at so if you're already getting a little bit riled up by this deep breath this is really important stuff so the two things I want to focus on are basically not getting started because you're trying to chase Perfection and the other side is you have started and you're not able to progress because you're still chasing Perfection so I actually wanted to use a non-programming example for the first part of this because I was thinking about this as I was coming up with this topic and it really seemed to resonate with me and I think there's probably a lot of you where you have something similar maybe not the same example that really going to resonate that's outside of software so my example that I want to show you is my YouTube channel and the reason I want to show you my YouTube channel is twofold one because I want to show you how terrible my first videos were and I also want to show you that when I first tried to put out videos a couple of years ago not being consistent one of the videos I made was about this topic okay so if we hop into the YouTube time machine these are some videos a bunch of them are unlisted I have a couple that are still public but you can see that I kind of started back in 2020 I was absolutely not consistent but I wanted to take a stab at putting some things out on the internet I thought this was going to be a cool opportunity um I don't think I was necessarily ready to take content creation seriously but just to show you how awful this is I'm going to play this one super quick I'm not going to make you watch the full hourlong video that I spent on here and I essentially just walk through code I'm live coding in my video game to show you how I test things and this video is really not done well um that's me I look like I'm 50 pounds lighter um and I have hair on my head which is nice I don't have that anymore but you can see that this video is super long um I probably didn't really prepare for it it was really just a stream of Consciousness and for YouTube that's not so great if I scroll down a little bit lower I have this video that's called fluid architecture and this fluid architecture video is also terrible it's a really bad video and that's okay but the idea that I had in this video is that I wanted to talk to people about why your architecture is going to be shifting in the projects that you're building it's not going to be perfect so that's going to be the second part of this topic that I want to talk about but I wanted to show you that I had to basically take a leap of try putting stuff out on the internet and it was terrible and how that relates to you and your programming journey is if you're sitting there going I don't have the perfect product for something I want to build I don't have the perfect architecture for it um I haven't gathered all the customer requirements and you're kind of getting into this analysis paralysis phase you need to start you need to start building something because you're never going to have all of the information you're never going to have the perfect architecture Ure it's just never going to be perfect if you're chasing that and that's the thing even stopping you from getting started you're never going to be successful at this and that's really hard to hear but I'm telling you that because it's important that you do get started it's okay for it to not be perfect because it never will be and I think once you accept that and you understand that you can start building things and you have all of these tools all of these tools in software engineering to change and refactor and update code you have Source control you can you basically have a time machine for your code you have all these awesome things to work with just get started you're going to learn along the way you can be collecting customer feedback and user requirements and learning about the right Technologies you might get two years into it and go I pick the wrong database cool no worries there's patterns and there's practices to to get you on the right track switching things over and you don't have to go start from scratch so just like in my YouTube Journey so far I tried putting some things out did not work so well but I was able to learn it took me a little bit of time about 3 years before I finally came back to it and said okay I'm ready and I iterated on those videos I started again this year the same way that I did back a few years ago videos didn't do so well but I started looking at data I started researching how other people were doing it and I started pivoting so that I could make things better and I just wanted to give you that example because I think having parallels to things outside of programming can give you some different perspective to say hm that makes sense if you apply to programming now hopefully it seems to click a little bit better okay so the second part of this which I've already started touching on is that the architecture that you pick in your program the application You're Building or the service it's never never going to be perfect when you go do it the first time and like I said earlier it's probably never going to be perfect ever but that's okay if we think about the part that I was saying in the beginning the reality is that you're always going to be learning things so the point here is that as you're building things and you're trying to either acquire users or you actually already have users if you already have users heads up you're in a situation where you can't afford to constantly spend all of your time just making things perfect if you're playing around in Hobby projects and trying to learn about things by all means take all of the time in the world you want to be able to do that but as soon as you have users you're now in this situation where you need to be delivering value to them if somehow you've managed to create a product or a service that has no type of support Ever Needed never has to worry about user requests or features to build or bugs to fix or anything I mean great you probably struck a gold mine but I think for most products and services there is some amount of iteration that has to exist for the lifetime of the thing that you've created and that will mean that as soon as you have that type of constraint to have to fix bugs support the service or the product add features listen to customer feedback you now need to be balancing your time with doing that stuff and polishing your code and the thing that I want you to think about is how much do you think your customers care or your users care about how polished your code is I'll give you a hint it's probably zero they probably don't care at all they care about the side effects that having great code has but they don't know or care what your code looks like so what they care about is being able to get value they care about having stability and making sure that the value and the bug fixes and the stability are this constant thing because that's what's going to make them appreciate your product or service you care about having good code good infrastructure good architecture all of that stuff but it's not what the customer sees and I'm not telling you to give up on that stuff I'm telling you you have to balance it and that means that when you balance that kind of stuff you can't be sitting there waiting for Perfection when it comes to software architecture there's a lot of content out there where a lot of great content creators talking about different architectural patterns and you've either seen videos on this you've read posts and stuff but what you might have noticed or might not is if you start looking through the comments on this kind of stuff you will see people get wildly opposed to different architectural patterns best practices that kind of stuff and you have someone who's a content creator or otherwise just sharing information saying hey do this you have someone else going never do that who's right well anyone that's saying always or never is probably not right because there's situations where all of these things can make sense and as the thing you're building is evolving something might make sense at that point in time with all of the information that you have available to you you will make the best decision that you can and once you do that you can move forward and start progressing on other things if you fast forward and then have a snapshot where you look back in time and go why did I ever pick a plug-in architecture why did I ever pick doing microservices or a monolith why did I do that it doesn't mean that you did the wrong thing it just means that the thing that you picked which was the best thing you knew how to do with the information you had maybe isn't applicable now maybe with the information you have you're like I shouldn't have even done that in the first place and that's okay because you wouldn't be where you are unless you took that first step and it doesn't mean that you have to rewrite it even if it's an architectural change so I wanted to make this video to remind you that you don't need to be chasing Perfection I think it's really important that you're learning about different topics but you want to keep moving forward with the things you're building if you're not taking steps forward in terms of actually delivering value to users or you're just stuck basically refactoring code to try and make it perfect you're going to not progress and you're going to get stuck there so for any of you that are getting analysis paralysis reading about the different options that you have to use in your own products and services please don't worry pick something that seems to align best with the information that you have at hand and then start there you have options to make changes down the road almost everyone has to do this kind of thing don't worry it's not wrong to have to Pivot later on and we do this all the time even with feature sets in products and services so I hope that you can reflect on that try to apply that information for the different things you're working on perhaps you're spending time right now on things that aren't really valuable because you're worried that maybe you made the wrong decision and just try to digest this and see if you can make some positive changes going forward so thanks so much for watching I hope you got to get something insightful out of this and we'll see you next time

Frequently Asked Questions

Why is it important to accept that my software will never be perfect?

It's crucial to accept that your software will never be perfect because striving for perfection can lead to analysis paralysis, preventing you from starting or progressing. By acknowledging this reality, you can focus on building and iterating, which is essential for growth and learning in software engineering.

How can I overcome the fear of releasing an imperfect product?

To overcome the fear of releasing an imperfect product, I recommend starting with what you have and iterating based on user feedback. Remember, your customers care more about the value and stability of your product than the perfection of your code. Embrace the learning process and make improvements over time.

What should I do if I'm stuck trying to choose the perfect architecture for my project?

If you're stuck trying to choose the perfect architecture, just pick the option that seems best based on the information you have and start building. It's common to pivot or make changes later as you learn more and gather feedback. The key is to keep moving forward rather than getting bogged down in indecision.

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