One of the mentioned approaches is "give up". For personal projects this is a totally valid approach. If you're doing it for fun and/or learning, finishing need not be a goal.
This is valid when your only goal is to learn a thing.
But I think it's really important to remember that finishing is itself a skill that is worth learning and if you don't finish things, you gain no practice at that skill. Writing the first 80% of a hundred programs may give you a lot of skill in different domains, but it won't give you the ability to finish a program in any of them and get it to a point that it can benefit other humans.
Sometimes this is true. I've started several side projects to learn a new programming language. So I created 2-3 projects with the different frameworks, never feeling guilty if I should give up or restart with a different approach.
But the 4th time, though, it just "clicked", and I'm launching a new project with a new programming language + framework soon, and I intend to monetize it on day 1.
If I have very few customers, it's a portfolio project. If I have a bit more, it'll break even and I can dedicate some time to it. If it grows even more, I'll try to make a business out of it.
But I think it's really important to remember that finishing is itself a skill that is worth learning and if you don't finish things, you gain no practice at that skill. Writing the first 80% of a hundred programs may give you a lot of skill in different domains, but it won't give you the ability to finish a program in any of them and get it to a point that it can benefit other humans.