Getting something working in the beginning feels very different from a coding puzzle. During the next phase of optimizing something is where it gets interesting. Understanding the hardware and figuring out the right way to make full use of it via memory tricks or specialized processor instructions always felt more like a puzzle. Unfortunately, I feel engineers are seldom given the opportunity to go deep down the optimization route once something is working reliably, since it's already getting the job done.