Writing everything down
Nothing clarifies the mind better than writing.
Write it down to see if it worth it. If it is correct, clear, brief and consistent, if it proof-checks.
The subtle elegance of a math proof and of a fine verse shall be our ideal. Like a snow mountain on the horizon.
Writing is a tool for thinking
Communicate ideas and concepts to others
Writing is the only reasonable way to communicate concepts.
Merely verbal talking will be forgotten in the next 5 minutes by both parties. Some writings last forever.
Write the informal general description
Before you begin any project you have to write down in a reasonable details what is it all about, what is the goal, and why it should be achieved.
Write down a general plan
Aside from that, it is important to write down some crude plan - list all the steps which has to be done, or seems so.
Plans are useless, planing is everything.
Define a Domain Specific Language
To communicate your ideas to yourself and to other people you have to establish the language of the problem domain, or just a context.
Each part of terminology must be informally defined - the unambigous meaning of each word has to be defined.
Words indeed must have a well-defined, immutable meaning.
Divide into orthogonal sub-problems
Divide et impera is a millennia-old maxim. Dividing into proper sub-problems (or sub-systems) is the most important aspect, since each sub-problem could be attached independently, even in parallel (via delegation).
Only sub-problems which does not overlap (have nothing in common) could be solved in parallel.
The definition of parallel lines (or surfaces) is not having a single point in common.
The appropriate level of details
The most important step is to clearly partition your model into separate modules, preferably orthogonal and isolated.
The boundary between modules are immutable interfaces and standardized protocols.