How you reduce defects, ease remediation and improve flow intro production will have a great impact on the achievement of your business goals. It should be one of your main priorities to adopt approaches that improve flow of changes into production and enable refactoring, fast feedback on quality and bug fixing. By prioritising these, you will be able to accelerate beneficial changes entering production, decrease issues deployed, and enable swift identification and remediation of any issues that might be introduced through deployment activities. Below, you will find a list of 10 recommendations based on AWS Best Practices that will aid you in this.
Using version control Enable the tracking of changes by using version control. Assets should be maintained in version-controlled repositories. This is the best way to support tracking changes, deploy new versions, detect changes to existing versions and revert to prior versions. By using version control you will, for example, be able to roll back to a known good state in the event of a failure. The version control capabilities of your configuration management systems should be integrated into your procedures. By using AWS CodeCommit, a version control service hosted by AWS, you can privately store and manage assets in the cloud. Useful resources: Introduction to AWS CodeCommit What is AWS CodeCommit?
Testing and validating changes One way to guarantee that you will reduce errors and detect them as quickly as possible is to test and validate changes. All changes should be tested at all lifecycle stages, and the results of testing should be validated to confirm that new features will have a positive impact and mitigate the risk of any potentially failed deployments. By automating testing, you can minimize errors caused by manual processing as well as reduce the level of effort required to test. Useful resources: What is AWS CodeBuild? Local build support for AWS CodeBuild
Using configuration management systems Using configuration management systems such as AWS Config and AWS OpsWorks to make and track configuration changes will result in reduced errors caused by manual processing and a lower level of effort needed to deploy changes. Useful resources: Infrastructure configuration management AWS Config What is AWS Config? Introduction to AWS CloudFormation What is AWS CloudFormation? AWS OpsWorks What is AWS OpsWorks? Introduction to AWS Elastic Beanstalk What is AWS Elastic Beanstalk?
Using build and deployment management systems Economy of effort and reduction of human error should be on your list of top priorities. By using build and deployment management systems to track and implement change, you can achieve both. In today’s day and age, it’s possible to fully automate the integration and deployment pipeline from code check-in through build, testing, deployment, and validation. This will not only result in a reduction of effort and human error but also enable you to introduce changes more quickly. Useful resources: What is AWS CodeBuild? Continuous integration best practices for software development Slalom: CI/CD for serverless applications on AWS Introduction to AWS CodeDeploy - automated software deployment with Amazon Web Services What is AWS CodeDeploy?
Performing patch management Patch management will allow you to gain features, address issues, and remain compliant with governance and vendor support requirements. Automation in this area will reduce human error as well as the level of effort and time required to patch. Useful resources: AWS Systems Manager Patch Manager
Sharing design standards One of the best ways to increase awareness of best practices and maximize the benefits of your development efforts is to continuously share useful information with your teams. Existing best practices, design standards, checklists, operating procedures, and guidance and governance requirements should be available to all teams at all times. This will simplify their tasks and exponentially increase the benefits of their efforts. To support continuous improvement and innovation, there should be procedures in place that allow team members to request changes, additions, and exceptions to design standards. Useful resources: Delegating access to your AWS environment Share an AWS CodeCommit repository Easy authorization of AWS Lambda functions Sharing an AMI with specific AWS accounts Speed template sharing with an AWS CloudFormation designer URL Using AWS Lambda with Amazon SNS
Implementing practices to improve code quality Improved code quality and reduced defects can be achieved by implementing specific practices to this end. Some examples of this can be test-driven development, code reviews, and standards adoption.
Using multiple environments Using different environments for different purposes can help you reduce defects. For example, you can have different environments for experimentation, development, and testing your workload. The closer these environments get to production, the higher the level of access control should be. Developers' sandbox environments would work well with minimized controls, which will allow for great experimentation conditions. If you’re looking to increase development agility, a good strategy can be to provide individual development environments which enable parallel work. To ensure systems operate according to expectations when deployed, you should deploy environments whose configuration is consistent with the controls present in production. The best way of doing this would be to use infrastructure as a code and configuration management system. In addition, production equivalent environments should be used when load testing; this will enable increasingly reliable results. It goes without saying that all environments should be turned off whenever they’re not in use to avoid costs associated with idle resources. Useful resources: What is AWS CloudFormation? How do I stop and start Amazon EC2 instances at regular intervals using AWS Lambda?
Making frequent, small, and reversible changes When it comes to changes to your environments, the safest and most efficient way is to go for frequent, small, and reversible adjustments. By choosing this route, you will be easing troubleshooting, enabling faster remediation, and providing the option to roll back a change, if needed. Approaching change in this manner will also result in an increased rate of business value delivery.
Fully automating integration and deployment It’s a proven fact that automation leads to fewer edeployment efforts and fewer instances of human error. Today, you can automate build, deployment, and testing of your workloads by using build and deployment management systems. You can reduce lead time, enable increased frequency of change and reduce the level of effort required by fully automating the integration and deployment pipeline, from code check-in through build, testing, deployment, and validation. Useful resources: What is AWS CodeBuild? Continuous integration best practices for software development Slalom: CI/CD for serverless applications on AWS Introduction to AWS CodeDeploy - automated software deployment with Amazon Web Services What is AWS CodeDeploy?