Stop future-proofing software
As Martin Fowler correctly explains, YAGNI is primarily about end-user features, not the flexibility of the code and the toolchain. If you don&#x27;t keep your tech stack (code, infrastructure, people) flexible, then iterative development becomes impossible. The assumption behind YAGNI is that &#x27;you can&#x27;t predict requirements accurately&#x27;. Which is true, so don&#x27;t build them ahead of time. However, the same assumption requires you to be flexible, modular, etc.<p>Specific example from TFA: distributed app vs. large server. A distributed app might give you better scalability, which you might not need because large servers are cheap. However, a distributed app also forces you to think about state, so if you screw something up and have to fix it middle of the day, you can BG deploy the app instead of having a 4 minute outage. It forces you to modularize the logic and think about interfaces, so if you need to add, remove or change functionality then it&#x27;ll likely be faster.<p>Etc.<p>What this article forgets to say is: &quot;Stop future-proofing your software if you are still looking for a good product-market fit. As soon as you know what your business is going to be, make sure your technology stack is flexible.&quot;