Friend: Ok, got it. I used to think these are instincts.
Me: Well, you can hack it, i.e. ignore your conscience, but then you're corrupting your "code" and it affects your "program" behavior. And soon, you can't fix it anymore.
It's gone, unless you do major "refactoring".
Or a complete rewrite- which for humans is death and rebirth... and what does anyone know about death and beyond anyway?
In this life, you can only do refactoring, there's no rewrite.
Friend: Nice analogy. TDD!
Me: Well, TDD- Test-driven development is to ensure you are always following your conscience...But at the same time, allowing yourself the oppportunity to learn and the privilege to change your mind some day as you mature. TDD lets you easily incorporate lessons you learn as you grow and mature. It helps you change more easily than would be otherwise possible for you. It helps you easily figure out what went wrong- and how to fix it! And in fact, it would be so obvious and simple that even someone who doesn't know you much can help pinpoint it to you. I can go to a stranger and discuss some of these issues... and they'll say a thing or two that'll tell me immediately what I was thinking or doing wrong. It helps me change myself with objective criteria.
Me: TDD, my friend, is the best thing that happened to software since software was created...
Test-driven-development is turning the software "animal" into a software "human"!
TDD is the conscience of Software!