05 — SECURITY AS A PRODUCT RESPONSIBILITY

Product security

Think beyond finding bugs in a running application. Product security connects customer needs, engineering decisions, release practices, and operational response so that security is part of how a product is built and maintained.

A scanner can identify signals, but a product security program decides what matters, who owns the response, and how fixes become lasting improvements. Product security is a shared engineering responsibility supported by clear security requirements, useful tooling, and operational feedback.

Diagram of stages in the software development lifecycle
Security work follows the product through its development lifecycle. Image: “Software Development Lifecycle Diagram” by Shawn Rider, CC BY-SA 4.0, via Wikimedia Commons.

1. The product security lifecycle

The stages below form a continuous loop. Teams revisit earlier decisions when features, dependencies, threats, or deployment environments change.

Requirements → Architecture → Threat Modeling → Secure Design
     → Development → Code Review → SAST → SCA → DAST
     → API Testing → Deployment → Monitoring
     → Vulnerability Management ↺

These are connected practices, not a one-time checklist. Findings from monitoring or incident response may reveal a missing requirement or an architectural assumption that needs to change.

2. Requirements and ownership

Security requirements turn broad goals into behaviors that can be designed and verified. Derive them from product data, users, abuse cases, applicable obligations, and business impact. Make requirements specific and testable.

  • Define data classification, retention, deletion, and access expectations.
  • Specify authentication, authorization, audit, privacy, and recovery behavior for relevant features.
  • Set performance and availability expectations for abuse controls such as rate limits.
  • Assign owners for product risks, components, findings, and incident decisions.

For example, “protect customer records” is hard to verify. A stronger requirement states that each API operation checks tenant membership for the requested record and has tests for cross-tenant denial.

3. Architecture and threat modeling

Architecture describes components, data flows, trust boundaries, identities, and external dependencies. Threat modeling uses that picture to find plausible ways the design could fail or be misused before implementation makes change expensive.

  1. Define scope, system context, important assets, and security assumptions.
  2. Draw the main components and data flows; mark trust boundaries and privileged operations.
  3. Identify threats and abuse cases, including misuse by legitimate users and failures in dependencies.
  4. Assess impact and likelihood in context, including existing controls and uncertainty.
  5. Choose mitigations, assign owners, and track decisions or accepted risks.
  6. Revisit the model when architecture, exposure, or threat assumptions change.

Useful prompts include: where can an attacker supply data; which component can access a secret; what happens if an identity provider is unavailable; can one tenant affect another; and what happens when an operation is repeated?

4. Secure design

Design controls into the system rather than relying on users or reviewers to catch every mistake. Apply least privilege, deny by default, complete mediation of access checks, safe defaults, and separation of duties where appropriate.

  • Keep security-sensitive decisions server-side and centralize policy where that improves consistency.
  • Use well-maintained cryptographic and identity libraries; define key ownership, rotation, and recovery.
  • Minimize collected data, retained data, exposed fields, and component privileges.
  • Design for failure: timeouts, retries, queues, and fallback modes should not bypass controls.
  • Make sensitive operations auditable while avoiding secrets and unnecessary personal data in logs.
  • Plan secure update, rollback, backup, and recovery paths.
RECORD THE DECISION

For a meaningful risk, capture the context, options considered, chosen control, owner, and conditions that would trigger a review. This helps future maintainers understand why the system works as it does.

5. Development and code review

Secure development makes the safe path easy and catches issues close to where they are introduced. Use supported languages and frameworks, secure defaults, shared components for recurring controls, and local checks that give fast, actionable feedback.

Code review should consider correctness and security context: input handling, output encoding, authorization at object and function levels, secret use, error paths, concurrency, logging, and tests. Reviewers need enough context to understand intended behavior, not just changed lines.

  • Protect branches and require review for sensitive code and configuration.
  • Keep secrets out of source; use managed secret storage and rotate exposed credentials.
  • Use tests for security invariants, including negative cases and tenant boundaries.
  • Keep development, test, and production credentials and data separated.
  • Use Git history to understand changes and support traceability, not as a substitute for security review.

6. SAST, SCA, DAST, and API testing

SAST: static application security testing

SAST analyzes source code or compiled artifacts without running the application. It can identify risky patterns early, such as unsafe input reaching a sensitive operation. Results are signals: validate context, tune noisy rules, and prioritize reachable, consequential issues.

SCA: software composition analysis

SCA inventories direct and transitive dependencies and checks for known vulnerabilities, licenses, and sometimes malicious or outdated packages. A version match alone does not tell the whole risk story. Confirm whether the affected code is present and reachable, assess exploitability and exposure, and plan a supported upgrade or mitigation. Maintain an accurate software bill of materials when required by your process.

DAST: dynamic application security testing

DAST sends requests to a running application and observes responses. It can find configuration and behavior issues that appear only at runtime, but coverage depends on reachable routes, authentication, test data, and scanner configuration. Run it against controlled test environments with explicit scope and safe data.

API testing

Test APIs using the contract and authorization model, not only discovered endpoints. Include unauthenticated, unauthorized, wrong-tenant, wrong-role, invalid-field, oversized-input, repeated-request, and rate-limit cases. Validate schemas and business invariants, and verify that errors do not disclose sensitive internals.

Use layered testing: unit and integration tests for invariants, review for code context, automated analysis for breadth, and targeted manual testing for high-risk flows. No one tool establishes that a product is secure.

7. Deployment and release

Deployment is part of the security boundary. Protect build and release credentials, restrict who can publish artifacts, and make deployed artifacts traceable to reviewed source. Use reproducible or verifiable build practices where feasible.

  • Separate environments and identities; give deployment jobs only the permissions they need.
  • Review infrastructure and security configuration changes alongside code.
  • Use TLS, secure headers, network policy, secret management, and hardened service settings as appropriate.
  • Gate releases on clear, risk-based criteria with a documented path for urgent fixes and exceptions.
  • Use staged rollouts, health checks, rollback plans, and tested backups for high-impact changes.
  • Remove debug routes, sample credentials, and unnecessary services from production.

8. Monitoring and vulnerability management

Monitoring helps teams detect abuse, failures, and control gaps. Collect events needed to investigate security-relevant actions, protect log integrity and access, set useful retention, and alert on meaningful signals. Avoid logging passwords, access tokens, or full sensitive records.

Vulnerability management is the process of receiving, triaging, prioritizing, fixing, and verifying security issues across owned code and dependencies. A workable process includes:

  1. Intake reports from scanners, researchers, customers, internal teams, and incidents.
  2. Validate scope, affected versions, exploitability, exposure, and potential impact.
  3. Assign an owner, severity, target date, and any temporary mitigation.
  4. Develop and review a fix; coordinate disclosure and customer communication when needed.
  5. Verify the fix and any backports, then update affected inventories and tests.
  6. Look for root causes and improve design patterns, tooling, or guidance to prevent recurrence.

Define a vulnerability disclosure channel and response expectations. Prioritization should reflect real exposure and impact, not just a scanner score. Track accepted risks with an owner, rationale, expiry or review date, and compensating controls.

9. Measures and prioritization

Metrics should help teams make decisions and improve the system. Useful views can include time to validate and remediate by severity, overdue risk, recurring root causes, dependency age, test coverage for critical controls, and the share of services with current ownership and threat models.

Avoid rewarding teams for low finding counts alone; that can discourage reporting. Pair volume with context such as coverage, severity, recurrence, and time to close. Measures are prompts for investigation, not proof of security.

Practice and recap

BUILD A MINI PRODUCT SECURITY PLAN

Choose a small application you own or a fictional product. Write three testable security requirements, sketch its components and trust boundaries, list three abuse cases, and assign a mitigation owner to each. Then choose one SAST, SCA, DAST, and API test that would provide useful evidence.

FOLLOW ONE FINDING TO CLOSURE

Use a sample dependency advisory or a deliberately introduced issue in a local training project. Record how it is validated, prioritized, assigned, fixed, regression-tested, and monitored. Do not introduce a vulnerable change into a production system.

CHECK YOUR UNDERSTANDING
  • How does a testable security requirement differ from a general goal?
  • When should a threat model be revisited?
  • What does SCA tell you, and what still needs human assessment?
  • Why does DAST coverage depend on authentication and route discovery?
  • What information should a risk exception include?
  • How can monitoring feedback improve design and development?

Free learning path and practice

Learn how teams build security in

  • NIST Secure Software Development Framework — a practical vocabulary for preparing teams, protecting software, producing secure releases, and responding to vulnerabilities.
  • OWASP SAMM — a free model for assessing and improving an organization's software-security practices.
  • CISA Secure by Design — guidance for making secure defaults and product responsibility part of development.

Build practical experience

Watch product and secure-development playlists

  • GitHub: Security — official GitHub security features and talks from a channel with approximately 692K subscribers; use this as a supplement, not a complete secure-SDLC course.
  • GitHub: GitHub for Beginners — useful workflow foundations from the same high-audience channel.

Subscriber counts are approximate and change over time; video view counts vary. Pair these videos with the threat-modeling and product-lifecycle exercises in this guide.

For your career goal, focus on turning requirements into tests, tracking owners and evidence, and verifying fixes—not memorizing control IDs. Continue with the standards and compliance guide.