

# Modernization readiness factors
<a name="readiness-factors"></a>

Observe the following standards and best practices when you’re modernizing your applications.

**Topics**
+ [Code](#code)
+ [Build and test](#build-test)
+ [Release](#release)
+ [Operate](#operate)
+ [Optimize](#optimize)
+ [Readiness](#readiness)

## Code
<a name="code"></a>
+ Provide code comments that document the functionality of your software, and use them to generate documentation.
+ Follow code management and deployment processes that support frequent code check-ins and traceability to feature requests. 
+ Build test suites that include unit, functional, performance, and critical path tests, with 100 percent code coverage.
+ Encourage code reuse to deliver the same or similar functionality in your code base.
+ Develop prototypes to validate features with users before investing in full code development. 

## Build and test
<a name="build-test"></a>
+ Redefine feature completeness based on testing, to improve quality and prevent recurring issues.
+ Automate acceptance tests.
+ Monitor all automated tests, and establish a process for handling failures in place.
+ Track performance in both production and non-production environments, define service-level objectives (SLOs) based on realistic traffic and load testing, and provide the ability to scale to meet performance requirements.
+ Abstract sensitive data from configuration files, and provide tools that automate and monitor configurations.

## Release
<a name="release"></a>
+ Automate deployments with support for dependencies (for example, database releases), regression testing, and tracking.
+ Release code to the production environment incrementally, after every successful build.
+ Manage feature flags (toggles) effectively: support run-time configuration, monitor usage, maintain flags throughout the development cycle, and assign owners by category.
+ Provide traceability in your build pipelines, to track triggers, failure notifications, and successful completion.
+ Run automated deployment processes and tests for “zero touch” code updates in continuous delivery.
+ Use zero-downtime, fully automated blue/green deployment methodologies.
+ Make sure that your database schema changes are implemented consistently across all development and production environments.

## Operate
<a name="operate"></a>
+ Create a DevOps triage runbook that’s integrated with your notification system.
+ Make sure that your monitoring and notification system meets service-level objectives (SLOs) and supports thresholds, health checks, non-standard HTTP responses, and unexpected results.
+ Establish effective risk management and disaster recovery processes.
+ Develop a log rotation and retention strategy that meets your business and legal requirements.
+ Develop dashboards that track product performance, measure the success of new features, and display alerts when metrics don’t meet expectations.

## Optimize
<a name="optimize"></a>
+ Review and improve processes regularly, based on performance and quality measures.
+ Implement root cause analysis and prevention processes to prevent issues from recurring.
+ Provide data-driven metrics that capture product health, and make sure that all notifications and actions are based on these metrics. 

## Readiness
<a name="readiness"></a>
+ Dedicate a cross-functional team (including business partners, developers, testers, and architects) to your modernization efforts.