You Ain't Gonna Need It (YAGNI), Explained in Depth
Jun 1, 2021
Are you struggling with a delay in delivery of your software product or overengineering your product? YAGNI (you aren't gonna need it or you ain't gonna need it) is a principle that you may apply to improve your software development process.
In this post, we're going to take a deep look at YAGNI and how you can use it effectively to avoid spending unnecessary time and effort while still providing an on-time and high-value product.
What Is YAGNI?
YAGNI is a core idea that stemmed from extreme programming (XP), an agile-based software development methodology. The idea is to add to a product only the functionalities that you actually need, not things the product might need in the future.
In simple terms, you should avoid implementing features that currently aren't necessary for your software but that you speculate it might require later on. This is because doing so saves a lot of time and effort. It also makes you focus on the current important tasks.
After all, what if a feature you added needs a large modification or is no longer needed in the future? That can be wasteful. Moreover, if your product development is time sensitive, YAGNI can help you meet the tight deadline.
So, does that mean you shouldn't think about or discuss future aspects of the product? No, you can do so. The acronym YAGNI doesn't literally mean you're not going to need it. It means you should focus on implementing only the features your product needs right now.
For example, sometimes you're positive that you need to add a particular feature to upcoming versions of your app, like 24-hour stories for your chat or social media application. In that case, your team can discuss strategies you consider best.
However, as YAGNI directs, you shouldn't start adding it to your codebase unless you're completely sure it's needed in the current version for the users. Often, future requirements depend on the results of the current status.
So, you can wait for customer feedback and fix issues to make the current version more stable and bug-free. And if there's high demand for features, you can implement them (if you feel you now should) for the next release of the application.
A YAGNI Use Case
YAGNI isn't limited to small projects or large enterprises. It can be implemented by development teams ranging in size from small to large and ranging in expertise from novice to expert. Let's try to understand the role of YAGNI by looking at a real-world scenario faced by many startups that have not launched their product yet.
Suppose you want to start a company and have an idea to build a dating app called Zyle with a unique feature that no dating app in the market is using yet. You shared your idea with investors, who liked it and are willing to invest—but only if you show them a working demo of Zyle with at least 1,000 active users.
Now, somehow you gathered a small team of developers, designers, and a tester, and you set a target to build a minimum viable product within three or four months.
In a scheduled meeting, one of the developers points out that adding audio and video features to the chat functionality of the app might take time to research and implement.
So, would you rather direct them to add it anyhow by managing your time and extending your deadline a little, or save it for a future release? Another developer also asked whether they should consider attachments in the chat like GIFs and stickers.
How should you manage your development process, and what should be your priority for adding functionalities? What you do in this case will decide whether you're able to build the app within three or four months or get stuck in the cycle of over-optimizing the app in search of perfection.
How YAGNI Can Help
YAGNI can help you set up a task list of dos and don'ts.
Obviously, you should first try to implement your selling feature and get the app ready for end users. And if you look from a different perspective, having GIFs and stickers in the chat app is not strictly necessary in the first version of your app.
After all, the app is still functional with normal messaging. Maybe you can add such functions in the next version or after getting customer feedback.
Waiting to add additional features will save time and effort for developers, helping them meet project deadlines. Once you put your app on the market, you always have a chance to make it better in its next iterations.
But delaying your app's release by even a week so you can add more features might give your opponent a chance to capture more users. The first version of your app doesn't need to be perfect. If it can do simple things and still fulfill its intended purpose, that's enough.
With time, you can definitely have add-ons per users' demands. But even in some cases where people want features eagerly, you may not want to implement them because of technical or ethical reasons (e.g., Twitter edit tweets).
Instead of thinking of more and more features to implement, work on making one feature best so that no one can match it. It will make your product stand out in the market instead of having something that can lower market reputation due to bad functioning.
Indirectly, YAGNI is about adding features in step-by-step manner based on requirements, not speculation. It also helps the user to understand, adjust to, and use new features effectively.
How YAGNI Can Speed Up Your Product Delivery Process
When I say YAGNI can speed up your product delivery process, you can also read how avoiding the implementation of presumed, rather than actual, needs can boost your software delivery process.
When and why does the development process slow down? Most often, it's when you try to do a lot of things in a short time span. Or it happens when you include requirements that you think it'll need in the future (meaningless work).
Meaningless work in your project can eat developers' time and effort, sometimes leading to a delayed delivery that had a direct impact on the company's reputation. Hence, to complete the task in a limited time frame, what you need is to figure out not just the important things you must do but also what you shouldn't do.
Doing so will save you time, lots of bucks, and energy. And, most importantly, you can use the saved time to let your app go through multiple testing stages to refine it as much as possible. You might not notice, but practicing YAGNI also helps remove complexity from the codebase.
As you lay out the feature step by step according to needs, your code also remains cleaner and more robust, which further reduces the time to debug or refactor the app. Even for the future developer, understanding the codebase becomes much easier.
Altogether, YAGNI smooths the whole process of software development by weeding out useless tasks and focusing on a high-quality production value. So, if you fill your project engine with YAGNI fuel, it'll run fast and take you to your destination on time.
How to Use YAGNI?
Having the knowledge of YAGNI as a concept isn't enough to make the most out of it. You should also know how you can turn your theoretical knowledge into effective action.
You can follow the five steps below to get started with YAGNI and learn to use it effectively.
1. List Necessary Requirements and Deadlines
The first step is to jot down all your requirements and classify them as necessary or unnecessary. This will help you know what you need to focus on.
As you can see on your list, whether you wrote it down on paper or it's on a screen, you can easily manage your tasks and keep track of what's done.
While listing the requirements, you should also consider the time you have. Being bound to time, you should always have a one-week buffer in case something goes wrong.
2. Analyze and Discuss With Your Team
Once you have your documents of what you need to do for the next few months, discuss the tasks with your team members. Informing your team members of your goal will help everyone clearly see your common vision.
Also, you might receive good suggestions after analyzing the task assigned to a respective team. If you're not a jack-of-all-trades, then it's always a good decision to consult with the team.
3. Plan for a Short-Term Milestone
Before you start your development process, you should also set your short-term goals. It can involve the completion of a small task or a particular feature.
After a period of time, you can meet with the team to analyze completed work and what still needs to be done. This meeting also allows you to check in on what path your team is on right now and weed out unnecessary work.
4. Learn to Say No
As development is underway, your teammates might come up with new ideas for the app that can add value to it.
In such a case, you should be ready to say no unless it's a small optimization. Yes, it may be hard for you and some team member may be upset that you rejected the idea. But to meet the deadline and stick to your path, you have to say no when team members propose working on unnecessary things.
However, if you like the idea, you can take note of it and discuss it after you've finished the current task. You shouldn't ignore team suggestions that might add great value to a product.
5. Keep Track of Each Process
Throughout the software development process, one of the most important things that you need to be aware of is the value stream of your project. A value stream defines each step in the development cycle that creates customer value.
Ultimately, it's a value stream that leads the product to completion and delivers what customers need. Hence, it's very important to visualize and know your value stream so that you can get a clear picture of whether you're heading in the right direction.
And, if needed, you can improve your production workflow through value stream management. But how can you look at all the steps in the software delivery process from idea to production?
The best way is to use value stream management tools, which can help you capture, visualize, and analyze each aspect of your delivery process.
One such tool is Plutora. Plutora can boost not only your software delivery process but also the quality of a product. You can use it to improve and optimize the delivery process by identifying bottlenecks coming into your workflow.
To get the most out of the Plutora platform, you should also know how you can use value stream mapping and management. If you really want to master software delivery with value stream management, you can read this free e-book.
What YAGNI Isn't
Sometimes people misuse YAGNI because they misunderstand it. So, in addition to understanding what YAGNI means, it's also important to know what YAGNI doesn't mean.
YAGNI Isn't an Excuse to Put Off Necessary Work
YAGNI isn't an excuse to designate a task that currently isn't essential to your product for future work.
Suppose you have a plan to add dark mode or multilingual support to your software, but you may need to skip it at the initial release. Here, you need to understand that setting up the foundation of the app for multilingual support may take effort. But in the future, when the codebase grows, you may need to put a lot of time and work into refactoring the codebase so you can add the code for the multilingual feature.
So, it's better to keep your future plan in mind and add a small effort supporting that plan at the initial stage. Also, doing so doesn't always increase the complexity of the software. Instead, it will decrease complexity.
Therefore, instead of using YAGNI as justification to ignore things all the time, you need to rethink your use case as well.
YAGNI Isn't a Ban on Thinking About the Future
YAGNI also doesn't mean you should completely stop thinking about the future of your product. You're free to make a plan of what features your app will possess in the future. But what YAGNI says is to not start implementing it all at once.
Adding tons of features can not only take extra hours of time and money, but it might make your software bloatware as well. Even the codebase might become too complex to understand and debug to fix any small issues. Foresee the future, but rethink the impact and need before implementing something new.
YAGNI Beyond Software Development
YAGNI isn't limited only to the software development field. You can make use of YAGNI in other areas as well, like designing prototypes or hiring developers.
If you're a very new bootstrap startup, then you definitely want to be smart about how you spend your resources, right? In such a case, YAGNI is one of the best techniques that can help you figure out how many work hours your team needs to put in just to launch the app.
For example, for a prototype app, you can save on the cost of pay by forgoing an automation or cybersecurity expert for your project. You might need them in the future, but not at this stage, as the application isn't usable for a large audience.
Burning money just to hire a large number of employees at the initial stage might not be a good idea. Instead, you can invest more in the required developer who is an expert in their job. Similarly, wherever you feel the need to avoid unnecessary presumed work, YAGNI comes into play.
Don't Work Based on Assumptions
To sum up, YAGNI aims to turn your chaotic development process into a successful and valuable one. How? By rescuing your not-so-needed labor for other, more valuable uses.
You can use the saved labor wherever you want. For example, you might optimize current features or run through test cases to make the app more stable and bug-free.
It's also true that YAGNI can limit your experimentation, as you focus on building things already decided and are restricted from going beyond those. But considering the time sensitivity of software delivery and the need to maintain robust code, YAGNI seems worthwhile.
Last, I suggest you first understand YAGNI very well. Then, you can easily figure out where you should apply it or not. You can start using YAGNI first with a small project; then, move on to a large one.
Download our free eBook
Mastering Software Delivery with Value Stream Management
Discover how to optimize your software delivery with our comprehensive eBook on Value Stream Management (VSM). Learn how top organizations streamline pipelines, enhance quality, and accelerate delivery.