Yep, the key seems to be enough internal variation in the tiles to break up the inevitable outer shape patterns. That's an excellent example RE - thanks for reminding me of that one.

For the programatically designed tiles, I can see the use of the directional shadows, but it's easier for me just to draw each one out than script it and run it. Now if I was generating a whole random city at once then I can absolutely see the value in scripting each building, with heightfield, along with some road design algorithm. I'd love to see how far you could take that - perhaps the City Engine program Ravells recently found would be the way to take that?