'''Problem:''' You have an operation that needs to be carried out (e.g., on a database, a configuration file, etc.) '''Context:''' The operation is one of a series that will be carried out. ''Or:'' The operation may be carried out incorrectly the first time, and may need to be fixed and re-done (e.g., installation in TestEnvironments that may uncover defects). '''Solution''': Design the operation to be ''idempotent''; that is, if it's carried out more than once, it's as if it was carried out just once. (You may remember from math courses that an ''idempotent'' function ''f'' is one where, for all values of ''x'', ''f(f(x))=f(x)''. (For example, the function that returns the absolute value of a number is idempotent.) '''Resulting context of AntiPattern:''' "Sorry, once that's been done, we have to do all ''this'' stuff before we can do it again." (*sigh*) '''Related patterns''': Most (all?) FunctionalProgramming is idempotent, but not all idempotent design is functional. -- PaulChisholm ''I think that's a bit ambiguous. Are you talking about f(x) followed by f(x), in which the second function call must evaluate to the same as the first in a functional language, or are you talking about f(f(x))? There's no reason why the latter should be true for arbitrary f, even in functional languages. '' --JasonGrossman ---- Definitions: * http://info.astrian.net/jargon/terms/i.html#idempotent * http://www.logophilia.com/jargon/jargon_24.html#TAG923 ---- I have a question: DoesBeingStatelessImplyBeingIdempotent? Please add your comments to IdempotentDesign.