Here is my philosophy: shorelines. Cities tend to grow along water, anyway, so it makes sense.
To keep things somewhat tidy, I build quays all along the shoreline I'm building my current development along. Then, I line my roads up parallel to the quays. If I'm trying to be efficient, I could go through the trouble of keeping 4 tiles away, but I find that 2 tiles is plenty, and there's a very easy way to keep things nice and tight: Build an avenue along the quay, keeping it as tight as possible, which should leave you with just 1 tile to build on. Then, 'upgrade' the avenue to a normal 2 lane road, and you're able to keep a nice neat alignment while also giving you some decent room for your waterfront property, whatever you want to zone it as. I'm inclined to put a proper avenue one block further in, to keep things running smoothly.
As you grow along the waterfront, your streets are going to naturally follow it, and not at right angles, unless you've done some pretty fiendish things with the quays and terraforming. From there, you just try to keep a grid that grows inward, staying parallel to the water. This will give you lots of odd angles, as your blocks that, on their own, are nice grids, start to met up with each other as you grow in.
Of course, I also like to situate my industry across the river from my residential and commercial/office areas, so this suits my playstyle very nicely.