10 karma · joined May 29, 2012
Agile (or, as I like to call it, short and iterative waterfall with priority management and pipeline solution), fits some scenarios well, but not others.
It fits startups because it's quick to release. It fits non-scientific products (or non-algorithm heavy products) as features can usually be contained in a single sprint or easily broken into deliverables. It fits huge products on maintenance mode when most of the development are customer features and issues.
However, it doesn't fit algorithm-heavy products (algorithms are usually "one-go" and require a sustained effort), it doesn't fit big products during intense development (architecture can't be ignored or it'll crumble under the product weight), it doesn't _always_ fit corporate environment (because of "impedance mismatch").
[very personal opinion, flame-shield on]
It fits average developers since it maximize oversight, reduce the time an error has to propagate and forces the work to be split into manageable, chewable parts.
It doesn't fit great developers ("distinguished", "level 4", "star"...) because, just like any other artificial framework, it hinders creativity and the free flow of code. On the other hand, a great developer is also measured by his/her ability to ship - which negates the need for such artificial systems.
[/very personal opinion, flame-shield on]
Is the architect "better" than any developer? No. It's a complimentary role. Is this role always needed? No, but as a project gets bigger and start having more modules, interfaces tend to get hairy without a guiding hand. So why do architects make more? Supply and demand. Not everyone has the ability or the will to think "big picture" all the time. It's tiring, it's complex and you tend to think about balances (how will this affect the future? How much risk? How many man-hours? What's the alternative? How to phase development?) instead of "code purity".
Disclaimer: I'm an architect but I also do a lot of "lead developer" parts. And while the definition tends to get fuzzy around the edges (and some interfaces are made ad-hoc, without that guiding hand), I see the best results when I follow the above recipe (which, sadly, means a lot less coding than I actually like to do).
TL;DR: architecture is about interfaces between modules, not content of each module. Usually architects also wear "lead dev" hat because they like it.