Failure-Aware Software Development

What can we learn from the ways software systems fail?

Learning from failure means changing the next system
An assumption fails in a real system. What happened is preserved as evidence: reports, artifacts, decisions and consequences. Comparing incidents identifies the failure mechanism — which assumption failed and under what conditions. Generalizing beyond the incident yields a reusable claim about how systems fail. Institutionalizing that claim changes requirements, design, analysis, validation, process and governance, which in turn changes the conditions under which the next system is built.

Software failures are investigated, patched, and filed away. The engineering knowledge they contain rarely survives the incident that produced it, so organizations meet the same class of failure again in the next system.

We study failures empirically and ask what would have to change for that knowledge to persist. Some of our work characterizes how failures recur across systems and domains; other work examines whether evidence from past failures actually changes engineering decisions, and how organizations might structure requirements, design, and validation so that it does.

Characterizing how software fails

Before failures can teach anything, we have to know what recurs. This work asks what failure studies actually establish, and whether the same engineering problems appear across systems and domains.

Building evidence from failures

Individual failures are useful evidence only if they can be accumulated and analyzed. We study how to turn incident reports and other records of failure into evidence about recurring engineering problems.

Turning failure into engineering knowledge

Finding patterns is not enough. We study what can actually be learned from failures, and how that knowledge can be represented so it survives the incident that produced it.

Getting knowledge back into engineering decisions

The final problem is closing the loop. Even good evidence has little value if it does not reach the people making decisions, or alter the structures through which engineering proceeds.