# From YAGNI to YDNIY

DevFeed: [From YAGNI to YDNIY](<https://devfeed.tech/articles/from-yagni-to-ydniy-20994.md>)

Original publisher: [Read original article](<https://codewithoutrules.com/2020/09/18/ydniy/>)

Author: Itamar Turner-Trauring

Published: 2020-09-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Itamar Turner-Trauring](<https://devfeed.tech/sources/itamar-turner-trauring.md>)

Topics: [Python](<https://devfeed.tech/topics/python.md>), [Conda](<https://devfeed.tech/topics/conda.md>), [jupyter](<https://devfeed.tech/topics/jupyter.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [pip](<https://devfeed.tech/topics/pip.md>), [data](<https://devfeed.tech/topics/data.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [conda](<https://devfeed.tech/tags/conda.md>), [jupyter](<https://devfeed.tech/tags/jupyter.md>), [jupyter-notebooks](<https://devfeed.tech/tags/jupyter-notebooks.md>), [linux](<https://devfeed.tech/tags/linux.md>), [macos](<https://devfeed.tech/tags/macos.md>), [python](<https://devfeed.tech/tags/python.md>), [releases](<https://devfeed.tech/tags/releases.md>)

## AI overview

The article introduces YDNIY, or "You Don't Need It Yet," as a complement to YAGNI. It argues that features that are necessary but not release blockers can be delayed when a product remains useful without them. The author illustrates this with the staged development of the Python memory profiler Fil across Linux, macOS, Jupyter, Conda, and multiple memory-allocation APIs.

## Source excerpt

How do you ship a product on schedule? One useful approach is applying the You Ain't Gonna Need It principle, or YAGNI for short: leave out all the things that seem nice-to-have, but you have no proof you actually need. But beyond the things you don't need, there are still plenty of features you pretty clearly do need... but are not blockers on releasing your product. So beyond YAGNI, there's also YDNIY: You Don't Need It Yet. Let's see an example of this principle in practice, visualize the principle as a flowchart, and then compare it to another popular acronymed concept, the Minimum Viable Product. A real world example: shipping a new memory profiler In March 2020 I shipped the initial release of a new memory profiler for Python, Fil. Here's how it changed over time in terms of features, from May to August 2020: 0.3.0, initial release: Installable via pip packaging tool, runs only on Linux, only profiles complete program runs. 0.3.3: Support for an additional memory allocation API. 0.4.0: Support for out-of-memory situations. 0.5.0: macOS support. 0.6.0: Support for mmap() allocation API. 0.7.0: Support for C++ memory allocation API. 0.9.0: Much faster and lower overhead in some use cases, added support for yet another memory allocation API. 0.10.0: Support for running inside Jupyter notebooks, and native support for installing via the Conda packaging tool. All of the features I added in later releases were clearly necessary from the start; YAGNI did not apply. Lots of people use macOS, the target audience of data scientists and scientists often use Conda and Jupyter, all those memory allocation APIs are used in the real world, and so on. But even a tool that only runs complete programs on Linux, and only tracks the most popular memory allocation APIs, is still useful to some people. If I had waited until all those features were implemented to ship an initial release, all the people who used the profiler during the first four months of its existence would have had