Web applications and geopolitics

I was recently fiddling with the German Federal Railways’ on-line European timetables, when I noticed something very strange. They have the best cross-European timetable, no doubt about it, but some odd things happen if you’re heading too far east. For example, when I asked it for a route from Paris to Tallinn, everything went a little bit weird..

To kick off, it suggested Nachtzug number 237 to Hamburg, which seemed fair enough. And, I was informed, I could take a limited number of bicycles with me on prior reservation. Things went wrong, though, at the next step. In Hamburg, there was a connection on EuroCity 31 to Copenhagen. You can see where this is going, can’t you – due north, essentially. There, I was to catch an X-2000 Swedish high-speed train to Stockholm and transfer to the docks by bus, before hopping a Silja Line ship to Turku in Finland. Presumably rested after the overnight crossing, I’d catch fast train no. R130 to Pasila/Böle, to meet a night train, D 31 (for some historical reason all the long-distance trains are numbered as German D-Züge) to St. Petersburg.

Arriving in the northern capital at 1.40 am, I’d cross it to the Vitebski station and spend three hours on the platform waiting for the express 649-KH to Tallinn. Riiight. In all, some 63 hours. The only alternative differed in that I’d have to change in Brussels as well.

Somehow, the great clockwork was set up to try and avoid leaving EU territory – it’s the only explanation I could come up with. If, after all, I forced it to route via Minsk it produced a far better result, down to 33 hours and four trains – and no ships! But left to its own devices, though, it did go to Russia. I am fascinated by this application pathology – it’s quite routine for timetable servers to produce absurdly complicated routes in order to save a few minutes somewhere, and in fact it’s an important problem in Internet engineering that the system’s basic rules can easily create inefficiently large numbers of hops unless something is done to enforce a less specific route.

Or is there some sort of assumption that nobody wants to go via Belarus baked into the code?