This, of course, is the big question. Its clear to me, and I hope its clear to you, that it certainly worked for me on this project. Will it work for you on your project? That is for you to determine.
You have seen the techniques used here: test-driven development, starting with simple design, a strong focus on recognizing duplication and other evidence of design problems, a willingness to improve the code when we see the signs, and so on. All of these require skill, which is gained by practice. The skills are valuable in their own right, and they may enable you to find a more flexible way to develop your software.
Incremental development works for me, and I believe it will work for you.