Formation Rules and the Language of Alignment

Seven on the line, one strong side, five letters and three quarterback depths: the rules and the words that turn eleven players standing still into a readable picture.

Show the Python (shared helpers for this chapter’s diagrams)
import logging
import re

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, FancyArrowPatch, Rectangle

from gridiron import Play, Player, defense, style, draw_marker
from gridiron.field import HASH_NEAR, HASH_FAR
from gridiron.formations import LINE_D, TE_W, WING_W, OL_SPLIT

logging.getLogger("matplotlib.font_manager").setLevel(logging.ERROR)
style.apply()

ELIG = style.THIRD          # aqua ring: an eligible receiver
FOUL = "#e34948"            # red ring: the problem (ineligible, or illegal)
TE_RING = style.LINE_TO_GAIN  # gold ring: a tight end (as in Personnel)
OL_RING = "#4a3aa7"         # purple ring: a lineman (as in Personnel)
UC, PIS, GUN, TB_D = -1.9, -4.0, -5.0, -7.0   # QB and back depths, yards behind the line
WIDE, SLOT = 15.0, 9.0      # typical receiver widths from the ball
# Real "off the line" is about a yard deeper than "on the line", less than one marker wide. This chapter's
# formation plates draw off-the-line players deeper (OFF_D) and add a dashed guide, so on/off can be SEEN.
OFF_D = -2.7
GUIDE_D = -1.75             # where the dashed "a yard back" guide is drawn (between the two depths)


def line5():
    """The five offensive linemen; only the center is lettered."""
    return [Player(k, k, "off", LINE_D, w, label=("C" if k == "C" else ""))
            for k, w in [("LT", -2 * OL_SPLIT), ("LG", -OL_SPLIT), ("C", 0.0),
                         ("RG", OL_SPLIT), ("RT", 2 * OL_SPLIT)]]


def P(key, pos, d, w, label=None):
    """An offensive skill player at (d, w): d = yards from the line (negative = backfield),
    w = yards to the offense's right of the ball."""
    return Player(key, pos, "off", d, w, label=label or key)


def D(key, pos, d, w, label=None):
    return Player(key, pos, "def", d, w, label=label)


def hide_yard_numbers(ax):
    """Drop the faint painted yard numbers (they sit where receivers stand in these zoomed pictures)."""
    for t in list(ax.texts):
        if t.get_text().isdigit() and t.get_alpha() is not None and abs(t.get_alpha() - 0.55) < 1e-6:
            t.remove()


def say(fld, p, d, w, text, color=None, ha="center", va="center", fs=7.2, weight="normal", box=True,
        italic=False):
    """A short label at alignment coordinates (d, w), on a light backing so it reads over field lines."""
    x, y = fld.xy(*p.to_abs(d, w))
    bb = dict(boxstyle="round,pad=0.22", fc=style.SURFACE, ec="none", alpha=0.9) if box else None
    return fld.ax.text(float(x), float(y), text, fontsize=fs, color=color or style.INK, ha=ha, va=va,
                       fontweight=weight, zorder=12, linespacing=1.15, bbox=bb,
                       style="italic" if italic else "normal")


def leader(fld, p, frm, to, color=None, lw=0.6):
    """Thin leader line from a label at frm=(d, w) to a player at to=(d, w)."""
    (x0, y0), (x1, y1) = fld.xy(*p.to_abs(*frm)), fld.xy(*p.to_abs(*to))
    fld.ax.plot([float(x0), float(x1)], [float(y0), float(y1)], color=color or style.INK_2, lw=lw, zorder=6)


def on_line(p):
    return [k for k, q in p.players.items() if q.side == "off" and q.d > -1.0]


def count_line(fld, p, keys, dy=2.9):
    """Number the players on the line, left to right, just in front of each (on a light backing)."""
    for i, k in enumerate(sorted(keys, key=lambda k: p.players[k].w), 1):
        pl = p.players[k]
        x, y = fld.xy(*p.to_abs(pl.d + dy, pl.w))
        fld.ax.text(float(x), float(y), str(i), fontsize=6.6, ha="center", va="center", color=style.INK,
                    fontweight="bold", zorder=12,
                    bbox=dict(boxstyle="circle,pad=0.12", fc=style.SURFACE, ec="none", alpha=0.95))


def depth_guide(fld, p, w0, w1, label_w=None, text="a yard back (depth stretched)"):
    """Dashed guide between 'on the line' and 'a yard off it', from width w0 to w1, with a small label."""
    (x0, y0), (x1, y1) = fld.xy(*p.to_abs(GUIDE_D, w0)), fld.xy(*p.to_abs(GUIDE_D, w1))
    fld.ax.plot([float(x0), float(x1)], [float(y0), float(y1)], color=style.INK_2, lw=0.7,
                ls=(0, (3, 3)), zorder=2.5, alpha=0.8)
    if label_w is not None:
        say(fld, p, GUIDE_D - 0.95, label_w, text, fs=5.8, color=style.INK_2, italic=True, box=False)


def shade_side(fld, p, w0, w1, color, alpha=0.10):
    """Tint the field between widths w0 and w1 (alignment yards) over the whole drawn depth."""
    (xa, _), (xb, _) = fld.xy(*p.to_abs(0, w0)), fld.xy(*p.to_abs(0, w1))
    lo, hi = sorted([float(xa), float(xb)])
    y0, y1 = fld.ax.get_ylim()
    fld.ax.add_patch(Rectangle((lo, y0 + 0.5), hi - lo, (y1 - y0) - 1.0, fc=color, ec="none", alpha=alpha,
                               zorder=0.5))


def numbers_band(fld, p, sideline_w, alpha=0.22):
    """Shade the painted-numbers lane, 12 to 14 yards in from the sideline at width sideline_w."""
    s = 1 if sideline_w > 0 else -1
    shade_side(fld, p, sideline_w - s * 12.0, sideline_w - s * 14.0, style.MUTED, alpha=alpha)


def vdim(fld, p, w, d0, d1, text, fs=6.6):
    """A vertical dimension arrow at width w from depth d0 to d1, labelled on its right."""
    (x0, y0), (x1, y1) = fld.xy(*p.to_abs(d0, w)), fld.xy(*p.to_abs(d1, w))
    fld.ax.add_patch(FancyArrowPatch((float(x0), float(y0)), (float(x1), float(y1)), arrowstyle="<|-|>",
                                     mutation_scale=7, color=style.INK_2, lw=0.8, zorder=6))
    xm, ym = fld.xy(*p.to_abs((d0 + d1) / 2, w + 0.35))
    fld.ax.text(float(xm), float(ym), text, fontsize=fs, color=style.INK, zorder=12, ha="left", va="center")


def hdim(fld, p, d, w0, w1, text, fs=6.3):
    """A horizontal dimension arrow at depth d from width w0 to w1, labelled just below it."""
    (x0, y0), (x1, y1) = fld.xy(*p.to_abs(d, w0)), fld.xy(*p.to_abs(d, w1))
    fld.ax.add_patch(FancyArrowPatch((float(x0), float(y0)), (float(x1), float(y1)), arrowstyle="<|-|>",
                                     mutation_scale=7, color=style.INK_2, lw=0.8, zorder=6))
    say(fld, p, d - 0.75, (w0 + w1) / 2, text, fs=fs)


def referee(fld, p, d, w):
    """The referee: a white, striped disc (officials are neither offense nor defense)."""
    x, y = fld.xy(*p.to_abs(d, w))
    fld.ax.add_patch(Circle((float(x), float(y)), 0.8, fc="white", ec=style.INK, lw=0.9, hatch="||||", zorder=9))


def pro_11(**moves):
    """11 personnel, under center, 2x2: X on the line left, H in the left slot, Y in-line right,
    Z off the line right, the back 7 yards deep. moves = {key: dict(d=..., w=...)}."""
    off = line5() + [P("QB", "QB", UC, 0, "Q"), P("RB", "RB", TB_D, 0, "R"), P("Y", "TE", LINE_D, TE_W),
                     P("X", "WR", LINE_D, -WIDE), P("H", "WR", OFF_D, -SLOT), P("Z", "WR", OFF_D, WIDE)]
    return [q.moved(**moves[q.key]) if q.key in moves else q for q in off]


def i_form_21():
    """21 personnel, I-formation: X on the line left, Y in-line right, Z off the line right,
    the fullback (F) and the tailback (R) stacked behind the quarterback."""
    return line5() + [P("QB", "QB", UC, 0, "Q"), P("FB", "FB", -4.4, 0, "F"), P("RB", "RB", TB_D, 0, "R"),
                      P("Y", "TE", LINE_D, TE_W), P("X", "WR", LINE_D, -WIDE), P("Z", "WR", OFF_D, WIDE)]

First-and-10, ball on the left hash. In the seconds before the snap, three small things happen that the broadcast barely notices. Out wide on the left, a receiver glances at the official on the sideline, points at his own chest and gets a nod back. On the right, the tight end settles next to the tackle, and a linebacker immediately points at him and shouts “Strong right! Strong right!” And the quarterback stops four yards behind the center, not five, with the running back directly behind him. Each detail answers to something different: the first to the rulebook, the second to the defense’s own language, the third to the offense’s plan. All three are clues. By the end of this chapter you’ll know what the receiver was asking (am I on the line?), what the linebacker was shouting about (the formation’s strong side), and why four yards instead of five changes what the offense is likely to do.

You’ll be able to…

Personnel told you who is on the field. This chapter is about where they stand: the rules every alignment must obey, and the vocabulary coaches use to name it. The next two chapters use both to build actual formations (Classic Formations and Spread Formations).

Seven on the line: the rule underneath every formation

You met the core of it in The Twenty-Two: at least seven offensive players on the line of scrimmage at the snap; only the two ends of the line and the backs are eligible receivers (the quarterback under center excepted); everyone else is an ineligible receiver. This chapter asks the questions underneath that rule. What does “on the line” mean, to the inch? What happens when a formation breaks the rule? And why would a coach ever want one of his own receivers to be ineligible?

On the line, off the line, and the gap in between

Every offensive player at the snap is in exactly one of two places, and the rulebook defines both.1

  • On the line means roughly level with the center. The rule’s test is the helmet: a player is on the line if he faces the defense with his shoulders square and his helmet breaks an imaginary vertical wall, parallel to the line, that passes through the center’s waist. Linemen crouch right up against the ball, so they’re obviously on it. A wide receiver thirty yards away has to stand on it, which is harder to judge.
  • Off the line means in the backfield, at least one yard behind the line of scrimmage. For the offense, the line effectively starts at the back tip of the ball: the ball’s own length, the neutral zone, belongs to neither team, and no offensive player may have any part of his body in it. Every back is off the line: the running back, the fullback, a receiver standing a yard deep, a tight end set as a wing. The single exception is the quarterback under center, who has to be closer than a yard to take the ball from the center’s hands.
Show the Python
S = 2.6   # depth stretch for legibility
fig, ax = plt.subplots(figsize=(6.6, 3.1))
ax.set_aspect("equal")
ax.axis("off")
x0, x1, y0, y1 = -2.0, 13.8, -4.9, 1.9
WAIST, BACK = -0.55 * S, -1.0 * S
ax.add_patch(Rectangle((x0, y0), x1 - x0, y1 - y0, fc=style.TURF, ec=style.BASELINE, lw=0.8, zorder=0))
ax.add_patch(Rectangle((x0, WAIST), x1 - x0, -WAIST, fc=ELIG, alpha=0.14, ec="none", zorder=1))
ax.add_patch(Rectangle((x0, BACK), x1 - x0, WAIST - BACK, fc=FOUL, alpha=0.13, ec="none", zorder=1))
ax.add_patch(Rectangle((x0, y0), x1 - x0, BACK - y0, fc=style.OFFENSE, alpha=0.06, ec="none", zorder=1))
ax.plot([x0, x1], [0, 0], color=style.OFFENSE_DARK, lw=1.5, zorder=2)
for yy in (WAIST, BACK):
    ax.plot([x0, x1], [yy, yy], color=style.INK_2, lw=0.8, ls=(0, (3, 2)), zorder=2)
ax.add_patch(Ellipse((0, 0.42), 0.34, 0.84, fc=style.BALL, ec="white", lw=0.6, zorder=9))


def man(x, y, lab, ring=None, rad=0.42):
    ax.add_patch(Circle((x, y), rad, fc=style.OFFENSE, ec="white", lw=0.8, zorder=8))
    if ring:
        ax.add_patch(Circle((x, y), rad * 1.5, fc="none", ec=ring, lw=1.8, zorder=7))
    ax.text(x, y, lab, ha="center", va="center", color="white", fontsize=6.5, fontweight="bold", zorder=9)


for x, lab in [(0, "C"), (1.6, ""), (3.2, ""), (4.8, "Y")]:
    man(x, -0.72, lab)
man(12.6, -0.72, "X", ring=ELIG)
man(9.4, -2.0, "Z", ring=FOUL)
man(7.6, -3.75, "H", ring=ELIG)
man(0, -3.1, "Q")
kw = dict(fontsize=7, va="center", ha="left", zorder=10)
ax.text(x1 + 0.3, 0.0, "the offense's line (the\nback tip of the ball)", color=style.OFFENSE_DARK, **kw)
ax.text(x1 + 0.3, WAIST, "the center's waist", color=style.INK_2, **kw)
ax.text(x1 + 0.3, BACK, "1 yard behind the line", color=style.INK_2, **kw)
ax.text(x1 + 0.3, -3.9, "the backfield", color=style.INK_2, **kw)
ax.text(6.4, 1.25, "ON THE LINE: up level with the center", fontsize=7.2, ha="center", color=style.INK,
        fontweight="bold", zorder=10)
ax.text(8.6, -2.0, "NEITHER ON NOR OFF:\nillegal formation", fontsize=6.6, ha="right", va="center", color=FOUL,
        fontweight="bold", zorder=10)
ax.text(8.3, -3.75, "OFF THE LINE: a back,\nat least a yard deep", fontsize=6.8, ha="left", va="center",
        color=style.INK, fontweight="bold", zorder=10)
ax.text(0.65, -3.1, "QB under center: the\none back allowed closer", fontsize=6.3, ha="left", va="center",
        color=style.INK_2, zorder=10)
ax.set_xlim(x0 - 0.1, x1 + 5.6)
ax.set_ylim(y0 - 0.1, y1 + 0.1)
plt.show()
Figure 10.1: On the line, off it, and the illegal strip in between (a close-up of the right half of a formation; depths are stretched so the thin bands show). A player whose helmet reaches the center’s waistline is on the line (green band): here the center (C), the guard, the tackle, the tight end (Y) and the receiver (X). A player at least a yard behind the line is a back (blue band), like H. Z is in neither band: too far back to be on the line and too close to be a back, which is an illegal formation. Aqua rings mark eligible receivers; the red ring marks the problem. (Y has no ring: X is on the line outside him, so Y is ‘covered’, which the next section explains.)

The strip between those two zones is no-man’s land. A player standing half a yard behind the line is neither on it nor in the backfield, and the formation is illegal. On a crowded line nobody gets stuck there by accident. But a receiver thirty yards from the ball, looking in at a center he can barely see, can easily end up half a step off. That’s what the receiver in the opening scene was doing: asking the official on his side of the field, by pointing at himself, whether he was on or off. The wing officials (the line judge and the down judge, one on each sideline) watch the receivers on their side for exactly this, and receivers routinely check with them before the snap. The official usually answers with a word or a wave, but he doesn’t have to: he may be busy counting the offense, and the alignment is the receiver’s responsibility.2

Can you see it from your couch? Sometimes. The standard broadcast camera sits high on the sideline, so compare the receiver’s helmet with the helmets of the linemen nearest him: level means on, a visible step back means off. On a replay from the end-zone camera it’s obvious. But you rarely need to judge it by eye, because the count does the work: find the tight end, and the rule tells you which receiver has to be on the line, as the next sections show.

NoteMadden vs. real life

In Madden you can’t line up illegally. You pick a formation from a menu, and the game puts every player on a legal spot. Real formations are built by eleven people walking to marks they memorised, with the play clock running, a crowd screaming and a receiver who can’t hear the quarterback. Every snap, the officials check the count and the depths, and the defense checks them too, because the alignment tells it who can catch the ball. A one-yard mistake is a flag, and a one-yard choice is a clue.

Why seven? The rule is older than the forward pass as we know it. In the early 1900s, college football’s signature plays were “mass” plays: wedges and pile-drives in which most of the offense lined up behind the ball and crashed into one spot with a running start. Players were being badly hurt and killed, and in 1905 the sport came close to being banned. The rule makers spent the next few years reshaping the game, and by 1910 they required seven men on the line of scrimmage, so that most of the offense had to start from a standstill on the line instead of building momentum behind it.3 The seven-man line was a safety rule. Its modern job is different: it guarantees that the offense always has five big, ineligible blockers in the middle, and it forces the offense to declare its receivers by where they stand.

None of this binds the defense. On a scrimmage play it may line up anyone anywhere on its own side of the neutral zone, in any number, and move around before the snap; its only alignment rule is to stay out of the neutral zone.4 That asymmetry runs through the whole book: the offense has to show its hand by rule, and the defense gets to disguise.

Illegal formation

When an alignment breaks those rules, the officials throw a flag for illegal formation: a five-yard penalty on the offense for lining up wrongly at the snap. The common versions are the ones in the next picture: fewer than seven players on the line, or a player stuck in no-man’s land.

Notice what panel 3 says about the word “illegal.” Covering your own tight end is not an illegal formation. Eight on the line is fine; the rule says at least seven. The formation is legal, but the tight end can’t catch a forward pass on that play. If the ball is thrown to him anyway, that’s a different foul, an ineligible player touching a pass, and the penalties are in Contact Rules and Penalties.

CautionCommon misconception

“An unusual-looking formation must be illegal.” Almost never. Eight men on the line is legal. Two receivers stacked one behind the other is legal. Two tackles side by side on one side of the center is legal (that’s an unbalanced line, the subject of Spread Formations). A lineman standing at the end of the line and catching a pass is legal, if he reported (below). The legality test is short: seven or more on the line, nobody in no-man’s land, no more than one man moving at the snap (the motion rules from The Pre-Snap Phase), and the right people eligible. Weird is allowed. That’s why offenses get away with so much.

Covered receivers, and why X stands on the line

A covered receiver is a player who is on the line of scrimmage but not at either end of it, because a teammate is also on the line outside him. He’s ineligible on that play, whatever his jersey number and whatever his position. In panel 3 above, the tight end was covered by the Z receiver.

Here’s the elegant part. The covered-receiver rule explains the most basic habit in receiver alignment, one you saw in The Twenty-Two without a reason: the X receiver lines up on the line, and the Z receiver lines up a yard off it.

Look again at panel 1. The formation has a tight end attached to the right side of the line. If the receiver on that side also stood on the line, he would cover the tight end, and the offense’s most versatile player would be a blocker only. So the receiver on the tight end’s side (Z) stands a yard back. That keeps Y as the right end and eligible, and as a bonus it makes Z a back, which means Z is the one who can go in motion (only an off-the-line player may move at the snap). On the other side there’s no tight end, so somebody has to be the left end, and someone has to be the seventh man on the line. That’s X’s job: he stands on the line so the formation has seven and an end on that side. The letters didn’t come first. The rule did, and the letters name the jobs it creates.

The same logic places the slot receiver (H in panel 1). If H stood on the line inside X, X would cover him. So the general rule is: on each side, only the outermost man on the line can catch a pass, and anyone inside him who wants to run a route has to stand a yard back. That’s why slot receivers, wings and backs are all “off the ball”.

ImportantWhy it exists: covering on purpose

Why would an offense choose to cover one of its own eligible receivers, as in panel 3? Three common reasons.

  • To free someone else to move. Only a back may be in motion at the snap. Putting one receiver on the line (and covering the tight end) can let a different receiver line up a yard back and go in motion.
  • To build a formation the defense hasn’t seen. A tight end who is covered is a sixth blocker. On a pass play he may not go more than a yard past the line before the ball is thrown (that would be an ineligible man downfield, the same rule that holds every lineman back).5 So he can’t really run a route, and if the defense doesn’t notice, it wastes a defender covering him.
  • To change who the defense must account for. Every eligible receiver needs a defender. Making one ineligible, and making another eligible, changes the count.

The cost is the obvious one: a covered player can’t catch the ball, and an alert defense that spots it can treat him as a blocker. Covering is a deliberate trade of one threat for another.

Formation strength: which side is “strong”?

The linebacker in the opening scene was shouting about the formation’s strength. Every formation has two sides, and teams need a shared word for which side is which, because almost everything else (who lines up where, which way the run goes, how the coverage tilts) is described relative to it.

Formation strength is the side of a formation treated as its “strong” side, decided by a rule. The side it names is the strong side; the other is the weak side. Offenses use strength to name formations (“Trips Right” means three receivers to the right, and most formation names carry a “Right” or “Left” like it), and defenses call it out loud before every snap, so all eleven defenders set to the same side. What makes this interesting is that there is more than one rule for deciding it.

Show the Python
H_ = 53.33
fig, axes = plt.subplots(3, 1, figsize=(6.6, 7.3),
                         gridspec_kw=dict(height_ratios=[24.0 / H_, 13.6 / H_, 13.6 / H_]))
# 1. tight-end strength: 21 personnel, I-formation, against a 4-3 'over' front set to it
off = i_form_21()
dfn = defense("4-3_over", "single_high", off)
fix = {"LCB": dict(d=6.5, w=-WIDE), "RCB": dict(d=6.5, w=WIDE), "SS": dict(d=8.5, w=7.5),
       "FS": dict(d=13.0, w=-1.0), "SAM": dict(d=3.5, w=6.8), "WILL": dict(d=4.5, w=-3.4),
       "MIKE": dict(d=4.5, w=0.9)}
dfn = [q.moved(**fix[q.key]) if q.key in fix else q for q in dfn]
dfn = [q.moved(label="CB") if q.pos == "CB" else q for q in dfn]
p = Play(off, dfn, los=40, to_go=None)
p.highlight("Y", color=TE_RING)
p.highlight("SAM", "SS", color=style.DEFENSE)
ax = axes[0]
fld = p.draw(ax=ax, lateral="full", window=(-8.6, 15.4), title=False)
hide_yard_numbers(ax)
shade_side(fld, p, 0.4, 26.6, style.OFFENSE)
ax.set_title("1.  Tight-end strength: the run game's definition", loc="left", fontsize=9, fontweight="bold",
             color=style.INK)
say(fld, p, 13.0, 15.5, "STRONG SIDE\n(the tight end's side)", fs=7, weight="bold", color=style.OFFENSE_DARK)
say(fld, p, 13.0, -15.5, "WEAK SIDE", fs=7, weight="bold", color=style.INK_2)
say(fld, p, 9.9, 16.5, "S and SS line up\nto the strength", fs=6.6)
say(fld, p, -4.4, -4.6, "F: fullback", fs=6.4)
# 2. tight-end strength one way, passing strength the other
off = line5() + [P("QB", "QB", GUN, 0, "Q"), P("RB", "RB", GUN, -2.2, "R"), P("Y", "TE", LINE_D, -TE_W),
                 P("X", "WR", LINE_D, 16.5), P("Z", "WR", OFF_D, 11.5), P("H", "WR", OFF_D, 7.2)]
p = Play(off, None, los=40, to_go=None)
p.highlight("Y", color=TE_RING)
ax = axes[1]
fld = p.draw(ax=ax, lateral="full", window=(-8.6, 5.0), title=False)
hide_yard_numbers(ax)
shade_side(fld, p, -26.6, -0.4, style.OFFENSE, alpha=0.07)
shade_side(fld, p, 0.4, 26.6, style.THIRD, alpha=0.10)
ax.set_title("2.  Two strengths at once: tight end one way, receivers the other", loc="left", fontsize=9,
             fontweight="bold", color=style.INK)
say(fld, p, 2.7, -13.5, "TE STRENGTH\n(the front usually sets here)", fs=7, weight="bold", color=style.OFFENSE_DARK)
say(fld, p, 2.7, 12.5, "PASSING STRENGTH: three receivers\n(the coverage usually leans here)", fs=7,
    weight="bold", color="#127a55")
# 3. field strength: balanced 2x2, ball on the left hash
off = line5() + [P("QB", "QB", GUN, 0, "Q"), P("RB", "RB", GUN, -2.2, "R"), P("X", "WR", LINE_D, -WIDE),
                 P("H", "WR", OFF_D, -SLOT), P("Y", "TE", OFF_D, SLOT), P("Z", "WR", LINE_D, WIDE)]
p = Play(off, None, los=40, ball_y="left", to_go=None)
p.highlight("Y", color=TE_RING)
ax = axes[2]
fld = p.draw(ax=ax, lateral="full", window=(-8.6, 5.0), title=False)
hide_yard_numbers(ax)
shade_side(fld, p, 0.4, HASH_FAR, style.LINE_TO_GAIN, alpha=0.12)
ax.set_title("3.  Field strength: balanced, so call it to the wide side", loc="left", fontsize=9,
             fontweight="bold", color=style.INK)
say(fld, p, 2.7, 15.0, "FIELD SIDE: 29.75 yards of room", fs=7, weight="bold", color="#9a6a00")
say(fld, p, 2.7, -12.0, "BOUNDARY: 23.6 yards", fs=7, weight="bold", color=style.INK_2)
say(fld, p, -6.6, 2.0, "ball on the left hash", fs=6.6, ha="left")
fig.tight_layout(h_pad=1.0)
plt.show()
Figure 10.3: Three ways to declare strength (all three panels at the same scale). 1: by the tight end. The offense is 21 personnel in an I-formation (a fullback, F, in front of the tailback, R) with its tight end (gold ring) attached on the right, so the right is the strong side, and a 4-3 defense sets to it: the strong-side linebacker (S, the Sam) lines up over the tight end and the strong safety (SS) moves down toward that side (E = end, T = tackle, M and W = the other linebackers, CB = cornerback, FS = free safety). 2: two strengths at once. The tight end is alone on the left, but three receivers are on the right; many defenses set the front to the tight end and lean the coverage toward the three receivers. 3: by the field. In a balanced 2x2 with no attached tight end (Y is flexed out in the slot), the ball is on the left hash, so the right side has about six more yards of room; many defenses then call the strength to the wide side.

Tight-end strength (panel 1) is the oldest rule and the one most fronts still use. The strong side is the side with the tight end, or, with two tight ends, the side with more of them (or with the tight end plus a wing). Why the tight end? Because he is a blocker standing on the line. An attached tight end adds a blocker and adds one more running lane to defend: there’s now a gap outside him that didn’t exist before (gaps are named and numbered in Run Game Language). More blockers and more gaps on one side means the run game is stronger there, so the defense puts more of its run defenders there. That’s why two defensive positions are named for it: the Sam linebacker (“strong-side linebacker”) and the strong safety both line up toward the tight end, as in panel 1. The logic only works while the tight end is attached, standing next to the tackle. Flex him out into the slot, as in panel 3, and he no longer adds a gap or a blocker at the line, so most defenses stop counting him for the front and treat him like any other receiver.

Passing strength (panel 2) counts receivers. The side with more eligible receivers lined up away from the ball, usually the side with three in a 3x1 set (a formation with three receivers on one side and one on the other, built properly in Spread Formations), is the passing strength. Coverage cares about this side, because that’s where the defenders who cover receivers are needed. Coaches number those receivers from the outside in: the outermost is #1, the next #2, the next #3. The count includes the tight end, and it includes a back once he lines up or releases to that side: he becomes the next number in the count, #3 beside two receivers or #4 beside three. A back directly behind the quarterback isn’t counted until he picks a side. You’ll see the numbers in the label map below, and they come back in every coverage chapter.

Field strength (panel 3) ignores the offense entirely. When the ball is on a hash mark, one side of the field (the field side) has about six more yards of room than the other (the boundary side). Room is where offenses like to attack, especially on the edges, so some defenses simply declare the field the strong side every snap. It’s common in college, where the hashes are much wider and the difference between the two sides is about thirteen yards rather than six, and it’s the natural tiebreaker in the NFL when the offense is balanced.

ImportantWhy it exists: one word, eleven players

Strength exists so that eleven defenders can line up correctly in two seconds without discussing it. The defense’s call names the front and the coverage relative to the strength (an “over” front shifts the defensive line toward the strength, an “under” front away from it, both built in Even Fronts; “rotate to strength” sends a safety toward it), so the same call works whichever way the offense lines up. The linebacker shouting “Strong right!” is translating the call for this snap.

The offense knows that, so it plays with the definition. It can put the tight end on one side and the receivers on the other (panel 2), forcing the defense to pick which rule wins. It can line up balanced, so the defense has to fall back on the field. And it can shift its tight end across at the last moment, so that the strength the defense declared is suddenly the weak side, which is exactly the shift you watched in The Pre-Snap Phase. Every one of those moves costs the offense something (time, a simpler play, a predictable look), and it buys a defense that is late or wrong.

Which rule do NFL defenses use? It varies by team and by call, and good defenses use more than one. A common pattern is the one in panel 2: the front sets to the tight end, the coverage to the passing strength, with the field as the tiebreaker when the formation is balanced and has no attached tight end.

Real defenses don’t say “strong right,” which is the textbook version. They use code words, and because the front and the coverage can set to different sides, many staffs keep separate words for each. Nick Saban’s defenses made “Rip” and “Liz” (right and left) famous as the call for the passing strength, and other staffs use “Roscoe” and “Louie” or a number; a call such as “Rita Sky!” can carry the strength and the coverage in two words.6 The exact words vary by staff, but the idea doesn’t: one word, both strengths, before every snap. Offenses have the matching dialect problem. In many pro-style playbooks the “Right” in a formation’s name tells the tight end where to line up; in many spread playbooks it names the side of the three receivers (Offensive Systems and Languages compares them).

You don’t need to know a defense’s rulebook to use any of this. You only need to name the candidates before the snap and then see which one the defense chose. That is the drill in “Watch for it on Sunday” below.

The receiver alphabet: X, Y, Z, H and F

Listen to a coach or an analyst for long enough and you’ll hear letters: “the X ran a slant,” “they put the Y in the slot,” “F motion.” The letters name spots in the formation, not people, so that one play call can tell every player his job regardless of who is filling the spot that day. “X runs a slant” works whether the X is a star or his backup.

Show the Python
fig, axes = plt.subplots(3, 1, figsize=(6.6, 8.1))
WIN = (-9.4, 3.6)
p = Play(pro_11(), None, los=40, to_go=None)
p.highlight("X", "Y", "Z", "H", "RB", color=ELIG)
fld = p.draw(ax=axes[0], lateral=(-20.5, 20.5), window=WIN, title=False)
hide_yard_numbers(axes[0])
depth_guide(fld, p, -19.0, 19.0)
axes[0].set_title("2x2: two receivers on each side (11 personnel, under center)", loc="left", fontsize=9,
                  fontweight="bold", color=style.INK)
say(fld, p, -3.6, -WIDE, "X  split end\non the line", fs=6.8)
say(fld, p, -5.2, -SLOT, "H  slot\noff the line", fs=6.8)
say(fld, p, -3.7, TE_W + 0.9, "Y  in-line\ntight end", fs=6.8)
say(fld, p, -5.2, WIDE, "Z  flanker\noff the line", fs=6.8)
say(fld, p, -7.2, 1.6, "R  the back", fs=6.8, ha="left")
off = line5() + [P("QB", "QB", GUN, 0, "Q"), P("RB", "RB", GUN, -2.2, "R"), P("Y", "TE", LINE_D, TE_W),
                 P("X", "WR", LINE_D, -WIDE), P("H", "WR", OFF_D, 10.2), P("Z", "WR", OFF_D, 16.2)]
p = Play(off, None, los=40, to_go=None)
p.highlight("X", "Y", "Z", "H", "RB", color=ELIG)
fld = p.draw(ax=axes[1], lateral=(-20.5, 20.5), window=WIN, title=False)
hide_yard_numbers(axes[1])
depth_guide(fld, p, -19.0, 19.0)
axes[1].set_title("3x1: three on one side, one on the other (11 personnel, shotgun)", loc="left", fontsize=9,
                  fontweight="bold", color=style.INK)
say(fld, p, -3.6, -WIDE, "X  alone on the\nweak side", fs=6.8)
say(fld, p, -3.7, TE_W + 0.6, "Y  in-line\n(#3)", fs=6.8)
say(fld, p, -5.2, 10.2, "H  slot\n(#2)", fs=6.8)
say(fld, p, -5.2, 16.4, "Z  flanker\n(#1)", fs=6.8)
say(fld, p, -7.4, -2.2, "R  beside the Q", fs=6.8)
p = Play(i_form_21(), None, los=40, to_go=None)
p.highlight("X", "Y", "Z", "FB", "RB", color=ELIG)
fld = p.draw(ax=axes[2], lateral=(-20.5, 20.5), window=WIN, title=False)
hide_yard_numbers(axes[2])
depth_guide(fld, p, -19.0, 19.0)
axes[2].set_title("I-formation: two backs (21 personnel, under center)", loc="left", fontsize=9,
                  fontweight="bold", color=style.INK)
say(fld, p, -3.6, -WIDE, "X  split end\non the line", fs=6.8)
say(fld, p, -3.7, TE_W + 0.9, "Y  in-line\ntight end", fs=6.8)
say(fld, p, -5.2, WIDE, "Z  flanker\noff the line", fs=6.8)
say(fld, p, -4.4, -1.4, "the fullback  F", fs=6.8, ha="right")
say(fld, p, -7.2, 1.6, "R  the tailback", fs=6.8, ha="left")
fig.tight_layout(h_pad=1.2)
plt.show()
Figure 10.4: The receiver alphabet on three common formations (aqua rings = eligible receivers; players behind the dashed line are a yard off the line, depth stretched). Top, 11 personnel in a 2x2 under center: X, the split end, on the line away from the tight end; H in the slot on that side; Y, the in-line tight end; Z, the flanker, a yard off the line outside him. Middle, 11 personnel in a 3x1 from the shotgun: X alone on the weak side and three receivers to the right, numbered from the outside in. (A shotgun quarterback is technically eligible too; see the quarterback section.) Bottom, 21 personnel in an I-formation: F is the fullback.

Here is the alphabet as most NFL playbooks use it. Teams differ, and the differences are noted.

  • The X receiver, or split end, lines up on the line, usually alone on the side away from the tight end. He is the end of the line on that side, which is why the older name calls him an “end” who has “split” away from the tackle. Being on the line has a cost: he can’t go in motion, and a cornerback can line up right in his face and jam him at the snap (playing press, as The Twenty-Two called it). So the X is often a big, strong receiver who can beat that contact, frequently the team’s best.
  • The Z receiver, or flanker, lines up a yard off the line, usually on the tight end’s side. Being off the ball keeps the tight end uncovered, gives Z a little more room against a jam, and makes him the receiver most often sent in motion.
  • The Y receiver is, in most NFL offenses, the main tight end. (Some spread systems use Y for a slot receiver instead, among them the Air Raid, a pass-first college system covered in Offensive Systems and Languages.)
  • H and F are the move players, letters for whoever fills the flexible spots in a given grouping. In 11 personnel, H is usually the third receiver, in the slot. In 12 personnel, H may be a second tight end. In 21 personnel, F is often the fullback (bottom panel). Some teams swap the two letters, and in some systems F is the slot and H the back. When a broadcaster says “the F,” check what body type is standing there.
  • Two more letters fill out the diagrams in this book. Many NFL playbooks call the second tight end U (others use H or F for him), and the running back gets a letter of his own, usually R, T or B depending on the system. This book uses U and R.

The older names come from the era when receivers were converted backs and ends. A “flanker” was originally a halfback flanked out wide of the formation, an innovation of the Los Angeles Rams around 1949–50, who moved halfback Elroy “Crazylegs” Hirsch out wide to catch passes and turned him into one of the great receivers of the decade.7 The “split end” was an end who split away from his tackle. The words stuck even after the jobs became full-time receiver positions.

The spot names complete the vocabulary:

  • The slot is the area between the outside receiver and the end of the line, and the slot receiver is the one who lines up there, off the line (for the reason you saw above: on the line, he’d be covered). The slot is the best place on the field to get open quickly: the receiver can break inside or outside (a “two-way go”), is hard to jam, and is usually covered by a linebacker, a safety or the slot cornerback rather than a team’s best cover man.
  • An in-line tight end is attached to the line, right next to a tackle, where he is both a sixth blocker and an eligible end.
  • An H-back is a tight end (or a fullback-sized player) who lines up in the backfield, just off the tackle’s outside hip, instead of on the line. From there he can lead the runner through a hole (block for him, a step ahead of him), block an edge defender out toward the sideline, or slip into a route. Joe Gibbs made the position famous in Washington in the 1980s; Run Game Language tells that story.
  • A wing is a player lined up a yard off the line just outside the end man, usually a tight end or an H-back. A wing is a back: eligible, free to go in motion, and well placed to block an edge defender or slip into a route.

A tight end isn’t stuck in one spot. Here are the places he can stand, each with its own name and its own message to the defense:

Show the Python
spots = [(OFF_D, -4.6, "WING\na yard off the line,\njust outside the tackle", (-6.0, -8.0)),
         (LINE_D, TE_W, "IN-LINE (attached)\non the line, next\nto the tackle", (2.9, 2.4)),
         (-4.4, 4.2, "H-BACK (offset)\nin the backfield,\noff the tackle's hip", (-7.3, 4.2)),
         (OFF_D, 9.2, "FLEXED (detached)\noff the line, a few\nyards outside", (2.9, 10.6)),
         (LINE_D, 17.5, "SPLIT WIDE\nwhere a receiver\nwould stand", (-5.6, 17.3))]
fig, ax = plt.subplots(figsize=(6.6, 3.5))
p = Play(line5() + [P("QB", "QB", UC, 0, "Q")], None, los=40, to_go=None)
fld = p.draw(ax=ax, lateral=(-14.5, 23.0), window=(-9.4, 5.4), title=False)
hide_yard_numbers(ax)
depth_guide(fld, p, -13.0, 20.5)
ppy = fld.pts_per_yard()
for d, w, txt, at in spots:
    x, y = fld.xy(*p.to_abs(d, w))
    draw_marker(ax, float(x), float(y), "off", "Y", ppy, ring=TE_RING)
    leader(fld, p, at, (d, w))
    say(fld, p, at[0], at[1], txt, fs=6.4)
plt.show()
Figure 10.5: One tight end (gold ring), five places he can stand, one at a time (each marker is a different snap; depth stretched, as before). On the left, a wing: a yard off the line, within a yard or so of the tackle’s outside shoulder. On the right, from the ball outward: in-line (attached), a blocker first but eligible; H-back (offset), in the backfield off the tackle’s hip, ready to lead, block the edge or release; flexed (detached), off the line a few yards outside, now mostly a receiver; split wide, where a receiver would stand, often hunting a mismatch against a smaller defender.

The farther a tight end stands from the tackle, the more he says “receiver” and the less he says “blocker.” That’s the same personnel-versus-formation gap you met in Personnel: the defense matched a tight end’s body, and now the offense chooses how much of a receiver to make him. (And, as you saw under strength, once he detaches from the tackle most defenses stop setting the front to him.)

CautionCommon misconception

“The X is the number-one receiver.” Often he is, because the spot suits a big, complete receiver, but the letter names the spot, not the star. Plenty of teams move their best receiver around precisely so the defense can’t find him by looking for the X. A star receiver might be the X on one snap, the Z on the next and in the slot on the third. Use the letters to read the formation, and use the roster to read the matchup.

Where the quarterback stands: under center, pistol, shotgun

The quarterback’s depth is the easiest alignment clue to see on a broadcast, because the camera is behind the offense and the quarterback is in the middle of the picture. There are three basic depths, and each one exists because it solves a different problem. (Two rarer looks complete the set: an empty backfield, with the running back split out as a receiver, and a direct snap to a running back with the quarterback split wide, the Wildcat. Both belong to Spread Formations.)

Show the Python
cases = [("Under center", UC, (TB_D, 0.0), None,
          "hands under the center;\nthe back about 7 yards\ndeep, straight behind"),
         ("Pistol", PIS, (TB_D, 0.0), "~4 yd",
          "quarterback about 4 yards\ndeep, the back 2-3 yards\nstraight behind him"),
         ("Shotgun", GUN, (GUN, 2.2), "~5 yd",
          "quarterback about 5 yards\ndeep (4-7 by team), the\nback beside him: 'offset'")]
fig, axes = plt.subplots(1, 3, figsize=(6.6, 3.5))
for ax, (name, qd, (rd, rw), qtxt, desc) in zip(axes, cases):
    p = Play(line5() + [P("QB", "QB", qd, 0, "Q"), P("RB", "RB", rd, rw, "R")], None, los=40, to_go=None)
    fld = p.draw(ax=ax, lateral=(-7.6, 7.6), window=(-9.6, 2.0), title=False)
    hide_yard_numbers(ax)
    ax.set_title(name, loc="center", fontsize=9.5, fontweight="bold", color=style.INK)
    if qtxt is None:
        leader(fld, p, (-3.4, -3.6), (-1.9, -0.6))
        say(fld, p, -3.9, -3.6, "QB's hands\nunder the C", fs=6.4)
    else:
        vdim(fld, p, -5.2, 0.0, qd, qtxt)
    ax.text(0.5, -0.03, desc, transform=ax.transAxes, ha="center", va="top", fontsize=6.8, color=style.INK,
            linespacing=1.2)
fig.tight_layout(w_pad=0.8)
fig.subplots_adjust(bottom=0.2)
plt.show()
Figure 10.6: The three quarterback depths, with typical distances (they vary by team and quarterback). Under center: the quarterback (Q) takes the ball from the center’s hands; the back (R) is about seven yards deep, straight behind him. (Q is drawn a little deeper than real life so the markers don’t overlap.) Pistol: the quarterback about four yards back, the back right behind him. Shotgun: the quarterback about five yards back, and the back usually beside him, offset to one side.

Under center

Under center means the quarterback stands directly behind the center with his hands under him and takes the snap hand to hand. It was the only way to play quarterback for most of the NFL’s history, and it is still the best way to do two things.

Run downhill. The back starts about seven yards deep, directly behind the quarterback, and takes the handoff already moving forward at speed, with the whole line in front of him and the choice of going left or right still open. Fake the run. On play-action (faking a handoff, then throwing), an under-center quarterback turns his back to the defense to make the fake, and the linebackers see exactly what a real run looks like. That’s the whole point of the fake.

What it gives up: to pass, the quarterback has to drop back three, five or seven steps while the rush comes, and during the first steps of that drop he isn’t looking at the defense at all. From under center he also can’t see much over 300-pound linemen until he gets depth.

Shotgun

In the shotgun, the quarterback stands about five yards behind the center (four to seven, depending on the team and the quarterback) and the center throws the ball back to him through the air. Now the quarterback is already at passing depth when he catches the snap. He sees the whole defense the instant the ball arrives, he can throw quickly without a drop, and he has an extra beat against the pass rush. Those advantages are why the shotgun became the NFL’s default as the league passed more: in the nflverse play-by-play it was on about one run or pass in five in 2006 and about two in three in the 2020s, a story told with the data in Classic Formations.

The shotgun is older than it looks. The San Francisco 49ers under coach Red Hickey introduced it in 1960, with the quarterback set deep to buy time against a fierce pass rush, and it beat the Colts with it before defenses caught up and the formation faded. Tom Landry’s Dallas Cowboys revived it in 1975 as a passing-down weapon for Roger Staubach, and from there it spread.8

What the shotgun gives up is mostly in the run game. The back usually lines up beside the quarterback, not behind him, so he starts moving sideways and takes the handoff going across the formation rather than straight ahead. The snap travels five yards through the air, so it can be fumbled. And the play-action fake is less convincing, because the quarterback never turns his back.

The shotgun has one rules quirk worth knowing. The under-center exception you met at the start of the chapter covers only a quarterback within a yard of the center. A shotgun quarterback is five yards deep, so he is a back like any other, and an eligible receiver.9 That’s what makes trick plays to the quarterback legal. The most famous is the “Philly Special” in Super Bowl LII (February 2018, the 2017 season): Nick Foles walked up behind the right tackle as if to change the play, the ball was snapped directly to running back Corey Clement, tight end Trey Burton took a pitch from him and threw, and Foles, by rule a back, caught the touchdown on fourth-and-goal.10

Pistol

The pistol is the compromise. The quarterback stands about four yards back, a short shotgun, and the running back lines up directly behind him, two or three yards deeper. Nevada coach Chris Ault designed it in 2005, looking for a way to keep the shotgun’s view of the defense and still give his back a straight, downhill run to either side.11 Ault’s Nevada quarterback Colin Kaepernick took it to the NFL, and by 2012 the 49ers and Washington were running pistol option plays at the pro level (Option Football tells that story).

The pistol’s quiet advantage is that it hides the direction of the run. A back offset to one side of a shotgun quarterback tells the defense something about where the handoff can go; a back straight behind the quarterback tells it nothing. That is the answer to the opening scene’s third question: a quarterback at four yards with the back behind him is in the alignment built for running downhill, and, as the numbers below show, NFL teams use it that way.

Offset backs and the sidecar

An offset back is a running back or fullback aligned to one side of the quarterback rather than directly behind him. Under center, a fullback offset a step to one side of the tailback (an “offset I,” named in Classic Formations) leans the play toward that side. In the shotgun, the back nearly always stands to one side, often right beside the quarterback, a spot coaches call the sidecar. Where he stands is a clue, never a guarantee: on many shotgun runs the handoff goes away from the back’s side, with the back crossing in front of the quarterback, and in pass protection he may block his own side or cross the quarterback’s face, depending on the protection call (Pass Protection). Different teams run different rules, which is why your prediction log should track the back’s side for the team you watch.

What the depth tells you

So much for the reasons. Here is what offenses actually do from each depth. The data is charting: people at a company called FTN watch every NFL play on film and tag what they see, including where the quarterback lined up, and nflverse publishes their tags for free. Three seasons of it:

Show the Python (load FTN charting: quarterback alignment, 2023-2025)
from gridiron.data import nfl, pbp

QB_SEASONS = [2023, 2024, 2025]
ftn = nfl().load_ftn_charting(QB_SEASONS).to_pandas()
cols = ["season", "season_type", "game_id", "play_id", "posteam", "play_type", "down", "ydstogo", "pass", "wp",
        "half_seconds_remaining"]
plays = pbp(QB_SEASONS, columns=cols)
plays = plays[(plays.season_type == "REG") & plays.play_type.isin(["pass", "run"]) & plays.down.notna()]
qb = plays.merge(ftn[["nflverse_game_id", "nflverse_play_id", "qb_location", "is_play_action"]],
                 left_on=["game_id", "play_id"], right_on=["nflverse_game_id", "nflverse_play_id"])
qb["qb_location"] = qb.qb_location.astype(str).str.strip()     # U = under center, P = pistol, S = shotgun
qb = qb[qb.qb_location.isin(["U", "P", "S"])]
# neutral: 1st and 2nd down, win probability 20-80%, outside the last two minutes of each half
neutral = qb[qb.down.isin([1, 2]) & qb.wp.between(0.2, 0.8) & (qb.half_seconds_remaining > 120)]
ORDER = ["U", "P", "S"]
NAMES = {"U": "Under center", "P": "Pistol", "S": "Shotgun"}
qb_share = neutral.qb_location.value_counts(normalize=True).reindex(ORDER) * 100
qb_pass = neutral.groupby("qb_location")["pass"].mean().reindex(ORDER) * 100
qb_pa = neutral[neutral["pass"] == 1].groupby("qb_location").is_play_action.mean().reindex(ORDER) * 100
long3 = qb[(qb.down == 3) & (qb.ydstogo >= 7)].qb_location.value_counts(normalize=True) * 100
short34 = qb[qb.down.isin([3, 4]) & (qb.ydstogo <= 1)].qb_location.value_counts(normalize=True) * 100
# who lives in the pistol: each team-season's pistol share of its runs and passes (all situations)
pistol_ts = (qb.assign(pis=qb.qb_location.eq("P")).groupby(["season", "posteam"]).pis.mean() * 100
             ).sort_values(ascending=False)
pistol_all = qb.qb_location.eq("P").mean() * 100
Show the Python
fig, axes = plt.subplots(1, 2, figsize=(6.6, 2.5), sharey=True)
colors = [style.OFFENSE_DARK, style.MUTED, style.OFFENSE]
for ax, vals, title in [(axes[0], qb_pass, "Pass rate"), (axes[1], qb_pa, "Play-action share of dropbacks")]:
    ax.set_axisbelow(True)
    ax.barh(range(3), vals.values, color=colors, height=0.62)
    for i, v in enumerate(vals.values):
        ax.text(v + 1.5, i, f"{v:.0f}%", va="center", fontsize=8, color=style.INK)
    ax.set_xlim(0, 100)
    ax.set_title(title, fontsize=9.5)
    ax.grid(axis="y", visible=False)
    ax.set_xticks([0, 25, 50, 75, 100], ["0", "25", "50", "75", "100%"], fontsize=7.5)
axes[0].set_yticks(range(3), [f"{NAMES[k]}\n({qb_share[k]:.0f}% of plays)" for k in ORDER], fontsize=8)
axes[0].invert_yaxis()
fig.tight_layout(w_pad=1.5)
plt.show()
Figure 10.7: What the quarterback’s depth tells you. Under center and pistol lean run; the shotgun leans pass; and when an under-center quarterback does drop back to pass, it is almost always after a run fake. Neutral situations (1st and 2nd down, win probability 20–80%, outside the last two minutes of each half), 2023–2025 regular seasons, FTN charting via nflverse. Left, the share of plays that were dropbacks (passes, sacks and scrambles). Right, of those dropbacks, the share with a play-action fake. The labels give each alignment’s share of these neutral plays, which is why the shotgun’s share is lower here than across all plays.

This is one of the strongest single clues in the course, much stronger than personnel alone. In neutral situations from 2023 to 2025, offenses threw on about 69% of shotgun plays but only about 34% of under-center plays and 28% of pistol plays.12 And when they did throw from under center, it was almost always a fake: about 81% of under-center dropbacks used play-action, against about 21% from the shotgun. Under center has become, in effect, the run-and-play-action alignment.

A note on the shares in the chart’s labels, because they differ from the ones earlier in the section. Across all plays the shotgun is on about two in three. On the early downs of close games, which is where the formation choice tells you the most, offenses go under center far more often, and the shotgun drops to about half. Same data, different slice.

The pistol is the surprise: it’s even more run-heavy than under center. That’s the opening scene’s answer. NFL teams use the pistol as a running alignment that keeps the quarterback off the center: the back gets his straight, downhill start, and the quarterback can still read the defense or keep the ball on an option. It’s also a niche look, about 6% of all plays, concentrated in a few offenses. Atlanta lined up in it on about a third of its plays in both 2024 and 2025, and Miami on nearly 30% in 2024. (It isn’t mainly a Ravens look: Baltimore was at about 7%, ninth in the league.)13

The situational extremes are starker still. On third-and-7 or longer, offenses were in the shotgun on about 97% of plays. On third- or fourth-and-1, they were under center about 61% of the time, because a quarterback who takes the snap hand to hand can sneak (simply lunge forward behind the center), hand off going forward, or fake it all in one motion.

None of this makes the shotgun a pass signal you can bet the house on. Thirty percent of neutral shotgun plays were runs, and the best offenses work hard to keep their tendencies honest. But the under-center share has been climbing: in the charting data it rose to about a third of all plays in 2025, up from about 27% in 2023.14 As offenses went back under center, the quarterback’s depth became a more useful clue, not a less useful one.

Splits and landmarks: how wide is wide?

A receiver’s split is how far he lines up from the ball or from the formation. You might expect playbooks to give splits in yards (“line up 12 yards from the ball”), and some do for inside players. For wide receivers, most coaches use landmarks painted on the field instead, because the field isn’t symmetric. When the ball is on a hash, a split measured in yards from the ball would put a receiver near the sideline on one side and nowhere near it on the other.

The main landmark is the numbers: the big painted yard-line numbers. On an NFL field they start 12 yards in from each sideline and are two yards tall, so their tops sit about 14 yards from the sideline.15 Receivers align “on the numbers,” “outside the numbers” (closer to the sideline) or “inside the numbers” (closer to the ball), and the numbers are in the same place on every snap, whatever the hash.

Inside receivers use different references. A slot receiver typically “splits the difference” between the end of the line and the outside receiver, and when the ball is on a hash, the other painted landmark, the far hash mark, is a common reference for the slot on the wide side. And outside receivers into the short side usually have a minimum split, a rule such as “never closer than about six yards to the sideline” or “top of the numbers”, so they keep room for a route toward the sideline. Coaches call a split wider than the landmark a plus split and a tighter one a minus split. The details vary by team; the habit of aligning to paint, not to yardage, doesn’t.

Show the Python
RIGHT_SL, LEFT_SL = HASH_FAR, -HASH_NEAR       # ball on the offense's left hash
LADDER = [("wide", RIGHT_SL - 6.5, "WIDE: outside\nthe numbers", 3.0),
          ("numbers", RIGHT_SL - 13.0, "ON THE\nNUMBERS", 3.0),
          ("reduced", 10.4, "REDUCED: inside\nthe numbers", 5.9),
          ("tight", 6.0, "TIGHT: near\nthe formation", 3.0)]
p = Play(line5() + [P("QB", "QB", UC, 0, "Q"), P("X", "WR", LINE_D, LEFT_SL + 13.0, "X")], None, los=40,
         ball_y="left", to_go=None)
fig, ax = plt.subplots(figsize=(6.6, 3.4))
fld = p.draw(ax=ax, lateral="full", window=(-8.0, 9.6), title=False)
hide_yard_numbers(ax)
numbers_band(fld, p, RIGHT_SL)
numbers_band(fld, p, LEFT_SL)
ppy = fld.pts_per_yard()
for key, w, txt, td in LADDER:
    x, y = fld.xy(*p.to_abs(OFF_D, w))
    draw_marker(ax, float(x), float(y), "off", "Z", ppy, ring=ELIG if key == "numbers" else None)
    leader(fld, p, (td - 0.6, w), (OFF_D + 0.8, w), lw=0.5)
    say(fld, p, td, w, txt, fs=6.3)
hdim(fld, p, -3.9, 0.0, RIGHT_SL - 13.0, "~17 yards from the ball")
hdim(fld, p, -3.9, 0.0, LEFT_SL + 13.0, "~11 yards")
for w in (RIGHT_SL - 13.0, LEFT_SL + 13.0):
    say(fld, p, -6.3, w, "the numbers", fs=6.3, italic=True, box=False, color=style.INK_2)
say(fld, p, 7.8, 23.4, "FIELD SIDE (wide)", fs=6.8, weight="bold", color=style.INK_2)
say(fld, p, 7.8, -13.0, "BOUNDARY (short)", fs=6.8, weight="bold", color=style.INK_2)
plt.show()
Figure 10.8: The split ladder, drawn across the whole field with the ball on the left hash (so the field side is on the offense’s right). Four places the right-side receiver (Z) might stand: wide, outside the numbers; on the numbers (the usual landmark, ringed); reduced, inside the numbers; and tight, close to the formation. The grey lanes are the painted numbers, 12 to 14 yards in from each sideline. Because the ball is on a hash, ‘on the numbers’ is about 17 yards from the ball on the field side but only about 11 on the boundary side, where X stands.

From the outside in, the ladder looks like this:

  • Wide (outside the numbers). The receiver is close to the sideline, far from everyone else, with lots of room inside him and very little outside. A cornerback can use the sideline as an extra defender. Wide splits are common on routes that break inside, toward the middle of the field (slants and the like, built in Part 4), and on plays where the offense simply wants that cornerback as far from the ball as possible.
  • On the numbers. The default. It leaves room to break either way, and it’s far enough out that the cornerback has to commit to covering him.
  • Reduced split (inside the numbers). The receiver is closer to the ball than his normal landmark. That creates room outside him, and it puts him closer to the defenders near the ball.
  • Tight (near the formation). Just a few yards outside the end of the line. Tight splits, and formations built from them, are a modern favourite, and they get a full section in Spread Formations.

Why would an offense move a receiver off his landmark? Because a split is a trade of space. A receiver who needs to run toward the sideline (an out, a corner route) needs room outside him, so he reduces his split to create it. A receiver who is going to block a linebacker or a safety on a run play (a “crack” block, taught in the run game) wants to start close to his target, so he reduces too. A receiver who will break inside, or who wants to be one-on-one with a cornerback and no safety close enough to help, widens out.

That’s why splits are tells, the kind you started collecting in How to Watch a Broadcast. A reduced split often means an outside-breaking route or a block on the inside; a very wide split often means an inside route or a one-on-one shot at the cornerback. Defensive backs are coached to read splits for exactly this reason. And offenses know they are being read, so good ones vary splits on purpose, using the same reduced split for a crack block one play and a corner route the next. As with every tell in this book, a split shifts the odds; it never settles them.

CautionCommon misconception

“A split is a distance from the ball.” Look at the ladder again. “On the numbers” is about 17 yards from the ball on the field side and about 11 on the boundary side. The receiver’s alignment rule didn’t change; the ball did. This is why a boundary receiver often looks “tight” to a viewer when he is, by his own landmark, standing exactly where he always stands. Judge a split by the landmarks, not by the gap to the ball.

Reporting eligible: when a lineman becomes a receiver

Every rule so far has been about where players stand. The last one is about who they are, and it’s the rule behind the trick plays you’ll remember.

Offensive linemen wear numbers from 50 to 79, and in The Twenty-Two you saw why: the number tells the officials, at a glance, that the player is ineligible. But the rules give the offense a way to change that for one play. Reporting eligible works like this:16

  1. Before the snap, the player wearing an ineligible number goes to the referee and tells him he is reporting as eligible.
  2. The referee tells the defense. The rule only says he “will inform the defensive team”; in practice he turns to the defense and announces it, and in the NFL he often also says it over his wireless microphone, so the stadium and the broadcast hear “Number 70 is reporting as eligible.” Until he has done that and returned to his position, the ball can’t be snapped. On TV, you’ll usually hear it; if you don’t, the giveaway is a number in the 50s, 60s or 70s standing where a tight end would.
  3. The player then lines up where an eligible player can: at the end of the line, or in the backfield. (Reporting doesn’t make an interior lineman eligible; alignment still decides that.)

The rule works in the other direction too, and that’s where the count comes in. Seven men on the line means two ends and five players between them, and all five must be ineligible. Normally those five are the linemen wearing 50–79. A player wearing an eligible number may fill one of those interior spots, but because his number no longer matches his job, he must report as ineligible.17 That direction will matter in the film room.

When a lineman reports and lines up at the end of the line, he’s an eligible tackle, or a tackle-eligible (you’ll hear both on broadcasts): usually a backup tackle playing the role of a sixth lineman, as in the jumbo grouping from the last chapter.

Show the Python
def jumbo_off(at_ref=False):
    off = line5() + [Player("E70", "OL", "off", LINE_D, -TE_W, label="70"),
                     P("Y", "TE", LINE_D, TE_W), P("U", "TE", OFF_D, WING_W + 0.3),
                     P("QB", "QB", UC, 0, "Q"), P("FB", "FB", -4.6, 0, "F"), P("RB", "RB", -7.0, 0, "R")]
    if at_ref:
        off = [q.moved(d=-9.2, w=2.6) if q.key == "E70" else q for q in off]
    return off


GL = [D("LE", "DE", 1.0, -6.7, "E"), D("DLT", "DT", 1.0, -2.4, "T"), D("NT", "NT", 1.0, 0.0, "N"),
      D("DRT", "DT", 1.0, 2.4, "T"), D("RE", "DE", 1.0, 5.9, "E"),
      D("WILL", "WILL", 3.4, -3.4), D("MIKE", "MIKE", 3.4, 1.0), D("SAM", "SAM", 2.2, 8.0),
      D("LCB", "CB", 2.7, -8.5, "CB"), D("SS", "SS", 5.0, 4.6), D("FS", "FS", 6.0, -1.6)]
REF = (-10.4, 4.6)          # the referee: about ten yards deep, on the quarterback's throwing-arm side
titles = ["1. Report to the referee", "2. The referee tells the defense", "3. The play: a run fake and a pass",
          "Same picture, no report: 70 is ineligible"]
fig, axes = plt.subplots(2, 2, figsize=(6.6, 6.9))
for i, ax in enumerate(axes.flat):
    p = Play(jumbo_off(at_ref=(i == 0)), GL if i else None, los=107.0, to_go=3)
    p.highlight("E70", color=OL_RING if i < 3 else FOUL)
    if i == 2:
        p.highlight("LE", "WILL", color=style.DEFENSE)
        p.path("RB", [(1.2, 2.6), (2.4, 4.6)], delay=0.3)
        p.path("FB", [(2.4, 3.4)], delay=0.1)
        p.path("LE", [(-0.4, 1.5), (-0.9, 2.9)], delay=0.2)
        p.path("WILL", [(-0.2, 3.0)], delay=0.3)
        p.route("E70", [(1.8, 0.0), (4.0, 0.5), (6.0, 0.7)], side=-1, delay=0.5)
        p.dropback(1.5)
        p.pass_to("E70", t=1.9)
    fld = p.draw(ax=ax, lateral=(-12.5, 12.5), window=(-12.4, 9.3), title=False)
    hide_yard_numbers(ax)
    ax.set_title(titles[i], loc="left", fontsize=8.8, fontweight="bold", color=style.INK)
    if i in (0, 1):
        referee(fld, p, *REF)
        say(fld, p, REF[0] + 0.1, REF[1] + 1.3, "referee", fs=6.4, box=False, color=style.INK_2, italic=True,
            ha="left")
    if i == 0:
        say(fld, p, -7.0, 7.4, "\"70, reporting\nas eligible\"", fs=6.6)
        say(fld, p, 2.2, -6.8, "goal line = the orange line", fs=6.2, color=style.INK_2, italic=True)
    if i == 1:
        say(fld, p, -7.0, 7.4, "announces it\nto the defense", fs=6.6)
        say(fld, p, -3.9, -7.8, "70 lines up at\nthe end of the line", fs=6.6, color=OL_RING)
    if i == 2:
        say(fld, p, 7.3, -8.2, "70 catches\nit here", fs=6.6, color=OL_RING)
        say(fld, p, -7.6, 3.6, "run fake", fs=6.4, box=False, color=style.INK_2, italic=True, ha="left")
        say(fld, p, 7.6, 6.4, "E and W chase\nthe run fake", fs=6.4, color=style.DEFENSE_DARK)
    if i == 3:
        say(fld, p, -4.2, -6.8, "no report: a blocker only;\na pass to him is a foul", fs=6.6, color=FOUL)
fig.tight_layout(h_pad=1.1, w_pad=0.6)
plt.show()
Figure 10.9: Reporting eligible, step by step, in a goal-line jumbo package (six offensive linemen, two tight ends, two backs; the sixth lineman, #70, is ringed in purple; depth stretched as before). 1: before the snap, #70 tells the referee (striped disc) that he is reporting as eligible. 2: the referee announces it to the defense, and #70 lines up at the left end of the line, where a tight end would stand. 3: the play is a run fake to the right; the defensive end over #70 (E) and the weak-side linebacker (W) chase the fake, and #70 releases up the field into the end zone for a short throw. 4: the same picture without a report: #70 is a blocker only, and a pass to him is a foul. Defense: E = end, T = tackle, N = nose tackle, W/M/S = linebackers, CB = cornerback, SS/FS = safeties.
ImportantWhy it exists: reporting

The numbering system exists so that the defense can tell who may catch the ball by looking. That only works if exceptions are announced. The reporting rule lets an offense use its linemen creatively (a sixth blocker who can also catch a pass, a tackle who sneaks out on the goal line), and in exchange it makes the offense tell the referee, and the referee tell the defense, every time. The defense still has to cover the man; it just can’t be ambushed by him.

Notice the bargain this creates. Panels 2 and 4 of the picture above look identical on the field. What changes is a sentence said to the referee, so a defense that misses the announcement has to treat every jumbo lineman as a possible receiver, which is exactly the doubt an offense wants.

How often does it happen? The official play-by-play records each time a lineman reports, so we can count the six-lineman snaps on which the extra man reported eligible:

Show the Python (six-lineman snaps and reports, 2016-2025)
SIX_SEASONS = list(range(2016, 2026))
part = nfl().load_participation(SIX_SEASONS).to_pandas()
plays10 = pbp(SIX_SEASONS, columns=["season", "season_type", "game_id", "play_id", "play_type", "down",
                                    "posteam", "pass", "desc"])
plays10 = plays10[(plays10.season_type == "REG") & plays10.play_type.isin(["pass", "run"])
                  & plays10.down.notna()]
six = plays10.merge(part[["nflverse_game_id", "play_id", "offense_personnel"]], left_on=["game_id", "play_id"],
                    right_on=["nflverse_game_id", "play_id"])


def n_linemen(s, season):
    """Offensive linemen in a personnel string. 2016-2022 (NGS) lists linemen only when there are six or
    more ('6 OL, ...'); 2023-2025 (FTN) lists every player by roster position ('1 C, 2 G, 3 T, ...')."""
    if not isinstance(s, str):
        return np.nan
    n = sum(int(k) for k, pos in re.findall(r"(\d+)\s+([A-Z]+)", s) if pos in {"OL", "C", "G", "T"})
    return 5 if (n == 0 and season <= 2022) else n


six["ol"] = [n_linemen(s, y) for s, y in zip(six.offense_personnel, six.season)]
six["reported"] = six.desc.str.contains("reported in as eligible", na=False)
jumbo = six[six.ol >= 6]
tab = jumbo.groupby("season").agg(snaps=("ol", "size"), rep=("reported", "sum"))
tab["share"] = tab.rep / tab.snaps
rep_all = plays10[plays10.desc.str.contains("reported in as eligible", na=False)]
Show the Python
fig, ax = plt.subplots(figsize=(6.5, 3.0))
x = np.array(tab.index)
ax.set_axisbelow(True)
ax.bar(x, tab.rep, color=OL_RING, width=0.68, label="a lineman reported eligible")
ax.bar(x, tab.snaps - tab.rep, bottom=tab.rep, color="#c9c3ea", width=0.68, label="no report")
for xi, s, sh in zip(x, tab.snaps, tab.share):
    ax.text(xi, s + 25, f"{sh * 100:.0f}%", ha="center", va="bottom", fontsize=7, color=style.INK_2)
ax.axvline(2022.5, color=style.BASELINE, lw=1, ls=(0, (1, 2)))
ax.text(2022.45, 1950, "source change\n(NGS → FTN)", fontsize=6.8, color=style.INK_2, ha="right", va="top")
ax.set_xticks(x, [str(v) for v in x], fontsize=7.5)
ax.tick_params(axis="y", labelsize=7.5)
ax.set_ylim(0, 2050)
ax.set_ylabel("snaps with six or more\noffensive linemen", fontsize=8)
ax.grid(axis="x", visible=False)
ax.legend(loc="upper center", fontsize=7.3, ncol=2, frameon=False, bbox_to_anchor=(0.5, -0.1))
ax.set_title("Six-lineman snaps by season", fontsize=9.5)
plt.show()
Figure 10.10: Regular-season runs and passes with six or more offensive linemen, by season (nflverse participation data), split by whether the official play description records a lineman reporting eligible. The percentage above each bar is the share with a report. Six-lineman snaps fell, unevenly, from 2016 to 2020 and jumped in 2025; the share with a report roughly doubled over the decade, from about 40% to about 80%. The participation source changes after 2022 (Next Gen Stats through 2022, FTN from 2023), marked by the dotted line.

Two things stand out. First, 2025 was a jumbo year: about 1,770 six-lineman snaps, close to double 2024, in the same season that offenses went heavier across the board (the personnel shift in Personnel). Second, the extra lineman now reports far more often. The share didn’t climb every year (it dipped in several), but it roughly doubled over the decade, from about two snaps in five in 2016 to about four in five in 2024 and 2025, the highest of the decade.18 A lineman who doesn’t report is simply a blocker. One who does is a blocker the defense can’t completely ignore, and the offense keeps the option of throwing to him. Most of the time it doesn’t: across the decade, offenses passed on only about a quarter of the snaps with a reported lineman. The report is mostly a threat, and the play is mostly a run.

Why did the habit spread, and why isn’t it 100%? The data can’t say what coaches were thinking, but the rulebook shows what the report costs and what it buys. It buys a sixth possible receiver for the defense to worry about. It costs little: a few seconds while the referee announces it, and a commitment. A reported player has to keep playing an eligible spot, reporting again before every snap, for as long as he stays in the game, until a stoppage such as a timeout, a foul or the end of a quarter (or a snap on the sideline) lets him switch back. An offense that wants him back inside as an ordinary lineman on the next snap, with no time to substitute, may not want that. And the report itself is a message: a reported lineman says “big formation, probably a run”, which, as the Lions film room below shows, an offense can use as bait.

NoteGo deeper: why college and high school are stricter

College football doesn’t let linemen report eligible at all: NCAA rules require at least five players numbered 50–79 on the line on a normal scrimmage play, and a player wearing one of those numbers is never an eligible receiver (the rules loosen only in a punt or field-goal formation).19 That’s why trick plays to linemen are an NFL thing. High school had its own scare: in 2007 Piedmont High in California built a whole offense, the “A-11,” from a kick-like formation in which every player wore an eligible number, until the national high-school rules body closed the loophole in February 2009.20 Rules makers in every league guard the same principle: the defense must be able to tell who can catch the ball.

Film room

Two film rooms, one for each direction of the reporting rule. The Patriots story is told from the official play-by-play,21 the Boston Globe’s account of the formation,22 the post-game quotes23 and the league’s rule change;24 the Lions numbers come from the nflverse data.25

NoteFilm room: New England Patriots vs. Baltimore Ravens, January 10, 2015

This was a divisional-round playoff game of the 2014 season, played in Foxborough in January 2015. Baltimore led 14–0 in the first quarter and 28–14 in the third, and New England came back both times to win 35–31. The second comeback started with a formation the Ravens had never seen.

On three snaps of a third-quarter drive, the Patriots lined up with only four offensive linemen, so one of the five spots between the ends had to go to a player wearing an eligible number, and he had to report ineligible. On the first and the last of those snaps it was running back Shane Vereen (#34), and he lined up in the slot, on the line just inside receiver Julian Edelman: covered anyway, so ineligible twice over, by his position and by his announcement. Meanwhile tight end Michael Hoomanawanui (#47) lined up at left tackle, with the regular left tackle, Nate Solder, moved inside to guard, which put Hoomanawanui at the end of the line and made him an eligible receiver (the figure after this box counts that line).

Defenders did what they’re trained to do: they watched the man wearing a back’s number in the slot, and treated the player in a lineman’s spot as a lineman. On the drive, Tom Brady hit Hoomanawanui for 16 yards and then, on a snap the official play-by-play records with “NE 34-Vereen ineligible,” for 14 more to the Baltimore 10. Ravens coach John Harbaugh came onto the field to protest that his defense hadn’t been given time to identify who was eligible, and the Ravens were penalized for unsportsmanlike conduct on the bench, half the distance to the goal. Two plays later Brady threw a touchdown to Rob Gronkowski.

Was it legal? Yes. The referee announced each report. Afterwards Brady said the Ravens might want to study the rule book; Harbaugh called it “clearly deception.” The league sided, in effect, with both: the formation had been legal, and it was not going to stay legal. For the 2015 season the NFL added a rule that a player who reports as ineligible must line up inside the formation’s core, roughly between the tackles, so an eligible-numbered player can no longer report ineligible and then split out where receivers stand. Breaking it is an illegal substitution, five yards.

What to notice: the trick didn’t break the eligibility rules; it broke the defense’s shortcut for reading them. Numbers are a convenience. The real rule is position plus announcement, and when an offense separates the two, the defense has to listen to the referee as closely as it watches the field.

Here is the Patriots’ line on that first snap, counted the way the officials count it:

Show the Python
pats = [Player("47", "TE", "off", LINE_D, -2 * OL_SPLIT, label="47"),
        Player("77", "OL", "off", LINE_D, -OL_SPLIT, label="77"),
        Player("C", "C", "off", LINE_D, 0.0, label="C"),
        Player("G", "OL", "off", LINE_D, OL_SPLIT, label=""),
        Player("T", "OL", "off", LINE_D, 2 * OL_SPLIT, label=""),
        Player("34", "RB", "off", LINE_D, 9.0, label="34"),
        Player("11", "WR", "off", LINE_D, 15.0, label="11")]
p = Play(pats, None, los=40, to_go=None)
p.highlight("47", "11", color=ELIG)
p.highlight("34", color=FOUL)
fig, ax = plt.subplots(figsize=(6.6, 2.5))
fld = p.draw(ax=ax, lateral=(-14.0, 20.0), window=(-6.6, 5.6), title=False)
hide_yard_numbers(ax)
count_line(fld, p, on_line(p))
# bracket the five players between the ends
(xa, ya), (xb, yb) = fld.xy(*p.to_abs(-2.2, -OL_SPLIT - 0.6)), fld.xy(*p.to_abs(-2.2, 9.6))
ax.plot([float(xa), float(xb)], [float(ya), float(yb)], color=FOUL, lw=1.1, zorder=6)
for w_ in (-OL_SPLIT - 0.6, 9.6):
    (xc, yc), (xd, yd) = fld.xy(*p.to_abs(-2.2, w_)), fld.xy(*p.to_abs(-1.75, w_))
    ax.plot([float(xc), float(xd)], [float(yc), float(yd)], color=FOUL, lw=1.1, zorder=6)
say(fld, p, -3.3, 4.4, "the five between the ends must be ineligible", fs=6.6, color=FOUL)
say(fld, p, -3.4, -8.6, "#47, a tight end at\nthe tackle's spot: eligible", fs=6.4)
say(fld, p, -4.8, 15.0, "#11 Edelman:\nthe right end, eligible", fs=6.4)
say(fld, p, 2.6, 9.0, "#34 Vereen: covered,\nand reported ineligible", fs=6.4, color=FOUL)
plt.show()
Figure 10.11: What the Ravens had to process: the Patriots’ line on the first of the three snaps, as the Boston Globe described it (schematic: splits are illustrative, and the four players in the backfield are left out). The two ends are eligible (aqua): #11 Edelman, and #47 Hoomanawanui, a tight end whose number says eligible, standing at the left tackle’s spot. Between them stand five ineligible players: four linemen, including #77 Solder moved in to guard, and #34 Vereen, whose number says eligible but who told the referee he was ineligible (red ring): a decoy.
NoteFilm room: Detroit Lions 2022–2024

Under offensive coordinator Ben Johnson (2022–2024), the Lions made the eligible tackle an ordinary part of the offense rather than a once-a-season gimmick (the Dallas two-point story is in Personnel). Their reported linemen did catch passes. Right tackle Penei Sewell (#58) reported eligible and caught a 9-yard pass against Minnesota on December 11, 2022, in a 34–23 win; backup tackle Dan Skipper (#70) caught a 4-yarder against the Vikings in Week 18 of 2023 and a 9-yard touchdown against Buffalo on December 15, 2024. From 2016 to 2025, Lions linemen were thrown to nine times, more than any other team’s.

But the bigger effect was on everyone else. Detroit reported a lineman on 170 runs and passes from 2022 to 2024, the third most in the league, and passed on about 35% of them, against about 24% for the league as a whole on the same kind of snap. The throws mostly went to the regular receivers, off play-action: with Skipper reported eligible on second-and-5 in that Week 18 game against Minnesota (January 7, 2024), Jared Goff hit Amon-Ra St. Brown for a 70-yard touchdown.

What to notice: a reported lineman forces the defense to account for one more possible receiver and tells it to expect a run. The Lions used the second message more than the first. When you hear “reporting as eligible,” don’t watch the lineman. Watch the safeties: if they creep toward the line to stop the run, the pass that matters is going over their heads.

Watch for it on Sunday

TipWatch for it: the strength caller
  • Name the strong side before every snap. Say it out loud: “tight end right.” If there’s no attached tight end, name the passing strength (“three receivers left”) and the field side.
  • Then watch the defense set. Against a base defense, which side did the Sam (usually the linebacker standing over the tight end) and the safety who walks down go to? In nickel there may be no Sam: watch which side the defensive tackle lines up just outside a guard (the “3-technique”, taught in Defensive Line Play) and which safety walks down (A First Look at Defense shows how to spot the packages). Did the front go one way and the coverage the other? Write down which rule this defense seems to use.
  • Count the line on unusual looks. Seven or more? Who are the two ends? Is a tight end covered? On a goal line or jumbo look, listen for “reporting as eligible.”
  • Check the quarterback’s depth. Under center or pistol: lean run, and expect a fake if it’s a pass. Shotgun: lean pass, and note the back’s side.
  • Read the outside receivers’ splits against the numbers. A receiver well inside his usual landmark: think crack block or an outside-breaking route. One far outside: think inside route or a one-on-one shot.
  • Log it. Add “strong side,” “QB depth” and “notable split” columns to your prediction log. After a half, check how often the defense set its front to the tight end, and how often the quarterback’s depth called the run or pass.

Predict the play

TipPredict the play 1: count it

First-and-10. The offense comes out in 12 personnel (two tight ends, Y and U) and lines up like this:

Show the Python
off = line5() + [P("QB", "QB", UC, 0, "Q"), P("RB", "RB", TB_D, 0, "R"), P("Y", "TE", LINE_D, TE_W),
                 P("U", "TE", OFF_D, -4.7), P("X", "WR", OFF_D, -WIDE), P("Z", "WR", OFF_D, WIDE)]
p = Play(off, None, los=40, to_go=None)
fld = p.draw(lateral=(-20.5, 20.5), window=(-9.0, 3.8), title=False)
hide_yard_numbers(plt.gca())
depth_guide(fld, p, -19.0, 19.0)
plt.show()
Figure 10.12: Drill 1. Two tight ends: Y next to the right tackle, U just outside the left tackle. X and Z are wide receivers; R is the running back and Q the quarterback, under center. The dashed line marks a yard behind the line (depth stretched, as in the chapter’s other plates).

Is this formation legal? If not, what’s the smallest fix, and who is eligible after it?

Illegal formation. Count the line: the five linemen and Y. That’s six. U is a wing (behind the dashed line, so a yard off the line), and X and Z are both a yard back, so five players are in the backfield: U, X, Z, R and Q. If the ball is snapped, it’s a five-yard flag.

The smallest fix is one step forward by one player. The usual one is X stepping up onto the line, which gives seven on the line with X as the left end and Y as the right end. Then the eligible receivers are X and Y (the two ends) and U, Z and R (the backs); the quarterback under center is not. Another legal fix is U stepping up to become an in-line tight end on the left. That also makes seven, but now U is the left end and X, still a yard back, is a back. A third fix, Z stepping up, also makes seven, but then Z covers Y, who becomes ineligible: legal, and the wrong fix if you want your tight end in the route (panel 3 of the legality figure).

This is the receiver’s question from the opening scene. It’s why X checks with the official, and why the rule about who stands on the line, more than any playbook habit, decides where X and Z line up.

TipPredict the play 2: which side is strong?

First-and-10 at midfield, ball on the right hash. The offense is in 11 personnel from the shotgun:

Show the Python
off = line5() + [P("QB", "QB", GUN, 0, "Q"), P("RB", "RB", GUN, -2.2, "R"), P("Y", "TE", LINE_D, -TE_W),
                 P("X", "WR", LINE_D, 15.5), P("Z", "WR", OFF_D, 11.0), P("H", "WR", OFF_D, 7.0)]
p = Play(off, None, los=60, ball_y="right", to_go=None)
p.draw(lateral="full", window=(-8.6, 3.8), title=False)
hide_yard_numbers(plt.gca())
plt.show()
Figure 10.13: Drill 2. The ball is on the right hash, so the offense’s left is the wide side of the field. The tight end (Y) is attached alone on the left; three receivers (H, Z, X) are on the right, X on the line. The back (R) is beside the quarterback (Q) on his left.

Name the strong side by each of the three rules. Where is a typical NFL defense likely to set its front, and which way will its coverage lean? Why might the offense have chosen this arrangement?

By the tight end: left. Y is attached on the left. By the receivers: right, where three of them stand. By the field: left, because the ball is on the right hash, so the wide side is to the offense’s left.

The likely defense: against 11 personnel it will usually be a nickel defense, and the front (the defensive line’s shade and the linebackers) sets to the tight end, on the left. With the field also on the left, there’s no argument about it. The coverage has to deal with three receivers on the right, and here’s the twist: they’re on the short side of the field, the boundary. Most defenses lean their coverage toward the three receivers anyway, often by rotating a safety down toward them or by playing a “trips check”, a coverage adjustment made only against three-receiver sides (those checks are in Disguise, Rotation and Split-Field Coverage).

Why the offense likes it: putting the receivers into the boundary asks the defense which rule it trusts, receivers or field, and either answer leaves something open. If the coverage follows the receivers into the boundary, the wide side is left to the tight end, the back and lots of grass, which is a good place to run or to throw back to Y. If the coverage stays with the field, three receivers face fewer defenders in a tight space. The formation’s job is to make the defense’s own definitions disagree.

TipPredict the play 3: read the alignment

First-and-10 at your own 45, ball on the left hash, 12 personnel. Read only what you can see before the snap:

Show the Python
off = line5() + [P("QB", "QB", UC, 0, "Q"), P("RB", "RB", TB_D, 0, "R"), P("Y", "TE", LINE_D, TE_W),
                 P("U", "TE", OFF_D, WING_W + 0.4), P("X", "WR", LINE_D, -HASH_NEAR + 7.0),
                 P("Z", "WR", OFF_D, 11.5)]
p = Play(off, None, los=55, ball_y="left", to_go=None)
fld = p.draw(lateral="full", window=(-8.6, 3.8), title=False)
hide_yard_numbers(plt.gca())
numbers_band(fld, p, HASH_FAR)
numbers_band(fld, p, -HASH_NEAR)
plt.show()
Figure 10.14: Drill 3. The ball is on the left hash (the field side is on the offense’s right; the grey lanes are the painted numbers). The quarterback is under center with the back about seven yards deep. Y is in-line on the right with U as a wing outside him. X is on the left and Z on the right.

Run or pass? If it’s a run, which way? If it’s a pass, what kind? What is Z’s split telling you?

Lean run, to the right. Three clues point the same way.

  • The quarterback is under center, with the back straight behind him. In neutral situations from 2023 to 2025, offenses passed on only about a third of under-center plays.
  • The strength is right by every rule. Both tight ends are on the right (Y in-line, U on the wing), and the ball is on the left hash, so the right is also the field side, with the most room.
  • Z is in a reduced split, well inside the numbers on the wide side, where a normal split would put him near the numbers about 17 yards from the ball. A receiver that close to the formation is often there to block: to crack down on a linebacker or a safety on a run to his side.

If it’s a pass, expect play-action. About four in five under-center dropbacks used a run fake. The classic partner of this look is the bootleg: fake the run to the right, and the quarterback rolls out to the left, away from the fake, with the reduced Z running a long crossing route back toward him and X, alone wide on the left, running a comeback (deep, then back toward the sideline) or a post behind it. Both receivers’ splits make that possible: Z starts close enough to cross the field in time, and X’s wide split leaves room in front of him. (Play-Action, Boots and Screens builds the play.)

That’s the honest answer to every alignment drill: the picture doesn’t tell you the play, it tells you the odds. Here the odds say run right, and if they’re wrong, the play-action pass was built to punish exactly the defense that believed them.

Takeaways

  • Seven on the line, and the ends are the only eligible linemen. “On the line” means level with the center; “off” means at least a yard back; anything in between is illegal. A player on the line who isn’t at an end is covered and ineligible.
  • The rules make the letters. X stands on the line so the formation has an end on his side; Z stands off it so the tight end stays eligible and Z can motion. Y is the main tight end; H and F are move players whose meaning changes by team and grouping.
  • Strength is a definition, and there are three. The tight end’s side (for the run and the front), the side with more receivers (for coverage), and the wide side of the field (the tiebreaker). Offenses win by making the definitions disagree.
  • The quarterback’s depth is a strong clue. In 2023–2025 neutral situations, about 69% of shotgun plays were passes against about 34% from under center, and about 81% of under-center dropbacks were play-action.
  • Splits are set by landmarks, not yards. The numbers stay put while the ball moves hash to hash. A reduced split often means a crack block or an outside-breaking route; a wide split, an inside route or a one-on-one shot.
  • A lineman becomes a receiver only by reporting. The referee tells the defense. The Patriots’ January 2015 trick exploited the defense’s reliance on numbers, and since 2015 a player reporting ineligible must line up inside the tackles. In 2025 six-lineman snaps nearly doubled, and the extra man reported on about 80% of them.

Connections

Builds on: The Twenty-Two (eligible receivers and jersey numbers), The Game in Fifteen Minutes (the hash marks, the field and boundary sides, and the painted numbers), The Pre-Snap Phase (set, shift and motion, and the shift that flips the strength) and Personnel (who is on the field, and the jumbo grouping).

Sets up: Classic Formations and Spread Formations build real formations from this vocabulary; A First Look at Defense shows the defense’s side of the strength call; Motion and Shifts as Weapons changes the strength and the splits after the offense lines up. Further on: Run Game Language (gaps, and why a tight end adds one), Play-Action, Boots and Screens (why under-center dropbacks are mostly fakes), Run-Pass Options (the one-yard rule for ineligible linemen downfield), Offensive Systems and Languages (how different playbooks spell the same formation) and Red Zone, Goal Line, and Short Yardage (where jumbo and the eligible tackle live).

Case studies: the Belichick Patriots and the Lions under Ben Johnson and Dan Campbell.

NoteGo deeper
  • The NFL Rulebook (Rule 5 on players and numbering, Rule 7 on the snap and the position of players): https://operations.nfl.com/the-rules/nfl-rulebook/. Short, dry, and full of surprises.
  • Football Zebras (https://www.footballzebras.com), a site run by officiating enthusiasts, explains formation and eligibility calls as they happen.
  • Pat Kirwan, Take Your Eye Off the Ball (2010; 2nd ed. 2015): the best book-length guide to reading alignment before the snap, by a former NFL coach and scout.
  • Chris B. Brown, The Art of Smart Football (2015), and his Smart Football site, on why offenses split, stack and shift receivers the way they do.

  1. NFL, Official Playing Rules, Rule 7, Section 5, Article 1 (the offense “must have seven or more players on the line”; eligible receivers on both ends; “No player may take a position that is neither clearly on, nor clearly off the line of scrimmage, unless he is directly behind the snapper”; illegal formation, loss of five yards); Rule 3, Section 18, Article 3 (an offensive player on the line must have his shoulders facing the defense’s goal line, and a non-snapper’s “helmet must break a vertical plane that passes through the beltline of the snapper”); Rule 8, Section 1, Article 5 (backs are eligible if “legally at least one yard behind the line at the snap”); Rule 3, Section 42 (a T-formation quarterback is “aligned one yard or less behind the snapper”): https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  2. Referee John Hussey, pool report after the Giants–Commanders game, Dec. 18, 2022, asked whether officials must confirm a receiver’s alignment when he checks: “Not typically, and the official could be doing other things, like counting the offense.” CBS Sports, Dec. 19, 2022: https://www.cbssports.com/nfl/news/giants-commanders-official-explains-why-terry-mclaurin-was-flagged-for-illegal-formation-on-critical-play↩︎

  3. The 1905–1910 reforms, including the requirement of seven men on the line of scrimmage (1910), are summarised in “History of American football,” Wikipedia: https://en.wikipedia.org/wiki/History_of_American_football , and told at length in John J. Miller, The Big Scrum: How Teddy Roosevelt Saved Football (2011). The 1910 rule is described in a contemporary account, “The New Football Rules,” Dartmouth Alumni Magazine, November 1910: https://archive.dartmouthalumnimagazine.com/article/1910/11/1/the-new-football-rules↩︎

  4. NFL, Official Playing Rules (2026 edition), Rule 3, Section 18, Article 2 (the neutral zone is “the space between the forward and backward points of the ball”) and Section 19 (a player is offside when “any part of his body” is in the neutral zone at the snap); Rule 7, Section 5 sets formation requirements for the offensive team only on a scrimmage down (kickoffs have their own alignment rules): https://operations.nfl.com/the-rules/nfl-rulebook/ . See also “Formation (American football),” Wikipedia (“The defense may line up anywhere on its side of the neutral zone, and players are free to move at any time before the snap”): https://en.wikipedia.org/wiki/Formation_(American_football)↩︎

  5. NFL, Official Playing Rules (2026 edition), Rule 8, Section 3, Article 1: on a scrimmage play with a legal forward pass, it is a foul “if the entire body of an ineligible offensive player, including a T-Formation Quarterback, is more than one yard beyond the line of scrimmage before the pass has been thrown” (with exceptions for a player who is blocking): https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  6. “Rip” and “Liz” as Saban’s words for right and left, with “Roscoe and Louie” or a number used by other teams: “When Nick Saban says ‘aight’, things are not ‘aight’,” Tomahawk Nation, May 21, 2020: https://www.tomahawknation.com/florida-state-football-fsu-noles/2020/5/21/21265925/fsu-nick-saban-rip-liz-pattern-matching-cover-adam-fuller-florida-state-seminoles-football-norvell ; Rip/Liz as a match-coverage family “widely attributed to Nick Saban”: FootballScoop, “Rip / Liz match and coverage variations from Indiana Wesleyan defensive coordinator JJ Clark”: https://footballscoop.com/rip-liz-match-and-coverages-variations-from-indiana-wesleyan-naia-defensive-coordinator-jj-clark . “Rita Sky!” (strength right, a safety rolling down, Cover 3) and the choice between tight-end and passing strength: Raj Dhami, The Call Sheet, June 3, 2024: https://the-call-sheet.beehiiv.com/p/004↩︎

  7. Pro Football Hall of Fame, “Elroy ‘Crazylegs’ Hirsch” (class of 1968; joined the Rams in 1949, shifted to end, and set a league record of 1,495 receiving yards in 1951): https://www.profootballhof.com/players/elroy-crazylegs-hirsch/ . Coach Clark Shaughnessy made Hirsch a permanent flanker in 1949, and the Rams’ “three-end” offense under Joe Stydahar followed in 1950; sources differ on which year to date the formation from. See the Professional Football Researchers Association’s Coffin Corner: https://mail.profootballresearchers.org/archives/Website_Files/Coffin_Corner/09-03-297.pdf↩︎

  8. Pro Football Hall of Fame, “The Shotgun Formation”: https://www.profootballhof.com/news/the-shotgun-formation (Hickey’s 49ers first used it on November 27, 1960, a 30–22 upset at Baltimore, with the quarterback about seven yards deep); “Shotgun formation,” Wikipedia (Dallas the only team to use it regularly from 1975, with Roger Staubach): https://en.wikipedia.org/wiki/Shotgun_formation↩︎

  9. NFL, Official Playing Rules (2026 edition), Rule 3, Section 42 (a T-formation quarterback is “a player aligned one yard or less behind the snapper”) and Rule 8, Section 1, Articles 5–6 (backs “legally at least one yard behind the line at the snap” are eligible; a player who takes his stance as a T-formation quarterback is ineligible unless he moves to a position at least one yard back, or to the end of the line, and is set for at least one second before the snap): https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  10. “Philly Special,” Wikipedia (Super Bowl LII, February 4, 2018: fourth-and-goal, the ball “snapped to running back Corey Clement,” Trey Burton threw to Nick Foles, who had moved up “behind right tackle Lane Johnson”): https://en.wikipedia.org/wiki/Philly_Special↩︎

  11. “Pistol formation,” Wikipedia (developed by Nevada coach Chris Ault in 2005): https://en.wikipedia.org/wiki/Pistol_formation ; see also “Ten years later, the Pistol is still firing,” Nevada Sagebrush, Sept. 15, 2015: https://archive.nevadasagebrush.com/blog/2015/09/15/ten-years-later-the-pistol-is-still-firing , and Ault’s Nevada Athletics biography: https://nevadawolfpack.com/sports/football/roster/coaches/chris-ault/232↩︎

  12. Course calculation from FTN charting data via nflverse (load_ftn_charting(), field qb_location: U = under center, P = pistol, S = shotgun), joined to nflverse play-by-play: regular-season runs and passes, 2023–2025, neutral situations (1st and 2nd down, win probability 20–80%, more than two minutes left in the half). Pass = any dropback, including sacks and scrambles; play-action from FTN’s is_play_action. The third-and-long (3rd down, 7+ to go) and short-yardage (3rd or 4th down, 1 to go) shares use all situations.↩︎

  13. Course calculation from FTN charting via nflverse (qb_location == "P"), regular-season runs and passes, all situations, 2023–2025 (asserted in the chapter’s code): pistol on about 6% of all plays; Atlanta 34.7% of its plays (2024) and 33.1% (2025), Miami 29.1% (2024); Baltimore 7.0% across the three seasons, ninth of 32 teams.↩︎

  14. Course fact sheet, from FTN charting via nflverse: under-center share of all regular-season runs and passes 31.6% (2022), 27.3% (2023), 28.8% (2024) and 33.6% (2025). In the neutral situations of the chart, under center rose from about 36% of plays in 2023 to about 44% in 2025.↩︎

  15. NFL, Official Playing Rules (2026 edition), Rule 1 (field markings: inbounds lines, the hash marks, “70 feet, 9 inches” from each sideline; yard-line numerals whose bottoms begin 12 yards in from the sideline and which are two yards tall): https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  16. NFL, Official Playing Rules, Rule 5, Section 1, Article 2 (numbering by position: offensive linemen 50–79; eligible receivers wear 0–49 or 80–89, and “all other numerals are worn by ineligible players unless they report a change in their position”) and Rule 5, Section 3, Articles 1–2 (the player “must immediately report the change in his eligibility status to the Referee, who will inform the defensive team”; he must stay in that status as long as he is continuously in the game and report again before each play, until a timeout, the end of a quarter, the two-minute warning, a foul, a replay review, a touchdown, a kick, a change of possession, or one snap out of the game): https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  17. NFL, Official Playing Rules (2026 edition), Rule 7, Section 5, Article 1(b) (“Eligible receivers must be on both ends of the line, and all of the players on the line between them must be ineligible receivers”) and Rule 5, Section 3, Article 1 (a player wearing an eligible number “is permitted to line up in the position of an ineligible pass receiver” and “must immediately report the change in his eligibility status to the Referee”); Rule 5, Section 1, Article 2 (eligible receivers wear 0–49 or 80–89): https://operations.nfl.com/the-rules/nfl-rulebook/ . Belichick’s summary after the game: “We had six eligible receivers on the field, but only five were eligible. The one who was ineligible reported that he was ineligible.” ESPN via ABC7, “NFL says Pats’ substitutions legal,” Jan. 11, 2015: https://abc7.com/post/nfl-says-pats-substitutions-legal/470636/↩︎

  18. Course calculation from nflverse participation data (offense_personnel; six or more players listed as OL, or C + G + T from 2023) joined to nflverse play-by-play, regular-season runs and passes, 2016–2025. “Reported” means the official play description contains “reported in as eligible”; about 98% of those plays are six-lineman snaps. Six-lineman snaps: 1,842 (2016), 841 (2020), 962 (2024), 1,771 (2025). Share with a report: 39% (2016), 80% (2024), 82% (2025). Offenses passed on 21–28% of plays with a report in every season. The description records the referee’s announcement; it is not a separate charting field.↩︎

  19. NCAA, Football Rules and Interpretations, Rule 7-1-4-a (at least five offensive linemen numbered 50–79; in a scrimmage-kick formation, linemen not numbered 50–79 may be “numbering exceptions,” must not be on the end of the line, and remain ineligible) and Rule 7-3 (eligibility: players numbered 50–79 are ineligible): https://www.ncaapublications.com/ ; summarised by the San Diego County Football Officials Association, https://www.sdcfoa.org/ncaa/rule-7-snapping-and-passing-the-ball/college-7-1-4a , and “Eligible receiver,” Wikipedia: https://en.wikipedia.org/wiki/Eligible_receiver↩︎

  20. “A-11 offense,” Wikipedia (created by Kurt Bryan and Steve Humphries at Piedmont High School, California, in 2007; the National Federation of State High School Associations closed the scrimmage-kick numbering exception it relied on, in February 2009): https://en.wikipedia.org/wiki/A-11_offense ; “Rules makers stifle an innovative offense,” Philadelphia Inquirer, March 16, 2009: https://www.inquirer.com/philly/sports/high_school/20090316_Rules-makers_stifle_an_innovative_offense.html↩︎

  21. Score sequence and plays from the nflverse play-by-play for game 2014_19_BAL_NE (Jan. 10, 2015): Baltimore led 14–0 and 28–14; Brady to Hoomanawanui for 16 yards (3rd quarter, 9:33) and, with “NE 34-Vereen ineligible,” for 14 yards to the BAL 10 (7:19), with an unsportsmanlike-conduct penalty on the Baltimore bench; Brady to Gronkowski, 5-yard touchdown (6:52); final score New England 35, Baltimore 31. See also “2014–15 NFL playoffs,” Wikipedia: https://en.wikipedia.org/wiki/2014%E2%80%9315_NFL_playoffs↩︎

  22. The alignment (right guard out, Nate Solder at left guard, Hoomanawanui at left tackle; Vereen ineligible on the line in the right slot with Edelman outside him) is the first snap as described by the Boston Globe, which says the tactic was used three times in the third quarter; the nflverse play-by-play records “NE 34-Vereen ineligible” on the last of them (7:19). The Globe article, Jan. 12, 2015: https://www.bostonglobe.com/sports/2015/01/12/patriots-receiver-eligibility-tactic-could-catch/eTiRiTUbQaECsPGF4e8APJ/story.html , and CBS Sports: https://www.cbssports.com/nfl/news/harbaugh-says-ne-ran-illegal-plays-tom-brady-says-study-the-rule-book . ESPN (March 25, 2015, cited below) counts three such snaps.↩︎

  23. Brady: “Maybe those guys gotta study the rule book and figure it out.” Harbaugh: “It was clearly deception,” adding that the snap came before the Ravens “could ID where the eligible receivers were at,” and “that’s why I had to go take a penalty to get their attention.” “Harbaugh Says Belichick’s Formations ‘Clearly Deception’; Brady Says ‘Figure It Out’,” CBS Boston, Jan. 10, 2015: https://www.cbsnews.com/boston/news/harbaugh-says-belichicks-formations-clearly-deception-brady-says-figure-it-out/↩︎

  24. Adopted at the league’s annual meeting in March 2015 (ESPN, “Patriots’ formation now ruled illegal substitution,” March 25, 2015: https://www.espn.com/nfl/story/_/id/12556985/new-england-patriots-formation-now-ruled-illegal-substitution). The current wording is in Rule 5, Section 3, Article 1: a player with an eligible number who reports ineligible must line up “within the normal five-player core formed by ineligible players and is not more than two players removed from the middle player of a seven-player line”; lining up outside the tackle box is illegal substitution, five yards: https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  25. Course calculation from nflverse play-by-play, regular seasons 2016–2025: passes thrown to players whose nflverse roster position is T, G or C. Detroit had nine (most in the league; Kansas City was next with six), including Penei Sewell’s 9-yard catch (game 2022_14_MIN_DET, Dec. 11, 2022, Lions 34–23), Dan Skipper’s 4-yard catch (2023_18_MIN_DET, Jan. 7, 2024, Lions 30–20) and Skipper’s 9-yard touchdown (2024_15_BUF_DET, Dec. 15, 2024, Bills 48–42). The Lions’ 170 runs and passes with a reported lineman in 2022–2024 (pass rate 35%; league as a whole 24%) and St. Brown’s 70-yard touchdown (2nd-and-5, 4th quarter, 2023_18_MIN_DET) come from the same play descriptions. Ben Johnson was Detroit’s offensive coordinator from 2022 to 2024 and became the Bears’ head coach in 2025 (course fact sheet).↩︎