Although testing is of course very important to ultimately have good quality code, it cannot be used as a substitute for hard thinking
. If the system you are going to make is quite complex, there is nothing which beats a phase of meditation to come up with a good architecture.
My advice : take an empty sheet of paper, write nothing at all, and certainly no code, until you have a mental picture of the solution. Only then, try to write down this mental picture, iterate the process so that it becomes clearer.
I have often been suprised how productive a phase of apparently producing nothing at all can be.