
I 'm a pediatrician and an anesthesiologist , so I put children to sleep for a living . ( Laughter ) And I 'm an academic , so I put audiences to sleep for free . ( Laughter ) But what I actually mostly do is a manage the pain management service at the Packard Children 's Hospital up at Stanford in Palo Alto . And it 's from the experience from about 20 or 25 years of doing that that I want to bring to you the message this morning , that pain is a disease . Now most of the time , you think of pain as a symptom of a disease . And that 's true most of the time . It 's the symptom of a tumor or an infection or an inflammation or an operation . But about 10 percent of the time , after the patient has recovered from one of those events , pain persists . It persists for months and oftentimes for years . And when that happens , it is its own disease . And before I tell you about how it is that we think that happens and what we can do about it , I want to show you how it feels for my patients . So imagine , if you will , that I 'm stroking your arm with this feather , as I 'm stroking my arm right now . Now , I want you to imagine that I 'm stroking it with this . Please keep your seat . ( Laughter ) A very different feeling . Now what does it have to do with chronic pain ? Imagine , if you will , these two ideas together . Imagine what your life would be like if I were to stroke it with this feather , but your brain was telling you that this is what you are feeling -- and that is the experience of my patients with chronic pain . In fact , imagine something even worse . Imagine I were to stroke your child 's arm with this feather , and their brain [ was ] telling them that they were feeling this hot torch . That was the experience of my patient , Chandler , whom you see in the photograph . As you can see , she 's a beautiful , young woman . She was 16 years old last year when I met her , and she aspired to be a professional dancer . And during the course of one of her dance rehearsals , she fell on her outstretched arm and sprained her wrist . Now you would probably imagine , as she did , that a wrist sprain is a trivial event in a person 's life . Wrap it in an ACE bandage , take some ibuprofen for a week or two , and that 's the end of the story . But in Chandler 's case , that was the beginning of the story . This is what her arm looked like when she came to my clinic about three months after her sprain . You can see that the arm is discolored , purplish in color . It was cadaverically cold to the touch . The muscles were frozen , paralyzed -- dystonic is how we refer to that . The pain had spread from her wrist to her hands , to her fingertips , from her wrist up to her elbow , almost all the way to her shoulder . But the worst part was , not the spontaneous pain that was there 24 hours a day . The worst part was that she had allodynia , the medical term for the phenomenon that I just illustrated with the feather and with the torch . The lightest touch of her arm -- the touch of a hand , the touch even of a sleeve , of a garment , as she put it on -- caused excruciating , burning pain . How can the nervous system get this so wrong ? How can the nervous system misinterpret an innocent sensation like the touch of a hand and turn it into the malevolent sensation of the touch of the flame . Well you probably imagine that the nervous system in the body is hardwired like your house . In your house , wires run in the wall , from the light switch to a junction box in the ceiling and from the junction box to the light bulb . And when you turn the switch on , the light goes on . And when you turn the switch off , the light goes off . So people imagine the nervous system is just like that . If you hit your thumb with a hammer , these wires in your arm -- that , of course , we call nerves -- transmit the information into the junction box in the spinal cord where new wires , new nerves , take the information up to the brain where you become consciously aware that your thumb is now hurt . But the situation , of course , in the human body is far more complicated than that . Instead of it being the case that that junction box in the spinal cord is just simple where one nerve connects with the next nerve by releasing these little brown packets of chemical information called neurotransmitters in a linear one-on-one fashion , in fact , what happens is the neurotransmitters spill out in three dimensions -- laterally , vertically , up and down in the spinal cord -- and they start interacting with other adjacent cells . These cells , called glial cells , were once thought to be unimportant structural elements of the spinal cord that did nothing more than hold all the important things together , like the nerves . But it turns out the glial cells have a vital role in the modulation , amplification and , in the case of pain , the distortion of sensory experiences . These glial cells become activated . Their DNA starts to synthesize new proteins , which spill out and interact with adjacent nerves . And they start releasing their neurotransmitters . And those neurotransmitters spill out and activate adjacent glial cells , and so on and so forth , until what we have is a positive feedback loop . It 's almost as if somebody came into your home and rewired your walls , so that the next time you turned on the light switch , the toilet flushed three doors down , or your dishwasher went on , or your computer monitor turned off . That 's crazy , but that 's , in fact , what happens with chronic pain . And that 's why pain becomes its own disease . The nervous system has plasticity . It changes , and it morphs in response to stimuli . Well , what do we do about that ? What can we do in a case like Chandler 's ? We treat these patients in a rather crude fashion at this point in time . We treat them with symptom-modifying drugs -- pain-killers -- which are , frankly , not very effective for this kind of pain . We take nerves that are noisy and active that should be quiet , and we put them to sleep with local anesthetics . And most importantly , what we do is we use a rigorous , and often uncomfortable , process of physical therapy and occupational therapy to retrain the nerves in the nervous system to respond normally to the activities and sensory experiences that are part of everyday life . And we support all of that with an intensive psychotherapy program to address the despondency , despair and depression that always accompanies severe , chronic pain . It 's successful , as you can see from this video of Chandler , who , two months after we first met her , is now doings a back flip . And I had lunch with her yesterday , because she 's a college student studying dance at Long Beach here . And she 's doing absolutely fantastic . But the future is actually even brighter . The future holds the promise that new drugs will be developed that are not symptom-modifying drugs that simply mask the problem , as we have now , but that will be disease-modifying drugs that will actually go right to the root of the problem and attack those glial cells , or those pernicious proteins that the glial cells elaborate , that spill over and cause this central nervous system wind-up , or plasticity , that so is capable of distorting and amplifying the sensory experience that we call pain . So I have hope that in the future , the prophetic words of George Carlin will be realized , who said , " My philosophy : No pain , no pain . " Thank you very much . ( Applause ) 