HOME

TheInfoList



OR:

"You aren't gonna need it" (YAGNI) is a principle which arose from
extreme programming Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,"Human Centred Technology Workshop 2006 ", 2006, ...
(XP) that states a
programmer A programmer, computer programmer or coder is an author of computer source code someone with skill in computer programming. The professional titles Software development, ''software developer'' and Software engineering, ''software engineer' ...
should not add functionality until deemed necessary. Other forms of the phrase include "You aren't going to need it" (YAGTNI) and "You ain't gonna need it".
Ron Jeffries Ron Jeffries (born December 26, 1939) is one of the three founders of the Extreme Programming (XP) software development methodology In software engineering, a software development process or software development life cycle (SDLC) is a proc ...
, a co-founder of XP, explained the philosophy: "Always implement things when you actually need them, never when you just foresee that you
ill ILL, or Ill, or ill may refer to: Places * Ill (France), a river in Alsace, France, tributary of the Rhine * Ill (Vorarlberg), a river in Vorarlberg, Austria, tributary of the Rhine * Ill (Saarland), a river of Saarland, Germany, tributary o ...
need them."
John Carmack John D. Carmack II (born August 21, 1970) is an American computer programmer and video game developer. He co-founded the video game company id Software and was the lead programmer of its 1990s games ''Commander Keen'', ''Wolfenstein 3D'', ''Do ...
wrote "It is hard for less experienced developers to appreciate how rarely architecting for future requirements / applications turns out net-positive."


Context

YAGNI is a principle behind the XP practice of "do the simplest thing that could possibly work" (DTSTTCPW). It is meant to be used in combination with several other practices, such as continuous
refactoring In computer programming and software design, code refactoring is the process of restructuring existing source code—changing the '' factoring''—without changing its external behavior. Refactoring is intended to improve the design, structure, ...
, continuous automated
unit testing Unit testing, component or module testing, is a form of software testing by which isolated source code is tested to validate expected behavior. Unit testing describes tests that are run at the unit-level to contrast testing at the Integration ...
, and
continuous integration Continuous integration (CI) is the practice of integrating source code changes frequently and ensuring that the integrated codebase is in a workable state. Typically, developers Merge (version control), merge changes to an Branching (revisio ...
. Used without continuous refactoring, it could lead to disorganized code and massive rework, known as
technical debt In software development and other information technology fields, technical debt (also known as design debt or code debt) refers to the implied cost of additional work in the future resulting from choosing an expedient solution over a more robust o ...
. YAGNI's dependency on supporting practices is part of the original definition of XP.


See also

*
Don't repeat yourself "Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of information which is likely to change, replacing it with abstractions that are less likely to change, or using data normalization which avoids r ...
*
Feature creep Feature creep is the excessive ongoing expansion or addition of new features in a product, especially in computer software, video games (where it should not be confused with power creep) and consumer and business electronics. These extra feature ...
* If it ain't broke, don't fix it *
KISS principle KISS, an acronym for "Keep it simple, stupid!", is a design principle first noted by the U.S. Navy in 1960. First seen partly in American English by at least 1938, KISS implies that simplicity should be a design goal. The phrase has been associate ...
*
Minimum viable product A minimum viable product (MVP) is a version of a product with just enough features to be usable by early customers who can then provide feedback for future product development. A focus on releasing an MVP means that developers potentially avoid ...
*
MoSCoW method The MoSCoW method is a prioritization technique. It is used in software development, management, business analysis, and project management to reach a common understanding with stakeholders on the importance they place on the delivery of each r ...
*
Muntzing Muntzing is the practice and technique of reducing the components inside an electronic appliance to the minimum required for it to sufficiently function in most operating conditions, reducing design margins above minimum requirements toward zero. ...
*
Overengineering Overengineering, or over-engineering, is the act of designing a product or providing a solution to a problem that is complicated in a way that provides no value or could have been designed to be simpler. It has been employed intentionally in si ...
*
Premature optimization In computer science, program optimization, code optimization, or software optimization is the process of modifying a software system to make some aspect of it work more efficiently or use fewer resources. In general, a computer program may be op ...
* Single-responsibility principle *
SOLID Solid is a state of matter where molecules are closely packed and can not slide past each other. Solids resist compression, expansion, or external forces that would alter its shape, with the degree to which they are resisted dependent upon the ...
*
Unix philosophy The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to Minimalism (computing), minimalist, Modularity (programming), modular software development. It is based on the experience of leading devel ...
*
Worse is better ''Worse is better'' (also called the ''New Jersey style'') is a term conceived by Richard P. Gabriel in a 1989 essay to describe the dynamics of software acceptance. It refers to the argument that software quality does not necessarily increase w ...


References

{{Reflist, 30em, refs= ''Extreme Programming Installed'', Jeffries, Ronald E.; Ann Anderson, Chet Hendrickson (2001). 265 pages, p. 190, webpage:
Books-Google-dIsC
quote: "YAGNI: 'You Aren't Gonna Need It.' This slogan, one of XP's most famous..., reminds us always to work on the story we have, not something we think we're going to need."
''Extreme Programming examined'', Succi, Giancarlo; Michele Marchesi, 2001, 569 pages, webpage:
Books-Google-VSCh
quote: "XP says 'do the simplest thing that could possibly work ' because 'you aren't gonna need it'."
{{cite book , editor1=Lindstrom, Lowell , editor2=Carmen Zannier , editor3=Erdogmus, Hakan , title =Extreme Programming and Agile Methods – XP/Agile Universe 2004: 4th Conference on Extreme Programming and Agile Methods , series=Lecture Notes in Computer Science , publisher=Springer , location=Berlin , year=2004 , page=121 , isbn=3-540-22839-X ''Object-oriented & classical software engineering'', Schach, Stephen R. (2007). 618 pages, p., webpage:
Book-Google-hWwh
quote: "Two acronyms now associated with extreme programming are YAGNI (you aren't gonna need it) and DTSTTCPW (do the simplest thing that could possibly work)."
{{cite web , url=http://ronjeffries.com/xprog/articles/practices/pracnotneed/ , title= You're NOT gonna need it! , access-date=2007-11-07, date=April 4, 1998 , author=Jeffries, Ron Fowler, Martin;
Kent Beck Kent Beck (born 1961) is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 o ...
(8 July 1999). ''Refactoring: Improving the Design of Existing Code''. Addison-Wesley Professional, 431 pages, p. 68, webpage:
BGoogle-1M
{{ISBN, 978-0201485677. Quote: "you aren't going to need it".
Poppendieck, Mary; Tom Poppendieck (2003). ''Lean Software Development: An Agile Toolkit'', p.59, webpage:
BGoogle-hQ
Quote: "
Kent Beck Kent Beck (born 1961) is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 o ...
, ''Extreme Programming Explained'', Chapter 17, uses the acronym YAGNI (You Aren't Going to Need It) for this practice and explains its rationale."
Olsen, Russ (2007). ''Design Patterns in Ruby'', p.13, webpage:

{{ISBN, 9780321490452. Quote: "This design principle comes out of the Extreme Programming world and is elegantly summed up by the phrase You Ain't Gonna Need It (YAGNI for short)."
Programming principles Extreme programming English phrases