There are a number of ways to get around Johannesburg using public transport. There are minibus taxis, buses, trains, and maxi-taxis (cabs). When we built rwt-to we worked on supporting all the modes of transport, but we currently don't support them all at present.

My personal view has always been that Google Transit would not work well in Johannesburg, because that scheduled modes of transport (bus and rail) aren't large enough to cover Joburg in a way that would make it truly possible to go from corner-to-corner while relying on Google Transit. This was one of the many reasons that led me to start rwt-to, that we need a different approach to support unscheduled modes of transport (taxi, cabs), instead of hacking away at GTFS.

The Scheduling Problem

The only services that follow schedules to the number are rail services. Joburg Metrobus has fixed departure schedules, and that's as far as it goes (they do have "timing points", but it's not enough points on a route to guarantee that a bus would pass by a terminal or stop at a certain time). In comparison, some bus services have "timing points",

which are points on the list of stops where the bus is meant to depart at certain times, when the bus arrives at a timing point early, it stops there until it reaches the scheduled departure time, and if it arrives late it doesn't wait.

Gautrain buses and Rea Vaya are frequency-based, but they also don't have timing points. Taxis neither follow schedules nor do they work on frequencies. Depending on the time of day, when a taxi has enough passengers, it embarks on its journey.

Our approach has been to use set schedules for scheduled services, and published frequency estimates for bus routes. The approach with taxis is to use frequencies, but not to set the same departure frequency for the whole day, but I'll talk more about it in the future.

Taxi and Cab Support

At some point during development, we made a call not to support taxis at launch. We chose to err on the side of caution, and not provide information whose accuracy we can't yet reasonably control. rwt-to needs schedules, stops, and fare costs in order to work. Taxi associations don't all adjust their fares at the same time, so we would upset a lot of people if we can't keep track of changes in fares.

With the exception of Uber, most cab services don't publish their rates, and as far as we know, rates aren't regulated. We will be partnering with a few cab operators to bring cab-support once things are stable, because for now we still have a long way ahead of us.

With that said, we currently only support bus and rail services.

How Scheduling Works

We determine the distance of a route when searching, and we use distance/time to determine when we expect the bus to be at a certain point. In order to maintain reasonable estimates, our scheduling engine maintains timing points internally, which are more detailed estimates of the expected time between two points on the route. In the coming months we will be updating these estimates more frequently in order to simulate live scheduling.

Acuracy Levels

We can't guarantee that a bus will pass a certain stop at a certain time, so please don't treat our estimates as gospel. As with all things, be prepared, and arrive at least 5-10 minutes before the indicated time in order not to miss the bus.

Train schedules are as published by Gautrain and Metrorail, we do not currently track trains, and there are some outlets available to report on train delays and cancellations. So even with trains you should arrive a bit early in order not to miss your service.

On behalf of rwt-to: @nevi_me.