My original idea of accomplishing town generation was to first generate the streets horizontally and vertically. Once finished, find the open spaces and fills it with a building. But of course, there is probably a better route to take.
IMHO, you'll get a better, more "realistic" layout for your city if you generate the spaces instead of the streets, ensure there's separation between the building spaces, and assume streets lie between. Why? Because when you generate a street, you're basically giving your generator a direction and a length and connecting it to a previous street. This will make it look more like a regular grid than anything. If you build blocks you can have irregularly sized blocks on a 'tile' motif, and streets of varying length and connection to fill in the spaces. If you want to get fancy, you could add a neighbourhood classification that takes a larger area and says "all the blocks within are within the length and width bounds of s and t", which will make for a regular suburb or something, yet there's something else a bit away. Though if you want long broad highways and such through your city (that take up more than one tilespace in width) I'd generate those first first.