Code is a fantastic way to capture requirements, particularly iterative product discoveries over time. It's much easier to start with a manifestation of the requirements (and tests of invariants) than starting from base principles.