https://github.com/BitGo/BitGoJS/pull/12/files
A change address is designed to enhance anonymity on the blockchain (to anyone who says this doesn't exist, prove it and tell me which bitcoin transactions I've done). With a change address, whenever Alices makes a payment from address X, during a single transaction part of the money goes to Bob's bitcoin address Y and the rest of the money goes to another address Z under Alice's control. The idea is that people should not be able to tell whether Alice controls Y or Z, so it should make it more difficult to know exactly how much money Alice and Bob ended up with.
Of course, if you always know that Alice's change address Z is last, this whole exercise is futile.
Don't think that's actually true. A change address may help for anonymity, but the design of bitcoin (specifically, "outputs"), means that change addresses must be used. I doubt the idea was specifically to help anonymity.
https://en.bitcoin.it/wiki/Transaction#Principle_example_of_...
And yes, their purpose is very explicitly extra anonymity. Gavin named a branch without change addresses a "noprivacy" branch:
http://bitcoin.stackexchange.com/questions/1629/why-does-bit...
I'm aware of that, it's part of what I was trying to say.
>Gavin named a branch without change addresses a "noprivacy" branch:
That branch apparently just sends it to the sending address.
There are other reasons not to reuse addresses unrelated to anonymity, see https://en.bitcoin.it/wiki/Address_reuse.
So I still don't see a design choice that is specifically for anonymity.