Security from the first commit

Bolting security on at the end is how audits get failed and launches get delayed. On a small team, DevSecOps is mostly a handful of habits — here are the ones that pay for themselves.

AppNet Solutions · 18 August 2026 · 5 min read

Most security problems we are called in to fix were not caused by a clever attacker. They were caused by a deadline. The login was built in week two, the “temporary” admin password never rotated, the API that was only ever meant for the mobile app quietly became public, and by the time anyone asked for a penetration test the system had three years of shortcuts in it.

The alternative is not a bigger security team. It is a small number of practices that start on the first day of the project and never stop.

Threat-model the process, not the code

Before the first line is written we sit with the people who will run the system and ask a plain question: what would hurt most if it went wrong? A leaked customer list, an altered invoice, a day of downtime, a regulator’s letter. The answers rank the work. A system that moves money gets audit trails and segregation of duties before it gets a dashboard; a system that holds personal records gets access logging before it gets reports.

Secrets never touch the repository

Every project starts with a secrets manager and an example environment file that contains names, not values. It is a five-minute setup that removes an entire category of breach — the credential that was committed once, years ago, and is still valid.

The pipeline is the gate

Continuous integration is where security stops being a meeting and becomes a fact. Dependency scanning, static analysis and a container image scan run on every pull request, and a failing scan blocks the merge the same way a failing test does. Nobody has to remember to run anything, and nobody can skip it because the release is tomorrow.

Least privilege, by default

Service accounts get the permissions they need and nothing else. Databases have a read-only role for reporting and a separate role for the application. Staff access is granted through groups, reviewed quarterly, and removed the day someone leaves. None of this is sophisticated; all of it is routinely missing from the systems we inherit.

Patch on a schedule you can keep

An unpatched framework is the most common finding in any review we run. We agree a patch window with the client — monthly for libraries, within days for anything with a public exploit — and we automate the pull requests so the work is a review, not a project.

Write it down for the auditor before the auditor asks

Every control above produces evidence: pipeline logs, access reviews, patch records. Kept from the start, they turn a compliance audit into a filing exercise. Assembled afterwards, they become a three-month project that stalls the roadmap.

None of this slows delivery down. In our experience it speeds it up, because the team stops losing weeks to incidents that were avoidable on day one.

Sound familiar?

Bring us the version of this you are living with.

Every post here started as a client engagement. If this one describes your situation, a scoped conversation is a short step away.