i have found that dogfooding and acceptance tests (tracking regressions), combined with focused source commits are the most practical.<p>while unit tests laser in on specific problems, they are often unnecessary and with frequent commits and sensible commit messages, the causes of problems are always trackable and nearly always obvious.<p>git bisect helps in situations where the commit count is high (in large teams).