I rolled two dice, subtracted them, and took the absolute value. I'd walk that many blocks East, then a block North. Then I'd roll again, repeat. So if I rolled a 4 and a 6, I'd go 6-4=2 blocks east before I went a block North. This system was OK, but there wasn't that much variety in the routing. So I tweaked the system again.
At the start of each day, I'd figure out a bonus/penalty. That number would be added to each roll. So if the day's bonus was +2, then that 6,4 roll meant I was walking 4 blocks east, not just 2. To compute the day's bonus, I'd start with yesterday's bonus. If yesterday, my rolls had "fallen short" (I hadn't gone far enough East before hitting the bay), then I'd roll dice to add to yesterday's bonus. If yesterday's rolls had gone over, I'd subtract. If yesterday's rolls had been just right (brought me to the correct city block), then I'd stick with yesterday's bonus.
There are rules about how to handle negative numbers; how to handle numbers that seem too big. There's a rule for crossing the path of the Hash House Harriers; I stop rolling and follow the trail… until it seems like the trail's going away from work, then I stop.
Nowadays, I work in Civic Center. The basic system works, but I have to think about what to do if the dice send me too far North or too far East. There's no bay forcing me to turn; so I have to decide when to turn. But that's not so bad.
This system involves carrying around dice. I use somewhat smaller-than-usual dice; they're not so lumpy when I end up sitting on them.