As an engineer first and programmer second, I do the full requirements write-up, so it's a bit different on my end. I have component diagrams, high level class diagrams, sequence diagrams, protocols, state diagrams, flow charts, test specifications, etc. That's really the fun part because it all involves thinking, whiteboarding, planning, and so forth. Once that's done, all that remains is to implement and validate/verify the implementation. It's tedious because I'll stare at a document and type the equivalent C++ code. Not really fun IMO.