By Tim Olshansky, CTO and co-founder of Fencer
A practical guide to getting security right as the attack surface grows and keeping up gets harder.
On this page
Stay in the loop
Get the next field guide
Notes from Tim on running engineering and security at startups.
Introduction
It is not just your engineers shipping AI-generated code anymore. In the last couple of years, AI made it trivial for anyone to produce software, so people across the company are standing up their own apps, scripts, and services.
That lands on you as one thing above all: the attack surface you are responsible for is multiplying. More code, more dependencies, more cloud and SaaS accounts, more external-facing services, and a growing number of identities that belong to software rather than to people. It expands on every axis at once, and it expands every week.
It moves fast in both directions, too. The people trying to get in have the same tools, so an exploit that used to take weeks to land now lands in minutes.
If you own security at your organization, you are already feeling this, and it shows up in three ways at once. Visibility slips, because most of what the company builds now reaches production without ever crossing your desk. Remediation piles up, because a bigger surface generates more to fix than you can work through by hand. And the ground keeps moving, because every week there is more surface than there was the week before.
I lived the earlier version of this. As a CTO, security landed on me on top of everything else, and even then there was always more to fix than I could get to. That part is old. What is new is the speed and the scale, now set by machines on both sides, and the fact that no amount of manual effort keeps pace with a machine.
The way through is to design the system that does the work, and let it run. You build the harness the machine operates inside: the context and data it reads, the models it uses, and the goals and rules that bound it. Within that frame the machine reacts, scanning, triaging, and fixing, while you design the frame and make the calls it cannot. You decide, the machine does, and the trick is drawing that line well.
%201.png)
Tim Olshansky
Co-founder, Fencer
Chapter 1
When people say the attack surface has exploded, it can sound like a slogan. But it's real, so let's make it more concrete.
A couple of years ago, everyone on your team quietly got the ability to build software and host it, using tools you cannot govern the way you used to.
Here's how that looks:
Meanwhile, AI-generated code fails in ways human code does not, in three distinct ways:
What these share is that none of them came through the front door. Data going into personal model accounts, an app spun up overnight, an agent holding production credentials, model-written code merged at speed: each one adds to what you have to defend, and each one arrives without passing through you first.
That is why the surface is both bigger and harder to see, and why it grows again every week. Keeping pace with it by hand stopped being realistic a while ago, and that is the problem the rest of this guide is built to solve.
Chapter 2
When the surface grows faster than you can cover by hand, the obvious move is to hand the work to AI: the scanning, the triage, the fixing. That instinct is right. Just aim before you fire, because automation pointed at the wrong work only gets you to the wrong place faster.
Start by deciding what actually matters.
Start with understanding where the damage actually comes from. For all the energy we spend on models that can find some deep, esoteric bug in a library you may not even use, the companies I watch get hurt are still getting hurt the old way. Ransomware. Phishing. Someone on the team handing over their password to a person posing as IT. These problems have been here forever and they will be here for a long time. The thing that is broken, more than any single control, is our perception of where the risk lives. While we are looking at the exciting new threats, we're getting hit by the old boring ones.
The second thing I want you to sit with is that the hard part of this job was never fixing issues. It was deciding what to fix. When I could not prioritize, the highest-signal thing I could do was pay someone to actually attack me, because an attacker's critical findings break the tie for you. Fixing the thing, once you know it matters, is usually the easy part. Choosing the thing is the work.
That leads to the order of operations I would give anyone standing up or rebuilding a function right now.
Say you are a fintech that handles payments. Your real risks are concrete: PCI compliance, fraud, and the integrity of what you process. That is step one, the business and its risks.
The controls follow from there. You make sure inputs are validated and well tested, you segregate duties, and you keep your keys and secrets away from the people writing the code. Those are the control points your risks demand, step two.
Only then do the tools earn their place: QA tooling, high unit-test coverage, and proper secrets management. Each one is there because a specific risk called for it, step three.
The mistake I see, and it is the tell of someone earlier in their career, is coming at it from the other end. "Here are the tools I love from my last job, I will set them up, now I feel secure." That is the tool angle, and it feels productive. The risk angle is slower to start but it is the one that holds up long term.
Chapter 3
Once you know what matters, the next question is who does what. Some of the work can run without you, and some of it should never leave your hands. Telling those two apart, and drawing the line deliberately, is what lets a small team keep pace without giving away the decisions that carry its name.
The line itself is simple to say and harder to hold: give the machine the throughput, and keep the judgment for yourself. Draw it on purpose, and build the function around it instead of around your queue.
Give the machine the throughput:
Keep the judgment for yourself:
I will tell you where I personally hold the line, because it is maybe more conservative than you would expect from someone who runs as much through models as I do. We are an AI-native company. Nearly all of our code, a lot of our detection rules, just about everything we produce goes through a model first. We describe goals, we build loops, we let agents respond to events and act on their own. And I still have a human approve every pull request. I do it so that I know a person looked, and so the change that just went into production has a name attached to it. That is my line. Yours might sit somewhere else. The point is that you draw it on purpose, and you draw it around decisions, not around tasks.
More from Tim
Get the next field guide
Notes from Tim on running engineering and security at startups.
Chapter 4
This is the chapter I would have wanted when I started. It is the how. Five plays, roughly in the order I would do them.
This is the highest-leverage thing you will do, and almost no one does it. If you want a model to triage your findings well, it needs to know what you know: what your business does, how your systems fit together, what you actually care about protecting. So write it down. Put your threat model in a markdown file. Be explicit about what would hurt and what would not. I have long believed policies should be treated like code, written in Markdown, versioned in Git, reviewed in pull requests. This is the same idea, pointed at triage.
Open one file today and write the first page of your threat model in plain language: what the business does, the two or three things that would genuinely hurt, and the systems that touch them. That page is what lets a machine ignore the noise that does not apply to you.
Automation without a check is just faster guessing. For any job you hand a machine, define the goal, and then build an automated gate that inspects the result. The gate is what lets you compare: when a model changes, or a new tool arrives, is the outcome better than before or worse. Without the gate you are trusting a vibe.
For one workflow you want to automate, write the goal in a sentence and the single automated check that proves it worked. Do not automate the workflow until the check exists.
People freeze here, because trusting a machine to fix security feels like too much. Here is how I think about it. I write a lot of code I do not read line by line anymore. I trust the result, and I test that it works.
Securing code is the same. You do not need to trust every step, you need to trust the final state, and you build the system that proves the final state. In code, that is a pull request with CI running your tests. In security work, it is your scanners and detectors confirming two things: you did not open anything new, and the hole you meant to close is actually closed. As long as that holds, and the path the machine took stayed inside the bounds you set, that is a result I will put my name on. Trust, but verify, and make the verification automatic.
For an automated fix, define the exact evidence you need before you sign off. Usually it is nothing new exposed and the original finding no longer reproduces. Wire those checks so they run every time.
The skill that compounds from here is not doing the work, it is teaching the system. You get good at labeling: this finding mattered, this one did not, this fix was right, this one missed. Feed those labels back so the next pass is better than the last. Over time that is most of the job, and it is worth getting deliberate about early.
Keep a running record of your triage decisions with a one-line reason. That record is training data, and it is how you onboard the next person, human or otherwise.
Because agents now act in production, treat their identity as seriously as a person's. There are two patterns, and you pick one per agent, on purpose.
Delegated. The agent acts on behalf of an employee, and that employee stays accountable. In AWS terms, think delegated roles: a human authorizes the agent, and if it goes off the rails, you still know whose responsibility it was. Simpler, because there is always a person on the hook.
Autonomous. The agent lives in your chat tools and acts on its own, like the Hermes and OpenClaw style bots, or something like Claude Tag. Treat it like a new employee: its own account, its own tightly scoped access, isolated to exactly what it needs.
Inventory every agent with production access. For each one, decide delegated or autonomous, and scope its access to match.
Chapter 5
As more of the security work runs on machines, the job itself starts to change shape. Day to day, you do less of the work by hand and more of the work of building and running the system that does it. That is a real shift in what the role is, and it is already the direction the strongest lean teams are heading.
The shift I see, in my own work and everywhere this is done well, is that you end up doing two distinct kinds of work: you get very good at labeling data, and you get very good at building systems. You define the goal and the loop, you build the gate that checks the result, and you say what is good, what is bad, what is better, what is worse, and feed that back. Over time, that is most of the job.
Your week shifts toward:
That is also how a team of one or two stays a team of one or two and keeps pace anyway. You do not scale by adding people. You scale by moving your effort up a level, from doing the work to building the thing that does the work. Stay lean on purpose.
Parting wisdom
The way you get ahead of all this is one small thing at a time. Security has always worked this way, as a steady stream of small improvements that compound, and the teams that stay ahead are the ones that keep making them instead of waiting for a perfect redesign.
Two habits carry most of the weight. Get your non-negotiables in early, because they are far easier to put in place at the start than to retrofit later. And do not let the big unfinished thing block the small one you could finish today. If you are staring at a secrets migration that will take a month, but there is a setting you could fix in twenty minutes, fix the setting. It is the same idea as brushing your teeth for two minutes a day. Individually trivial, and over time it compounds into the thing that actually keeps you safe.
So if you take one thing from this guide, make it a small move you make now:
That is the whole method, and it starts with a page you can write this afternoon. The hardest part is starting. So start small, and let it compound.
The one tool
Everything in Chapter 4 leans on one artifact, so here it is. This is the page a machine triages against, and it is the fastest way to make automated triage stop wasting your time on things that do not apply to you. Keep it short and honest: a rough map that exists beats a perfect one that does not. And treat it like code. Put it in your repo, version it in Git, and revise it in pull requests as the business changes, the same way you would treat a policy or any other artifact you actually intend to maintain.
I built Fencer with my co-founder because I lived the problem in this guide. As a CTO, security kept landing on me on top of everything else, and I ended up assessing, buying, integrating, and babysitting a stack of tools that never quite added up to security. I spent more time collating spreadsheets and exporting findings from one tool to paste into another than I ever spent fixing anything. That was a tax. Meanwhile deals stalled for months on security reviews, and most companies, then and now, do not have a thirty-person security team or a multimillion dollar budget to make that go away.
So we built the thing I needed then. Fencer handles the tactical security work across your attack surface, from finding to fixing. It scans, triages, and prioritizes against a picture of your business, fixes what it can, and escalates the decisions that need a person. It verifies its own findings, so the results you look at are ones you can trust, and it runs continuously without you babysitting it. The idea is simple: instead of you spending hours a day operating tools, Fencer acts like a security engineer on your team, so you can spend your time on the decisions that are actually yours to make.
If the division of labor in this guide is where you want to get to, that is exactly what we built Fencer to be.
Learn more →