The journey is more meaningful than the finish. This is what I learned after completing my first half-marathon. It’s also true for all software development projects. Let me explain.

I spent three months training for the half-marathon and ran more than 200 miles. During my training runs I practiced how to hydrate while running, keep my running pace while climbing hills, and pushed myself to run faster for longer periods of time.

In the end, I spent more than 50 hours running to prepare for what ended up to be a 2:07 race.

Although I enjoyed the race through the beautiful streets of Old San Juan in the early morning, I liked my training runs the best. Each of these runs was part of a journey of learning, getting better, and doing something that I had never done. This is what left a lasting impression that persuades me to run another half-marathon or even a full-marathon in the future.

In thinking about my experience training for a road race, I realized that this love of the journey also precisely describes my love of software development. Software development is not just about creating a new piece of software. For me, it’s about creating something that has never been made before. It’s the opportunity to learn and apply your new knowledge.

Software engineers are like great athletes: they avoid their comfort zones and strive to improve their creations. To improve as a runner, you must always be training. To become a good software developer you need to always be learning. This is not just learning new technologies, but also how to apply them to solve problems more efficiently. Not just learning new software patterns, but understanding how to apply them to solve real problems in the code. Good software developers are always trying to get better.

Ultimately, it’s not about the software you build, but how you build it. It’s about the process of creating the software and the goals you achieve during the journey. Your users will see the end result, but your memories will be of your triumphs over the code, like how you used multi-threading methods to improve the user experience or aggregate APIs in a completely new way. These are the experiences that drive good software developers to create better software solutions.

Obviously the end product is important as is finishing the race, but for the software developer as well as the athlete the finish is never the end. There are always the what-ifs: what if I had trained harder? What if I had implemented an Abstract Factory instead of a Factory Method pattern? Good software developers are always thinking ahead and differently. What can I do different next time? What new technology should I learn that would have made my software even better?

Every software project should be treated as a journey and an opportunity to beat your own personal best. Staying out of your comfort zone means appreciating your role in an industry that is ever-changing and offers you new challenges every day. I know I do.