Friday, November 6, 2009

Automation in Software Development

There are many discussions about productivity and ways to increase quality in software development. There is no single magic bullet, but by far the most important overall technique I've ever seen is to aggressively automate the software development process and overall lifecycle.

This is a broad topic and covers many different specific areas such as automated unit testing that can also serve as the foundation for automated regression testing. Automation includes the build & deployment process. Automation includes functional testing and acceptance testing. It includes monitoring and error alerting. It includes code quality analysis and compliance checks. It includes providing self-test harnesses to prove an environment is configured correctly. It can also include automatically generating code or portions of an application as part of the software development process.

Without fail, when we look across our custom application development projects the ones that have implemented a significant amount of automation are able to deliver more value (in terms of running, tested features) per time or per unit cost than those that have skimped on automation. This holds across technologies and types of systems and holds across various team sizes.

Why does automation play such a big role in improving Application Quality and Productivity? It's fairly simple and relates to key ideas in Lean Development and other "manufacturing" optimization strategies. Automation enables the whole software development team (including the development engineers, testers, operations, and business sponsors) to focus on adding specific value and avoid waste by:

  • Eliminating repetitive, low-value tasks - freeing time for knowledge creating work
  • Lowering QA and bug fixing effort by finding errors sooner through executing test suites more frequently
  • Enabling more complete test coverage by executing test suites automatically not through brute force
  • Enabling faster, moge agile, development by providing a robust safety net to catch problems sooner
  • Eliminating wasted time chasing configuration problems by reliably producing builds and deploying to all environments consistently
  • Enabling new team members to contribute value sooner by speeding the creation of new environments and providing a framework to show how the system works
  • Producing higher quality and lower maintenance systems by automating redundant code or module development
  • Converting time spent on routine monitoring to value-add investigations in to problems
  • Quickly alerting operations and development support teams to problems with running systems
Teams that focus on keeping the unit tests Green, look at their code coverage metrics, and know the current production system performance characteristics can spot problems before customers do. Teams that continually look for ways to streamline their tasks and ensure that any common process can be done through one command or one click have fewer problems and spend much more of their time building new features rather than solving the same silly problems over and over. Teams that ensure the basic smoke testing can be run by every engineer every day know that many fewer bugs will creep in to the testing environments and less time will be wasted with back and forth rework. These are the traits of successful teams that provide more value to the business and are truly successful!

No comments:

Post a Comment