I'd argue that you 100%
need a spec --ideally tied to some high-level unit tests-- and
should have a plan, but I don't think there's any strict need to write any of those three by hand; the critical step is where you review it and request changes if needed.
Doing it all manually better guarantees quality of course, so makes sense for a lot of problems. But if you're looking to move a bit faster with a bit more risk, I'd sacrifice the writing step without sacrificing the reading & validating step.