Yes. Programmers (myself included) constantly want to rewrite form scratch: But this time, we're going to do it right!
Unfortunately, often, you'll draw exaggerated conclusions from past failures and over-engineer things ("All problems in computer science can be solved by another level of indirection."). You might also end up creating new design problems, e.g. a bottleneck in an area that the old design just happened to avoid. And even if you do get everything right design-wise, you'll always end up creating new bugs along the way.
(Obviously, none of this is a new insight, the pros and cons of rewrite from scratch have been discussed back and forth forever.)
Unfortunately, often, you'll draw exaggerated conclusions from past failures and over-engineer things ("All problems in computer science can be solved by another level of indirection."). You might also end up creating new design problems, e.g. a bottleneck in an area that the old design just happened to avoid. And even if you do get everything right design-wise, you'll always end up creating new bugs along the way.
(Obviously, none of this is a new insight, the pros and cons of rewrite from scratch have been discussed back and forth forever.)