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
No comments:
Post a Comment