November 11, 2014


Tags: Finance

Reading stories about the British government beginning to pay down some of its World War I debts reminded me of my old job. I know a few people who are probably quite happy this is finally happening. This is not because they believe the UK has too much debt and needs to pay it off, but because it will make their jobs just a little easier, as it would have for me five years ago.

The background is that the UK raised a very large amount of debt to pay for fighting WWI. Soon after the war was finished the debt was refinanced into “consols” (along with some older bonds). These consols are perpetual bonds (we used to call them “perps”) - a very rare form of debt where the original debt need never be paid back (it is the government’s choice). Instead they just pay interest for ever (“in perpetuality”), unlike normal government bonds which mature and the principal repaid after some set period of time (commonly 5, 10, or 20 years). Thanks to inflation and a low rate of interest, it has never been in the financial interest of the UK government to cancel their consols (and thus repay the principal) - it is very cheap debt. Presumably right now is the unusual occasion when interest rates are so low that paying off the consols makes sense (at least I hope so). Of course it is also good publicity for a government strongly associated with austerity to pay off such symbolic long-term debts.

These consols and other perps comprise a vanishingly small fraction of UK debt and an even smaller proportion of traded debt (as the debt holders don’t tend to sell them very often). Someone working in UK and European bonds could pretend they don’t exist, and 99% of the time this would not be a problem. Then there is the other 1% of the time. Perpetual bonds have a different set of calculations for working out their price and other maturity dependent values. When writing code for pricing and trading bonds, testing should include perps to check they are correctly handled. In the fast paced world of front-office IT, this extra checking is sometimes forgotten. Normally nothing untoward happened as a result. However, errors did occur, normally days after the code was released (as it takes that long for a perp transaction to occur). I was lucky enough never to have that particular problem while working in a bank, although I did something similar once with uncommon yield-quoted bonds and felt like an idiot for forgetting such instruments existed (but it never happened again - I always tested with them after that).

So congratulations to the technical people writing fixed income pricing and trading systems. With the consols gone there is failure point removed. Hopefully soon your code will be simpler and all the if (isPerp) { … blocks can be deleted.