We've been talking a lot internally about continuous deployment and continuous delivery. Jez Humble has posted a nice blog entry comparing the two. Some of the key elements we use to keep our velocity up include:
- Automated builds
- Automated unit, integration & acceptance tests
- Very high degree of code coverage (90%+ is typical for us)
- Static code analysis & extensive automated documentation generation integrated into the build
- Single-click release production
- Environment generation & configuration automation (aka DevOps)
Regardless of what you call it, once you get used to having this kind of support mechanism in place, it can feel like losing an arm if it goes away. Most of this stuff is easily available for an individual developer - the rest can be found with nice cloud-based packages like CloudBees. While cloud-based packages like this may or may not be suitable for your particular corporate environment, having access to things like that is a huge game-leveler for small companies.