"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, PD ...
(XP) that states a programmer
A computer programmer, sometimes referred to as a software developer, a software engineer, a programmer or a coder, is a person who creates computer programs — often for larger computer software.
A programmer is someone who writes/creates ...
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" (YAGNI).][
XP co-founder ]Ron Jeffries
Ron Jeffries (born December 26, 1939) is one of the three founders of the Extreme Programming (XP) software development methodology circa 1996, along with Kent Beck and Ward Cunningham. He was from 1996, an XP coach on the Chrysler Comprehensi ...
has written: "Always implement things when you actually need them, never when you just foresee that you need them."[ ]John Carmack
John D. Carmack II (born August 20, 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'', ''Doo ...
has written "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 computer code—changing the '' factoring''—without changing its external behavior. Refactoring is intended to improve the design, structu ...
, continuous automated unit testing
In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&md ...
, and continuous integration. Used without continuous refactoring, it could lead to disorganized code and massive rework, known as technical debt
In software development, technical debt (also known as design debt or code debt) is the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.
Analogous with ...
. 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 software patterns, replacing it with abstractions or using data normalization to avoid redundancy.
The DRY principle is stated as "Every piece o ...
* Feature creep
Feature creep is the excessive ongoing expansion or addition of new features in a product, especially in computer software, video games and consumer and business electronics. These extra features go beyond the basic function of the product and ...
* If it ain't broke, don't fix it
* KISS principle
KISS, an acronym for "Keep it simple, stupid!", is a design principle noted by the U.S. Navy in 1960. First seen partly in American English by at least 1938, the KISS principle states that most systems work best if they are kept simple rather tha ...
* 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 used in management, business analysis, project management, and software development to reach a common understanding with stakeholders on the importance they place on the delivery of each requireme ...
* Muntzing Muntzing is the practice and technique of reducing the components inside an electronic appliance to the minimum required for it to function. The term is named after the man who invented it, Earl "Madman" Muntz, a car and electronics salesman who was ...
* Overengineering Overengineering (or over-engineering), is the act of designing a product or providing a solution to a problem in an elaborate or complicated manner, where a simpler solution can be demonstrated to exist with the same efficiency and effectiveness as ...
* Single-responsibility principle
The single-responsibility principle (SRP) is a computer programming principle that states that "A module should be responsible to one, and only one, actor." The term actor refers to a group (consisting of one or more stakeholders or users) that ...
* SOLID
Solid is one of the State of matter#Four fundamental states, four fundamental states of matter (the others being liquid, gas, and Plasma (physics), plasma). The molecules in a solid are closely packed together and contain the least amount o ...
* Unix philosophy
The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to minimalist, modular software development. It is based on the experience of leading developers of the Unix operating system. Early Unix de ...
* Worse is better
Worse is better (also called the New Jersey style) is a term conceived by Richard P. Gabriel in an essay of the same name to describe the dynamics of software acceptance. It refers to the argument that software quality does not necessarily increa ...
References
{{Reflist, refs=
[
''Extreme Programming Installed'', Ronald E. Jeffries, 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'', Giancarlo Succi,
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=Lowell Lindstrom , 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'',
Stephen R. Schach, 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=Ron Jeffries
]
[
Martin Fowler; ]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 ori ...
(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".
[
Mary Poppendieck; 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 ori ...
, ''Extreme Programming Explained'', Chapter
17, uses the acronym YAGNI (You Aren't Going to Need It) for this
practice and explains its rationale."
[
Russ Olsen (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)."
Software development philosophies
Programming principles