YAGNI is a tough one IMHO. It depends on what you're building. When I start new applications I tend to spend a lot of time putting all the core pieces I **am likely to need** into place. This is usually a fairly involved effort and there are pieces that will end up not getting used. But it's easier to put them in the beginning in case they are needed than add them later.
On a LOL note: Also as a framework and tools builder it's my job to anticipate what features people want and are likely to need so I'm often doing the opposite of YAGNI :-)
A lot of that comes with experience - if you've been doing development for a while you're likely to have a pretty good feel what's worth implementing up front and what's better left until needed.
+++ Rick ---
>>Don't Repeat Yourself
>- as in don't repeat code (unless it is trivial)...have not done that for decades :-)
>
>>You Ain't Gonna Need It
>- this one I don't get - explain?