What “truing” usually does, why it so often makes things worse, and how the Truing Session in my app tries to do it honestly. Spoiler: mostly by refusing to give you answers it doesn’t have.
TL;DR (for the attention-challenged)
- Most truing is a fudge. You turn one knob until the app agrees with your last shot. It then agrees there, and nowhere else.
- A wrong muzzle velocity, a wrong BC, a wrong zero, a scope that clicks short and a mis-ranged target can all produce the same miss. Matching the miss doesn’t tell you which one you’ve got.
- Do your homework first. Measure the BC directly if you can. Truing comes last, not first.
- Bring a chronograph. Without one, a session can fix your dope at the distances you shot, and that’s all it can do.
- The tool will tell you “I can’t tell these two apart” when it can’t. That’s not a bug. That’s the feature.
Gauss-Newton Goes to the Range
It all started with yet another comrade at the range who “trued” his ballistic profile into a mess of random numbers that happened, purely by accident, to be correct at about 800 m but more or less wrong everywhere else. We spent some time sorting it out: measured the MV (30 m/s off), used Labrabaco to check the BC (which the guy had taken from a different bullet, because “it’s also 167 gr”), and ended up with a systematic +4-click zeroing error.
That’s when I got the idea for an automated diagnostic tool – something that walks the user through the possible reasons why reality disagrees with the solver, and sets things right.
In principle, given real-life come-ups at a certain distance, it should be possible to deduce the BC from them. The question is: how certain can we be of the result? At distances where the BC really starts to show, the rifle’s own dispersion, the extra dispersion from MV SD, and inevitable errors in measuring conditions and distance all add up to significant uncertainty. That raises questions like how many rounds we need on target for a good-enough PoI, which distances are best, etc. And then there’s the question: what if something else in the ballistic profile is wrong too (as in the guy’s case above, where pretty much everything was)? Click value? MV drift with temperature? Zero? The rangefinder catching a bush 30 m closer? Etc., etc.
So there I was, trying to wrap my head around everything that can possibly go wrong with the trajectory, when I shared my woes with a colleague whose day job is statistics. “That’s an easy one,” he said, “you just linearize all these and drop them into a maximum a posteriori Gauss-Newton.” Seeing my blank face, he added: “Well, you know, the basic Bayesian least-squares fit.” And, as I was doing my best to look unretarded, he went for the headshot: “But, of course, you’d need some Laplace-approximated evidence to filter out the blunders.” “But of course,” I replied meekly, scribbling down the keywords. He might as well have been speaking Chinese.
Then came a weekend-long marathon of digging through books and manuals (there must be a word for that mixed feeling of nostalgic “how smart I must have been 30 years ago to understand all that” and impotent rage at my brain’s current state). In the end, I sorted it out – the ideas behind those scary words turned out to be no big deal. What did prove tedious was applying that math in our cruel, IDKFA-less world. How much ammo does it take? Given a range layout, how is it best spent? How do we cater for extreme/rare cases without hurting the common ones? How do we compute it all reasonably interactively on a low-end smartphone (without freezing for 10 minutes)? Etc., etc. For days on end, my laptop’s 16 high-end CPU cores ran full-steam simulations with (combinations of) injected errors, checking the tool’s results against them.
The result is in front of you: (yet another) unique feature of the app – Truing Done Scientifically.
Truing, as usually practised
Most ballistic apps have a “true” button. You shoot at some distance, type in what you actually had to dial, press the button, and the app adjusts a number (usually the muzzle velocity, sometimes the BC, sometimes something with a grander name) until its prediction matches your shot. Done. Trued.
I’m not against truing as such. Getting a complete beginner onto a torso-sized plate at a kilometre on their first day is a perfectly fine goal. If an overestimated muzzle velocity gets quietly compensated by a slightly lower BC, nobody gets hurt, and somebody goes home happy.
The trouble starts when people think the trued number means something. A few observations from the field:
- Solver vendors don’t say much about what their truing actually does. Sometimes they dress up something simple in a scary name, because “Aerodynamic Retardation Coefficient” sells better than “we bumped your BC by 2%”.
- Users don’t read what documentation there is.
- Users reach for the most sophisticated-sounding option on the menu, on the theory that sophisticated means correct.
Put those together, and you get people pressing “true” without checking the basics: the zero, the real muzzle velocity, the temperature, the wind that was blowing down the range. They expect it to work like a “make me look good” selfie filter. More often than not they end up with a wrong muzzle velocity (which should have been measured, not trued), a wrong BC, and a trajectory that’s spot on at the one or two distances used for truing and wrong everywhere else.
The worst version bends the bullet’s drag curve itself. A wrong zero or a wrong velocity at least fails in predictable ways. A bent drag curve fails wherever it feels like.
Why matching the miss doesn’t tell you anything
Here’s the core problem in one sentence: lots of different mistakes push the bullet down in almost exactly the same way.
A bullet that leaves the barrel a bit slower than you think drops more at long range. So does a bullet with a bit more drag than the box says. So does a scope that moves a little less than it claims per click. So does a target that’s a bit further away than your rangefinder told you. At the distances most people shoot, these all look nearly identical. You can fire a hundred more rounds at the same distances and they still won’t come apart.
Some numbers, for a plain .308 match load. Each of these mistakes looks, at 800 m, exactly like the bullet having a different BC:
| You got this wrong | At 800 m it looks like a BC that’s off by |
|---|---|
| Muzzle velocity, by 10 m/s (33 fps) | 4.6% |
| Scope click value, by 2% | 3.1% |
| Distance to the target, by 20 m | 7.0% |
| Temperature, by 3 °C | 0.9% |
| Air pressure, by 10 hPa | 1.0% |
That last pair is the nastiest. Drag depends on how thick the air is, so wrong air is exactly the same as a wrong BC, at every distance. No amount of shooting can tell them apart, ever. Which is why it matters so much that you enter the real pressure at your range, and not the “sea-level” number your weather app shows you. At any real altitude that number is badly off, and the app will happily turn your mistake into a “BC correction”.
Now the fun part. Say your real muzzle velocity is 10 m/s lower than what’s in the app, and you true at 600 m by adjusting the BC. You’ll need to lower it by about 6%, and 600 m will be dead on. Feels great. Then:
- At 800 m you’re about a click off (8.5 cm, 3.3 in).
- On a cold morning at −10 °C, at 800 m, you’re 13 cm (5 in) off.
- At 1000 m you’re three and a half clicks off (35 cm, 14 in).
And nothing in your 600 m data hinted at any of this, because at 600 m the wrong explanation and the right one give exactly the same answer. That’s what “trued” usually means: correct where you checked, wrong somewhere you didn’t.
Where to dial versus why
This is really two different questions, and most truing confuses them.
Where do I dial at the distances I shot? This only needs the combined effect of everything that’s wrong, and a few groups give you that. It doesn’t matter which mistake caused the miss, as long as you keep shooting those distances in similar weather.
Why was the app wrong? How much of the miss is the BC, how much the velocity, the zero, the scope. Only this answer works at a distance you haven’t shot, on a colder day or up a mountain, because each mistake grows differently with distance and reacts differently to the weather.
The first question is almost free. In one simulated session on a range that ended at 600 m (no chronograph, no homework), the tool’s prediction at 600 m got six times better while its knowledge of the BC barely moved. The shots answered “where”, gladly, and said nothing about “why”.
The second question is the one you actually want answered if you ever plan to shoot somewhere else. And it’s the one you have to design the session for.
What the app does instead
The Truing Session tool in my pet project is built around one idea: separate the causes first, and only correct what you’ve actually separated. Here’s what that looks like in practice.
Rule 1: do your homework, truing comes last
Before any truing, the tool asks you to sort out the boring stuff:
- Measure your muzzle velocity with a chronograph, at least 10 rounds, and note the temperature. Measure again on a day at least 15 °C warmer or colder to find out how much your powder cares about the weather. A wrong temperature drift is a wrong velocity on every day except the one you measured.
- Measure your sight height to 2–3 mm. Don’t guess it from the mount.
- Check your zero with a real group, on the day.
- Check your scope’s click value with a tall-target test. A scope that’s 2% off looks like a wrong BC at distance, and shooting won’t ever tell you otherwise.
- Use a decent BC in the first place: a radar-measured G7 value or a proper drag curve, not marketing copy from a box.
Done properly, this fixes most of the disagreements between rifle and app before any truing happens. What’s left should be the BC, and only the BC.
And if you can measure the BC directly (with a Labradar that records whole tracks, or with two chronographs, one far downrange behind something solid), do that instead. It’s usually at least as precise as a truing session, and it doesn’t need any of the cleverness below.
The tool is for the case where you’ve done all of that and still can’t measure the BC directly.
Rule 2: measure, don’t true
The tool never “trues” your muzzle velocity from where the bullets landed. A velocity worked backwards from impacts isn’t a velocity. It’s a dumping ground for every other mistake, wearing a velocity costume. Muzzle velocity comes from a chronograph or not at all.
Same with the BC: the tool only changes it with a chronograph behind it, at least five readings taken during the session itself, in the same air and at the same powder temperature as the shots. A velocity average you measured last month doesn’t count. It might be right. It might also be off by 5 m/s because it was colder, or it was another lot, and nothing in today’s shots can tell. At 800 m every 1 m/s of that error turns into half a percent of fake BC.
Rule 3: plan the session to separate, not to confirm
The tool picks your distances for you, and it picks them for telling causes apart, not for hitting where you usually shoot:
- One round near your zero distance. At the zero, nothing but the zero matters, so this checks it cleanly.
- The farthest target where the bullet is still well above the speed of sound. That’s where a BC error and a velocity error look most different from each other. They’re never very different, but that’s where it’s most visible.
- A middle distance to tie the two together.
Range length matters more than round count, by a lot. For the .308, with a chronograph and all the homework done:
- On a range that ends at 600 m, even 40 rounds leave the BC uncertain by about 2.5%. That’s a grade B (more on grades below).
- On a range that reaches 800 m, 12 rounds get you under 2%, which is a grade A.
Firing more rounds at the same distances mostly sharpens “where to dial”, which you were going to get anyway.
Rule 4: say “I don’t know” when you don’t know
This is the part people find annoying, and it’s the part I’m proudest of.
When the session can’t tell two causes apart, the tool says so: “muzzle velocity or drag, not yet separable”. It doesn’t pick the one that sounds better. A cause the session didn’t actually measure is reported as “not determined by this session”, never as “checks out”. The scope’s click value is the usual example: the shots can’t see it, so the tool doesn’t pretend to, and points you at a tall-target test.
Without a chronograph or a verified velocity average, the honest answer is usually the boring one. On the .308 example, no homework and no chronograph, the BC uncertainty after 40 rounds is about 3.6%. Before the session it was about 4.1%. So you’ve spent a box of ammo to learn almost nothing about the bullet. You do get corrected dope for the distances you shot, which is worth having. Just don’t save it as a new BC and take it to another range.
Rule 5: grades, and why only one of them travels
Every plan and every result gets a grade, from how well the BC was pinned down:
| Grade | What it means |
|---|---|
| A | A real BC correction. Good at other distances, in other weather. |
| B | A BC correction with a wide margin. You can save it, but only trust it near where you shot. |
| C | Barely better than the published BC. |
| D | Corrected dope for the distances you shot. Nothing about the bullet. |
Only grade A answers “why”. Everything below it answers “where”, for the distances and the air you had that day.
Rule 6: one knob, and it doesn’t bend anything
When the tool does save a BC correction, it’s a single multiplier on the bullet’s published drag, stored with your cartridge (not with the bullet, because the same bullet out of another barrel behaves slightly differently). It scales the drag up or down evenly. It doesn’t reshape it. Setting it back to 1 gives you exactly the published data, untouched.
It also refuses corrections that look like nonsense. If the session says your BC is off by more than about 12%, that’s almost never the bullet. It’s usually a typo, or a G1 number typed into a G7 field. The tool shows you what it found and tells you to check your data, but it won’t offer to save it automatically.
Rule 7: walk out, don’t jump
The tool never sends your first shot to the far target. It walks you out one step at a time, and only moves further once the last step has actually landed on the backdrop. Two separate checks have to agree. One is the tool’s own prediction; the other is a plain rule that no step may be more than four times the farthest distance that has already landed.
The prediction alone isn’t enough, because it only knows what the app assumes. In one simulated case, with a bullet set up as G1 but actually flying like G7, the prediction cheerfully cleared an 800 m first shot, expecting at most 1.6 m of miss. The real miss was 3.7 m, well off a 2 m backdrop.
If you can’t see where a string hit, that’s useful information, not a wasted round. The tool steps back, gets more careful, and tries the far distance again later with corrected elevation.
Rule 8: check the things the shots can’t
Some mistakes are invisible to the shots, so the tool asks about them before they can do damage:
- The far target’s distance. At 800 m a 20 m ranging error looks like a 7% BC error, and nothing in the shots will flag it. The tool makes you re-range the far target before you start, several times, and also asks for its angle with a clinometer. The angle matters because a missed slope and a wrong distance look exactly the same in the shots.
- The air pressure. It warns when the number looks like a sea-level value rather than the real one at your range.
- Typos. A come-up typed in the wrong unit, with the wrong sign or a missing digit gets a warning, while still being recorded as you typed it.
What it can’t do
The honest-limitations section. There’s always one.
- Supersonic only. Every target is planned where the bullet is still above about 1.1 times the speed of sound. Transonic is a different and harder problem. There a single BC really does fall short, and the fixes that work have to be fitted bullet by bullet from data taken down there. This tool doesn’t go there. Yet.
- Wrong inputs go straight into the BC. Temperature, pressure, the distance to the far target, a homework box ticked when the homework wasn’t done. The tool checks what it can, but anything it can’t see ends up in the drag number.
- It can’t check your scope. The click value and the muzzle velocity look almost identical to the shots. A tall-target test is the only cure.
- It doesn’t measure how your powder reacts to temperature. It takes that from your cartridge data. One session doesn’t cover a wide enough temperature range to check it, so a wrong value there looks exactly like a wrong muzzle velocity. With a chronograph that only hurts on other days. Without one, it lands in the BC. The fix is to chronograph on two days with clearly different weather, as part of your homework.
- Short ranges limit what you can learn. If your range ends well before the bullet slows to the speed of sound, the BC simply isn’t very visible. The tool tells you up front what grade your range can give.
- Experimental. All the rules and thresholds above were tuned on thousands of simulated sessions with known, deliberately planted errors, and in those the tool’s stated uncertainty holds up. Real-world sessions are still few, so treat a BC correction as a strong hint worth checking, not as gospel.
Key takeaways (I asked AI to sort my trash)
- Truing that matches one distance is correct at that distance. That’s all it promises, whatever the button says.
- Velocity, BC, click value, distance and air all look alike in the shots. Matching the miss tells you nothing about which one you have.
- Wrong air is literally indistinguishable from a wrong BC. Use the real pressure at your range.
- Homework first, direct BC measurement second, truing last.
- Muzzle velocity is measured, never trued.
- No chronograph during the session, no BC correction. You still get good dope for the distances you shot.
- A long range beats a big ammo budget.
- Only grade A travels to other distances and other weather.
- “Can’t tell these two apart” is a real answer. It’s usually the most useful thing a session without a chronograph can say.