The thing I wonder is no longer "can I do it?". The question is now "is it possible?". If it's possible, I can do it. It might take me a while, and I might have to learn a lot in the process, and I might not produce as elegant of a result as someone who's expert in the field. But if it's possible, I can do it.
Now I spend my time looking at things I'm not sure are possible, or improving my approach to things that I can do badly. But when someone says "Could you write a MUD?", for example, I say "Yeah. Of course I could write a MUD." despite the fact that I haven't actually planned out how I'd do it. I don't need to - I know I can.
Now, when someone asks "can you speed up this database significantly?" . . . well, that's a bit trickier. I don't know if it's possible. As soon as I prove it's possible, I'll know how to do it. Same thing with "can you write an algorithm to do ____?" - often I can write one that will return valid results without even thinking about it, but writing one that returns *good* results is another thing entirely. Often that comes down to heuristics.
I'm still learning about heuristics. I'm not very good at them.
But if it's a well-defined problem, and it's solvable, I can solve it. The instant I can describe how to do it - or read someone else's understandable description - I can code it.
I guess it's the point where the code is no longer the important thing - the code is just the tool. The interesting parts, now, are what you can *make* with the tools.