In programming, but I guess it applies to other things as well?
For me, the problem solving (and executing the solution) is the best part of programming. I don’t give a shit about the content, pretty pictures or great user experience (though each can be cool to work with in their own way). Just give me a problem and I’ll happily work on an architecture geared towards solving it. Think “system to handle a customizable series of minigames”, “website to store items from a feed”, “efficient way of handling huge amounts of variety in something”, and so on.
It can also be a bit frustrating though. Once you get a feel for it, you’ll quickly discover there’s usually a lot of different possible solutions for you to call upon. But which one’s best in your particular situation? You’ll need to think ahead, consider possible scenarios you may find yourself in, limit what you want to do with the system in the end, sometimes even keeping performance in mind.
You’ll research the different methods, their pros, cons, other people’s opinions on them. Sometimes you’ll stumble across a tried-and-true method for a similar problem, that explains why it works so well, and you can adept that to fit your case.
Once you have your solution, you can get to implementing it! Getting to work is usually pretty fun as well, and the final result’s all the more rewarding when you’ve poured in hours of time and buckets full of blood, sweat and tears.
It’s just the best part of any process, really. Documentation’s boring, reviewing can be rough, the actual hard thinking work is where it’s at!