first thing to do is thing about data structures. its usually not easy to change a representation or concept after it is in code. usually works much better to think about it some before hand.
i was also a little liberal when deciding what data to store, ended up allocated some space for some things i wasnt sure i would use (there are a few things that could be trimmed from the data structures). again, its easier to trim things later than to have to hack things in.
the major data structures, like the heap and the hash table, were developed and tested independently of the router program. i dont like to have to develop an algorithm with buggy data structures. build with blocks that work so you know where the problems are when they occur.
for the graphics i made use of some code from another program i wrote. also spent some time tweaking things so that performance would not be affected too greatly by the graphics.
i would really liked to have implemented ripup and netlist pre-sorting, but there simply wasnt time. im still considering playing with the code when i find some free time.