After 13+ years building enterprise systems — US payroll, supply chain, healthcare, e-commerce — I've reviewed hundreds of PRs. This is the checklist I run through every single time. No fluff, no theory. Every item maps to a real production incident.

Code reviews are one of the highest-leverage activities on any engineering team. A 30-minute review that catches a missing WHERE clause on an UPDATE statement can save you hours of production firefighting. But most developers don't have a structured way to think about them — they eyeball the diff, check a few things, and approve.

The six areas I check

Every PR goes through these six lenses in order. Requirements first — there's no point checking code quality if the code doesn't solve the right problem.

01 · Requirement Coverage
  • Does the code solve what the Jira ticket asks — fully, not partially?
  • Are all acceptance criteria and edge cases covered?
  • For a bug fix — is the root cause fixed, not just the symptom patched?
  • Any side effects on related modules or tickets?
02 · Approach & Design
  • Is the solution proportional — not over or under engineered?
  • Is logic in the right layer? (service, not controller or UI)
  • Is existing code/utilities reused — no reinventing the wheel?
  • Consistent with how the codebase handles similar problems?
03 · Security
  • No hardcoded secrets — keys, passwords, connection strings in code?
  • Secrets pulled from Azure Key Vault or environment config?
  • All new endpoints protected with auth + authorization?
  • User input sanitized — no SQL injection or XSS risk?
  • No sensitive data (PII, tokens) written to logs?
  • Snyk passes clean — no new vulnerabilities introduced?
04 · Performance
  • No N+1 query problems — data not fetched inside a loop?
  • Large data sets paginated — not thousands of records at once?
  • No blocking async calls — no .Result or .Wait() in .NET?
  • No unnecessary API calls on frontend — debounce used where needed?
  • Angular subscriptions unsubscribed in ngOnDestroy?
05 · Code Quality
  • Method and variable names are self-explanatory — no x, temp, data2?
  • No dead code — commented-out blocks, unused imports?
  • No magic numbers or strings — constants or enums used?
  • Error handling in place — exceptions not swallowed silently?
  • Null checks where objects can realistically be null?
  • No console.log or debug artifacts left in frontend code?
06 · Database / Stored Procedures
  • SELECT * avoided — only required columns fetched?
  • WHERE clause on every UPDATE and DELETE statement?
  • TRY/CATCH with ROLLBACK in stored procedures?
  • No cursors — set-based operations used instead?
  • Dynamic SQL checked for injection risk?

Why requirements come first

The biggest mistake junior developers make in code reviews is jumping straight to code style — naming, formatting, structure. Those things matter, but they're secondary to the most important question: does this code actually solve the right problem?

I've seen beautifully structured, well-named, zero-lint-error PRs that completely missed the acceptance criteria of the ticket. Clean code solving the wrong problem is worse than messy code solving the right one — it ships to production and the bug report comes back two weeks later with more context to untangle.

Practical tip: Before reading a single line of code, open the Jira ticket in a separate tab. Read the acceptance criteria. Then read the PR description. Only then open the diff. This 2-minute context switch saves you from approving solutions to the wrong problem.

The security mindset — especially on payroll systems

When you're working on systems that touch real money — payroll, invoicing, tax calculations — security reviews aren't optional hygiene. A missing authorization check on a payroll endpoint isn't a "medium severity" finding. It's a potential compliance incident.

At Cast & Crew, we had Snyk, Checkmarx, Trace3 Pen Test, and CAST running against our codebase. I eliminated 70% of flagged vulnerabilities across the platform. The pattern I saw most often: hardcoded credentials, missing endpoint authorization, and secrets in appsettings committed to the repo.

My rule: Treat every new endpoint as public until proven otherwise. If I don't see an [Authorize] attribute or equivalent policy check, I flag it. No exceptions.

How I explain this in interviews

? When asked "how do you approach code reviews?"
"I start with requirements — does this actually solve the Jira ticket completely, including edge cases. Then I evaluate the approach — is the solution proportional, is logic in the right layer, is it consistent with our patterns. Then I go deep on the code — error handling, null safety, security, no hardcoded secrets, API design correctness. For SQL and stored procedures I specifically check for missing WHERE clauses on writes and proper TRY/CATCH with ROLLBACK. On frontend I check that business logic isn't leaking into components, subscriptions are cleaned up, and error/loading states are handled. And I always verify Snyk passes clean after the PR — we had real vulnerabilities caught this way on our payroll platform."

The meta-principle

A code review is not a style audit. It's the last engineering checkpoint before code goes to production and becomes someone else's problem at 2am.

Every item in the checklist above maps to a real class of production incident I've either seen happen or caught before it shipped. Requirements coverage ? wrong behavior. Missing WHERE clause ? data corruption. No auth check ? security incident. N+1 query ? timeouts under load. Swallowed exception ? silent data loss.

The faster your team internalizes these patterns, the fewer production incidents you have — and fewer incidents means more time building features, which is what everyone actually wants.