There is a phenomenon that I have experienced, but never really thought much about the effects. Programmers are an interesting bunch that thrive on new things, new challenges, new languages, new everything. We like new things, some may say we need new things to keep us going.
I'm sure every programmer can identify with this story:
Bob, a programmer at SuperCorp has been working on an application (SuperWidget) for a month. He likes the application. It's interesting to him, and he can pound out code on it for hours on end. It's challenging work, and he's thriving.I'm sure this exact scenario has happened to many people. This type of distraction seems to happen frequently to the type of personality that programmers typically are. It's a vicious cycle: new thing = distraction = loss of quality = depression = more distraction.
One day, on the other side of the planet, some ingenious programmer creates a new language (let's call it Z++#) and releases it to the world. Geeks all around rejoice -- it's exactly what they've been wanting for years, and it's new. Bob finds out about it while reading through some chat rooms one night and starts reading documentation. He gets excited. It's something new. It's interesting. It's challenging. Bob writes his first "Hello World" program in Z++# and is entertained at how quickly and efficiently he picked up the language. He loves it. He's distracted by it.
Bob returns to work the next day. He opens up his IDE and looks at his task list. He starts to write some code for SuperWidget's account management. He gets frustrated at the steps he has to take to get a simple function to work how he wants. He keeps thinking about Z++# and how this would have worked in the new shiny language. He becomes disheartened and even more distracted. He finishes the function frustrated. SuperWidget, the application that was his baby and that he loved, is now his nemesis. He becomes depressed about the state of his software, which up until last night was the best thing since sliced bread in his opinion.
Bob can no longer focus on his work without thinking about the new shiny language. It's all he thinks about, and he work begins to suffer. His deadline looms, and coding is going very slowly. Bob stays late a few night to hit his deadline, but when it gets sent to QA, loads of bugs appear. Bob rarely had bugs of any magnitude, and now his programming prowess has suffered. All because some guy on the other side of the world came up with "a better way".
The solution that I have found, which may not work for everyone and doesn't always work for me, is to use the "new thing syndrome" to your advantage. Find a new thing in the environment that you were originally working in. This might be a new API, framework, or design pattern that applies to the language or environment that you're working in. Sometimes taking a paradigm that was in the new shiny thing, and find a way to apply that to your own SuperWidget. Doing so makes your old thing the new thing, and can break the cycle.
Focusing on the positive, or bringing the positive back into your life is the solution. It breaks the depression/distraction cycle and allows you to become productive again. After you've refocused on your project by making it the new thing, you may find your productivity drops off again, simply because your brain is still thinking about Z++# and hasn't embraced your old project being the new thing. Unfortunately in this case there is one more step that must be done to keep the productivity up -- you have to abandon the new shiny thing altogether. Don't look at Z++# again until your project is complete. Some people may not need this additional step, and to some people it might be more of a detriment.
Your mileage may vary.