Campaign Desk

Setting an objective you can test after the run has finished

An objective that cannot be marked wrong cannot be marked right either. This note sets out the three properties a campaign objective needs, rewrites eight common ones, and shows what each vague version does to the parameters underneath it.

Framework The Campaign Desk 2187 words 10 min read Updated 13 August 2026

Plan sheet

Test
Could a reader who was not present mark this objective wrong?
Properties
A measure, a surface it is read on, and a window it applies to.
Common fault
Stacking four goals into one sentence and compromising every parameter.
Output
One sentence, plus a named list of things you will observe but not optimise for.

A campaign objective is testable when a reader who was not present could look at the record afterwards and decide it did not happen. That requires exactly three things in the sentence: an observable measure, the surface that measure is read on, and the window it applies to. Objectives that lack any of the three are not weak objectives, they are non-objectives, and every parameter chosen underneath them is chosen without a reference point.

Why most objectives cannot be checked

The typical stated objective is a mood. Make the pair look active. Get some attention on the chart. Show that something is happening. Each of these describes a desired impression rather than an observable state, and an impression has no failure condition. When the run ends, the operator looks at the record, forms an impression, and concludes that the objective was met, because the objective was defined as the impression.

This is not dishonesty. It is a structural problem with the sentence. Nobody sets out to write an unfalsifiable goal; it happens because the goal is written in the language people use when they talk about a campaign rather than the language they use when they read one. The fix is mechanical and takes about two minutes per objective.

The cost of skipping the fix is paid twice. Once at the close, when the report has nothing to compare against, and once at the start, when the parameter block has no criterion to select values by and therefore selects them by habit, by budget arithmetic, or by whatever the interface offered as a default.

The three properties of a testable objective

Write the sentence, then check it against three questions in order. If any answer is missing, the sentence is not finished, and finishing it is cheaper before the run than explaining it afterwards.

  1. What is the measure?Name something that exists in a record: turnover on a pool, count of distinct signing accounts, hours with any activity, cost per executed swap. Not a feeling, not a ranking you do not control, not a number produced by a third party using an undisclosed method.
  2. Where is it read?Name the surface. A specific pool, a specific program, a specific aggregator page. The same nominal measure differs between surfaces because each one aggregates differently, and an objective that does not name the surface is two objectives in a trenchcoat.
  3. Over what window?Name the period. An hour, a session, a full day, the run window itself. Without a window, any result can be presented as within scope by choosing the period that flatters it.

Property one: an observable measure

An observable measure is one you could reconstruct from public data without asking anyone. Turnover routed through a named pool qualifies. Distinct signing accounts qualifies. Hours in the window containing at least one executed swap qualifies. Sentiment does not, and neither does a position in a list whose ordering rules are not published. If the measure cannot be traced back to confirmed transactions in the Solana explorer, it is an impression rather than a measure.

Prefer measures that are close to the thing you actually did. A run executes swaps; turnover and swap counts are one step away from that, and they are therefore honest measures of execution. Holder distribution is several steps away and moves for reasons a campaign does not control. Choosing a distant measure does not make the objective more ambitious, it makes the verdict less attributable.

Where a measure depends on how a program accounts for a trade, check the program rather than the dashboard. Token account semantics, decimals and transfer behaviour are specified in the Solana program documentation, and a measure defined against the program is stable in a way that a measure defined against a display is not.

Property two: the surface it is read on

Two observers can look at the same run and disagree about whether it happened, purely because they are reading different surfaces. One reads a single pool. One reads a token-level aggregate across every venue. One reads a listing page that applies its own filters and refresh cadence. All three are legitimate; they are not the same measurement.

Naming the surface in the objective forces a decision that would otherwise be taken by accident at the close. It also constrains the venue split in the parameter block: if the objective is read on one pool, splitting the budget evenly across four venues actively works against it, and that conflict is visible on the page rather than discovered later.

The surface also decides the refresh behaviour you have to live with. Some surfaces update continuously, some in fixed intervals, some only when a threshold is crossed. A run whose activity is real but whose cadence never lands inside the surface's aggregation window is a run that succeeded on chain and failed against its own objective, which is a genuinely useful thing to be able to say.

Property three: the window it applies to

The window is the cheapest of the three properties to write and the most frequently omitted. Without it, the objective silently inherits whatever window the reader happens to open, and the reader at the close is usually the operator, who will open whichever one looks best.

A window also disciplines the pacing curve. If the objective applies to every hour of a ten-hour run, then a front-loaded curve that empties the budget in three hours has failed the objective by construction, regardless of the total. If the objective applies to the run as a whole, a front-loaded curve is legitimate. Same budget, same parameters, different verdict, decided by one clause in a sentence.

Eight objectives, rewritten

The left column is what people write. The middle column is the same intention rewritten to be markable. The right column is what the vague version does to the run underneath it.

Vague objective, testable rewrite, downstream failure
As writtenRewrittenWhat the vague version breaks
Make the pair look activeEvery hour of the ten-hour window contains executed swaps on the named poolInterval is chosen by feel, and quiet hours are noticed only afterwards
Get more volumeTurnover routed through the named pool during the window, compared with the recorded baseline hour before itNo baseline is captured, so no comparison is possible at the close
Look organicNo two consecutive intervals within ten per cent of each other, and no fixed trade size repeated across the windowRandomisation is left at a default that produces a describable cadence
Reach more peopleDistinct signing accounts executing at least one swap on the pool during the windowWallet count is set for overhead reasons and never checked against the goal
Support the launchContinuous activity across the first six hours after the pool is live, with no hour emptyPacing is front-loaded by instinct and the later hours go silent
Keep costs sensibleAverage cost per executed swap stays inside the band written in the parameter blockCost is discovered at the close, when nothing can be done about it
Test the setupTwenty swaps land on the named venue at the planned size band and within the planned cost bandThe probe produces a vague impression instead of three confirmed facts
Do better than last timeNamed measure, named surface, compared with the recorded figure from the previous runThe previous run was never recorded in a comparable form

Every rewrite is longer than the original and none of them is complicated. The length is the point: the added words are the measure, the surface and the window, and they are the words that make the sentence checkable.

Stacking: four goals, one budget

The other failure mode is the opposite of vagueness. An objective that names four outcomes is precise and still unusable, because each outcome implies a different configuration. Continuous coverage wants many small trades spread thin. A visible peak wants concentration. A wide participant footprint wants many accounts. Low cost per swap wants fewer, larger trades. These pull in incompatible directions.

What happens in practice is that the operator averages them. Medium wallet count, medium size, medium interval. The result satisfies none of the four and cannot be blamed for failing any of them, because the plan never committed. A run designed as a compromise produces a report that reads as a compromise.

The fix is a hierarchy rather than a list. One primary objective decides the parameters. Everything else becomes a secondary observation: recorded at the close, not optimised for during the run, and explicitly excluded from the verdict. This is also where tooling choice stops mattering, because a professional Solana volume bot executes whatever hierarchy you hand it, and will execute an incoherent one just as faithfully as a coherent one.

What a vague objective does to the parameters

The damage is specific and predictable. Trace it line by line and the abstraction disappears.

Missing property, and the parameter it leaves undecided
Missing from the objectiveParameter left without a criterionDefault that fills the gap
The measureSwap size bandBudget divided by a comfortable-looking trade count
The surfaceVenue splitEven split across everything available
The windowPacing curveWhatever the run does until the budget runs out
The comparisonBaseline stageSkipped, because nothing is going to be compared
The verdict ruleStop ruleAbsent, so the run ends when the money does

Read the right-hand column as a description of an unplanned run, because that is exactly what it is. Every default in it is defensible in isolation and the combination is not a design.

Marking an objective with illustrative arithmetic

The figures below are illustrative arithmetic used to demonstrate a marking procedure. They describe no real pair and no real run.

Illustrative only

Objective: every hour of a 10-hour window contains at least 6 executed swaps on the named pool.

Plan: 4 SOL per hour, average swap 0.35 SOL, giving about 11 trades per hour.

Headroom: 11 planned against 6 required = 5 trades of slack per hour.

Close: hours 1 to 8 recorded 9 to 12 trades. Hour 9 recorded 4. Hour 10 recorded 0.

Verdict: failed. 8 of 10 hours met the threshold; the objective required 10 of 10.

Attribution: hour 10 was empty because the budget was exhausted, which is a pacing fault, not a size fault.

That verdict is only available because the objective named a threshold, a surface and a window. Without the threshold, eight good hours would have been reported as a success. Without the window, the operator would have quoted the ten-hour total, which was fine. The failure is small, specific and fixable, and identifying it took one line of comparison rather than an argument.

Notice also that the verdict points at pacing rather than at swap size. That is the second job of a testable objective: it makes the post-mortem land on the right parameter, so the next plan changes the thing that actually broke.

The five-question rubric

Run the finished sentence through these five questions. Any no is a rewrite, not a discussion.

  • Does the sentence name a measure that exists in a public record?
  • Does it name the surface that measure is read on?
  • Does it name the window it applies to?
  • Could a reader who was not present mark it wrong from the record alone?
  • Is it exactly one objective, with everything else demoted to observation?

A sentence that passes all five is usually between fifteen and thirty words. Shorter than that and something is missing; much longer and it is probably two objectives that have not been separated yet.

Secondary observations and why they are demoted

Demoting a goal is not abandoning it. Secondary observations are written into the report template with their own lines, recorded at the close, and used as input to the next plan. What they do not do is influence parameter selection, because that is the specific mechanism by which a plan becomes a compromise.

Keeping them visible also protects against a subtler failure: quietly promoting a secondary observation at the close because the primary objective was missed. If the secondary lines are already in the template with their own headings, a good result there reads as what it is, a good result on a secondary measure, rather than as a substitute verdict.

What a good objective still will not tell you

A testable objective tells you whether the run did what it was configured to do. It does not tell you whether doing that was worth doing. Those are separate questions and the second one is not answerable from a transaction record at all; it depends on what the activity was for, who was going to read it, and what they did next.

It also does not protect against choosing a measure that is easy to hit and irrelevant. An objective can be perfectly testable and perfectly trivial. The rubric checks form, not ambition, and the only guard against a trivial objective is asking, before the run, what you would actually do differently if the answer came back negative. If the answer is nothing, the objective is not worth the budget.

Finally, an objective does not survive being copied. Depth, venue behaviour and observation surfaces differ between pairs, so the threshold that was reasonable last time may be trivial or unreachable this time. Keep the three-property structure, and rewrite the numbers every run.

Questions this plan raises

Can an objective be qualitative?

It can be qualitative in wording as long as it is decidable in practice. The test is not whether a number appears, it is whether two people reading the same record afterwards would reach the same verdict.

Should the objective mention a target figure?

Only if the figure was reasoned rather than wished for. A target pulled from nowhere makes the objective look testable while quietly guaranteeing the verdict, because nobody ever revisits where the figure came from.

What if the real objective is commercial rather than on-chain?

Write the commercial goal as context and the on-chain objective as the testable sentence. A campaign can only be marked against what it produced on chain; everything past that is an inference somebody else makes.

How many objectives can one run have?

One primary. Anything else is a secondary observation, recorded but not optimised for, because two primaries produce a parameter block that is a compromise rather than a choice.

Is it cheating to rewrite the objective after seeing the data?

It is not cheating if the rewrite is dated, kept alongside the original, and applied to the next run rather than to the one that just finished. It is cheating if the original disappears.

What if nobody will ever read the report?

Then the objective is for you, and the standard is the same. The value of a testable objective is that it stops the operator from grading their own run against a target that moved.

Filed under Planning and written by The Campaign Desk. Parameter ranges on this page are reasoning aids, not settings to copy: the objective decides the value, and every figure inside a worked example is illustrative arithmetic chosen to show the shape of the calculation. What the desk does and does not do is set out on the about page.