Updated by
Hi, I'm Jack, the owner of Cybersecurity Jobs List, and co-founder of Himalayas (himalayas.app) and Cavuno (cavuno.com). Across all my platforms, I work with application security daily: dependency vulnerability scanning, secure authentication, API security, and data protection across hundreds of thousands of users. My technical background is in computer science (UNSW), where he studied security engineering and computer networks, and worked as a research assistant on VR experiments that were published in the Journal of Experimental Psychology. I also work with cybersecurity hiring data every day, tracking which companies are posting, what certifications actually appear in listings, how salaries differ by sub-discipline and clearance level, and where the talent gaps are widest. That combination of security practice, engineering at scale, and daily immersion in the hiring data is what shapes the content on this site. I'm currently based in Sydney, Australia.

If you're a software engineer moving into application security, start with the work you already understand: how features are designed, built, reviewed and shipped. Then learn to examine those features for abuse, explain the risk and help the team fix it.
You don't need to begin by retraining for every cybersecurity discipline. You do need evidence that your security judgment goes beyond running a scanner or remembering vulnerability names. A small, well-explained design review and verified fix can give you something concrete to discuss with an AppSec team.
This guide is for developers who can already work in a codebase. It covers the skills to build, a practice project you can adapt, and how to approach an internal move or an external application. The project is a fictional learning exercise, not a production-ready implementation or a promised route to a job.
What changes when you move into AppSec?
Application security work brings security questions into software development. For a concrete employer example, GitLab's AppSec role description includes security-focused code review, threat modeling, helping teams address vulnerabilities and developing preventive tooling. It also emphasizes communication and working with developers. This is a published description of a role, not a claim that GitLab currently has an opening.
Think about how the questions change. In a normal feature review, you might check whether an export returns the right documents. In a security review, you also ask whether someone can export another customer's documents, whether revoked access still works, and what happens when a permission check fails.
Your engineering experience helps, but it doesn't answer those questions automatically:
- Code review: reading unfamiliar code helps you trace a request. Add the ability to identify where untrusted input or an incorrect permission assumption changes its behavior.
- Debugging: reproducing a bug is useful preparation. Add an explanation of who could trigger the security problem, what they need and what they could access or change.
- Testing: use your testing habits to check both rejected requests and legitimate behavior. A fix that blocks everyone hasn't preserved the feature.
- Delivery: experience with releases helps you propose changes teams can maintain. Add judgment about which checks should block a release and which findings need investigation first.
You may still write code every day, or spend more time advising teams and reviewing designs. Ask about that balance when choosing a role. If you're comparing security work more broadly, our guide to coding in cybersecurity careers explains how expectations differ.
Learn the security concepts your code depends on
Start with your strongest language and framework. If you build web services, choose a request you understand and follow it from the browser through authentication, application logic and storage. Note which information comes from the caller and which decisions the server makes.
Then work through a few connected topics: authentication and sessions, authorization, input handling, and the handling of secrets and dependencies. Your goal is to explain a failure in actual code and propose an appropriate correction. Learning the names is only the beginning.
PortSwigger's Web Security Academy offers free learning material and interactive labs. Its learning paths can help structure your practice. After an exercise, write a short note explaining the cause, the affected behavior and the defensive change you'd investigate. Lab completion and experience securing a production service are different things; describe each accurately.
Use the OWASP Application Security Verification Standard when you need a more precise security requirement to check. Record the version alongside any requirement you cite, because identifiers can change. You don't need to turn your first project into an assessment of the entire standard.
Build confidence through outputs you can review:
- Explain a flaw. Describe the behavior and its cause without relying on a tool's severity label.
- Review a design. Identify an important boundary, a plausible failure and a proposed control.
- Implement and check a correction. Show what changed and which tests distinguish the old behavior from the new.
- Make the result useful to another developer. Write a concise finding, a reviewable patch and a note about what remains untested.
Treat these as learning milestones, not a timetable. Someone who already owns a service's access model will have different gaps from someone whose experience is mostly presentation-layer work.
Build one AppSec example you can explain
Here's an original practice brief: review a document-export feature in a small app you own and run locally with synthetic data. It gives you a way to connect design, implementation, tests and communication. You can use your existing stack; learning a new framework isn't the point.
Write the permission policy before changing code
In this fictional app, users belong to workspaces. Each document belongs to one workspace. An active workspace editor can export a document from that workspace. A viewer cannot export, and neither can a person whose membership has been revoked. There is no public sharing or administrative override in this exercise.
Keep the first version synchronous: the server decides whether to allow the export and returns the document in the same request. A background export queue would introduce additional decisions about permissions when the job runs and when its result is downloaded. Leave that as a later extension rather than silently assuming the same design covers it.
Sketch the design and the failure you want to prevent
Draw the caller, export endpoint, membership records and document store. Mark where caller-controlled values enter the system. Then explain a failure: an authenticated user supplies a document identifier, and the endpoint returns that document without establishing that this user may export it.
OWASP's threat-modeling guidance covers understanding a system, identifying threats, choosing mitigations and reviewing the result. Use that structure to write a short design note. Update the note when your implementation changes an assumption.
Describe the correction and its limits
The proposed correction is to enforce the written policy on the server, using the authenticated identity, the document's stored workspace and the user's current membership and role. A workspace identifier supplied by the caller isn't proof of membership. Hiding an export button or making document IDs difficult to guess doesn't establish permission.
These principles align with OWASP's authorization guidance: permission checks belong on the trusted side of the application and must cover the requested resource. If permission cannot be established, don't return the document. Choose error behavior deliberately so a denial doesn't expose document contents or unnecessary details.
Your implementation still needs review. For example, if you cache memberships, explain how revocation becomes effective. If the endpoint creates a file in separate storage, explain who can retrieve it. A checklist for a synchronous response doesn't automatically verify either of those designs.
Turn the policy into a test matrix
Seed two fictional workspaces, a document in each, and accounts with the roles below. Use this matrix as a starting point. These are expected outcomes for our exercise's policy, not results from a test run.
| Test case | Expected result | What it checks |
|---|---|---|
| Active editor exports their workspace's document | Export succeeds with the intended document | Legitimate use still works |
| Viewer requests the same export | No document returned | The export role is enforced |
| Editor requests the other workspace's document | No document returned | Membership doesn't extend across workspaces |
| Former editor requests an export after revocation | No document returned | Current access is checked |
| Request has no authenticated user | No document returned | Authentication is required |
| Caller changes the submitted workspace value | No unauthorized document returned | Caller input cannot grant access |
| Membership lookup fails | No document returned; controlled error | Failure doesn't become permission |
On a narrow screen, scroll the table sideways if needed. When implementing the tests, check response contents as well as status codes. Include the allowed case so that a blanket rejection can't masquerade as a correct fix.
For a clear before-and-after demonstration, show that the relevant regression test fails against the flawed local implementation and passes after your change. Keep the run output and commit references. Don't label a proposed fix as verified if you haven't run those checks.
Package the work so someone else can review it
A reviewer should be able to find five things: the feature and policy, the failure scenario, your patch, the checks you ran, and the remaining limitations. Put a short reading guide at the top of the repository or report.
Explain why the change is narrow enough to maintain and whether the same mistake could exist elsewhere. You might propose a shared authorization helper as a follow-up, but explain its scope rather than claiming that one helper secures the whole application.
Use synthetic data and your own code, or material you are permitted to share. Keep an intentionally flawed version local and controlled; it doesn't need to become a public running demo. If you want other project formats, see our cybersecurity projects for a resume.
Get security experience inside your current role
If your employer has a security team, ask about one bounded assignment that fits your existing responsibilities. You might help remediate a reviewed finding, participate in a feature threat model, or improve tests around an access-control change.
Make the proposal concrete: “I'd like to take the export-permissions finding through a fix and regression tests. Could an AppSec engineer review the design and final evidence?” Agree on scope, time and the reviewer before treating this as an extra responsibility.
A security-champion role can be another way to contribute where your employer has such a program. Clarify what the role involves, how much time is allocated and where to escalate decisions. Volunteering for security work doesn't give you permission to test unrelated systems or publish internal findings.
Keep an accurate record of your contribution and feedback. An internal move still depends on the organization's needs, available roles and assessment of your work. The assignment is useful experience even if it doesn't immediately change your title.
Choose AppSec roles with the right scope and support
Search for “application security engineer,” “AppSec engineer” and “product security engineer,” then read the responsibilities. Titles overlap, and product security can include work outside web applications. A general security-engineer advert may instead emphasize infrastructure, detection or incident response.
Make a small shortlist from the cybersecurity jobs board and employers' own career pages. For each relevant opening, record:
- Main work: design reviews, code review, vulnerability management, automation or something else.
- Technical environment: languages, frameworks, deployment model and the depth of familiarity expected.
- Ownership: tasks you'll learn with review versus decisions you'll be expected to make independently.
- Essential requirements: experience, qualifications and eligibility, kept separate from preferences.
- Your evidence: one real example for each central responsibility, with gaps left visible.
Pay particular attention to a role that would make you the only security specialist. It may require broad judgment and program ownership beyond the AppSec tasks you want to learn. Ask who would review your work and which decisions would be yours from day one.
Your software-engineering seniority is relevant experience, but it doesn't automatically establish the same level of security ownership. Discuss level in terms of the responsibilities you can demonstrate. Check compensation and working arrangements for the actual opening rather than assuming a move guarantees a pay rise.
Present your experience without changing its meaning
Lead with the security work you performed and the evidence behind it. Keep your actual job title, distinguish professional work from personal projects, and be clear about other people's contributions.
Fictional resume example, appropriate only after completing the described work:
Document-export authorization review | Independent local project
Defined a workspace export policy, implemented server-side permission checks, and added tests for allowed exports, cross-workspace requests, revoked membership and lookup failures. Documented the design assumptions, patch and observed test results.
This describes an inspectable project without pretending it prevented a real breach. If you only wrote the design and proposed tests, say that. Don't add a percentage risk reduction unless you have a meaningful measurement and can explain it.
For professional experience, include only details you can appropriately disclose. You can discuss your approach at a higher level or create a clearly labeled synthetic exercise; anonymizing a company name alone doesn't make confidential material shareable. Our cybersecurity resume examples cover how to organize different kinds of evidence.
Decide when to apply
Start comparing roles while you learn. For a particular application, check the essential requirements and ask whether you can explain relevant work clearly enough for someone to question your decisions.
A useful self-review is:
- Can I trace a feature's data flow and identify a meaningful trust boundary?
- Can I explain a security failure's prerequisites and impact without overstating either?
- Can I discuss a correction, its tradeoffs and what would verify it?
- Can I separate work I completed from proposed work and untested assumptions?
- Can I explain how I'd collaborate with the developer responsible for the feature?
This is a preparation checklist, not a hiring standard. For interview practice, ask a peer to challenge the document-export example: What changes if exports become asynchronous? What if a user belongs to both workspaces? Where would you investigate a scanner finding before asking a team to stop a release? Our cybersecurity interview preparation guide helps you turn your evidence into answers.
Do you need a certification first?
Use the requirements of the roles you're considering to decide. If an employer names a mandatory credential, account for it. If it doesn't, don't invent an exam prerequisite for yourself. Compare a course or certification with the specific gap you're trying to close, its assessment and its cost before committing.
How long does the transition take?
There isn't a useful universal deadline. Your starting experience, access to reviewed security work, target level and available opportunities all matter. Set a next deliverable you control, such as completing a design review and testing its fix, rather than promising yourself an offer by a particular week.
For your next step, choose one AppSec responsibility from an opening you'd consider and match it to your own evidence. If the evidence is missing, make that your next practice assignment. You can build a focused transition plan without setting aside everything you've already learned as a developer.


