Why manual pentesting doesn't scale with your release cycle

Annual pentests were built for annual releases. Teams that ship weekly need testing that keeps pace, with experts kept in the loop.

Most security programs still plan offensive testing the way they did a decade ago. They run one engagement a year, maybe two for the crown-jewel app. The report arrives, the team fixes what it can, and everyone moves on.

That cadence made sense when software shipped a few times a year. It doesn’t when you deploy every week, or every hour.

The coverage gap#

Put your release calendar next to your pentest calendar and the problem is plain.

A timeline showing 52 weekly releases across a year and a single two-week pentest window, with every other release marked as untested.
Illustrative. Fifty-two releases, one testing window. Everything outside the window ships untested.

A report describes the application as it was during the test window. By the time it’s read, the code has moved on. New endpoints, new dependencies and new infrastructure land in production with no offensive testing at all.

Four ways the old model breaks#

It’s expensive#

Experienced testers command premium rates, and they should. But much of their time goes to work a machine could do: reconnaissance, enumeration, and re-running known checks. You pay expert prices for repetitive tasks.

It’s slow#

Scoping, scheduling, testing and reporting take weeks to months. Fixes wait on the report, and retesting waits on another booking.

It doesn’t scale#

Budgets force a choice: test the two most important apps properly, or test everything badly. The rest of the estate goes untested.

It’s inconsistent#

Results depend on who tested, how much time they had, and how tired they were in week two. Two engagements on the same app can produce very different reports.

What changes when agents do the volume#

Automation alone isn’t the answer. Scanners already run on every build, and most teams have learned to ignore them because the false positives outnumber the real issues.

The model that works splits the job:

  • Agents handle breadth and repetition. Recon, exploitation attempts and regression checks run continuously, at machine speed, across every app.
  • Experts handle judgment. A person validates each candidate, chains issues together, and decides what actually matters in your context.
  • Context flows back. What the experts learn about your stack makes the agents’ next pass more targeted.

Here’s what that looks like for one candidate:

SW-F-0042Critical

Any customer can download any invoice

Asset
billing-svc · GET /invoices/:id/pdf
Impact
Full archive of customer invoices exposed to any logged-in user.
Fix
Enforce object-level ownership checks on every billing route.

Flagged by an agent overnight as one of 42 candidates. Confirmed by an expert, who chained it with sequential IDs to show the full impact.

Validatedexpert reviewIllustrative example, not a client finding

The agent finds it in hours rather than weeks. The expert makes sure it’s real before it reaches your backlog.

Fitting testing into the pipeline#

Continuous offensive testing works best when it’s wired into the same place your releases happen. A minimal pattern is a post-deploy job that tells the testing platform what changed:

.github/workflows/post-deploy.yml
name: post-deploy
on:
  deployment_status:

jobs:
  notify-testing:
    if: github.event.deployment_status.state == 'success'
    runs-on: ubuntu-latest
    steps:
      - name: Queue targeted tests for changed services
        run: ./scripts/queue-tests.sh "${{ github.event.deployment.environment }}"
        env:
          TESTING_TOKEN: ${{ secrets.TESTING_TOKEN }}

The highlighted step is the important part. Testing is triggered by change, not by a calendar.

Where to start#

You don’t need to replace your annual engagement tomorrow. Start by measuring the gap:

  1. Count your production releases in the last twelve months.
  2. Count how many of them had any offensive testing before or after they shipped.
  3. List the apps that have never been tested at all.

If the numbers are uncomfortable, that’s the case for continuous, human-validated testing, and you’ve made it with your own data.