What should we aim for?

We are never going to create perfect software. If we did, it might only be perfect for a brief moment. Requirements change. What is useful now may be less useful next week.

We are never going to know everything. We are never going to work in a perfect team, though we may be fortunate enough to work in teams that we love.

It is easy to get overwhelmed by what we don't know. Software development is vast and learning is hard, especially in the early years.

In karate lessons, students line up in grade order; beginners at one end, experienced at the other. Aside from anything else, I find this acts as a reminder to everyone that we all start as a beginner.

Every expert in Kubernetes, Java, React, etc. started as a beginner. We all make mistakes. Some start earlier than others, some learn faster than others, some specialise, some generalise - but we all start as beginners.

Throughout my technology journey, my typical journey with any non-trivial technology has been: excitement, initial learning, despair, wanting to give up, breakthrough and then enjoyment. Often the cycle repeats multiple times on one journey.

It is only relatively recently that I have learnt to enjoy the feeling of despair. I know that the breakthrough will come, I just need to persevere through waiting to give up.

It is important to enjoy the journey. Enjoy the learning. Enjoy the not knowing. Appreciate the bugs, the breakthroughs, the failures and the arguments. Appreciate the colleagues you meet along the way, even those you didn't particularly like - you probably learnt something from them anyway.

Use all your experiences to help you grow. There is no race because there is no finish. It is your journey.