Below be some bunch of notes, for future self.
As I’m getting older I like to think I’m also getting wiser - at least in some areas of my life. When I look back at myself, as an eager and enthusiastic, but inexperienced developer and at myself now - I can clearly see that I’m much more patient in general. I realized it’s a marathon and not a sprint (Hopefully. Unless you know - we will all die soon in 2020).
As developers, I think we often like to see results very quickly. This might be a working product prototype (full of bugs), it might be the mighty refactor (that introduced bunch of regressions), it might be a pursue after new shiny tech (that is not the right tool for the job, but promised a better way of doing things) or it might be a new approach to the architecture you read on your favorite blog (that in the end doesn’t mention all the new problems it brings to the table).
And being enthusiastic is great, researching for new ways of doing things is also great. But I think I’m slowly getting to a point when I can see a balance between doing things new way and doing things known way. I think known way can be very under-appreciated. Known way was probably formed over the period the years and there might be a lot of wisdom in a known way.
Appreciate tools and technology that was battle-tested for years and years by hundreds of thousands of people. Appreciate the vast ecosystem and community around those tools. Don’t be side blinded by this new thing that looks great on paper. On paper that ‘hello world’ program example looks great. But is your product/project a hello world app? I doubt it.
Allow yourself to explore, but have a critical eye. Solving one problem usually brings another one. Use edge tooling in your projects, but don’t burden your team with it (unless you know, you’re all on the same page, I don’t judge).
Don’t try to rewrite half of the codebase on a single day and “do it better”. Your code will be legacy code soon enough - try to learn from existing code, often there is a lot of knowledge and struggle underneath (it’s not always pretty tho!).
Take your time, delay design decisions in uncertain days (if that means, for example, introducing some duplication). I got a moment of clarity months after introducing some rather naive solution just to stumble upon the optimal one. Then things just fell into the right place nicely - it’s a very good feeling.
As a side note delaying gratification was described/mentioned as a self-discipline tool in one of my favorite self-help/mental-health books - The Road Less Traveled, I recommend giving it a try - hopefully you will find it interesting.