Nice. I guess the author never experienced the joy of having this lovely conversation with his users:<p><i>Programmer:</i> That feature you asked for two weeks ago? It's done. Take a look. What do you think?<p><i>User:</i> Oh... hmmm... yeah, that's kinda wrong... See, I know I said I wanted X, but I just realized I actually wanted Y. But Y is very similar to X, can't you just tweak it and I'll come back to take a look after lunch?<p><i>Programmer:</i> Well, actually, yeah, Y is a lot like X, but I tried to just "start shipping great software," so I didn't take the extra day which will make X->Y only take an hour or two. I'll have to start from scratch. See you in another two weeks.<p><i>User (two weeks later):</i> Actually, Y isn't quite right. Can you do Z?<p>I'll go so far as to claim that code which can't adapt to changing requirements is either (1) pure genius because it just works and does exactly what users want, and therefore rare, or (2) unused, or (3) thrown away. Obviously it shouldn't be overdone, but the ability to balance between flexibility and delivering working applications is precisely what defines people who, as the author puts it, "ship great software."