This is probably the wrong place to ask this, because it isn't a question with an absolute answer - it depends on a huge number of factors, including who you ask. It might make more sense to ask this in
the Lounge[
^] (but do point out that this isn't a programming question, it's a question about how programmers work). The Lounge is better for general discussion around a subnject than QA, which is really meant for questions with a solution! :laugh:
But, personally, I start with the specification. If there isn't one, or it isn't specific enough, I write it, and get approval from whoever is going to be giving me money for doing the work. From there, I will do design, starting with the overall structure, and refining that to a module level. Included in that will likely be some prototyping, particularly of data to ensure that everything works as I intend.
Then I will do the test specification, and design the tests (In theory, I could do this before the systems design, but since the systems design tends to cause changes in the specification, doing it here general reduces the re-work for me.)
From there, I can start to code. And test., and code some more, and test some more...
Testing will cause changes in all levels, right back to the spec. Documentation is generated at all stages, and updated as I go along.
Sounds like a lot? It isn't, really - sometimes these stages all fit on a sheet of paper! (But sometimes each stage is the size of a small novel...)