Different methodologies for different domains?
(This question was partly inspired by Donald Knuth's put-down of Extreme Programming here)
I've been reading up on Agile recently, and been interested in Extreme Programming for several years now. But I got to wondering about how appropriate these methdologies might be in certain 'extreme' problem-spaces - for example coding for space shuttles.
What d开发者_运维知识库o you think? Are some domains inherently incompatible with 'modern' methodologies? Is there a clear metric for mapping a given domain to the best methodology?
In a word, no there isn't. Not for every domain.
Some domains/applications are better suited for very strict defect controls and testing (which can be very expensive), and the cost has to be justified (life at stake, for example) - these include medical devices, space shuttles and military equipment amongst others.
Many other domains/applications cannot justify such expenses.
Even within a single domain you will find different answers (the operational computers in the space shuttle itself versus the laptops that astronauts take with them).
As usual with a question like this, the answer is "It depends"... too many factors are at stake to give a general answer on each domain.
I have spoken with people who have helped program Space Missions, like Cassini, and the Mars rovers. Each and every line of code is inspected by the whole team. Agile development practices all work as iterative cycles. At the end of each cycle, product owners choose the next module they want to see next from back log, or they may insert something brand new. In critical systems where there is no room for error, all the necessary functionality and rules of the system are clearly set fairly early. This means agile practices probably won't be suitable.
I think that many people are comfortable with the methodologies that they use and are closed off to newer methodologies. Even for extreme problem spaces, there are clear benefits to TDD and other Agile practices. There clearly must be a significant amount of testing involved in spaces like this, especially compared to less mission critical apps.
Regardless of your domain, up front designs tend to be massive failures that will change significantly during development. Bringing in Agile practices (maybe even a hybrid or Waterfall and Agile) would certainly beneficial in my mind.
Like using the right tool for the job I say use the right methodology for the job. There are no generally right answers/paradigms/tools/etc... all must be put in context.
精彩评论