Leroy was shocked when the source code appeared. It was familiar yet strange, like an old lover's kiss. The code was five years old – an artifact of Leroy's first project. Leroy slowly scrolled through the code and pondered his next move. It wasn't a bug that was bothering Leroy – there were no race conditions or tricky numerical conversions. No performance problems or uncaught error conditions. It was all about design …
public class BankAccount
{
    public void Deposit(decimal amount)
    {
        _balance += amount;
        LogTransaction("Deposited {0} on {1}", amount, DateTime.Now);
    }
    public void Withdraw(decimal amount)
    {
        _balance -= amount;
        LogTransaction("Withdrew {0} on {1}", amount, DateTime.Now);
    }
    public void AccumulateInterest(decimal baseRate)
    {
        decimal interest;
        if (_balance < 10000)
        {
            interest = _balance * baseRate;
        }
        else
        {
            interest = _balance * (baseRate + 0.01);
        }
        LogTransaction("Accumulated {0} interest on {1}", interest, DateTime.Now);
    }
    void LogTransaction(string message, params object[] parameters)
    {
        using(FileStream fs = File.Open("auditlog.txt", FileMode.OpenOrCreate))
        using(StreamWriter writer = new StreamWriter(fs))
        {
            writer.WriteLine(message, parameters);
        }
    }
    public decimal Balance
    {
        get { return _balance; }
        set { _balance = value; }
    }
    decimal _balance;
}
"Times have changed, and so I have, fortunately", Leroy thought to himself. "And so will this code…"
To be continued…