When I and other bloggers write about agile software development, we almost always focus on process areas and Scrum, in particular. That’s fine, but I’m making the argument in this post that your team simply cannot be agile unless some basic elements of software development are in place. Without them, the best agile process on the planet won’t help you.
Building great stuff takes more than just a great process. Ask any carpenter, bricklayer or metalworker — they are masters of their crafts. In no particular order, here are seven must-have elements of building great software systems.
- Configuration Management: This includes revision control, source control, baselines, builds and branches. You must have total control over your software artifacts to move fast and reliably.
- Automated Deployment: Software deployments requiring that the production system be taken offline for more than a few minutes are not agile. Deployments need to happen quickly and seamlessly — even while the target system is in use.
- Feature Toggles: Enabling and disabling software features via configuration files, database tables or other means can be a lifesaver. Don’t hold up an entire deployment or rollback a release because one feature isn’t ready.
- Context Sensitive Help: For customer-facing software, new features or feature changes will be confusing to some. Providing helpful information, wizards and tutorials smooths the bumps.
- Configurable and Detailed Logging: In any enterprise-scale system, production problems will develop. Having the ability to capture detailed logs showing what the software is doing at any point in time makes troubleshooting simpler and faster.
- Parameter-Driven Features: Features and algorithms often need to be tailored to the end user. Capturing operating parameters in configuration files makes software systems more flexible and adaptable.
- Good Tools: Every professional in any industry does better work when given the right tools. Enough said.
Adopt Scrum, Kanban, XP or Lean principles if you like. Just remember that without satisfying the above prerequisites, your team will never be as agile as you want or need.