I've heard many smart people recommend having a bunch of small problems to always think of. I think Richard Feynman recommended it.
Some examples of these kind of mental problems that I've been dealing with over the years:
* How long does it take from the time that the planets are aligned to the time that they are aligned once again. This was a problem I thought of in ninth grade and was the reason why I learn programming at that age on my spare time.
* How does one construct a P2P filesharing application that does not have a central single-point of failure. I thought about this for a year or so in high school. Obviously, I also wanted anonyminity for the users if possible.
* Dreaming about the perfect configuration management.
* Mining common log line patterns and automatically extracting useful information for debugging, surveillance etcetera. How I would scale such an application, what it could be used for etcetera. This actually resulted in https://github.com/JensRantil/disco-slct
* Last year or so; How to develop a web application that uses CQRS, event sourcing and a distributed model. This also involves thinking about how this would enable smooth upgrading of subsystems, scaling of such system and security.