I write a lot of open-source software and prospective users often ask whether it's possible to do [thing they want] with it. I tell them that of course it's possible -- just probably infeasible under reasonable constraints.
When you're building something new, you get to choose your constraints. When you're using something someone else built, you're accepting the constraints they chose. Choosing to create something under unusual constraints often creates new use cases that few people had thought of and forces the builder to think creatively. Sometimes unusual constraints are chosen out of experience, and sometimes they are chosen out of naivety. As Jasmine Kriston put it, "it's no coincidence that some of the most successful entrepreneurs started in their dorm rooms," because no one ever told those students it couldn't be done.
The best way I've found to consciously choose interesting constraints is to never say No because something sounds hard. This is what Paul Graham refers to as schlep. I pick projects because they sound fun, and then learn whatever I need to learn in order to finish them. This makes the learning voluntary rather than intentional, which is much more likely to have unexpectedly positive outcomes.