YAGNI ("You aren't gonna need it")

Is a software design process and principle which declares the rejection of over-functionality as the main goal and/or a value, i.e. the rejection of adding functionality which is not directly needed.
According to supporters of the YAGNI principle, the desire to write code which is not needed right now but may be needed in future has the following undesirable consequences:
Time that would have been spent adding, testing and improving needed functionality is wasted.
New functionality must be debugged, documented and maintained.
New functionality limits what can be done in the future - unnecessary new features may later prevent the addition of new needed features.
Until new features are really needed, it is difficult to fully anticipate what they should do and test them. If new features are not carefully tested, they may not work properly when they are needed later. As a result, the software becomes more complex (sometimes overly complex).
If all functionality is not documented, it may remain unknown to users, but may create various security risks for the user's system. Adding new functionality may lead to a desire for even newer functionality, leading to a snowball effect.