{"id":5003221,"date":"2015-12-16T22:48:36","date_gmt":"2015-12-17T06:48:36","guid":{"rendered":"https:\/\/aadev22.local\/?post_type=aa_glossary&#038;p=5003221"},"modified":"2023-03-12T12:41:02","modified_gmt":"2023-03-12T19:41:02","slug":"iterative-development","status":"publish","type":"aa_glossary","link":"https:\/\/agilealliance.org\/glossary\/iterative-development\/","title":{"rendered":"Iterative Development"},"content":{"rendered":"<p>Agile projects are iterative insofar as they intentionally allow for \u201crepeating\u201d software development activities, and for potentially \u201crevisiting\u201d the same work products (the phrase \u201cplanned rework\u201d is sometimes used;\u00a0<a href=\"https:\/\/agilealliance.org\/glossary\/refactoring\/\">refactoring<\/a>\u00a0is a good example).<\/p>\n<p>They are iterative in a third, less essential sense, in being most often structured around a series of\u00a0<a href=\"https:\/\/agilealliance.org\/glossary\/iteration\/\">iterations<\/a>\u00a0of fixed calendar length. However, some Agile approaches to scheduling,\u00a0<a href=\"https:\/\/agilealliance.org\/glossary\/kanban\/\">such as Kanban<\/a>\u00a0do away with iterations in this later sense, but retain the other aspects of multiple repetitions and planned rework.<\/p>\n<p>Nearly all Agile projects are\u00a0<a href=\"https:\/\/agilealliance.org\/glossary\/incremental-development\/\">incremental<\/a> as well as iterative. However, it is possible to use iterative strategies which are not also incremental; for instance, a \u201cbuild it twice\u201d strategy in which one first creates a throwaway prototype to gather user feedback, then uses insights from that experience to build the \u201creal thing\u201d. Prototyping is necessarily an iterative strategy and may have been a precursor to the development of iterative software development ideas.<\/p>\n<h2>Origins<\/h2>\n<p>The idea of iterative development predates Agile \u2013 by at least a decade or two.<\/p>\n<ul>\n<li>1984: an early\u00a0<a href=\"http:\/\/dl.acm.org\/citation.cfm?id=802007\">empirical study<\/a>\u00a0by Barry Boehm of projects using prototyping, by essence an iterative strategy, suggests that iterative approaches first started receiving serious\u00a0<a href=\"http:\/\/dl.acm.org\/citation.cfm?id=802546\">attention<\/a>\u00a0around that time, most probably driven by factors such as the rise of personal computers and graphical user interfaces<\/li>\n<li>1986: in a well-known paper, Barry Boehm presents \u201c<a href=\"http:\/\/dl.acm.org\/citation.cfm?id=12944.12948\">A Spiral model of software development and enhancement<\/a>\u201c, an iterative model geared to identifying and reducing risks through any appropriate approaches (though the \u201ctypical\u201d example presented is based on prototyping)<\/li>\n<li>1995: an article by Alistair Cockburn, \u201c<a href=\"http:\/\/alistair.cockburn.us\/Growth+of+human+factors+in+application+development\">Growth of human factors in application development<\/a>\u201c, suggests one major reason why iterative approaches gradually gain acceptance: the bottleneck in software development is shifting to (individual and organizational) learning, and human learning is intrinsically an iterative, trial and error process<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Agile projects are iterative insofar as they intentionally allow for &#8220;repeating&#8221; software development activities, and for potentially &#8220;revisiting&#8221; the same work products (the phrase &#8220;planned rework&#8221; is sometimes used; refactoring is a good example).<\/p>\n","protected":false},"author":6000331,"featured_media":8067461,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","categories":[908],"tags":[],"class_list":["post-5003221","aa_glossary","type-aa_glossary","status-publish","has-post-thumbnail","hentry","category-process"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/aa_glossary\/5003221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/aa_glossary"}],"about":[{"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/types\/aa_glossary"}],"author":[{"embeddable":true,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/users\/6000331"}],"replies":[{"embeddable":true,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/comments?post=5003221"}],"version-history":[{"count":0,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/aa_glossary\/5003221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/media\/8067461"}],"wp:attachment":[{"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/media?parent=5003221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/categories?post=5003221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agilealliance.org\/wp-json\/wp\/v2\/tags?post=5003221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}