
This is my first time at TED . Normally , as an advertising man , I actually speak at TED Evil , which is TED 's secret sister organization -- the one that pays all the bills . It 's held every two years in Burma . And I particularly remember a really good speech by Kim Jong Il on how to get teens smoking again . ( Laughter ) But , actually , it 's suddenly come to me after years working in the business , that what we create in advertising , which is intangible value -- you might call it perceived value , you might call it badge value , subjective value , intangible value of some kind -- gets rather a bad rap . If you think about it , if you want to live in a world in the future where there are fewer material goods , you basically have two choices . You can either live in a world which is poorer , which people in general do n't like . Or you can live in a world where actually intangible value constitutes a greater part of overall value , that actually intangible value , in many ways is a very , very fine substitute for using up labor or limited resources in the creation of things . Here is one example . This is a train which goes from London to Paris . The question was given to a bunch of engineers , about 15 years ago , " How do we make the journey to Paris better ? " And they came up with a very good engineering solution , which was to spend six billion pounds building completely new tracks from London to the coast , and knocking about 40 minutes off a three-and-half-hour journey time . Now , call me Mister Picky . I 'm just an ad man ... ... but it strikes me as a slightly unimaginative way of improving a train journey merely to make it shorter . Now what is the hedonic opportunity cost on spending six billion pounds on those railway tracks ? Here is my naive advertising man 's suggestion . What you should in fact do is employ all of the world 's top male and female supermodels , pay them to walk the length of the train , handing out free Chateau Petrus for the entire duration of the journey . ( Laughter ) ( Applause ) Now , you 'll still have about three billion pounds left in change , and people will ask for the trains to be slowed down . ( Laughter ) Now , here is another naive advertising man 's question again . And this shows that engineers , medical people , scientific people , have an obsession with solving the problems of reality , when actually most problems , once you reach a basic level of wealth in society , most problems are actually problems of perception . So I 'll ask you another question . What on earth is wrong with placebos ? The seem fantastic to me . They cost very little to develop . They work extraordinarily well . They have no side effects , or if they do , they 're imaginary , so you can safely ignore them . ( Laughter ) So I was discussing this . And I actually went to the Marginal Revolution blog by Tyler Cowen . I do n't know if anybody knows it . Someone was actually suggesting that you can take this concept further , and actually produce placebo education . The point is that education does n't actually work by teaching you things . It actually works by giving you the impression that you 've had a very good education , which gives you an insane sense of unwarranted self confidence , which then makes you very , very successful in later life . So , welcome to Oxford , ladies and gentlemen . ( Laughter ) ( Applause ) But , actually , the point of placebo education is interesting . How many problems of life can be solved actually by tinkering with perception , rather than that tedious , hardworking and messy business of actually trying to change reality ? Here 's a great example from history . I 've heard this attributed to several other kings , but doing a bit of historical research it seems to be Fredrick the Great . Fredrick the Great of Prussia was very very keen for the Germans to adopt the potato , and to eat it . Because he realized that if you had two sources of carbohydrate , wheat and potatoes , you get less price volatility in bread . And you get a far lower risk of famine , because you actually had two crops to fall back on , not one . The only problem is : potatoes , if you think about it , look pretty disgusting . And also , 18th century Prussians ate very , very few vegetables -- rather like contemporary Scottish people . ( Laughter ) So , actually , he tried making it compulsory . The Prussian peasantry said , " We ca n't even get the dogs to eat these damn things . They are absolutely disgusting and they 're good for nothing . " There are even records of people being executed for refusing to grow potatoes . So he tried plan B. He tried the marketing solution , which is he declared the potato as a royal vegetable . And none but the royal family could consume it . And he planted it in a royal potato patch , with guards who had instructions to guard over it , night and day , but with secret instructions not to guard it very well . ( Laughter ) Now 18th century peasants know that there is one pretty safe rule in life , which is if something is worth guarding , it 's worth stealing . Before long , there was a massive underground potato-growing operation in Germany . What he 'd effectively done is he 'd re-branded the potato . It was an absolute masterpiece . I told this story and a gentleman from Turkey came up to me and said , " Very , very good marketer , Fredrick the Great . But not a patch on Ataturk . " Ataturk , rather like Nicolas Sarkozy , was very keen to discourage the wearing of a veil , in Turkey , to modernize it . Now , boring people would have just simply banned the veil . But that would have ended up with a lot of awful kickback and a hell of a lot of resistance . Ataturk was a lateral thinker . He made it compulsory for prostitutes to wear the veil . ( Laughter ) ( Applause ) I ca n't verify that fully . But it does not matter . There is your environmental problem solved , by the way , guys : All convicted child molesters have to drive a Porsche Cayenne . ( Laughter ) What Ataturk realized actually is two very fundamental things . Which is that , actually , first one , all value is actually relative . All value is perceived value . For those of you who do n't speak Spanish , jugo de naranja -- it 's actually the Spanish for " orange juice . " Because actually it 's not the dollar . It 's actually the peso in Buenos Aires . Very clever Buenos Aires street vendors decided to practice price discrimination to the detriment to any passing gringo tourists . As an advertising man , I have to admire that . But the first thing this all shows is that all value is subjective . Second point is that persuasion is often better than compulsion . These funny signs that flash your speed at you , some of the new ones , on the bottom right , now actually show a smiley face or a frowny face , to act as an emotional trigger . What 's fascinating about these signs is they cost about 10 percent of the running cost of a conventional speed camera . But they prevent twice as many accidents . So , the bizarre thing which is baffling to conventional , classically trained economists , is that a weird little smiley face has a better effect on changing your behavior than the threat of a £60 fine and three penalty points . Tiny little behavioral economics detail : in Italy , penalty points go backwards . You start with 12 and they take them away . Because the found that loss aversion is a more powerful influence on people 's behavior . In Britain we tend to feel , " Whoa ! Got another three ! " Not so in Italy . Another fantastic case of creating intangible value to replace actual or material value , which remember , is what , after all , the environmental movement needs to be about : This , again , is from Prussia , from , I think , about 1812 , 1813. The wealthy Prussians , to help in war against the French , were encouraged to give in all their jewelry . And it was replaced with replica jewelry made of cast iron . Here 's one : " Gold gab ich für Eisen , 1813. " The interesting thing is that for 50 years hence , the highest status jewelry you could wear in Prussia was n't made of gold or diamonds . It was made of cast iron . Because actually , never mind the actual intrinsic value of having gold jewelry . This actually had symbolic value , badge value . It said that your family had made a great sacrifice in the past . So , the modern equivalent would of course be this . ( Laughter ) But , actually , there is a thing , just as there are Veblen goods , where the value of the good depends on it being expensive and rare -- there are opposite kind of things where actually the value in them depends on them being ubiquitous , classless and minimalistic . If you think about it , Shakerism was a proto-environmental movement . Adam Smith talks about 18th century America where the prohibition against visible displays of wealth was so great , it was almost a block in the economy in New England , because even wealthy farmers could find nothing to spend their money on , without incurring the displeasure of their neighbors . It 's perfectly possible to create these social pressures which lead to more egalitarian societies . What 's also interesting , if you look at products that have a high component of what you might call messaging value , a high component of intangible value , versus their intrinsic value : They are often quite egalitarian . In terms of dress , denim is perhaps the perfect example of something which replaces material value with symbolic value . Coca-Cola . A bunch of you may be a load of pinkos , and you may not like the Coca-Cola company . But it 's worth remembering Andy Warhol 's point about Coke . What Warhol said about Coke is , he said , " What I really like about Coca-Cola is the president of the United States ca n't get a better Coke than the bum on the corner of the street . " Now , that is , actually , when you think about it , we take it for granted -- it 's actually a remarkable achievement , to produce something that 's so democratic . Now , we basically have to change our views slightly . There is a basic view that real value involves making things , involves labor . It involves engineering . It involves limited raw materials . And that what we add on top is kind of false . It 's a fake version . And there is a reason for some suspicion and uncertainly about it . It patently veers toward propaganda . However , what we do have now is a much more variegated media ecosystem in which to kind of create this kind of value . And it 's much fairer . When I grew up , this was basically the media environment of my childhood as translated into food . You had a monopoly supplier . On the left , you have Rupert Murdoch , or the BBC . ( Laughter ) And on your right you have a dependent public which is pathetically grateful for anything you give it . ( Laughter ) Nowadays , the user is actually involved . This is actually what 's called , in the digital world , " user-generated content . " Although it 's called agriculture , in the world of food . ( Laughter ) This is actually called a mash-up , where you take content that someone else has produced and you do something new with it . In the world of food we call it cooking . This is food 2.0 , which is food you produce for the purpose of sharing it with other people . This is mobile food . British are very good at that . Fish and chips in newspaper , the Cornish Pastie , the pie , the sandwich . We invented the whole lot of them . We 're not very good at food in general . Italians do great food , but it 's not very portable , generally . ( Laughter ) I only learned this the other day . The Earl of Sandwich did n't invent the sandwich . He actually invented the toasty . But then , the Earl of Toasty would be a ridiculous name . ( Laughter ) Finally , we have contextual communication . Now , the reason I show you Pernod -- it 's only one example . Every country has a contextual alcoholic drink . In France it 's Pernod . It tastes great within the borders of that country . But absolute shite if you take it anywhere else . ( Laughter ) Unicum in Hungary , for example . The Greeks have actually managed to produce something called Retsina , which even tastes shite when you 're in Greece . ( Laughter ) But so much communication now is contextual that the capacity for actually nudging people , for giving them better information -- B. J. Fogg , at the University of Stanford , makes the point that actually the mobile phone is -- He 's invented the phrase , " persuasive technologies . " He believes the mobile phone , by being location-specific , contextual , timely and immediate , is simply the greatest persuasive technology device ever invented . Now , if we have all these tools at our disposal , we simply have to ask the question , and Thaler and Sunstein have , of how we can use these more intelligently . I 'll give you one example . If you had a large red button of this kind , on the wall of your home , and every time you pressed it it saved 50 dollars for you , put 50 dollars into your pension , you would save a lot more . The reason is that the interface fundamentally determines the behavior . Okay ? Now , marketing has done a very very good job of creating opportunities for impulse buying . Yet we 've never created the opportunity for impulse saving . If you did this , more people would save more . It 's simply a question of changing the interface by which people make decisions . And the very nature of the decisions changes . Obviously , I do n't want people to do this , because as an advertising man I tend to regard saving as just consumerism needlessly postponed . ( Laughter ) But if anybody did want to do that , that 's the kind of thing we need to be thinking about , actually : fundamental opportunities to change human behavior . Now , I 've got an example here from Canada . There was a young intern at Ogilvy Canada called Hunter Somerville , who was working in improv in Toronto , and got a part-time job in advertising , and was given the job of advertising Shreddies . Now this is the most perfect case of creating intangible added value , without changing the product in the slightest . Shreddies is a strange , square , whole-grain cereal , only available in New Zealand , Canada and Britain . It 's Kraft 's peculiar way of rewarding loyalty to the crown . ( Laughter ) In working out how you could relaunch Shreddies , he came up with this . Video : ( Buzzer ) Man : Shreddies is supposed to be square . ( Laughter ) Woman : Have any of these diamond shapes gone out ? ( Laughter ) Voiceover : New Diamond Shreddies cereal . Same 100 percent whole-grain wheat in a delicious diamond shape . ( Applause ) Rory Sutherland : I 'm not sure this is n't the most perfect example of intangible value creation . All it requires is photons , neurons , and a great idea to create this thing . I would say it 's a work of genius . But , naturally , you ca n't do this kind of thing without a little bit of market research . Man : So , Shreddies is actually producing a new product , which is something very exciting for them . So they are introducing new Diamond Shreddies . ( Laughter ) So I just want to get your first impressions when you see that , when you see the Diamond Shreddies box there . ( Laughter ) Woman : Were n't they square ? Woman #2 : I 'm a little bit confused . Woman #3 : They look like the squares to me . Man : They -- Yeah , it 's all in the appearance . But it 's kind of like flipping a six or a nine like a six . If you flip it over it looks like a nine . But a six is very different from a nine . Woman # 3 : Or an " M " and a " W " . Man : An " M " and a " W " , exactly . Man #2 : [ unclear ] You just looked like you turned it on its end . But when you see it like that it 's more interesting looking . Man : Just try both of them . Take a square one there , first . ( Laughter ) Man : Which one did you prefer ? Man #2 : The first one . Man : The first one ? ( Laughter ) Rory Sutherland : Now , naturally , a debate raged . There were conservative elements in Canada , unsurprisingly , who actually resented this intrusion . So , eventually , the manufacturers actually arrived at a compromise , which was the combo pack . ( Laughter ) ( Applause ) ( Laughter ) If you think it 's funny , bear in mind there is an organization called the American Institute of Wine Economics , which actually does extensive research into perception of things , and discovers that except for among perhaps five or ten percent of the most knowledgeable people , there is no correlation between quality and enjoyment in wine , except when you tell the people how expensive it is , in which case they tend to enjoy the more expensive stuff more . So drink your wine blind in the future . But this is both hysterically funny -- but I think an important philosophical point , which is , going forward , we need more of this kind of value . We need to spend more time appreciating what already exists , and less time agonizing over what else we can do . Two quotations to more or less end with . One of them is , " Poetry is when you make new things familiar and familiar things new . " Which is n't a bad definition of what our job is , to help people appreciate what is unfamiliar , but also to gain a greater appreciation , and place a far higher value on those things which are already existing . There is some evidence , by the way , that things like social networking help do that . Because they help people share news . They give badge value to everyday little trivial activities . So they actually reduce the need for actually spending great money on display , and increase the kind of third-party enjoyment you can get from the smallest , simplest things in life . Which is magic . The second one is the second G. K. Chesterton quote of this session , which is , " We are perishing for want of wonder , not for want of wonders , " which I think for anybody involved in technology , is perfectly true . And a final thing : When you place a value on things like health , love , sex and other things , and learn to place a material value on what you 've previously discounted for being merely intangible , a thing not seen , you realize you 're much much wealthier than you ever imagined . Thank you very much indeed . ( Applause ) 