I have seen a lot of posts recently saying that one of the major reasons why Agile is used is because clients often change the requirements.
However, let's say the clients do not change the requirements often. In fact, the clients have firm requirements though might be a bit vague (but nothing unreasonably vague), but I use Agile anyway.
The reason why I employ Agile is because the software is complex enough that there are details, problems that I wouldn't recognize until I actually face them. I could do a full scale heavy planning approach like waterfall, but then it would take a few months to finalize all the high level design and low level coding signatures. There is a very specific, fixed architectural design for the system though.
My question is: Would this be considered as bad, cowboy coding, anti-pattern, etc..? Must we employ waterfall and plan as much as possible in great details before we start coding when requirements are stable instead of this 'let's do it' mentality in Agile?
EDIT: The major point here is that: we CANNOT blame the clients for changing requirements. Assume the clients pointed us to a very concrete problem, give us a wish list in very reasonable details and leave us alone (ie the clients have their own productive things to do, don't bug them any more. Only demo to them near the end when you have a minimum working prototype). Would it be wrong to use Agile in this scenario?