How We Keep 40 Ad Variants From Turning To Chaos

Written By
Armend Meha
Forty variants sounds like a lot until you're in a testing sprint, and then it's Tuesday. A single concept spawns three hooks, each hook gets two aspect ratios, half of those get a localized copy pass, and someone in the group chat asks for
How We Keep 40 Ad Variants From Turning To Chaos
Forty variants sounds like a lot until you're in a testing sprint, and then it's Tuesday. A single concept spawns three hooks, each hook gets two aspect ratios, half of those get a localized copy pass, and someone in the group chat asks for "the one with the blue background but the other CTA." Multiply that across a few brands and you've got a folder that looks like a ransom note.
We run a high-volume creative pipeline for a living, mostly behind the scenes for other agencies. That means our chaos isn't just our problem — it becomes your problem the moment you drop our files into your client's shared drive under your logo. So over the years we've built a system that keeps 40 variants (or 140) legible for everyone who touches them: our designers, your creative lead, the person pulling assets at 6pm, and the client who was never supposed to know we exist.
Here's how we do it.
The Real Enemy Isn't Volume — It's Ambiguity
Volume is fine. Volume is the job. The thing that actually breaks a pipeline is ambiguity: two files that could plausibly be "the latest," a variant nobody can trace back to its concept, an asset that shipped but nobody can find the source file for when the client wants a tweak.
Every naming and folder decision we make is in service of killing ambiguity. If someone can open our drive cold — no context, no Slack thread — and understand what a file is, what test it belongs to, and whether it's the current version, the system is working. If they have to ask, it isn't.
That's the bar. Not "pretty." Legible.
The Naming Convention: One String, Read Left To Right
We name every deliverable with a single structured filename. No spaces, no vibes, no "final_final_v2_ACTUALfinal." The format reads like a sentence once you know the grammar:
[Brand]_[Platform]_[Concept]_[Variant]_[Ratio]_[Version]
A real one looks like this:
ACME_MET_C03_HookB_1x1_v2
Broken down:
Brand — a short, fixed code per client. Never the full name, never changing. "ACME," not "Acme Skincare Co."
Platform — where it's built to live:
MET,TT,YT,PIN, and so on. This drives spec, safe zones, and length, so it goes near the front.Concept — the big idea, numbered.
C03is the third distinct creative concept for that brand. Concepts are the unit that matters most, so they get their own ID.Variant — what's being tested within the concept:
HookB,CTA2,UGCcut,Testimonial. This is the lever, and it's spelled out enough to be human-readable.Ratio —
1x1,4x5,9x16,16x9. Boring, essential, and the number one thing people grab the wrong version of.Version —
v1,v2,v3. Iterations of that exact file after feedback. Not new ideas — new drafts of the same thing.
The order isn't arbitrary. It's sorted the way a human hunts. You almost always know the brand and platform first, then narrow to concept, then variant, then the ratio you need, and the version sorts last so the newest floats to the bottom of an alphabetical list. Read left to right, you go from broadest to most specific — which is exactly how someone searches when they're in a hurry.
Two rules we never bend:
Concept vs. variant vs. version are three different axes. A new idea bumps the concept. A new test lever bumps the variant. A new draft of the same file bumps the version. Collapsing these is how you end up with fourteen "v" files and no idea which changed the headline versus which changed the whole hook.
The filename never lies. If a file gets edited, the version number changes. Always. An untouched name on a changed file is worse than no name at all, because now people trust something wrong.
Descriptive Enough To Read, Coded Enough To Sort
There's a tension in every naming system: hyper-coded names (A3B_02X) sort beautifully but require a decoder ring, while fully descriptive names ("blue background testimonial with the new CTA") are readable but impossible to sort and a nightmare to type consistently.
We split the difference on purpose. The scaffolding — brand, platform, ratio, version — is coded and rigid, because those fields have a finite, knowable set of values and consistency matters more than color there. The human-facing field — the variant — is descriptive, because that's the part people actually reason about. HookB beats V2 every time. UGCcut tells you something; X4 tells you nothing.
The payoff is that our filenames are self-documenting and sortable. You don't need a spreadsheet to translate them, and you don't need to open twelve files to find the one you want.
Folder Structure: Boring, Predictable, And The Same Every Time
Fancy folder structures are a trap. The best structure is the one so predictable you never have to think about where something lives. Ours is intentionally dull and identical across every brand:
A few decisions inside that matter more than they look:
03_Workingis where the ugly lives, and it never leaves. Half-finished PSDs, seventeen artboards, the layer named "asdf" — all fine. It just never migrates to Delivery. This is the single biggest thing that keeps a shared drive sane: a firm wall between our workspace and your handoff space.04_Deliveryis organized by concept, not by date or by "round." "Round 3" means nothing in six weeks.C05means the same thing forever. Under each concept, exports live separate from editable source files, so the person grabbing a ready-to-ship MP4 never has to wade through project files.05_Archiveexists so nothing gets deleted and nothing clutters. When a concept is retired, it moves here whole. It's out of the way but recoverable, which matters the day a client wants to "bring back that one from the spring."
The structure is identical for every brand we touch. That's the point. Anyone on our team — or yours — can drop into a client they've never worked on and know exactly where the logo lives and where the current exports are, because it's the same drawer in every kitchen.
Version Control Without Turning Designers Into Developers
"Version control" makes people picture Git and merge conflicts. For creative, it's simpler and mostly about discipline, not software.
Our working rules:
The version number is the source of truth, not the file's modified date. Dates get scrambled the second someone downloads and re-uploads a file.
v3staysv3no matter whose machine it's on.We never overwrite an approved file. Once a version ships or gets sign-off, it's frozen. Changes create the next number. This means we can always answer "what exactly did the client approve?" — because it still exists, untouched.
One file is the current one, and it's obvious. Because versions sort last in the name, the highest number in the folder is the live one. No
_FINAL, no_USE_THIS, no colored dots that mean different things to different people.A short changelog rides along with high-velocity concepts. Not a novel — a one-line note per version: "v2: shortened hook to 3s, swapped CTA." When a variant wins and everyone asks "wait, what was different about that one," the answer is written down, not reconstructed from memory three weeks later.
That last point does double duty. It's version control and it's a testing record — the paper trail that tells you which specific change moved the needle, so your next round of iterations is aimed instead of random.
The White-Label Layer: Nothing With Our Fingerprints On It
Here's where a lot of this gets non-negotiable, because most of our work ships under someone else's name. If our conventions leaked our brand into a client-facing drive, we'd have failed at the one thing white-label promises.
So the system has a clean seam:
Brand codes are the client's, never ours. The naming convention we described has zero BUZZ-isms baked in. It's a neutral standard we can hand you and you can adopt as your own.
Delivery folders are yours to rename or re-skin. Everything in
04_Deliveryis built to drop straight into your ecosystem. Our internal03_Workingmess — where any of our own project scaffolding might live — stays on our side and never travels.File metadata gets scrubbed. Export settings, embedded author names, project template names — we keep them generic so nothing whispers "made elsewhere" when a curious client checks a file's properties.
We adopt your convention if you already have one. Plenty of agencies come to us with a naming system that works for their team. Great — we'll build to yours instead of ours. The goal is your pipeline staying legible, not us being right.
The tell of a good white-label system is that it's invisible. Your client should experience a tidy, consistent, well-labeled set of creative that looks like it came from your in-house team, because as far as they're concerned, it did.
Why Any Of This Matters When You're Moving Fast
It's tempting to treat naming and folders as overhead — the stuff you'll clean up "when there's time," which is never. But the whole reason to have a system is speed. A legible pipeline is what lets us push 40 variants in a week without a single "which file did you mean?" going back and forth. It's what lets a winner get scaled the same day it's spotted, because the source file is exactly where it should be. And it's what lets you resell our work under your name without a translation layer between us and your client.
Chaos isn't the price of volume. It's the price of skipping the boring parts. We just decided a long time ago that the boring parts are the job.



