I hate my code. It’s true. I never wrote a single line of code that I liked the day after. You could ask a question that if I hate my code so much, how do I have the nerves to release anything to the world? And that’s the thing. I don’t overthink. Because if developers would overthink in general, nothing would be pushed to the production.
Yours and mine code sucks and has a lot of stupid things in it and you know it. But there is a lot of more things that you don’t realize are stupid and the best thing to do and figure out those problems You have is to release it to the world. Because Your users will find every single stupid mistake you made and they will find it fast.
Jeff Atwood wrote about this in his blog Coding Horror:
Yes, you did a ton of things wrong on this project. But you also did a ton of things wrong that you don’t know about yet. And there’s no other way to find out what those things are until you ship this version and get it in front of users and customers
I am not preaching here to release all kinds of bad software and I am not talking about bugs. There are still rules. You have to practice TDD or at lease write tests on critical part of your program. You don’t want to release something that will damage your reputation and destroy your business. As Uncle Bob Martin says “You always have to be professional“. If you release product that is full of bugs, then you are not behaving as a professional.
This is about implementation problems. Maybe in version 1 you have a class that has 500 lines of code. Does it work and critical parts of it are covered in tests? Then ship it. Don’t overthink.
Our industry is changing so fast, the requirements that were requested today, maybe will not be relevant next week anymore. If you try to make your software perfect, than you will never release the product, because each week you will have to change it, delete, replace and add something new to it. And each week you will think it’s not good enough and you need one week more to refactor. And that is the way for you to be trapped in infinitive loop without final product ever seeing this cruel and harsh world.