YAGNI Principle: What It Is and When to Use It
YAGNI principle stands for "You Aren't Gonna Need It" and advises developers to avoid adding features until they are actually necessary. It helps keep software simple, reduces wasted effort, and prevents over-engineering by focusing only on current requirements.How It Works
The YAGNI principle works like a simple rule for building software: only add what you need right now, not what you might need later. Imagine packing for a trip—you only take clothes for the days you will be away, not extra outfits "just in case". This keeps your luggage light and easy to manage.
In software, this means developers should not spend time writing code for features that are not immediately required. This avoids complexity and saves time because future needs often change or never happen. By focusing on what is needed today, the project stays simpler and easier to maintain.
Example
This example shows a simple class that follows YAGNI by only implementing a feature when it is needed.
class ShoppingCart { constructor() { this.items = []; } addItem(item) { this.items.push(item); } // YAGNI: No discount feature yet, only add when needed getTotal() { return this.items.reduce((sum, item) => sum + item.price, 0); } } const cart = new ShoppingCart(); cart.addItem({ name: 'Book', price: 10 }); cart.addItem({ name: 'Pen', price: 2 }); console.log(cart.getTotal());
When to Use
Use YAGNI when designing or coding to avoid spending time on features that might never be used. It is especially helpful in agile development where requirements evolve frequently. By applying YAGNI, teams focus on delivering value quickly and reduce the risk of wasted effort.
For example, if you are building a simple app, don't add complex user roles or reporting features until users actually ask for them. This keeps the project manageable and adaptable.
Key Points
- YAGNI means "You Aren't Gonna Need It".
- Only build features when they are actually required.
- Prevents over-engineering and wasted effort.
- Keeps code simple and easier to maintain.
- Works well with agile and iterative development.