the first stage is rapid prototyping where you build a rough working prototype of the final project with the core functionality. code organization should be avoided at this stage and focus should be on exploration and implementation. this way one can avoid surprises and find pitfalls earlier and fix them. the prototype doesn't have to have all the bells and whistles, the idea is to understand most of the landscape in the least amount of time to avoid surprises later.
starting with a rigid structure is a bad idea as that sets you off in certain direction, which works for well known problems like compilers and regexp engines, but for more complex problems which don't have a clear implementation roadmap, it's like shooting a few of your toes off at the start of a sprint. delay design decisions even during the implementation stage.