A rewrite is only a daunting task when the design has already been lost in the code spaghetti. Design patterns are considered good because they make the interfaces harder to misuse: they guard the usage with compile-time constraints. However at the same time, patterns often boilerplate and twist the internal logic, which make code much harder to understand: replace variables with singletons, replace constructing functions with factories, replace assignments with injections, fill the files with code lines irrelevant to the logic. It kills projects, because a coding project rarely achieves high testability, maintainability, and spec-agility without a group of coders that well understand how the internals work.

The key to long-living code is to preserve the expression of the logic design in the codebase, and that requires more than code readability. It needs code understandability and comprehensibility. Code needs to be readable as novels. And that, IMHO, is possible, if the projects are: 1. written in a simple yet highly readable programming language; 2. structured in well-managed, partially-sortable, and visualizable modularization; and 3. presented with a convenient toolchain with a user interface that enables running unit test cases and examples with just one click.

Which is, what I am trying to build now, as my hobby project. We can talk more if you are still interested. :)