My name is Adam, and i'm a recovering Singleton addict. There, i've said it. I used to use singletons all the time because they make doing some things, like sharing state globally, incredibly convenient. My code was littered with XYZManager classes. The defining trait of these classes was the static GetInstance() method that magically enabled me to get access to that object and its state wherever I wanted!! What a great idea, right?
What a mess! I learned over time that the cost of changing one of these things, or the cost of doing a major refactor was really high in terms of code change. And to make things worse, because my classes' dependencies were hidden in implementation and weren't transparent in the interfaces it was impossible to write real unit tests. This made doing a big refactor even less attractive.
So over the years, through work in the industry and coding on my own I've come to the conclusion that the singleton sucks, and that there are very few places where they are actually appropriate (logging comes to mind as one acceptable place). The fact of the matter is that most of the places I see singletons used in software they are actually just an enable for developer laziness.
So here is my off the cuff list of why singletons suck. Feel free to comment and add your own reasons (or counterpoints)