I try to always rewrite complicated code. As an example, another dev who left the team had written a program in Elixir that nobody knew or understood. I rewrote it in python (with his help, since I still had contact with him over chat). After that, everyone in the team could understand the code and we could make changes very easily to it and document it.
Another program he wrote in python was kind of complicated and we would have bugs in it that we didn't know how to fix. So I rewrote it with a completely different architecture with focus on simplicity. And again, now everyone could just read the code and understand it.
I think many devs are writing code that is not simple to understand for others. Then rewriting it can be worth it to avoid the pain of trying to fix bugs in complicated code.
That's only the first stage. Once you get tired enough you start writing code that not even you can understand the next morning, but which you're loathe to change because "it just works".
Yeah I've had that experience too. But sometimes I write a lot of hackish code to get it to work, and then after spend time rewriting it so it's easy to understand. But it depends on mood. Sometimes I don't change it because it's complicated and it would be too much thinking required to make it better. :)
I did that too (swapping out a complex codebase with a simpler new modern one), then I got laid off along with another dev and we got replaced by friends of our boss lmao
Although I do admit it's nice my new job that I'm starting next week pays me nearly 30% more than my old job did along with a better title to match the level I was performing at my old job lol