PowerData

  • Consulting
  • Training
  • PRIAM Platform
  • Articles
  • About
  • Consulting
  • Training
  • PRIAM Platform
  • Articles
  • About
Let's Talk →
Operational Efficiency

AI Writes the Code. Running the Project Is Still Yours

By Murray · August 25, 2026 · 9 min read
AI Writes the Code. Running the Project Is Still Yours

Generating working software with a capable AI model is now routine. You describe what you want, and code appears that compiles, runs, and often does roughly the right thing. That part has become easy.

Turning that code into a software project — something you can secure, trust, ship, and still understand six months later, is a completely different discipline, and AI does not hand it to you. The gap between the two is the software lifecycle: the scaffolding, guardrails, and habits that convert generated code into software you can stand behind.

Here is the lesson that captures the situation. On a recent project, a load test passed cleanly: zero cross-tenant data leaks across nearly a thousand requests. It looked done. But every one of those requests had silently failed with a permission error, returning an empty response. A test checking “did anyone see another tenant’s data?” finds nothing when no data comes back at all. “Nothing leaked” and “nothing worked” produced the identical green checkmark. The fix was a second threshold that failed the run unless real data actually flowed — a “success floor.” Without it, the test proved nothing while looking authoritative.

That is the shape of the entire challenge. AI is extraordinarily good at producing artifacts that look finished: code, tests, pipelines, docs. The lifecycle is what tells you whether they actually are. Below is what a reasonably complete lifecycle includes, and why each piece deserves its place.

Phase 1 — Foundation and planning

Define scope, milestones, and an MVP line. Before code, decide what “done enough to ship” means and, just as importantly, what is explicitly out. A soft target date and a short list of objectives prevent the endless drift that AI-assisted speed-coder makes tempting. When generating a feature is cheap, the discipline of not generating it becomes the scarce resource.

Record architecture decisions, and reassess periodically. Capture the significant decisions — this database, that auth system, this design pattern — as short decision records with their rationale. Then, at intervals, run an honest architecture assessment: what’s actually built versus what the docs claim. AI-generated code accretes quickly, and drift between intent and reality is where future bugs hide.

Set up the remote repository deliberately. A repository is not just storage; it’s the spine everything else attaches to — branch structure, protection rules, automation, history. Decide the branching model and default protections up front rather than retrofitting them after the code is already sprawling.

Phase 2 — Securing the repository and pipeline

Branch protection and access control. Require reviews and passing checks before merge to protected branches. This is the enforcement point that makes every later guardrail real. A check nobody can bypass is a rule; a check that can be merged around is a suggestion.

A CI/CD pipeline — and the hardening of it. Automated checks on every change are table stakes. Hardening them is the part that’s often skipped: pin third-party actions to fixed versions, grant the pipeline the least privilege it needs, and make sure a job can’t silently pass when its underlying step crashed. A pipeline that goes green because a tool failed to start (rather than because the code is correct) is the false-green problem wearing a different hat.

Dependency management, triaged by exploitability. Turning on automated dependency alerts (like Dependabot) is easy; the discipline is triage. A raw severity score over-prioritizes — a critical-rated flaw in a build-time tool matters far less than a moderate one in a runtime library on the request path. Rank by whether the vulnerable code is actually reachable, whether it’s known to be exploited, and whether a fix exists — then fix, batch, defer, or dismiss-with-reason accordingly. And know when there is no clean fix: sometimes the right move is replacing an abandoned package outright.

Secrets and credential hygiene. Scan for committed secrets automatically, keep real credentials out of the repository and out of logs, and treat any leaked key as compromised. This is cheap to automate and expensive to skip.

Phase 3 — Building with discipline

Conventions enforced by machines, not memory. Every project accumulates rules — use this test runner, never this deprecated auth call, always scope this kind of query. Written in a style guide, they get forgotten. The durable pattern is decide once, then enforce with a check: a linter rule, a static-analysis pattern, a CI guard that fails loudly when the rule is broken. This matters doubly with AI collaborators, which follow a categorical machine-checked rule far more reliably than a paragraph of prose guidance.

A testing strategy with a proof standard. This is the heart of it. Tests are only worth what they can disprove. Adopt a standard where a test doesn’t count until you’ve seen it fail for the right reason — introduce the bug on a scratch branch, watch the check go red, then restore the fix and watch it go green. That “negative control” is what separates a test that guards something from a test that merely passes. Capture real evidence (logs, query results) rather than a checkmark, and where the risk lives in data, assert against the data itself, not just the HTTP response.

Security review and threat modeling. Read the code for the gaps that matter to this system, not a generic checklist. On a multi-tenant app, the central question is whether one tenant can ever reach another’s data — and if that boundary is enforced only in application code with no database-level backstop, a single missing filter is a breach. Static-analysis rules can catch that specific pattern automatically, which turns a one-time review into a permanent guard.

Remediation behind proof gates. Finding gaps is half the work; closing them verifiably is the other half. Each fix should carry its own proof — including the negative control — so “fixed” means “demonstrated fixed,” not “a commit exists that claims to fix it.”

Phase 4 — Validating before you trust it

Load and performance testing, with success floors. Beyond “does it hold up under traffic,” concurrency reveals correctness bugs that sequential testing never triggers — shared state that bleeds between simultaneous requests, for instance. And, per the opening story, every load test needs a floor that fails the run unless real work actually happened, so absence-of-failure can’t masquerade as success.

Quality gates at the merge boundary. Consolidate the checks — tests, linting, security scans, type-checking — into gates that must pass before code merges. The goal is that the default path is the safe path: doing the right thing requires no extra vigilance because the wrong thing simply won’t merge.

Review AI-generated output like an adversary. This is the discipline the AI era adds. Generated code and generated tests are plausible by construction — they’re optimized to look right. Review them assuming they might be subtly, confidently wrong: the test that can’t fail, the “fix” that addresses the symptom, the config that passes for the wrong reason. Skepticism is not distrust of the tool; it’s the tool’s necessary complement.

Phase 5 — Shipping and operating

Build and deploy automation, with real environments. Automate the path from merge to running software, across genuine environments — development, preview, production — so deploys are repeatable and boring rather than manual and tense.

Release management and versioning. Version deliberately, keep a changelog, and make releases traceable. When something breaks in production, “which version, containing what change” should be a five-second answer, not an investigation.

Observability: logs, error tracking, and audit trails. You cannot operate what you cannot see. Wire in error tracking before launch, not after the first incident. Where the domain calls for it, keep a tamper-evident audit trail — and note that its requirements depend on what data you actually handle, so scope it to reality rather than to a worst-case assumption.

Cost and resource management. Real projects run into real limits — CI minutes, database branch quotas, billing cycles. These can silently block finish-line work (a workflow that can’t run because the account is over budget looks identical to a workflow nobody triggered). Track cost as a first-class constraint, and make “blocked on billing” visibly distinct from “not done.”

Phase 6 — Sustaining the project

Documentation as a deliverable, not an afterthought. Docs rot faster than code, and AI-assisted projects generate them prolifically — it’s easy to end up with dozens of overlapping, contradictory files. Treat documentation as something to curate: one source of truth per topic, durable knowledge separated from transient task-tracking, and stale files purged rather than left to mislead.

Continuity and handoff. Any project worked on across sessions — and especially across AI sessions — needs a fast way to answer “what’s done, and where do I pick up?” A short, current pointer document (what shipped, what’s next with the exact files, what’s blocked and why) is worth more than a long journal nobody re-reads. This is quietly one of the highest-leverage habits when your collaborator has no memory of yesterday.

Board and issue hygiene. Milestones, an issue list, and a task board that actually reflect reality — with blocked work visibly separated from unstarted work — are what let you steer instead of guess. A board that lies is worse than no board.

Incident response and rollback. Know, before you need it, how to roll back a bad deploy and where the runbook lives. The time to design the fire escape is not during the fire.

The through-line

Notice what every phase has in common: the work is not producing the artifact — AI can produce almost any artifact on demand — it’s making the artifact trustworthy. A test you’ve watched fail. A pipeline that can’t go green for the wrong reason. A dependency alert you’ve actually triaged. A doc that matches the code. A board that tells the truth.

That is the real shift the AI era brings. When generating the first draft of anything — code, tests, docs, config — costs almost nothing, the scarce and valuable skill is no longer creation. It’s verification, structure, and stewardship: the lifecycle. A green checkmark is a claim. The lifecycle is what turns claims into proofs — and proofs are what let you actually ship.

Murray Founder, PowerData Solutions Inc.

Murray specializes in cybersecurity, business process engineering & improvement, and business operations continuity. Before starting PowerData, Murray spent 20+ years helping organizations (both private sectors and government entities) to improve and streamline their operations.
Between 2002 and 2019 he restructured business operation of
numerous Minnesota State government agencies, built the IT
infrastructure for a government entity, and improved state government’s cybersecurity posture. He also led various projects at
Mayo Clinic that resulted in strengthening Mayo’s data security protocols
and better protecting patient data. Murray holds a bachelor’s degree in Computer Information Systems and a Master’s degree in business administration.

Related Insights

Ready to act?

Stop juggling spreadsheets.

Schedule a 30-min walkthrough and find out how PRIAM can simplify your operation.

Book a Walkthrough → Learn About PRIAM
PowerData

Practical cyber protection training, business planning consulting, and PRIAM — simple software for policies, risk, incidents, and assets. Built for small business owners.

Offerings
  • Training
  • Consulting
  • PRIAM Platform
Company
  • About
  • Articles
  • Let's Talk
  • LinkedIn ↗
PRIAM
  • Overview
  • priamtiv.com ↗
  • Book a walkthrough ↗
© 2026 PowerData Solutions Inc. All rights reserved.
Privacy Terms