I attended the launch of CNet's Chinese language site a couple of years ago when my company was using Vignette to publish content on its Web site. As CNet owned Vignette, I thought I might be able to pick up a couple of tips for our own Chinese language site.
The marketing person looked a bit puzzled at my questions and passed me on to the COO. The COO looked uncomfortable and danced around the issue. Eventually he confessed that CNet did not use Vignette and that its pages were largely hard-coded. How could this be? One of the largest tech-news sites in the world, owning one of the best content-publishing systems in the world, and not using it? Some kind of masochistic urge, perhaps?
It turned out that Vignette just could not handle Chinese characters, which are made up of eight-bit characters rather than the seven-bit ASCII character set and caused the program to crash. This discovery must have been one of those heart-stopping moments every CTO dreads, and one which could have been avoided with enough planning. But isn't that always the case?
The problem is, when Vignette was orignally written, no-one knew it would have to handle Chinese characters. How could they? It wasn't in the job specification and Nostradamus wasn't on the team.
Another example a little closer to home: you know that payment system you are using on your worldwide e-tail operation? Does it work with anything other than sterling? And, if it does, how does it affect the design? Some Asian countries do not use decimal places and at an exchange rate of 1,000:1 your nicely designed columns and tables can start to look a little shabby. Yeah, I know - no one told you it would have to be used outside the UK.
Clearly, you just cannot anticipate this sort of thing, but you can do something to minimise the time your department has to spend recoding when your CEO suddenly announces the company's intention to take on the Korean market. The key is modularisation: right from the start, even if you do not think you are going to need it, build your code in discrete chunks, any one of which can be independently reworked without affecting the whole. Well, it's easy to say anyway.