Recently I finished reading Leonardo Da Vinci by acclaimed biographer Walter Isaacson. I initially challenged myself to complete Bill Gate's 2018 summer reading list, but unfortunately this was the only one I was able to knock out before the first 50 degree day in Chicago. Still, the book was a worthy summer read, not only to learn about the life of one of history's most prominent geniuses, but also to see what lessons could be learned from his habits. One particularly interesting parallel I found was that Leonardo would constantly "refactor" his work, much like how software engineers refactor their code.
Leonardo rarely ever viewed his work as complete. Not in the sense that he was always working; in fact, he was known to take breaks in order to let new ideas marinate for a while. Rather, he would revisit his work, perhaps even years after he had started it, to add in additional touches. For example, after his studies of human anatomy, he revisited his painting Saint Jerome in the Wilderness 30 years after he began that project. After his research, he better understood how the muscles in the neck functioned, and he used this newfound knowledge to make this piece even more realistic.
Much like how Leonardo's paintings were never complete, our software is very rarely in a truly code complete state. More likely than not, it should be modified, tweaked, and improved. As we grow as programmers, there are more opportunities to refactor legacy code and make a positive impact. It's not just about being "good enough," but about making the code the best it can possibly be.