I've written succesful applications without any spec, just talking with users, writting things down myself, showing them prototypes, repeating. In some cases users are not able to produce a spec and even if the do they don't always really "know what they want", that's why prototyping is so important.
Also, there are many apps/teams that don't have "clients", and a spec is not really worth writing, much less maintaining. Specs are great when you are a larger team with stakeholders who aren't part of that team, but if you're a small tech-heavy startup moving quickly, I'd consider even the presence of a spec a symptom of mismanagement.
So you did have a spec, you just did the work of producing it yourself. That's sometimes necessary for a developer to do, and for small projects it can be the best approach as well.
Oh, and users never know what they want, even when they think they do. What they know is the problems they have and the job they're trying to do or want to do. It's the job of the software designer (both spec writer and programmer if they're different) to figure out what the software has to do to give the users what they need.