allow for distributed development where each developer has the entire changeset on her machine (~175MB for complete Linux history) • Mercurial (Hg)- Similar to git and written in Python • Please use one of these ^^^ (just use git) • Outdated version control systems: cvs, subversion, Visual Source Safe
IO (i.e. database interaction should be 'mocked') • Atomic - unit tests on one class should not overflow into another (that would be an integration test)
chores until all bugs are fixed • Regressions - When you fix a bug, test it so if it is re-introduced your tests will find it • If you can’t justify fixing a bug quickly, move on because it’s not important. Don’t maintain a long list of bugs.
flows from your cache system to your database system, unit tests won’t cut it • Integration tests can actually test how data moves through a test system
tests (including integration) to run on a build server • If the integration tests fail, an email is generated so developers know that the build is broken
bit before turning on the new feature • Separate code deployment from feature release • Warm up a feature by deploying to 10% (or even release internally first like Facebook does). • Django Waffle works well for this
users or customer service, you’re probably not monitoring enough • Investigate all exceptions • Log all exceptions • Design robust warning, info and debug logging so that you can increase and decrease verbosity as necessary • Aggregate logs so they can be found and correlated (http://papertrailapp.com)