# 3.2 Quality Assurance & Standardization

A strong quality assurance (QA) system helps teams to locate and prevent failures before they occur. The use of dedicated code standards and review procedures is a key part of a strong QA system; regular code reviews also provide an opportunity for team members to collaborate and share knowledge with each other.

# 3.2.1 Coding Standards

Level: Basic

Your team believes-in and follows a single set of quality standards for coding, testing, and version control. These standards are designed to maximize your ability to create value for customers.

What constitutes “good code” can vary depending on the product you’re making, and different team members may have different opinions of what good code looks like even if they’re working on the same product. The creation of an agreed-upon standard ensures that a codebase is easy to evaluate and legible between teams. Strong coding standards include the mandatory use of linters and other quality guards.

# 3.2.2 Code Review Processes

Level: Basic

Your team’s code development process includes both peer and automated review. Peer reviews are used as opportunities for teammates to share advice and best practices with each other.

Automated reviews make it possible for teams to rapidly identify issues with code—such as deviations from the team’s agreed coding standards—that could lead to problems down the line. These reviews should be complemented by peer reviews from team mates; peer reviewers offer unique context-specific insights, identify issues that automated reviews miss, and provide both the coder and code reviewer with opportunities to learn from each other.

# 3.2.3 Testing Policy

Level: Basic

Your team relies on an explicit QA strategy that includes a regularly updated testing policy. The team conducts manual and automated testing at the earliest practical stage of the development process.

Testing is a vital part of the development process. Companies that lack regular manual testing (e.g., user story testing, exploratory testing) face unacceptably high technical risks. In order to maximize test coverage and ensure that any issues are captured as early as possible, automated testing (e.g., unit testing, end-to-end testing) should also be implemented where feasible.

# 3.2.4 Non-Functional Evaluations

Level: Intermediate

Your team actively evaluates code for performance, security, and other non-functionals that affect the end-user experience or otherwise impact how value is created for customers.

Testing non-functionals is a difficult but crucial activity, especially for high-growth SaaS companies. Problems with performance, stability, security, and other non-functionals can alienate customers—especially if unexpected—and may permanently affect perception of a product’s value.

# 3.2.5 Documentation Standards

Level: Intermediate

Your team uses a set standard to build and catalog technical and other forms of documentation. This standard is followed consistently and viewed as effective and useful by team members.

The creation of discovery, design, development, delivery and operational documentation is a crucial knowledge management activity. Ready access to easy-to-read documentation makes it easier to locate the cause of problems or to assess whether a process is deviating from key design goals and quality standards.

# 3.2.6 Definition of Quality

Level: Advanced

Your team uses a shared definition of quality to guide its development efforts. This standard is consistently met, and meets the expectations of the market you’re developing for.

The term “quality” refers to the ability of software to conform to requirements. A useful definition quality should be trackable/measurable, and should be specifically designed to meet the expectations of the industry the software is developed for. Industry expectations increase over time, so teams must continuously improve their QA efforts in order to stay competitive.