This doesn't quite answer your question, but here are my two cents:
The ideal topic would be one you have:
- Interest in.
- An opinion about.
- Already know a little bit about, but haven't had the time to explore in more depth.
For example, suppose you believe that:
Writing programs that parse, manipulate, and encode data in custom human-editable text formats is hard. I believe it can and should be much easier.
It doesn't necessarily mean that the tools for working with text formats don't exist. Maybe you just haven't noticed them, or they aren't compatible with the programming language you know, or you didn't like using them. But, maybe there is a great tool out there for working with text formats.
While looking around, you keep seeing Haskell and Parsec over and over again. You give in to the hype and learn Haskell, and it turns out to be really cool. Then you start learning Parsec, and find it's pretty decent. Your project could be a presentation introducing your colleagues to Parsec, complete with a case study demonstrating a domain-specific language in a "real-world" setting. Here, you didn't really invent anything, but you introduced something wonderful to yourself and your colleagues, and you did it in a way that makes sense to them.
Then again, suppose Parsec just doesn't cut it. Maybe you can't find anything at all to simplify working with custom text formats (maybe everything's just too darn complicated for something that should be so simple). In this case, you might want to develop a framework that simplifies your task. Don't start on it right away, but do some research. Look at other systems, look at the approach they took, and come up with some good reasons why they fall short. Learn a new programming language or API that may bring you closer to your goal. Maybe even read some papers pertaining to your topic. Your project would then build on a lot of existing work, but would help fix the issues you saw.
In summary, the ideal topic would be one you're already interested in to an extent. I believe it's good to approach computer science with an opinion about how things should be, yet at the same time be open to existing ideas.