Statics can be very useful in programming. Simply make something static and it is available everywhere. However, the downside of them is tracing the program flow. Find where they are created (the first time they are used).
As few other problems include:
Generally static classes should be avoided. Static methods in a normal class are not a problem and a good way of providing helper functions that do not require an instance of the class. (However, a class of many unrelated static methods is also not so good, but that is another story.)
Statics can be avoided through a method called Dependency Injection (DI), this allows an instance of an object to be injected where it is needed.
In MediaPortal we have a singleton called ServiceRegistration which enables DI. Any class can be turned into a Service by simply creating an interface for that class. An instance of the class can then be added to the ServiceRegistration and is available to all other classes.
The advantages of this method are: