I used to think that that the gleeful writing of "infrastructure" code at the outset of a shiny new programming project was really an exercise in spoiling the exuberance with piffling details like what the end-user actually wants. In other words, it can be viewed as an exercise in postponing the (inevitable) clash of one's confident, shining vision and the messy reality of what the end users actually find useful.
But lately I've started to think of that burst of enthusiasm as something akin to the energy that nature squanders on the young. In the case of a programming project, such explosions of optimism and creativity see one (and possibly one's team-mates) through writing and debugging a lot of code that will be frantically cut, pasted, and tweaked when crunch time rolls around.
So perhaps optimism and cynicism, if properly timed, don't necessarily have to pull in opposite directions, at least not in software development.
Thoughts on computers, companies, and the equally puzzling humans who interact with them