by Arlene Minkiewicz
| September 25, 2014
Agile development practices have enabled software development organizations to deliver quality software that optimizes the customer’s satisfaction with the value they receive for their money. That being said, agile development may not be the best approach for every software development project. Alistair Cockburn, agile development specialist and one of the initiators of the agile software development movement, acknowledges that “agile is not for every project”. Further elucidating this point, Cockburn opines: “small projects, web projects, exploratory projects, agile is fabulous; it beats the pants off of everything else, but for NASA, no”. . While this is true when one considers a fully agile development, this may be too broad a generalization as there are documented cases of some agile practices being successfully modified and applied to space system software.
Clearly space and other mission critical systems have high reliability, fault tolerance requirements with strict safety and performance criteria. Chances of success for mission critical software development are “greatly increased” with an integrated, effective combination of good technology and solid process which supports the following key principles:
* Effective requirements management and analysis
* Reusable component libraries
* Object-oriented methodologies
* Quality assurance
While the need for space and mission critical solutions continues to prevail, market tolerance for long running programs delivering monolithic solutions is waning. New developments for space systems and other mission critical systems are looking for ways to create Faster, Better Cheaper solutions that continue to satisfy the rigorous safety and performance requirements necessary to protect life and preserve value. Such changes are likely to come about by finding ways to create hybrid solutions which integrate agile practices where possible with more stringent formal methods where necessary. Some agile practices for consideration in such a hybrid solution include:
* Small teams evolving design in small visible steps
* Daily stand up meetings
* Pair programming
* Continuous automated testing
* Test driven development
* Collaborative planning (involving the customer)
Incorporation of practices such as evolutionary planning, refactoring and little to no documentation require more careful consideration as to their applicability and in many cases should be dismissed outright as they run in cross purposes to goals for fault tolerance and safety criticality common to most mission critical systems.
Check out  for a great discussion on the development of Mission Control Technologies at NASA Ames using a hybrid process including many agile practices. This team has managed to segregate activities constrained by mission criticality from other development activities in such a way as to leverage the benefits of agile practices while still maintaining the rigor and formality where required.
 Delivering Software into NASAs mission Control Center Using Agile Development Techniques. Christopher Webster, Nija Shi, Irene Skupniewicz Smith, Aerospace Conference 2012, available at http://ieeexplore.ieee.org/application/mdl/mdlconfirmation.jsp?arnumber=6187329&icp=false (Retrieved Sept 2013)