The Twenty-Two

Every position on the field, what each one actually does, and why the person wearing the jersey matters less than where he stands and what he’s been told to do.

Show the Python (shared drawing helpers for this chapter)
import os

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

from gridiron import Play, Player, Field, offense, defense, style, show_animation, draw_marker

style.apply()
PDF = os.environ.get("RTG_FORMAT", "").lower() in ("pdf", "typst", "print")
GREEN = "#0f7a55"   # darker step of the aqua highlight, for text on the light field

# The book's marker tags (introduced in this chapter). One rule: no tag means two things on the same
# side of the ball. (Later chapters tag a tailback T in two-back sets: a blue circle, never an orange square.)
OFF_TAGS = {"QB": "Q", "FB": "F", "RB": "R", "Y": "Y", "U": "U", "X": "X", "Z": "Z", "H": "H",
            "LT": "LT", "LG": "LG", "C": "C", "RG": "RG", "RT": "RT"}
DEF_TAGS = {"SDE": "E", "WDE": "E", "SDT": "T", "WDT": "T", "NT": "N", "SAM": "S", "MIKE": "M",
            "WILL": "W", "LCB": "CB", "RCB": "CB", "NB": "$", "DB": "D", "FS": "FS", "SS": "SS"}


def tagged(players):
    """Apply the book's marker tags to a list of players."""
    out = []
    for q in players:
        table = OFF_TAGS if q.side == "off" else DEF_TAGS
        out.append(q.moved(label=table.get(q.key, q.label)))
    return out


def O(key, pos, d, w, label):
    return Player(key, pos, "off", d, w, label=label)


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


def P_(fld, p, d, w):
    """(d, w) in the offense's frame -> plot coordinates of this drawn field."""
    x, y = fld.xy(*p.to_abs(d, w))
    return float(x), float(y)


def say(fld, p, d, w, text, color=style.INK_2, fontsize=6.6, ha="center", weight="normal"):
    """A short on-field label at (d, w)."""
    x, y = P_(fld, p, d, w)
    fld.ax.text(x, y, text, fontsize=fontsize, color=color, ha=ha, va="center", zorder=9,
                fontweight=weight, linespacing=1.1,
                bbox=dict(boxstyle="round,pad=0.15", fc=style.SURFACE, ec="none", alpha=0.88))


def lead(fld, p, frm, to, color=style.MUTED):
    """A thin leader line from a label at `frm` to a player at `to` (both (d, w))."""
    (x0, y0), (x1, y1) = P_(fld, p, *frm), P_(fld, p, *to)
    fld.ax.plot([x0, x1], [y0, y1], color=color, lw=0.7, zorder=7.5)


def bracket(fld, p, w, d0, d1, text, color=style.INK_2, fontsize=7):
    """A vertical bracket at width w spanning depths d0..d1, labelled beside it."""
    (x0, y0), (x1, y1) = P_(fld, p, d0, w), P_(fld, p, d1, w)
    fld.ax.plot([x0 - 0.6, x0, x1, x1 - 0.6], [y0, y0, y1, y1], color=color, lw=1.0, zorder=6)
    fld.ax.text(x0 + 0.6, (y0 + y1) / 2, text, rotation=90, fontsize=fontsize, color=color,
                ha="left", va="center", zorder=9, fontweight="bold")


def ghost(fld, p, d, w, side, label, alpha=0.5, ring=None):
    """A faded marker: where a player stands on a different snap."""
    x, y = P_(fld, p, d, w)
    for a in draw_marker(fld.ax, x, y, side, label, fld.pts_per_yard()):
        a.set_alpha(alpha)
    if ring:
        fld.ax.add_patch(Circle((x, y), 0.75 * 1.55, fc="none", ec=ring, lw=1.6, ls=(0, (2, 1.5)), zorder=3.5))


def hide_numbers(fld):
    """Drop the painted yard numbers (they peek out from under wide receivers' markers)."""
    for t in list(fld.ax.texts):
        if t.get_text().isdigit() and t.get_alpha() == 0.55:
            t.remove()


def box_outline(fld, p, w0, w1, d0, d1, label, color=style.INK_2):
    """A dashed rectangle in (d, w) with a small label above its top-left corner."""
    (xa, ya), (xb, yb) = P_(fld, p, d0, w0), P_(fld, p, d1, w1)
    fld.ax.add_patch(Rectangle((min(xa, xb), min(ya, yb)), abs(xb - xa), abs(yb - ya), fc="none", ec=color,
                               lw=1.0, ls=(0, (4, 2.5)), zorder=2.5))
    say(fld, p, d1 + 0.8, w0 + 0.2, label, color=color, ha="left", weight="bold")


def carried_ball(df):
    """Simulated tracking with the ball drawn beside its carrier, so his tag stays readable."""
    df = df.copy()
    for _, g in df.groupby("frameId"):
        b, pl = g[g["side"] == "ball"], g[g["side"] != "ball"]
        if b.empty or g["time"].iloc[0] <= 0.2:
            continue
        bx, by = float(b["x"].iloc[0]), float(b["y"].iloc[0])
        dist = np.hypot(pl["x"] - bx, pl["y"] - by)
        if dist.min() < 0.4:                         # someone is carrying it: tuck it beside him,
            others = pl[dist >= 0.4]                 # on whichever side is clearest of other players
            spots = [(bx - 1.05, by), (bx, by + 1.0), (bx, by - 1.0)]
            clear = [np.hypot(others["x"] - x, others["y"] - y).min() for x, y in spots]
            x, y = spots[int(np.argmax(clear))]
            df.loc[b.index, ["x", "y"]] = [x, y]
    return df


def zoom_strip(p, times, lat=(-12.5, 12.5), window=(-8.5, 13.5), ncols=2, width_in=6.5, labels=None, ring=None):
    """A frame strip cropped to the box. (gridiron's frame_strip fits all 22 players, which makes
    run-game markers tiny.) `labels` = {time: [(d, w, text), ...]} adds a note to a panel;
    `ring` = {key: color} circles a player in every panel."""
    from gridiron import draw_frame
    df = carried_ball(p.to_tracking())
    df["_id"] = df["displayName"]
    ts = df.groupby("frameId")["time"].first()
    nrows = int(np.ceil(len(times) / ncols))
    ylo, yhi = sorted((p.ball_y - lat[0], p.ball_y - lat[1]))
    pw = width_in / ncols
    fig, axes = plt.subplots(nrows, ncols, squeeze=False,
                             figsize=(width_in, nrows * (pw * (window[1] - window[0]) / (yhi - ylo) + 0.3)))
    for ax in axes.flat[len(times):]:
        ax.axis("off")
    for ax, t in zip(axes.flat, times):
        fid = int((ts - t).abs().idxmin())
        fld = Field(ax=ax, orient="vertical", los=p.los, window=window, lateral=(ylo, yhi), to_go=p.to_go,
                    numbers=False)
        cur = df[df["frameId"] == fid]
        inside = cur[(cur["y"] > ylo - 0.5) & (cur["y"] < yhi + 0.5) & (cur["x"] < p.los + window[1] - 0.5)]
        trails = df[(df["frameId"] <= fid) & df["_id"].isin(set(inside["_id"]))]
        draw_frame(fld, inside, trails, fld.pts_per_yard())
        for k, col in (ring or {}).items():
            r = cur[cur["displayName"] == k]
            if len(r):
                x, y = fld.xy(float(r["x"].iloc[0]), float(r["y"].iloc[0]))
                ax.add_patch(Circle((float(x), float(y)), 0.75 * 1.55, fc="none", ec=col, lw=1.8, zorder=3.5))
        ax.set_title("snap" if abs(t) < 1e-6 else f"{t:+.1f}s", fontsize=9, color=style.INK_2, loc="center")
        for (d, w, text) in (labels or {}).get(t, []):
            x, y = fld.xy(*p.to_abs(d, w))
            ax.text(float(x), float(y), text, fontsize=6.6, color=style.INK, ha="center", va="center", zorder=12,
                    linespacing=1.1, bbox=dict(boxstyle="round,pad=0.18", fc=style.SURFACE, ec=style.BASELINE, lw=0.5))
    fig.tight_layout()
    return fig


# --- the chapter's two base pictures
def i_form_vs_43(te_side="right"):
    """21 personnel (I-formation: fullback and tailback stacked behind the QB) vs a base 4-3 Over."""
    off = tagged(offense("i_form"))
    if te_side == "left":   # flip the skill players, keep the linemen's names on their own sides
        off = [q if q.key in ("LT", "LG", "C", "RG", "RT") else q.mirrored() for q in off]
    off = [q.moved(d=-2.2) if q.key == "QB" else q for q in off]      # a hair deeper so Q doesn't sit on C
    dfn = tagged(defense("4-3_over", "two_high", off))
    return off, [q.moved(d=10.5) if q.key == "SS" else q for q in dfn]   # strong safety a bit closer


def eleven_vs_nickel(nb_w=-8.3):
    """11 personnel from the shotgun (tight end in-line on the right, slot receiver H on the left) vs a
    4-2-5 nickel. The strong end sets outside the attached tight end, so the edge is still fitted."""
    off = tagged(offense("gun_2x2"))
    off = [q.moved(d=-0.7, w=4.8) if q.key == "Y" else (q.moved(d=-1.5) if q.key == "Z" else q) for q in off]
    dfn = tagged(defense("nickel", "two_high", off, strength="right"))
    dfn = [q.moved(d=5.0, w=nb_w) if q.key == "NB" else q for q in dfn]
    return off, [q.moved(w=5.6) if q.key == "SDE" else q for q in dfn]

Sunday, a few minutes before kickoff. The broadcast cuts to a graphic: eleven faces, each with a name, a college and two or three letters you only half recognize. LT. RG. FS. Sam. Then the game starts and the announcer is talking faster than you can follow: “The nickel is walking down over the slot… the Mike points at the Will… the tight end is the only one in to block…” You know the quarterback. You can probably find the running back. And the other twenty players on the field are, for most viewers, a blur of helmets. This chapter fixes that. By the end, every one of those twenty-two people will have a name, a job and a reason for existing, and you’ll know the one distinction that makes the rest of the book possible: the difference between who a player is, where he stands and what he’s been told to do.

You’ll be able to…

Twenty-two players, three teams

At any moment eleven players per side are on the field. Not the same eleven, though. An NFL team is really three teams that share a roster: an offense for when it has the ball, a defense for when the other side has it, and a special teams unit for kicking plays (kickoffs, punts, field goals and extra points, which you met in The Game in Fifteen Minutes). A team carries 53 players on its roster, and up to 48 of them dress for a game.1 Between plays (never during one) the coaches can swap in whoever they like, as often as they like; how the defense gets the chance to answer the offense’s substitutions is part of Personnel.

It wasn’t always this way, and how it changed explains why NFL bodies look the way they do. For football’s first half-century most players played the whole game, offense and defense, which meant every player had to be a compromise: big enough to block, quick enough to cover, fit enough to last sixty minutes. Substitution rules were strict, so a player who came out often couldn’t go back in that quarter. The NFL loosened them during the Second World War, when rosters were thin, and made unlimited free substitution permanent in January 1950.2 Within a few years teams were using separate offensive and defensive units (“two platoons”), and then specialists for kicking. The last great player who refused to come off the field was the Eagles’ Chuck Bednarik, a center on offense and a linebacker on defense, who played almost all of the 1960 championship game and ended it by tackling the Packers’ Jim Taylor on the final play.3 The modern exception proves how rare it is: the Jaguars drafted Travis Hunter second overall in 2025 to play both receiver and cornerback, and he took 326 offensive and 162 defensive snaps before a knee injury ended his rookie season in late October.4

Once a player only had to do one job, he could be built for that job. That is the single biggest reason a modern roster contains 330-pound men who can’t run a fast 40 (the 40-yard dash, the sprint every prospect runs before the draft) and 190-pound men who can’t block anyone: each was chosen for a narrow, demanding task. We’ll measure that with real data later in the chapter.

The whole picture first

Here are all twenty-two at once, in a traditional alignment. The offense is in a formation (the way it arranges its players before the snap; formations get their own chapters, starting with Formation Rules) with two backs stacked behind the quarterback, against a classic “base” defense (four linemen, three linebackers, four defensive backs). You’ll rarely see this exact picture on a modern Sunday (we’ll see the more common one shortly), but it’s the clearest way to meet every position, because each one is in its classic spot.

How to read the field diagrams in this book. The offense moves up the page. The blue line across the field is the line of scrimmage, the imaginary line through the ball that neither side may cross before the snap (defined fully in Downs, Distance, and Field Position); the thick yellow-orange line is the line to gain, ten yards ahead here. Offensive players are blue circles, defenders are orange squares, and each wears a short tag. Offense: Q quarterback, R running back, F fullback, X, Z and H wide receivers, Y (and sometimes U) tight ends, and LT LG C RG RT the offensive linemen from left to right (diagrams often leave the linemen’s tags off). Defense: E defensive end, T defensive tackle, N nose tackle, S M W the Sam, Mike and Will linebackers, CB cornerback, $ the slot cornerback, FS and SS the free and strong safeties. Shape and color always tell the sides apart, so a blue C (center) is never an orange CB. A colored ring marks a player to watch.

Show the Python
off, dfn = i_form_vs_43()
off = [q.moved(label="") if q.key in ("LT", "LG", "RG", "RT") else q for q in off]
p = Play(off, dfn, los=40, to_go=10)
f = p.draw(lateral=(-21.5, 24.0), window=(-9.5, 16.0), title=False)
hide_numbers(f)
OC, DC = style.OFFENSE_DARK, style.DEFENSE_DARK
for d, w, t, ha in [(-2.3, -15, "wide receiver (X)", "center"), (-3.1, 15, "wide receiver (Z)", "center"),
                    (-0.7, 6.0, "tight end (Y)", "left"), (-2.2, 1.3, "quarterback", "left"),
                    (-4.5, 1.3, "fullback", "left"), (-7.0, 1.3, "running back\n(tailback)", "left"),
                    (-2.9, -2.0, "offensive line\n(LT LG C RG RT)", "right")]:
    say(f, p, d, w, t, color=OC, ha=ha)
for d, w, t, ha in [(1.0, -5.3, "defensive end", "right"), (1.0, 5.6, "defensive end", "left"),
                    (6.0, -3.0, "Will LB", "center"), (6.0, 0.8, "Mike LB", "center"), (4.0, 7.0, "Sam LB", "left"),
                    (5.6, -15, "cornerback", "center"), (5.6, 15, "cornerback", "center"),
                    (13.6, -9, "free safety", "center"), (12.1, 9, "strong safety", "center")]:
    say(f, p, d, w, t, color=DC, ha=ha)
say(f, p, 2.75, 0.85, "defensive tackles", color=DC)
lead(f, p, (2.45, 0.2), (1.6, -0.5), color=DC)
lead(f, p, (2.45, 1.5), (1.6, 2.1), color=DC)
bracket(f, p, 18.6, 0.2, 5.4, "front seven", color=DC)
bracket(f, p, 18.6, 6.2, 13.0, "secondary", color=DC)
say(f, p, 0.75, -20.0, "line of scrimmage", fontsize=6.2, ha="left")
say(f, p, 9.35, -9.5, "line to gain", fontsize=6.2)
plt.show()
Figure 5.1: All twenty-two, in a traditional matchup: an offense with two backs stacked behind the quarterback (the I-formation, with a fullback and a running back, here the deeper ‘tailback’) and one tight end, against a base 4-3 defense (four linemen, three linebackers, two cornerbacks and two safeties). The tight end is on the offense’s right, so that is the ‘strong’ side: the Sam linebacker and the strong safety line up there, the strong safety a little closer to the line than the free safety.

Take a moment with that picture before we go player by player. A few patterns are already visible:

  • The middle is crowded and heavy; the edges are open and light. Ten big men (five offensive linemen, four defensive linemen, plus a tight end) are packed into about twelve yards of width around the ball. The fastest, lightest players (receivers and cornerbacks) are out near the sidelines.
  • The offense is lined up in rows by depth. Seven players on the line of scrimmage, then the backs behind. That’s not a style choice; it’s a rule, and it decides who can catch a pass. We’ll get to it.
  • The defense is lined up in layers. Linemen within a yard of the ball, linebackers four or five yards back, cornerbacks out wide about seven yards off, safeties deepest of all. The closer a defender is to the ball, the more he’s built to stop the run; the farther away, the more he’s built to stop the pass.

The offensive line: five men who never touch the ball

Start in the middle, because every play does. The offensive line is the five players shoulder-to-shoulder around the ball: a center, two guards and two tackles. On every snap, run or pass, their job is to block. They almost never touch the ball (the center touches it once, at the snap), they’re almost never mentioned on the broadcast unless something goes wrong, and they decide more games than anyone except the quarterback.

From the inside out:

  • The center (C) is in the middle. He starts every play with the snap, handing or tossing the ball back between his legs, and then becomes a blocker like the others, often against the biggest defender on the field, with his head still coming up from the snap. Before the snap he’s usually the line’s communicator: he points at one linebacker and calls him the “Mike” for this play, and every lineman counts from that man to work out whom he blocks. That call, the Mike ID, is explained in Pass Protection.
  • The two guards (LG, RG) line up on either side of the center. They are often the most powerful linemen, built for short, violent collisions with defensive tackles in a phone booth of space. On some runs a guard pulls: he opens his hips at the snap and runs along the line, just behind it, to block on the other side, which is why guards tend to be a bit quicker than you’d expect.
  • The two tackles (LT, RT) are on the outside of the line. Tackles are usually the tallest linemen with the longest arms, because their hardest job is pass protection against the fastest defenders on the field: speed rushers coming from outside, running a wide arc toward the quarterback. A tackle has to slide backward and sideways fast enough to stay in front of a man fifty pounds lighter.

Why so big? Because blocking is mostly physics. A blocker’s job is to move a defender off a spot, or to keep the defender from moving him off his, and mass and leverage win those contests. Offensive linemen at the NFL Scouting Combine (the league’s annual pre-draft testing event) average a little over 310 pounds and about 6-foot-5.5 What they give up is speed: a typical lineman runs the 40 in a bit over 5.2 seconds, which is very fast for a 310-pound person and slower than nearly everyone else on the field.

CautionCommon misconception: the left tackle is always the best lineman

For decades the left tackle was the glamour job on the line, and for a good reason. Most quarterbacks are right-handed, so when they set up to throw they face right and their back is to the left: the blind side. Michael Lewis built The Blind Side (2006) around this, opening with Lawrence Taylor’s 1985 sack that broke Joe Theismann’s leg and tracing how that kind of threat drove left-tackle salaries up.6

That logic still exists, but it’s weaker than it was. Modern defenses move their best pass rusher to whichever side they like, often snap to snap; left-handed quarterbacks flip the whole thing; and the right tackle usually faces more run-blocking in front of the tight end. The best tackle in football can play on the right. The Lions drafted Penei Sewell seventh overall in 2021, played him at right tackle, and in April 2024 made him, at the time, the highest-paid offensive lineman in the NFL on a four-year, $112 million extension. For 2026, after their long-time left tackle Taylor Decker left, they moved Sewell to the left side,7 which tells you both halves of the story: the best tackle doesn’t have to play on the left, but when a team has to choose, the blind side still pulls. Judge a lineman by how often you don’t hear about him.

The offensive line has one more defining feature, the one that matters most to you as a viewer: these five may not catch a forward pass (more on that soon). And they wear numbers in the 50s, 60s and 70s, so you can always find them.

The quarterback

The quarterback (Q) lines up directly behind the center, either with his hands under the center’s backside to take a hand-to-hand snap (under center) or standing about five yards back to take a short toss (the shotgun). He touches the ball on almost every offensive play: he hands it off, fakes a handoff, throws it, or runs with it.

You know the quarterback already, so here’s what you might not. His most important work often happens before the snap. He usually receives the play call through the radio in his helmet and repeats it to the others (What a Play Really Is). At the line he reads the defense and may change the protection or the whole play. After the snap, on a pass, he isn’t just “finding the open man”: he’s working through a planned order of receivers, the progression (Passing Game Fundamentals), while three-hundred-pound men close in, usually releasing the ball in under three seconds. That’s why quarterbacks are the most expensive players in the sport, and why the body type is the least uniform on the field: from 5-foot-10 scramblers to 6-foot-6 pocket passers, what makes a quarterback is mostly invisible (processing speed, accuracy, nerve).

The backs: running back and fullback

Behind (or beside) the quarterback are the backs. The names are fossils, inherited from rugby, where the backs stood in rows by depth: quarter-backs nearest the scrimmage, half-backs behind them, a full-back deepest. (You’ll often read that the fractions measured literal distances, a quarter, half or all of the way back. That’s too neat; the fractions worked more like “first, second and last row.”)8 The formations changed and the names stuck, which is why today’s fullback lines up in front of today’s halfback.

Keep one more meaning of “back” in your pocket, because the rulebook uses it: any offensive player who isn’t on the line of scrimmage at the snap is a back, whatever his position. A wide receiver standing a yard off the line is, legally, a back. That turns out to decide who may catch a pass.

The running back (R; often called the tailback when he’s the deepest back), also called the halfback, is the offense’s main ball carrier on running plays. Most offenses use one at a time. He takes handoffs and finds the hole (the opening his blockers make; coaches call the spaces between linemen gaps and give them letters, as The Language of the Run Game shows), catches short passes (often as the last option, the “checkdown”), and on passing plays he frequently stays in to block a blitzing linebacker (one who rushes the quarterback instead of dropping into coverage) before slipping out. Running backs are among the shortest players on the field but heavy for their height: low center of gravity, thick legs, hard to knock over, quick enough to make a defender miss in a small space.

The fullback (F) is a bigger back, built to block. In the classic two-back offense he lines up between the quarterback and the tailback and leads into the hole ahead of the runner, hitting the first linebacker who shows up. He carries the ball occasionally (often on short-yardage plunges) and catches the odd pass.

You see fewer fullbacks than your parents did. As offenses spread out with three and four receivers, the second back was the obvious player to remove, and many NFL teams now carry no true fullback at all. The ones who remain tend to be unusually versatile, because a player who can only lead-block is hard to justify on a 53-man roster.

NoteFilm room: 49ers 2017–2025 — the fullback who outlived his position

Kyle Juszczyk signed with San Francisco in 2017, when Kyle Shanahan became head coach, and was still there in 2026, his tenth season with the team: a Harvard graduate the Ravens had drafted in the fourth round in 2013, paid like a starter at a position most teams had stopped starting. By the end of the 2025 season he’d been picked for ten straight Pro Bowls, the most ever by a fullback.9

Why keep a fullback in the age of the spread? Because Shanahan’s offense is built on the run game and on making the defense guess, and Juszczyk lets one set of eleven players line up in many different formations. In the same game he lines up as a lead-blocking fullback, as a tight end on the line, as a wing (a yard off the line just outside the tight end), or split out like a receiver, and he catches passes from all of them. The defense sees two backs on the field and has to keep its bigger, run-stopping players out there, and then the 49ers throw.

The chart below counts how often each offense had two or more backs (running backs plus fullbacks) on the field in 2025. League-wide it’s about one play in ten. The 49ers did it on nearly half their snaps.

What to notice when you watch: before the snap, find the 49ers’ number 44. If he’s behind the quarterback, ask whether he’s going to lead a run or leak out into the flat (the strip of field near the sideline within a few yards of the line); if he’s split out wide, watch which defender goes with him.

Show the Python
import re
from gridiron.data import nfl, pbp

part = nfl().load_participation([2025]).to_pandas()


def n_backs(s):
    """Running backs + fullbacks in a 2023+ personnel string such as '1 C, 1 FB, 2 G, 1 QB, 1 RB, ...'."""
    if not isinstance(s, str):
        return np.nan
    counts = {pos: int(n) for n, pos in re.findall(r"(\d+) ([A-Z]+)", s)}
    return counts.get("RB", 0) + counts.get("FB", 0)


part["backs"] = part["offense_personnel"].map(n_backs)
plays = pbp([2025], columns=["game_id", "play_id", "play_type", "season_type", "posteam"])
plays = plays[(plays.season_type == "REG") & plays.play_type.isin(["pass", "run"])]
m = plays.merge(part, left_on=["game_id", "play_id"], right_on=["nflverse_game_id", "play_id"])
m = m[m["backs"].notna()]
league = (m["backs"] >= 2).mean()
by_team = m.groupby("posteam")["backs"].apply(lambda s: (s >= 2).mean()).sort_values(ascending=False)
top = by_team.head(10)[::-1]

fig, ax = plt.subplots(figsize=(6.5, 3.2))
colors = [style.OFFENSE if t == "SF" else style.SEQUENTIAL_BLUE[1] for t in top.index]
ax.barh(top.index, top.values * 100, color=colors, height=0.66, zorder=2)
ax.axvline(league * 100, color=style.INK_2, lw=1.2, ls=(0, (3, 2)), zorder=3)
ax.text(league * 100 + 0.8, -0.95, f"league average {league:.0%}", fontsize=7.5, color=style.INK_2, va="center")
for i, v in enumerate(top.values):
    ax.text(v * 100 + 0.8, i, f"{v:.0%}", va="center", fontsize=7.5, color=style.INK)
ax.set_xlabel("share of offensive plays with 2+ running backs / fullbacks (%)", fontsize=8)
ax.set_xlim(0, 52)
ax.set_ylim(-1.5, len(top) - 0.5)
ax.grid(axis="y", visible=False)
ax.tick_params(labelsize=7.5)
plt.show()
Figure 5.2: How often each offense had two or more running backs (including fullbacks) on the field, 2025 regular season, run and pass plays. The 49ers and Dolphins, two offenses from the same Kyle Shanahan family tree (Miami’s 2025 head coach, Mike McDaniel, came from Shanahan’s staff), were far above everyone else. Data: nflverse play-by-play joined to FTN participation charting; the position labels are the players’ roster positions.

Wide receivers: X, Z and the slot

The wide receivers are the offense’s specialist pass-catchers, lined up away from the linemen: “split out” wide near the sideline, or in between, in the area called the slot. Their job on a pass is to run a route (a planned path, with timing, that you’ll learn to read in Passing Game Fundamentals), get open and catch the ball. On a run, they block the defensive backs downfield, a thankless job that turns eight-yard runs into forty-yard ones.

Coaches give each receiver spot a letter, and you’ll hear them on broadcasts:

  • The X receiver lines up on the line of scrimmage, usually on the side away from the tight end. Someone has to: the rules (coming up) want seven players on the line, and on the side without a tight end, X is the end of it. That costs him twice. Only a player off the line may be moving at the snap, so X can’t go in motion (running across the formation before the snap; see The Pre-Snap Phase), and with no cushion and no running start he’s the easiest receiver to jam at the line. So the X is often the team’s strongest outside receiver, the one who can beat that contact on his own.
  • The Z receiver lines up a yard off the line, usually on the tight end’s side. Being off the ball keeps the tight end at the end of the line, and so still eligible (you’ll see why that matters in a moment), gives Z a little room against a jam, and makes him the receiver most often sent in motion.
  • The slot receiver (often called H) lines up between the outside receiver and the linemen, usually off the line. Slot receivers work in the middle of the field against linebackers and safeties, so they tend to be quick, sure-handed and good at getting open quickly in traffic rather than outrunning a cornerback over forty yards.

Treat the letters as a dialect, not a law. In some offenses Y is a slot receiver rather than a tight end, F is the fullback in one system and the slot in another, U is often a second tight end, and many teams flip X and Z by formation. The letter names a spot, not a person, which is this chapter’s big idea in miniature. The full vocabulary, and the older names (split end for X, flanker for Z), belong to Formation Rules and the Language of Alignment.

Receivers are the closest thing football has to sprinters: around 6-foot-1 and 200 pounds on average, with a typical combine 40 of about 4.5 seconds.

The tight end: half lineman, half receiver

The tight end (Y) is the most interesting position on the offense, because he’s two positions at once. In the classic alignment he lines up on the line of scrimmage right next to a tackle, “tight” to the line, as opposed to a split end out wide. From there he can do either of two very different jobs: block a defensive end or linebacker like a sixth lineman, or release into a route like a receiver.

That’s exactly why he matters to the defense. When a wide receiver comes on the field, the defense can count on a pass threat; when an extra lineman comes on, it can count on a run. A tight end who can do both forces the defense to defend both. Bodies show it: tight ends average about 6-foot-4 and 250 pounds, between a lineman and a receiver, and run a 40 in about 4.7 seconds: slower than a receiver, and about as fast as the linebackers who usually cover him. His edge over a linebacker isn’t speed. It’s that he’s a trained route runner with a receiver’s hands and a bigger catch radius, against a run defender trying to cover.

The side the tight end lines up on is so important that it has a name, the strong side of the formation (the other is the weak side). As you’ll see in a moment, several defensive positions are named for which side of the tight end they line up on.

Travis Kelce of the Chiefs, a third-round pick in 2013, is the tight end of his era. He had seven straight 1,000-yard receiving seasons from 2016 to 2022, a record for a tight end (no other tight end had more than four 1,000-yard seasons at the time).10 Watch him and you’ll see the position’s whole point: on one snap he’s in-line blocking a defensive end, on the next he’s split out alone, and the defense has to decide who covers a 255-pounder who runs routes like a receiver.

His older brother, Jason Kelce, was the Eagles’ center from 2011 to 2023, which makes the Kelces a nice demonstration of this chapter’s theme: two brothers, one family’s genes, two completely different jobs. At the combine Travis weighed 255 pounds and Jason, an undersized center, 280. In Super Bowl LVII (February 2023) they played against each other: the Chiefs beat the Eagles 38–35.11

Skill positions, eligible receivers and who may catch a pass

Football broadcasters and fantasy players talk about the skill positions: quarterback, running back, wide receiver and tight end, the players who handle the ball. (It’s a slightly insulting name, as any offensive lineman will tell you, because blocking is a skill too.) The skill positions overlap closely with a rule that matters a great deal to the strategy of the game: not everyone on the offense is allowed to catch a forward pass.

The rules start with how the offense must line up:12

  1. At least seven players must be on the line of scrimmage at the snap. So at most four are off it, in the backfield.
  2. Of the players on the line, only the two on the ends are eligible receivers, allowed to catch a forward pass.
  3. Every back is eligible, and remember what “back” means here: anyone lined up off the line, whether he’s a running back, a receiver a yard off the ball or the quarterback. There is one exception: a quarterback who takes the snap hand-to-hand under center. A quarterback in the shotgun is just another back and may catch a pass. The Eagles won Super Bowl LII (February 2018) partly on that rule: on fourth-and-goal, quarterback Nick Foles walked up behind his right tackle as if changing the call, the snap went straight to the running back, and tight end Trey Burton threw it to the uncovered Foles for a touchdown, the “Philly Special.”13
  4. Everyone else is an ineligible receiver: the interior linemen, any player covered up inside the end of the line, and anyone wearing a number from 50 to 79 who hasn’t told the referee before the play that he’s reporting as eligible.
Show the Python
NUM = {"LT": 72, "LG": 65, "C": 60, "RG": 63, "RT": 76, "QB": 9, "RB": 23, "X": 11, "H": 84, "Y": 87, "Z": 13}


def numbered(players):
    return [q.moved(label=str(NUM[q.key]), jersey=NUM[q.key]) for q in players]


p = Play(numbered(offense("singleback")), None, los=40, to_go=None)
for k in ("X", "Y", "H", "Z", "RB"):
    p.highlight(k, color=style.THIRD)
f = p.draw(lateral=(-19.5, 19.5), window=(-9.5, 5.4), title=False)
hide_numbers(f)
say(f, p, 1.4, -15.0, "end of the line:\neligible", color=GREEN, weight="bold")
say(f, p, 1.4, 4.8, "end of the line:\neligible", color=GREEN, weight="bold")
say(f, p, 2.9, -0.4, "interior linemen\n(50-79): ineligible")
say(f, p, -3.6, -9.0, "a yard off the line,\nso a back: eligible", color=GREEN, weight="bold")
say(f, p, -3.6, 15.0, "a yard off the line,\nso a back: eligible", color=GREEN, weight="bold")
say(f, p, -7.0, 1.3, "back: eligible", color=GREEN, weight="bold", ha="left")
say(f, p, -3.4, 1.3, "QB taking the snap\nunder center: ineligible", ha="left")
plt.show()
Figure 5.3: Who may catch a forward pass. Seven players are on the line of scrimmage, four are off it. The two players on the ends of the line (11 and 87) are eligible, and so are the backs, everyone lined up off the line: the slot receiver 84 and the Z receiver 13 (each a yard off the line, so legally backs) and the running back 23 (green rings). The five interior linemen are ineligible, and so is the quarterback, because he’s taking the snap under center. The numbers are typical of each position: linemen wear 50-79.

Notice something about that picture: the X receiver and the tight end are on the line, and the Z and the slot receiver are a yard behind it. Those one-yard differences aren’t style. Every receiver’s spot is a choice about who is on the line, and so who is eligible. If the Z had stepped up onto the line outside the tight end, the tight end would no longer be at the end of the line; he’d be “covered,” and ineligible on that play. Offenses use that on purpose, and officials watch for it. (Formation Rules works through covered receivers, tackles who report as eligible, and the trick formations built on both.)

A related rule you’ll hear about on run-pass plays: ineligible linemen may not go more than one yard downfield before a forward pass is thrown. That rule, and why it shapes modern offenses, is in Run-Pass Options.

ImportantWhy it exists: eligibility

The line-up rule came first, and its target wasn’t the pass. When college football rewrote its rules in 1910, after years of deaths and injuries, it required seven offensive players on the line of scrimmage, to stop the “mass plays” in which a whole team built a moving wedge around the ball carrier: with only four men behind the line, as the rule-makers put it, “the weight of attack is necessarily reduced.”14

Once seven men had to stand on the line, the rules had to say which of them could catch the newly legal forward pass, and the answer (the two ends and the backs) gives the game its balance. The five interior men become pure blockers, so the offense can’t flood the field with receivers; and because eligibility is announced by where players stand, the defense can see who might get the ball before the snap. That’s why the line-up rules are so fussy: a one-yard step changes who can catch the ball.

Jersey numbers: the uniform as a rulebook

Here’s a viewing trick that pays off for the rest of your life: the number on the jersey tells you the position, roughly, and tells the officials who’s eligible. The NFL has assigned number ranges by position since 1973,15 and the eligibility rule leans on them: a number is something an official, or a defender, can check at a glance.

Show the Python
ERAS = [("before 2021", style.SEQUENTIAL_BLUE[1]), ("2021-22", style.SEQUENTIAL_BLUE[3]),
        ("2023 on", style.SEQUENTIAL_BLUE[5])]
RANGES = {  # position: one list of inclusive ranges per era
    "Quarterback":     [[(1, 19)], [(1, 19)], [(0, 19)]],
    "Running back":    [[(20, 49)], [(1, 49), (80, 89)], [(0, 49), (80, 89)]],
    "Wide receiver":   [[(10, 19), (80, 89)], [(1, 49), (80, 89)], [(0, 49), (80, 89)]],
    "Tight end":       [[(80, 89)], [(1, 49), (80, 89)], [(0, 49), (80, 89)]],
    "Offensive line":  [[(50, 79)], [(50, 79)], [(50, 79)]],
    "Defensive line":  [[(50, 79), (90, 99)], [(50, 79), (90, 99)], [(50, 79), (90, 99)]],
    "Linebacker":      [[(40, 59), (90, 99)], [(1, 59), (90, 99)], [(0, 59), (90, 99)]],
    "Defensive back":  [[(20, 49)], [(1, 49)], [(0, 49)]],
    "Kicker / punter": [[(1, 19)], [(1, 19)], [(0, 49), (90, 99)]],
}
fig, ax = plt.subplots(figsize=(6.5, 4.3))
ax.grid(False)
H = 0.24
ax.axvspan(49.5, 79.5, color=style.GRID, alpha=0.55, zorder=0, lw=0)
ax.text(64.5, -0.95, "50-79: ineligible on offense\nunless reported to the referee", ha="center", va="center",
        fontsize=7, color=style.INK_2)
for i, pos in enumerate(RANGES):
    for j, (era, col) in enumerate(ERAS):
        y = i + (j - 1) * (H + 0.03)
        for a, b in RANGES[pos][j]:
            ax.add_patch(Rectangle((a - 0.5, y - H / 2), b - a + 1, H, fc=col, ec=style.SURFACE, lw=0.6, zorder=2))
        if i == 0:   # name the eras right on the first row, so print readers needn't match shades
            ax.text(21.0, y, era, fontsize=6.6, color=style.INK_2, va="center", ha="left")
ax.set_yticks(range(len(RANGES)), list(RANGES), fontsize=8, color=style.INK)
ax.set_ylim(len(RANGES) - 0.45, -1.45)
ax.set_xlim(-1, 100)
ax.set_xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 99])
ax.tick_params(axis="x", labelsize=7.5)
ax.tick_params(axis="y", length=0)
ax.set_xlabel("jersey number", fontsize=8)
for x in range(10, 100, 10):
    ax.axvline(x - 0.5, color=style.GRID, lw=0.6, zorder=1)
ax.spines["left"].set_visible(False)
ax.legend(handles=[Patch(fc=c, label=e) for e, c in ERAS], loc="upper left", bbox_to_anchor=(0.0, 1.07),
          ncol=3, fontsize=7.5, frameon=False)
plt.show()
Figure 5.4: Which numbers each position may wear, before 2021, after the 2021 change and since 2023 (main ranges; under the old system some positions could use a second range when the first was full). The three bars in each row are the three eras, oldest on top, labelled on the first row. The grey band is the ineligible block: on offense, 50-79 means ‘I’m a lineman and may not catch a pass unless I report to the referee.’ The 2021 and 2023 changes opened single digits and the 0 to almost everyone except linemen, but never touched that band.

The system loosened twice recently. In 2021, owners approved a Kansas City proposal letting running backs, receivers, tight ends, linebackers and defensive backs wear single digits (the Chiefs had run short of numbers in the 20–49 range, four of which the franchise had retired).16 In 2023, a Philadelphia proposal added the number 0 for everyone except linemen and let kickers and punters wear 0–49 and 90–99, freeing up single digits for everyone else.17 So you can no longer tell a running back from a cornerback by number alone; a #1 could be either.

But look at what never changed: 50–79 is still the lineman block. On offense, a player in that range is ineligible unless he reports. When you see a broadcast cut to the referee announcing “number 70 is reporting as eligible,” the offense is about to use a sixth lineman as a blocking tight end, and the officials are telling the defense, as the rules require.

Numbers are also how you’ll identify players on the field when the broadcast doesn’t help: find the 50s–70s to locate the line, the 90s to find defensive linemen and many edge rushers, and the single digits and 20s–40s out wide to find receivers and defensive backs.

The defense: front seven and secondary

Now turn around. The defense is easiest to understand as two groups, which you saw bracketed in the first diagram:

  • The front seven: the defensive linemen and the linebackers, the defenders who line up near the ball and play the run first.
  • The secondary: the cornerbacks and safeties, the “defensive backs,” who line up farther away and are responsible first for the pass.

That split is a trade-off the defense makes on every play. Defenders near the ball are quick to the runner but poorly placed to cover a receiver thirty yards downfield; defenders far away are the reverse. A coordinator’s most basic decision is how many to put in the box (the area around the ball where runs are fought: from just outside one end of the offensive line to just outside the other, and about five to seven yards deep) and how many to keep back. The number standing in the box at the snap is the box count, which A First Look at Defense teaches you to take.

Defensive line: tackles, the nose and ends

The defensive linemen line up within a yard or so of the ball, in a three- or four-point stance (one or two hands on the ground), across from the offensive linemen. Their job is the mirror image of the offensive line’s: on runs, hold their ground, fill their gap (the space between two offensive linemen that the defense assigns them), and shed blocks to make tackles; on passes, get to the quarterback.

  • The defensive tackles (T) line up inside, across from the guards and center. They are the heaviest defenders, and in a four-man line the two of them usually split the work. One lines up shaded on the center and is built to absorb blockers, often two at once, so the linebackers behind him can run free. The other, the 3-technique, lines up on a guard’s outside shoulder and is built to shoot through a gap and rush the passer; he is usually the more valuable of the two. Either way, a good one collapses the pocket (the protected space the blockers form around the quarterback) from the inside, which is worse for a quarterback than pressure from the outside: his escape from an edge rusher is to step forward, and an inside rush takes that away.
  • The nose tackle (N) is the defensive tackle who lines up on (or nearly on) the center. In a defense with three linemen he’s the one in the middle, directly across from the center, and he’s usually the biggest man on the defense. The Eagles’ Jordan Davis, a nose tackle drafted in 2022, measured 6-foot-6 and 341 pounds at the combine and then ran the 40 in 4.78 seconds, as fast as the typical quarterback.18
  • The defensive ends (E) line up on the outside, across from or outside the offensive tackles. They’re lighter and faster than tackles, because their two jobs both happen in open space: rush the passer around the edge, and on runs, keep the ball carrier from getting outside them.

Where exactly each lineman stands has its own vocabulary. A lineman is head-up when he’s directly across from a blocker and shaded when he’s offset onto one of the blocker’s shoulders, and coaches number those spots as techniques (“the 3” is the guard’s outside shoulder; “the 1” is a shade on the center). The Language of the Run Game introduces the numbers and Defensive Line Play deepens them.

Aaron Donald, who played for the Rams from 2014 until he retired after the 2023 season, is the archetype of a defensive tackle who broke the mold. At 6-foot-1 and about 285 pounds he was an undersized 3-technique, and teams worried about it before the draft. Then he ran a 4.68 40 at the combine, a time you’d expect from a linebacker. He became the most disruptive interior lineman of his era, three times Defensive Player of the Year.19 He’s useful to remember for a simple reason: he shows what the “size” norms in this chapter are for. They’re not rules, they’re the average solutions to a physics problem, and a player who solves the problem differently (with quickness instead of mass) can be better than all of them.

Edge rushers

The edge rusher is the modern name for the defender whose main job is getting to the quarterback from outside the offensive tackle. You’ll hear “edge” constantly now, and the reason is that the old position names stopped fitting. A 4-3 defense (four linemen, three linebackers, the one in our first picture) calls its edge rushers defensive ends, and they usually put a hand on the ground. A 3-4 defense (three linemen, four linebackers) uses its two outside linebackers as the edge rushers, usually standing up, and its two inside linebackers split the Mike’s job between them. Same job, two names, so the league’s vocabulary converged on “edge.” Even the Scouting Combine created an “EDGE” workout group in 2018 instead of choosing between DE and OLB.20

Edge rushers are among the most valuable players in football, because pass pressure wrecks offenses and the edge is where most of it comes from. T.J. Watt of the Steelers is the model: technically an outside linebacker in a 3-4, 6-foot-4 and 252 pounds at his combine, he tied the single-season sack record with 22.5 in 2021, and that record stood until Myles Garrett, a 4-3 defensive end in Cleveland, got to 23 in 2025.21 How edge rushers win (and why “pressures” matter more than sacks) is the subject of The Pass Rush.

Linebackers: Mike, Will and Sam

The linebackers line up behind the defensive line, usually four or five yards off the ball: the “second level” of the defense. They are the defense’s all-purpose players. On a run, they read the play and fill the gap the runner is heading for; on a pass, they drop into coverage on the short middle of the field or cover a back or tight end; and sometimes they blitz, rushing the quarterback themselves. Their bodies are a compromise between the size to take on a fullback and the speed to cover a running back.

In a defense with three linebackers, each has a one-letter name, and the classic rule is that the letters come from where they line up relative to the offense’s tight end:

  • The Mike linebacker (M) is the middle linebacker. He’s usually the defense’s signal-caller, often the one with the radio in his helmet (the “green dot,” which What a Play Really Is explains), and he’s the player you see pointing and shouting adjustments before the snap. The 49ers’ Fred Warner, a third-round pick in 2018, is the modern ideal: a Mike who runs and covers like a safety.
  • The Sam linebacker (S) is the strong-side linebacker: he lines up on the tight end’s side, and if the tight end moves to the other side before the snap, the Sam goes with him. He’s usually the biggest and most physical of the three, because he has to take on a tight end’s block. He’s also usually the first linebacker to leave the field when the offense spreads out, as you’ll see in a moment.
  • The Will linebacker (W) is the weak-side linebacker, away from the tight end. With fewer blockers on his side, he’s often the hardest linebacker for the offense to reach: someone has to climb off the line or come from the backfield to get to him, and plays to his side often have to account for him specially. So the Will tends to be the fastest of the three, a chaser who runs plays down from behind.

What if there’s no tight end, or two? Then the defense needs another rule for “strong,” and teams differ: the side with more receivers (the passing strength), the wide side of the field, or the side the running back is on. Often the Mike simply declares the strength with a call before the snap, and everyone, the strong safety included, sets to it. Formation Rules lays out the options as formation strength; for now, the tight end rule gets you through most first-and-10 snaps.

These letters are a dialect too: a 3-4 team may call its weak-side edge the “Jack” and its second inside linebacker the “Mo,” a slot defender may be the “Star,” and a sixth defensive back the “Money” (this book’s $ tag for the slot corner is the same pun). Linebackers’ reads and keys are the subject of Linebackers.

NoteMadden vs. real life

In a video game, a position is a slot on a depth chart: put a player at “LB” and the game stands him where linebackers go, every snap. Real defenses name spots, and then decide how players fill them. Some keep the same player at Sam and flip him to the strength wherever it is. Others play field and boundary: one linebacker always takes the wide side of the field and another the short side, so a player stays put while his letter changes with the formation. Either way, learn the positions as jobs defined relative to the offense, not as fixed spots on your screen.

The secondary: cornerbacks, the slot corner and safeties

The defensive backs are the lightest, fastest players on the defense, and the ones who stand between a receiver and the end zone.

  • The cornerbacks (CB) line up across from the outside wide receivers, near the sidelines, anywhere from right in the receiver’s face (“press”) to eight or nine yards off. Their job is pass coverage, either following a receiver wherever he goes (man coverage) or guarding an area of the field (zone). Corners are smaller than receivers on average and just as fast: the typical combine 40 is about 4.5 seconds, tied with receivers for the fastest on the field. The hardest thing in their job is that they must react: the receiver knows where he’s going and the corner has to mirror him running backward or sideways.
  • The slot cornerback ($), also called the nickel back, covers the slot receiver. He lines up inside, between the outside cornerback and the box, so he’s part cornerback and part linebacker: he has to cover quick receivers in the middle of the field and tackle runners and blitz off the edge. We’ll see where he comes from below.
  • The safeties line up deepest, usually 10 to 15 yards off the ball: the last line of defense against long passes and long runs. Most defenses have two:
    • the free safety (FS), who usually plays deeper and in the middle, “free” of responsibility for a particular receiver so that he can go wherever the ball goes; and
    • the strong safety (SS), who lines up on the strong side, often a bit closer to the line, and helps more against the run.

How many safeties stay deep before the snap (one or two) is the most important single clue you’ll learn to read on defense. A First Look at Defense starts that habit, and Coverage Fundamentals builds it out.

The picture you’ll actually see: three receivers vs. five defensive backs

The first diagram was the textbook. Here’s the more common picture on a modern Sunday: the offense with one running back, one tight end and three wide receivers, against a defense that has taken a linebacker off and put a fifth defensive back on.

Show the Python
off, dfn = eleven_vs_nickel()
p = Play(off, dfn, los=40, to_go=10)
p.highlight("H", color=style.THIRD)
p.highlight("NB", color=style.THIRD)
f = p.draw(lateral=(-21.5, 21.5), window=(-8.5, 15.5), title=False)
hide_numbers(f)
ghost(f, p, 4.0, 6.6, "def", "S", alpha=0.35)
say(f, p, -3.3, -9.0, "slot receiver (H)", color=style.OFFENSE_DARK)
say(f, p, 7.9, -8.3, "slot corner ($)\na.k.a. nickel back", color=style.DEFENSE_DARK)
say(f, p, 4.0, 8.0, "the Sam LB\nwho left", color=style.MUTED, ha="left")
say(f, p, -2.4, 5.6, "tight end (Y)", color=style.OFFENSE_DARK, ha="left")
say(f, p, -5.0, 1.4, "QB in the\nshotgun", color=style.OFFENSE_DARK, ha="left")
plt.show()
Figure 5.5: The modern default. The offense has replaced its fullback with a third wide receiver, the slot receiver H (on the left here), and moved the quarterback back into the shotgun. The defense answers by taking off a linebacker, the Sam (ghosted on the right, where he’d have lined up over the tight end), and putting on a slot cornerback ($) who lines up over H. The two remaining linebackers slide to cover the gaps, and the defensive end on the right sets outside the tight end so the edge is still defended. Both rings mark the matchup the swap creates: a slot receiver against a slot corner.

Two substitutions happened there, one on each side, and they’re connected. The offense took off its fullback and put on a third receiver. If the defense stayed in its base personnel, somebody would have to line up over that receiver in the slot, and the only candidates are linebackers: a 235-pound run defender against a quick, 190-pound receiver in open space, a matchup offenses hunt for. So the defense takes off a linebacker and puts on a fifth defensive back, the slot corner, who can run with him wherever the slot is. The linebacker who leaves is usually the Sam, the biggest and least coverage-minded of the three, even when the slot is on the other side: the remaining two shift over, and the slot corner goes to the slot. Notice the picture also keeps a defender outside the tight end. With the Sam gone, the defensive end slides out over him, so a run around the right end still has someone to beat.

That fifth defensive back has a name you’ll hear in every broadcast: the defense is in nickel (five defensive backs: a nickel is five cents). On obvious passing downs some defenses go further and play a sixth defensive back, dime (two nickels). The offensive grouping has a name too: one back and one tight end is 11 personnel. Both systems of shorthand get full chapters: Personnel for the offense’s numbers and A First Look at Defense for the defense’s packages (“base,” nickel, dime).

How common is this picture? In 2025, about three NFL plays in five had exactly one back and one tight end on the field, by far the most common grouping,22 and defenses were in their “base” package (with three linebackers) on under 30% of plays.23 In practical terms the slot cornerback is a starter on every defense, even though he isn’t one of the eleven on the “base” diagram. Not every fifth defensive back is a cornerback, though: some defenses use a third safety instead, a bigger player who can also fit against the run (the big nickel).

Notice also what the defense calls its front now: four linemen and two linebackers make six, not seven. “Front seven” is a habit of language from the base-defense era. In nickel, the seventh man in the front on run downs is whoever the defense brings near the ball, and the choice tells you what it fears. A safety walking down into the box before the snap says “we expect a run, and we’ll pay for it in pass coverage”; both safeties staying deep with only six in the box says “pass first, and we dare you to run.”

Special teams: the specialists

The third team gets less airtime but about one snap in six,24 and it has positions that exist nowhere else.

Show the Python
def fg_unit():
    pl = [O("LS", "C", -0.7, 0.0, "LS")]
    for k, w in [("LG", -1.6), ("RG", 1.6), ("LT", -3.2), ("RT", 3.2)]:
        pl.append(O(k, "OL", -0.7, w, ""))
    pl += [O("LE", "TE", -0.7, -4.8, ""), O("RE", "TE", -0.7, 4.8, ""),
           O("LW", "TE", -1.5, -6.0, ""), O("RW", "TE", -1.5, 6.0, ""),
           O("HOLD", "P", -7.0, -0.4, "Ho"), O("K", "K", -9.5, -2.2, "K")]
    return pl


rushers = [D("RL", "DE", 1.0, -8.4, ""), D("RR", "DE", 1.0, 8.4, "")]
p = Play(fg_unit(), rushers, los=40, to_go=None)
p.highlight("LS", "HOLD", "K")
p.rush("RL", pts=[(-1.4, 0.8)])
p.rush("RR", pts=[(-1.4, -0.8)])
p.block("LW", pts=[(0.1, -0.5)])
p.block("RW", pts=[(0.1, 0.5)])
f = p.draw(lateral=(-16.5, 16.5), window=(-12.5, 4.5), title=False)
hide_numbers(f)
f.ax.add_patch(FancyArrowPatch(P_(f, p, 0.0, 0.0), P_(f, p, -6.6, -0.35), arrowstyle="-|>", mutation_scale=9,
                               color=style.BALL, lw=1.2, ls=(0, (2, 2)), zorder=7))
say(f, p, 1.5, 0.0, "long snapper (LS)", color=style.OFFENSE_DARK)
say(f, p, -7.0, 1.6, "holder (Ho), ~7 yards back:\ncatches and spots the ball",
    color=style.OFFENSE_DARK, ha="left")
say(f, p, -9.5, -3.6, "kicker (K)", color=style.OFFENSE_DARK, ha="right")
say(f, p, -3.0, -6.0, "wing", color=style.OFFENSE_DARK)
say(f, p, -3.0, 6.0, "wing", color=style.OFFENSE_DARK)
say(f, p, 2.6, -8.4, "edge rusher", color=style.DEFENSE_DARK)
say(f, p, 2.6, 8.4, "edge rusher", color=style.DEFENSE_DARK)
plt.show()
Figure 5.6: A field-goal unit. Seven men on the line protect the kick: the long snapper in the middle, linemen beside him, and an end at each end, with two ‘wings’ set just behind and outside the ends. The wings exist for the rushers coming hardest, off the edges (orange). The long snapper fires the ball about seven yards back to the holder (Ho; the dashed brown line), who spots it for the kicker. The kicker stands a couple of yards to one side so he can swing into the ball at an angle, soccer style. The whole operation, snap to kick, takes about 1.3 seconds.
  • The kicker (K) kicks field goals, extra points and (on most teams) kickoffs. NFL kickers are specialists in the purest sense: they practice one motion and are judged on it in front of 70,000 people.
  • The punter (P) punts the ball away on fourth down, standing about 15 yards behind the line so that rushers can’t reach him before he kicks. Punters are judged on distance and hang time (how long the ball stays in the air), because hang time gives the coverage team time to get downfield.
  • The long snapper (LS) snaps the ball on punts, field goals and extra points. Why not just use the starting center? Because it’s a different skill. A center hands the ball up or tosses it five yards to a quarterback who’s waiting for it; a long snapper, head down and looking backward between his legs, has to fire a tight spiral seven yards to a holder or fifteen to a punter in well under a second, with the laces landing where they should, and then block. On a field goal, the snap, the hold and the kick together are drilled to take about 1.3 seconds.25 A bad snap is the most catastrophic error in the kicking game, which is why every team keeps a dedicated one, and the rules protect him: on a punt or kick, no defender within a yard of the line may line up directly over the snapper.26
  • The holder catches the snap on a field goal or extra point and sets the ball on its point for the kicker. On most NFL teams the holder is the punter: he has the best hands for a long snap among the specialists, and he’s on the field anyway.
  • The returner catches kickoffs and punts and tries to run them back. Returners are usually fast backs, receivers or defensive backs.
  • The gunner is the punt team’s missile: one of two players split out wide whose only job is to sprint downfield and tackle the returner. The return team answers by putting one or two blockers on each gunner, called vices or jammers, to hold him up at the line (Field Goals, Extra Points, and the Punting Game has the whole unit).

The kickoff is the third kicking play, and the one that has changed most. Since 2024 the NFL has used a “dynamic kickoff” that looks nothing like the old sprint downfield (the second picture below); nobody but the kicker and the returners may move until the ball lands.27 The rules were tweaked again for 2025 and 2026, so they get their own chapter, Kickoffs, Returns, and the Dynamic Kickoff.

Show the Python
def punt_unit():
    pl = [O("LS", "C", -0.7, 0.0, "LS")]
    for k, w in [("LG", -1.7), ("RG", 1.7), ("LT", -3.4), ("RT", 3.4)]:
        pl.append(O(k, "OL", -0.7, w, ""))
    pl += [O("LW", "TE", -1.6, -4.6, ""), O("RW", "TE", -1.6, 4.6, ""),
           O("PP", "FB", -6.0, 1.0, "PP"), O("P", "P", -14.5, 0.0, "P"),
           O("GL", "WR", -0.7, -19.0, "G"), O("GR", "WR", -0.7, 19.0, "G")]
    return pl


def return_unit():
    pl = [D(f"R{i}", "DL", 1.0, w, "") for i, w in enumerate([-5.2, -2.6, -0.8, 0.8, 2.6, 5.2])]
    pl += [D("VL1", "CB", 1.0, -17.6, "V"), D("VL2", "CB", 1.0, -20.4, "V"),
           D("VR1", "CB", 1.0, 17.6, "V"), D("VR2", "CB", 1.0, 20.4, "V"),
           D("RET", "DB", 42.0, 0.0, "PR")]
    return pl


q = Play(punt_unit(), return_unit(), los=30, to_go=None)
q.highlight("LS", "PP", "P", "GL", "GR")
q.highlight("RET", color=style.DEFENSE_DARK)
q.route("GL", [(10.0, -17.5), (35.0, -4.5)], absolute=True)
q.route("GR", [(10.0, 17.5), (35.0, 4.5)], absolute=True)
fq = q.draw(orient="horizontal", lateral=(-24.5, 24.5), window=(-21.0, 46.0), title=False)
fq.ax.add_patch(FancyArrowPatch(P_(fq, q, -14.0, 0.0), P_(fq, q, 41.2, 0.0), arrowstyle="-|>", mutation_scale=9,
                                color=style.BALL, lw=1.3, ls=(0, (2, 2)), zorder=7,
                                connectionstyle="arc3,rad=-0.12"))
OC, DC = style.OFFENSE_DARK, style.DEFENSE_DARK
say(fq, q, -14.5, 3.0, "punter (P)\n~15 yd deep", color=OC)
say(fq, q, -8.0, 7.5, "personal\nprotector (PP)", color=OC)
lead(fq, q, (-7.0, 6.2), (-6.0, 1.0))
say(fq, q, -11.5, -4.4, "long snapper (LS)", color=OC)
lead(fq, q, (-7.2, -3.8), (-1.6, -0.2))
say(fq, q, -0.7, -22.6, "gunner", color=OC)
say(fq, q, -0.7, 22.6, "gunner", color=OC)
say(fq, q, 6.0, -21.0, "vices\n(jammers)", color=DC)
say(fq, q, 6.0, 21.0, "vices\n(jammers)", color=DC)
say(fq, q, 42.0, -3.8, "punt returner (PR)", color=DC)
plt.show()
Figure 5.7: A punt, seen from the side with the punting team kicking left to right. The long snapper fires the ball about 15 yards to the punter; the personal protector (not a specialist: usually a backup linebacker or safety) stands between them to pick up any rusher who gets through. The two gunners, out wide on the line, release past the vices (V) trying to jam them and race downfield toward the punt returner (PR), who will catch the ball 40-odd yards away. The six return-team players on the line either rush the punter or turn and block for the return. The dashed brown arc is the punt.
Show the Python
def kickoff_units():
    kick = [O("K", "K", -5.0, 0.0, "K")]
    kick += [O(f"C{i}", "LB", 25.0, w, "") for i, w in enumerate([-23, -18, -13, -8, -3, 3, 8, 13, 18, 23])]
    ret = [D(f"S{i}", "LB", 30.0, w, "") for i, w in enumerate([-15, -9, -3, 3, 9, 15])]
    ret += [D(f"F{i}", "LB", 33.0, w, "") for i, w in enumerate([-9, 0, 9])]
    ret += [D("KR1", "RB", 58.0, -5.0, "KR"), D("KR2", "RB", 58.0, 5.0, "KR")]
    return kick, ret


kick, ret = kickoff_units()
k = Play(kick, ret, los=45, to_go=None)
k.highlight("K")
k.highlight("KR1", "KR2", color=style.DEFENSE_DARK)
fk = k.draw(orient="horizontal", lateral="full", window=(-9.0, 70.0), title=False, width_in=5.4)
for d0, d1, lab in [(30.0, 35.0, "setup zone"), (45.0, 65.0, "landing zone")]:
    (xa, ya), (xb, yb) = P_(fk, k, d0, -26.6), P_(fk, k, d1, 26.6)
    fk.ax.add_patch(Rectangle((min(xa, xb), min(ya, yb)), abs(xb - xa), abs(yb - ya), fc=style.DEFENSE,
                              alpha=0.08, ec="none", zorder=1))
OC, DC = style.OFFENSE_DARK, style.DEFENSE_DARK
say(fk, k, -5.0, -3.6, "kicker (K),\nhis own 35", color=OC)
say(fk, k, 15.0, -11.0, "kicking team:\n10 on their 40", color=OC)
say(fk, k, 32.5, 22.6, "setup zone\n(their 30-35)", color=DC)
say(fk, k, 55.0, 18.5, "landing zone\n(goal line to the 20)", color=DC)
say(fk, k, 58.0, -9.5, "returners (KR)", color=DC)
plt.show()
Figure 5.8: A kickoff under the dynamic-kickoff rules (2024 on; the details of the setup zone were adjusted in 2025 and 2026), kicking left to right. The kicker (K) is alone at his own 35; his ten teammates stand on the receiving team’s 40, only five yards from the receiving team’s blockers in the setup zone (their 30-35). The returners (KR) wait in the landing zone, between the goal line and the 20, where the kick has to land. Nobody but the kicker and returners moves until it does.

The rest of the special-teams units are made of regular position players, mostly backups: linebackers, safeties, tight ends and running backs, the players with a mix of size, speed and tackling ability. Coverage units are where a lot of young players earn their roster spot, and a few make a career of it. The Patriots’ Matthew Slater, a gunner who played for New England from 2008 to 2023, made ten Pro Bowls as a special-teams player, the most ever for a special teamer (Steve Tasker is next with seven).28

Why bodies match jobs

You’ve now heard a lot of heights and weights. Here they all are, from seventeen years of the NFL Scouting Combine: every prospect measured from 2010 to 2026, one dot each, with each position’s average marked.

Show the Python
from gridiron.data import nfl

cmb = nfl().load_combine().to_pandas()
cmb = cmb[cmb.season.between(2010, 2026)].copy()


def inches(s):
    try:
        ft, inch = str(s).split("-")
        return int(ft) * 12 + int(inch)
    except ValueError:
        return np.nan


cmb["height"] = cmb["ht"].map(inches)
GROUP = {"QB": "QB", "RB": "RB", "FB": "FB", "WR": "WR", "TE": "TE",
         "OT": "OL", "OG": "OL", "G": "OL", "C": "OL", "OL": "OL",
         "DT": "DT", "DE": "Edge", "EDGE": "Edge", "ILB": "LB", "LB": "LB",
         "CB": "CB", "S": "S", "SAF": "S", "K": "K", "P": "P", "LS": "LS"}
SIDE = {"QB": "off", "RB": "off", "FB": "off", "WR": "off", "TE": "off", "OL": "off",
        "DT": "def", "Edge": "def", "LB": "def", "CB": "def", "S": "def", "K": "st", "P": "st", "LS": "st"}
cmb["group"] = cmb["pos"].map(GROUP)
cmb = cmb.dropna(subset=["group", "height", "wt"])
cmb["side"] = cmb["group"].map(SIDE)
COL = {"off": style.OFFENSE, "def": style.DEFENSE, "st": style.THIRD}
NAME = {"off": "offense", "def": "defense", "st": "specialists"}
rng = np.random.default_rng(3)
cmb["h_jit"] = cmb["height"] + rng.uniform(-0.35, 0.35, len(cmb))   # heights are whole inches: spread them
avg = cmb.groupby("group").agg(height=("height", "mean"), wt=("wt", "mean"), forty=("forty", "median"),
                               side=("side", "first"))
fit = cmb[(cmb.side != "st") & cmb.forty.notna()]
slope, icpt = np.polyfit(fit.wt, fit.forty, 1)        # seconds per pound, roughly 0.1 s per 20 lb


def panel(ax, ycol, mark, offsets, ylabel):
    for side in ("off", "def", "st"):
        s = cmb[cmb.side == side]
        ax.scatter(s["wt"] + rng.uniform(-1.5, 1.5, len(s)), s[ycol], s=4, color=COL[side], alpha=0.16,
                   lw=0, zorder=1, rasterized=True)
    for g, r in avg.iterrows():
        y = r[mark]
        ax.scatter([r.wt], [y], s=46, color=COL[r.side], edgecolor="white", lw=1.4, zorder=4)
        dx, dy = offsets[g]
        ax.annotate(g, (r.wt, y), (r.wt + dx, y + dy), fontsize=7.5, color=style.INK, fontweight="bold",
                    ha="center", va="center", zorder=5,
                    arrowprops=dict(arrowstyle="-", color=style.MUTED, lw=0.6, shrinkA=1, shrinkB=3))
    ax.set_xlabel("weight (lb)", fontsize=8)
    ax.set_ylabel(ylabel, fontsize=8)
    ax.tick_params(labelsize=7.5)


OFF_A = {"CB": (-20, -1.3), "K": (-22, 1.0), "WR": (-6, 2.4), "S": (2, -2.7), "RB": (12, -1.7),
         "P": (-6, 2.6), "QB": (-2, 2.8), "LB": (2, -2.4), "LS": (4, 2.8), "FB": (8, -2.6),
         "TE": (-4, 2.2), "Edge": (10, 2.0), "DT": (-10, -2.6), "OL": (10, 2.0)}
OFF_B = {"CB": (-14, -0.06), "WR": (-5, -0.12), "S": (8, -0.11), "RB": (14, 0.05), "K": (-15, 0.03),
         "P": (-8, 0.1), "QB": (6, 0.1), "LS": (0, 0.11), "FB": (8, 0.09), "TE": (3, -0.1), "LB": (-2, -0.21),
         "Edge": (12, 0.06), "DT": (-14, 0.1), "OL": (12, 0.07)}
fig, (a1, a2) = plt.subplots(2, 1, figsize=(6.5, 6.6))
panel(a1, "h_jit", "height", OFF_A, "height (inches)")
a1.set_title("Size: weight and height", fontsize=9.5)
a1.set_ylim(63.5, 82)
panel(a2, "forty", "forty", OFF_B, "40-yard dash (seconds)")
xs = np.array([165, 345])
a2.plot(xs, icpt + slope * xs, color=style.INK_2, lw=1.0, ls=(0, (4, 3)), zorder=3)
a2.text(338, icpt + slope * 338 + 0.11, f"trend: about {slope * 20:.1f} s\nslower per 20 lb", fontsize=7,
        color=style.INK_2, ha="right", va="center")
a2.set_title("Speed: weight and 40-yard dash (faster is up)", fontsize=9.5)
a2.set_ylim(5.75, 4.2)
don = cmb[cmb.player_name == "Aaron Donald"].iloc[0]
a2.scatter([don.wt], [don.forty], s=60, facecolor="none", edgecolor=style.INK, lw=1.2, zorder=6)
a2.annotate("Aaron Donald\n(DT, 2014)", (don.wt, don.forty), (don.wt + 30, don.forty - 0.17), fontsize=7,
            color=style.INK, ha="center", va="center",
            arrowprops=dict(arrowstyle="-", color=style.INK_2, lw=0.7, shrinkA=2, shrinkB=4))
a1.legend(handles=[Line2D([], [], marker="o", ls="", color=COL[s], markeredgecolor="white", ms=7, label=NAME[s])
                   for s in ("off", "def", "st")], loc="lower right", fontsize=7.5, ncol=3)
fig.tight_layout()
plt.show()
Figure 5.9: Size and speed by position, NFL Scouting Combine 2010-2026 (one faint dot per prospect; the big dot is each position’s average weight and height, or median 40 time). Top: the positions sort into families by size, from cornerbacks and receivers around 190-200 lb to linemen past 300. Bottom: weight and speed trade off along almost a straight line (dashed: the straight-line fit through every non-specialist prospect). Positions above the line are fast for their weight. Ambiguous labels are left out: generic ‘DL’, ‘DB’ and ‘OLB’ (which mixed 3-4 edge rushers with 4-3 linebackers). Edge = DE or EDGE. Data: nflverse combine data, from Pro Football Reference.

Read the top panel from left to right and it sorts the field into families:

  • The speed family (left, 190–215 lb): cornerbacks, wide receivers, safeties, running backs, and, interestingly, kickers, who are built like defensive backs.
  • The hybrids (middle, 220–265 lb): quarterbacks, linebackers, fullbacks, tight ends and edge rushers, plus the long snappers. These are the positions whose jobs mix contact with space: a linebacker has to take on a fullback and cover a back; a tight end has to block an end and get open against a linebacker.
  • The big men (right, 300+ lb): offensive linemen and defensive tackles, almost indistinguishable from each other in size, because they spend every snap pushing against each other.

The bottom panel shows the price of mass: weight and 40 time fall along nearly a straight line (dashed). Each extra 20 pounds costs roughly a tenth of a second over 40 yards, and the positions sit along that line wherever their job puts the balance between force and speed. Edge rushers sit a little above the line (fast for their size), which is why they’re so hard to block; Aaron Donald sits far above it, about three-tenths of a second faster than a typical 285-pounder, which is why he was Aaron Donald.

Why does this matter to a viewer? Because body type is how you’ll recognize positions when the alignment is ambiguous, and how you’ll spot the mismatches offenses and defenses hunt for. A 250-pound tight end covered by a 190-pound cornerback is a mismatch in one direction (the tight end can shield the ball with his body); the same tight end covered by a 240-pound linebacker is a mismatch in the other (the tight end runs routes and catches like a receiver; the linebacker is a run defender trying to cover). Half of play-calling is creating one of those pictures and the other half is avoiding them. And the size bands explain one of the oldest jokes in football analysis: “he’s a tweener,” a player whose body sits between two families and doesn’t clearly fit either job. Some tweeners never find a role; others (Kyle Hamilton, below) become the most valuable players on their team because they can do both jobs.

How much each position is worth, in salary and draft picks, is a separate and fascinating question for Building a Roster.

Position, alignment, assignment

Everything so far has treated a position as if it told you what a player does. It doesn’t, quite. To read a play, you have to separate three different things:

  • Position is who the player is: what the roster says, what he’s built for, which meeting room he sits in during the week. Kyle Hamilton is a safety.
  • Alignment is where he lines up on this play: his spot, depth and relation to the ball and the other players. Hamilton might be 12 yards deep, over the slot receiver, or standing in the box beside the linebackers.
  • Assignment is what he’s been told to do on this play: which gap he fills, which receiver or area he covers, whether he rushes. From any of those alignments, Hamilton might blitz, cover the tight end man-to-man, or drop into a deep half of the field.
Show the Python
off, dfn = eleven_vs_nickel()
p = Play(off, dfn, los=40, to_go=10)
p.highlight("SS", color=style.THIRD)
f = p.draw(lateral=(-22.5, 22.5), window=(-7.5, 16.5), title=False)
hide_numbers(f)
box_outline(f, p, -6.6, 6.6, 0.0, 7.2, "the box")
for d, w in [(5.0, 8.7), (5.6, 4.0)]:
    ghost(f, p, d, w, "def", "SS", alpha=0.5, ring=style.THIRD)
say(f, p, 12.0, 10.7, "snap 1: deep,\n~12 yards", color=GREEN, weight="bold", ha="left")
say(f, p, 2.9, 10.4, "snap 2: walked down\noutside the tight end", color=GREEN, weight="bold", ha="left")
lead(f, p, (3.3, 10.3), (4.3, 9.5), color=GREEN)
say(f, p, 8.9, 4.0, "snap 3: in the box", color=GREEN, weight="bold")
plt.show()
Figure 5.10: One position, three alignments. The same strong safety (ringed) on three different snaps against the same offense (the 11-personnel picture from earlier): deep, about 12 yards off the ball (snap 1, solid); walked down outside the tight end, where the Sam would have stood (snap 2); and inside the box (dashed outline) beside the linebackers (snap 3). His position never changes. His alignment does, and his assignment on each snap could be any of several things. Alignment is a clue to the assignment, not a guarantee.

Why does the difference matter? Because football is a game of disguise and recognition, and the gap between these three is where the disguise lives. A defense that lines a safety up deep and then sends him on a blitz has used alignment to hide assignment. An offense that lines its running back up as a wide receiver is forcing the defense to decide: do we cover him with a linebacker (who’s good against running backs) or a cornerback (who’s good against receivers)? Everything in this book about reading the game comes down to using alignment to guess assignment before the snap, and then checking yourself after it.

It’s also why rosters are more fluid than position labels suggest:

  • The 49ers’ Deebo Samuel, a wide receiver, was lined up in the backfield and handed the ball so often in 2021 that he called himself a “wide back”; his eight rushing touchdowns that season were the most by a receiver since 1970.29
  • Juszczyk, the film-room fullback, spends much of his time lined up as a tight end or a receiver.
  • Many defenses play a safety at linebacker on passing downs, list their best edge rusher as a “linebacker,” or use a “safety” who plays almost every down near the line, and teams increasingly don’t care what the roster calls him.

Even the official data struggles with this: the participation data behind the two-backs chart lists each player by his roster position, so it records who’s on the field, not where he stood.

NoteFilm room: Ravens 2022–2025 — Kyle Hamilton, one position, every alignment

The Ravens drafted Kyle Hamilton 14th overall in 2022.30 He’s a safety, and an unusual one: 6-foot-4 and 220 pounds at his combine, a height only about one safety in forty measured there since 2010 has matched, built more like a big receiver or a small linebacker. Some evaluators worried about where he’d fit.

Baltimore’s answer was: everywhere. Watch the Ravens’ defense and find number 14 before every snap. On one play he’s a deep safety; on the next he’s lined up over the slot like a nickel back (when he does, the Ravens are playing a big nickel); on the next he’s in the box beside the linebackers, or walked up on the line over a tight end. He blitzes, covers tight ends man-to-man, and plays deep zones, so an offense can’t tell from his position what he’s about to do, and has trouble telling from his alignment. That flexibility is the whole value: one player who can be a safety, a slot corner and a linebacker lets the defense change its shape without changing its personnel, which means the offense can’t use substitutions to force a mismatch. It has made him a first-team All-Pro twice, for 2023 and 2025.31

What to notice: before the snap, where is 14, and does he move? If he starts deep and creeps down late, something is coming. If he starts in the box and races back to the deep middle at the snap, the defense just changed its coverage shell (how many safeties play deep) on you. You’ll learn to name those moves in Disguise, Rotation, and Split-Field Coverage.

One ordinary run, all twenty-two

To see every position doing its job at once, here’s one simple, old-fashioned running play from the first diagram, the lead run (coaches call this version “iso,” for isolation): the fullback leads through the gap between the left guard and left tackle, and the tailback follows him. Each player has one assignment, and each assignment is typical of his position.

Show the Python
def lead_run():
    off, dfn = i_form_vs_43()
    p = Play(off, dfn, los=40, to_go=10)
    p.path("QB", [(-3.5, -0.5)], absolute=True, speed=4.0)                  # opens, hands off
    p.run("RB", [(-4.3, -1.3)], absolute=True, speed=4.6)                   # to the mesh
    p.handoff("RB", t=0.72)
    p.run("RB", [(-1.4, -2.6), (1.6, -2.5), (3.2, -2.3), (5.0, -2.4)], absolute=True, speed=5.8)
    p.block("FB", pts=[(3.2, -2.4), (5.6, -2.6), (6.3, -3.9)], speed=6.5)    # iso: meets the Will in the hole
    p.block("LT", pts=[(1.1, -1.1)])                                          # drives the end outward
    p.block("LG", pts=[(0.7, 0.7)])                                           # combo with the center ...
    p.block("C", pts=[(0.8, -0.1)])
    p.block("C", pts=[(0.9, 1.1), (2.5, 0.7)], speed=4.2, delay=0.1)         # ... then the center climbs to the Mike
    p.block("RG", pts=[(0.8, 0.3)])
    p.block("RT", pts=[(0.8, 0.4)])
    p.block("Y", pts=[(1.5, 0.9), (3.3, 0.5)], speed=3.6)                   # backside: the Sam
    p.block("X", pts=[(4.0, 0.0)], speed=5.0)
    p.block("Z", pts=[(4.5, -0.5)], speed=5.0)
    p.path("WDE", [(1.3, -5.3)], absolute=True, speed=2.0)
    p.path("WDT", [(1.3, -0.5)], absolute=True, speed=1.0)
    p.path("SDT", [(1.3, 2.2)], absolute=True, speed=2.0)
    p.path("SDE", [(1.3, 4.3)], absolute=True, speed=2.0)
    p.path("WILL", [(2.6, -2.6)], absolute=True, delay=0.2, speed=4.5)      # attacks the hole ...
    p.path("WILL", [(3.2, -4.4)], absolute=True, delay=0.25, speed=2.2)     # ... and is driven out by the fullback
    p.path("MIKE", [(3.9, -0.2)], absolute=True, delay=0.25, speed=3.5)
    p.path("SAM", [(3.8, 4.9)], absolute=True, delay=0.3, speed=2.5)
    p.path("FS", [(6.8, -3.2)], absolute=True, delay=0.3, speed=5.0)        # unblocked: fills the alley
    p.path("SS", [(8.0, 3.0)], absolute=True, delay=0.4, speed=4.0)         # unblocked, but far from the hole
    p.path("LCB", [(5.2, -14.6)], absolute=True, speed=3.0)
    p.path("RCB", [(5.6, 14.0)], absolute=True, speed=3.0)
    return p


run = lead_run()
TIMES = [0.0, 0.5, 1.1, 2.2]
NOTES = {0.0: [(-2.6, -6.6, "the hole:\nLG-LT gap")],
         0.5: [(-2.4, 4.6, "LG + C double\nthe tackle (T)")],
         1.1: [(3.9, -8.2, "F meets W\nin the hole"), (5.6, 2.6, "C climbs\nto M")],
         2.2: [(9.0, -7.6, "unblocked FS\nfills the alley:\nthe man to beat")]}
if PDF:
    zoom_strip(run, TIMES, lat=(-11, 9), window=(-8.5, 10.5), labels=NOTES, ring={"RB": style.THIRD})
    plt.show()
else:
    show_animation(carried_ball(run.to_tracking()), times=TIMES, to_go=10)
Figure 5.11: A lead run (‘iso’) from the I-formation against a base 4-3, in seconds after the snap; the running back (R) is ringed and carries the ball. The left tackle drives the defensive end outward; the left guard and center double-team the tackle shaded over the center, and then the center comes off the double-team onto the Mike. That opens a hole between the left guard and left tackle. The fullback (F) leads through it and meets the Will in the hole, the tight end blocks the Sam on the far side, and the receivers block the cornerbacks out wide (off this zoomed view). The offense can block nine defenders at most, so two go unblocked: the safeties, the farthest from the hole. The free safety, filling from the left, is the man the runner has to beat.

Go through it one position at a time, the way you’ll learn to watch a replay:

  • Offensive line: each lineman blocks the man in front of him, except that the left guard and center start by double-teaming the tackle over the center (a combo block), and then the center comes off it to block the Mike.
  • Quarterback: opens, hands off, and (on a real play) carries out a fake so a defender has to think about him for half a second.
  • Fullback: leads into the hole and blocks the first linebacker who shows (here, the Will). This one-on-one is the play’s namesake: the fullback is “isolated” on the Will.
  • Tailback: takes the handoff, stays a couple of yards behind the fullback, and cuts off his block.
  • Tight end and receivers: block. The tight end takes the Sam on the far side, and the receivers’ blocks on the cornerbacks are what turn a five-yard gain into a long one if the runner breaks a tackle.
  • Defensive linemen: take on their blockers and try not to get moved.
  • Linebackers: read the run and fill. The Will takes on the fullback; the Mike is picked up by the center coming off the double-team; the Sam is blocked by the tight end.
  • Safeties: the two players nobody blocks. The free safety reads run and fills the alley (the lane between the blocks and the sideline), and he’s the man the tailback has to beat.
  • Cornerbacks: play their receivers until they’re sure it’s a run.

Now count. The quarterback and the ball carrier don’t block, so the offense has nine blockers for eleven defenders: two defenders always go unblocked, and the offense’s only choice is which two. The usual answer is the two farthest from the hole, here the safeties, because by the time they arrive the runner should be five yards downfield at full speed (coaches call that “blocked to the safety”). The last frame shows exactly that: the play has gained its yards, and whether it gains more depends on one tackle in space. Which defenders the offense leaves alone, and how it makes them wrong, runs through the whole run game (The Language of the Run Game), sets up the box count, and becomes Option Football, where the offense reads an unblocked defender instead of blocking him.

TipWatch for it on Sunday: the one-player game

For one full drive, watch only the center. Ignore the ball. On every snap, say out loud what he did:

  • Before the snap: does he point at a defender or shout something? (He’s naming the defender the blocking scheme counts from.) Does the quarterback point first and the center echo him, or the other way round?
  • At the snap: under center or shotgun? A shotgun snap is a five-yard toss; watch whether the center’s head comes up fast.
  • After the snap: did he block the man over him, help a guard with a double-team, climb to a linebacker, or (on a screen pass, a short throw to a receiver or back with blockers set up in front of him) release downfield to block in space? Did he ever touch the ball again? (He shouldn’t.)

Then, if you have time for more:

  • Count the defensive backs on first-and-10. Four means a base defense; five means nickel, usually a slot corner and sometimes a third safety. The safeties are often off the top of your screen before the snap, so you may have to count them on the replay (How to Watch a Broadcast shows where to look).
  • Find the tight end before the snap and predict which side the Sam linebacker and the strong safety will line up on. Most teams set to him; some set to the wide side of the field instead, and spotting which one a defense does is a real scouting clue.
  • On a punt, find the gunners before the snap and count how many defenders the return team puts on each: one or two?
  • Check a jersey. When a player in the 50s–70s lines up somewhere unusual (out at tight end, in the backfield), listen for the referee’s announcement that he’s reporting as eligible.

Predict the play

TipPredict the play 1: name the linebackers
Show the Python
off, dfn = i_form_vs_43(te_side="left")
QL = {"SAM": "1", "MIKE": "2", "WILL": "3", "SS": "4", "FS": "5"}
dfn = [q.moved(label=QL[q.key]) if q.key in QL else q for q in dfn]
p = Play(off, dfn, los=55, to_go=10)
for k in QL:
    p.highlight(k, color=style.THIRD)
f = p.draw(lateral=(-19, 19), window=(-9, 15.5), title=False)
hide_numbers(f)
plt.show()
Figure 5.12: The offense is in the I-formation again, but this time the tight end (Y) is on the offense’s left. The defense is in its base 4-3. The three linebackers are numbered 1, 2, 3 and the two safeties 4 and 5.

Which of 1, 2 and 3 is the Mike, the Sam and the Will? Which of 4 and 5 is the strong safety? And which side of the field would you expect a defensive coordinator to worry about for the run?

1 is the Sam, 2 is the Mike, 3 is the Will; 4 is the strong safety. The names come from the tight end. He’s on the offense’s left (your left as you look at the picture), so that’s the strong side: the Sam (1) lines up there, across from the tight end, ready to take on his block, and the strong safety (4) sits on that side, a little closer to the line than the free safety. The Mike (2) is in the middle, and the Will (3) is on the weak side, away from the tight end, where there are fewer blockers.

The run worry is the strong side. The tight end gives the offense an extra blocker on the left, so more gaps to fill there; that’s exactly why the defense puts its biggest linebacker and its run-support safety on that side. The obvious follow-up: then why doesn’t the offense just run the other way, at the lighter weak side? It does, often, and that’s why the Will has to be the fastest linebacker on the field: the weak side is light by design, and he’s the one who has to cover the ground. If the tight end flipped to the right before the snap, all of those names would flip with him. Watching the Sam move when the tight end moves is one of the first live “reads” you can make.

TipPredict the play 2: count the defenders
Show the Python
off = tagged(offense("gun_trips"))
ALIGN = {"Y": dict(d=-1.5, w=6.8), "H": dict(w=11.0), "Z": dict(d=-0.7, w=17.0)}   # Z on the line, Y off it
off = [q.moved(**ALIGN[q.key]) if q.key in ALIGN else q for q in off]
DPOS = {"NB": dict(d=6.0, w=11.0), "DB": dict(d=6.3, w=7.2), "RCB": dict(w=17.0)}  # every DB over a receiver
dfn = [q.moved(label="", **DPOS.get(q.key, {})) for q in defense("dime", "two_high", off)]
p = Play(off, dfn, los=45, to_go=9)
f = p.draw(lateral=(-20, 21.5), window=(-7.5, 15.5), title=False)
hide_numbers(f)
plt.show()
Figure 5.13: Third-and-9. The offense has three receivers to the right (the inside one is the tight end, split off the line) and one to the left. The defenders are unlabeled on purpose: identify them by where they stand.

How many defensive linemen, linebackers and defensive backs are on the field? What does that tell you about what the defense expects, and which defensive players have left the field compared with the base defense?

Four linemen, one linebacker, six defensive backs. The four squares on the line are the defensive linemen. Only one defender stands in the middle at linebacker depth, inside the box. The other six are defensive backs, and each is lined up on a receiver or deep: a cornerback on each outside receiver, one defender over each of the two inside receivers on the right, and two safeties deep.

Six defensive backs is called dime (two nickels, so to speak), a package taught in A First Look at Defense. Compared with the base 4-3, two linebackers have left, almost certainly the Sam and one of the others, replaced by two extra defensive backs. The linebacker who stays is usually the best cover linebacker, often the Mike or the Will. The defense is telling you it expects a pass: on third-and-9 the offense needs nine yards, a run rarely gets that, and the defense wants as many fast cover players on the field as it can afford.

A caution: the sixth defensive back doesn’t always stand out wide. Many teams put him at linebacker depth inside the box as a “dime backer,” and then you’d spot him by his size and number (a 200-pounder in the 20s or 30s), not by where he stands. And the price of dime is that only five defenders (four linemen and one linebacker) are near the ball, so a draw (a run disguised as a pass, with the quarterback dropping back before he hands off) or a quarterback run is the offense’s natural counter, and you’ll see it on third-and-long more than you’d expect.

TipPredict the play 3: who may catch it?
Show the Python
NUM3 = {"LT": 72, "LG": 65, "C": 60, "RG": 63, "RT": 76, "QB": 9, "RB": 23, "X": 11, "H": 84, "Y": 87, "Z": 13}
off = offense("gun_2x2")
off = [q.moved(d=-0.7, w=4.8) if q.key == "Y" else q for q in off]       # Y on the line beside the RT
off = [q.moved(label=str(NUM3[q.key]), jersey=NUM3[q.key]) for q in off]
p = Play(off, None, los=30, to_go=None)
f = p.draw(lateral=(-19.5, 19.5), window=(-8.0, 3.5), title=False)
hide_numbers(f)
plt.show()
Figure 5.14: The quarterback (9) is in the shotgun, with the running back (23) beside him.

Which players may catch a forward pass on this play? The tight end, 87, catches one ten yards downfield. Will there be a flag?

Eligible: 11, 13, 84, 23 and the quarterback, 9. Not eligible: the five linemen and the tight end, 87. Yes, a flag.

Count the line. Eight players are on it: 11, the five linemen, 87 and 13. (Eight is legal; the rule is at least seven.) Only the two ends of that line are eligible, and the ends are 11 on the left and 13 on the right, because 13 is lined up on the line outside the tight end. That “covers” 87: he’s on the line but not at the end of it, so on this play he’s an ineligible receiver despite being a tight end with an eligible number. The officials will throw a flag: an ineligible player may not catch a forward pass (and, ten yards downfield, he was also well past the one yard an ineligible player is allowed). The penalties themselves are in Contact Rules and Penalties; the catch itself is illegal touching of a forward pass, a 5-yard foul.32

The backs are 84 (a yard off the line), 23, and the quarterback. The quarterback is eligible here, because he’s in the shotgun rather than taking a hand-to-hand snap under center, so he counts as a back, exactly as Nick Foles did on the Philly Special.

This is why the rules care so much about a one-yard step. Move 13 off the line, and 87 becomes the end and eligible again. Offenses use exactly this kind of adjustment to change who’s eligible, and the defense has to notice. More in Formation Rules and the Language of Alignment.

Takeaways

  • Football has three teams on one roster: offense, defense, special teams. Unlimited substitution (permanent in the NFL since 1950) let each player specialize, which is why bodies now match jobs so closely.
  • Offense: five linemen (center, guards, tackles) who block and may not catch passes; a quarterback; one or two backs (running back, sometimes a fullback); and pass-catchers split between wide receivers (X, Z, slot) and the tight end, who is half blocker and half receiver, and whose side names the strong side.
  • Eligibility is a rule about alignment: seven on the line, and only the two ends and the backs (anyone off the line) may catch a pass, never a quarterback under center. Jersey numbers 50–79 mark the ineligible linemen.
  • Defense: a front seven of linemen (tackles, nose, ends/edge rushers) and linebackers (Mike, Sam on the tight end side, Will away from it), and a secondary of cornerbacks, safeties and, in the modern default, a slot cornerback. The closer a defender stands to the ball, the more he’s built for the run.
  • Special teams have their own specialists: kicker, punter, long snapper, holder, returner, gunner.
  • Position, alignment, assignment are three different things: who he is, where he stands, what he does. Reading the game means using alignment to guess assignment, and the best players (and coaches) blur the three on purpose.

Connections

Builds on: The Game in Fifteen Minutes (the field, the kicking plays and how points are scored).

Sets up:

Case studies: the fullback and the “wide back” are at the heart of Shanahan’s Wide-Zone Tree; the modern safety who plays everywhere returns in From Two-High to Macdonald.

NoteGo deeper
  • Pat Kirwan, Take Your Eye Off the Ball (2010; 2nd ed. 2015): a former NFL coach and scout teaches fans to watch the players away from the ball, position by position. The best next read after this chapter.
  • Michael Lewis, The Blind Side (2006): the left tackle, the edge rusher and the economics that tied them together.
  • The NFL’s official rulebook (operations.nfl.com), Rules 5 (players and numbering), 7 (formations) and 8 (the forward pass and eligibility): surprisingly readable.
  • nflverse’s combine data (load_combine() in nflreadpy): every measurement in this chapter’s chart, ready to explore by position or school.

  1. NFL roster rules: 53 players on the active roster; on game day 47 players may dress, or 48 if at least eight are offensive linemen, plus an emergency third quarterback under conditions. The 48-man game-day limit (with at least eight offensive linemen; otherwise 47) came in with the 2020 collective bargaining agreement, which runs through the 2030 season: NFL Football Operations, “2020 NFL-NFLPA CBA: Need to know,” https://operations.nfl.com/inside-football-ops/players-legends/2020-nfl-nflpa-cba-need-to-know↩︎

  2. Pro Football Hall of Fame, “1950” (football history timeline): the NFL adopted unlimited free substitution permanently on January 20, 1950, opening the way to two-platoon football: https://www.profootballhof.com/football-history/football-history/1940-1959/1950↩︎

  3. ESPN Classic, “Bednarik was a ‘Sixty-Minute Man’”: https://www.espn.com/classic/biography/s/Bednarik_Chuck.html (Bednarik played center and linebacker for the 1960 champion Eagles and made the final tackle of the championship game on Jim Taylor; inducted into the Hall of Fame in 1967).↩︎

  4. theScore, “Jaguars’ Hunter undergoes season-ending knee surgery” (November 2025): drafted 2nd overall in 2025 after Jacksonville traded up; 326 offensive and 162 defensive snaps; LCL injury in practice on October 31: https://www.thescore.com/nfl/news/3395227/jaguars-hunter-undergoes-season-ending-knee-surgery↩︎

  5. Averages in this chapter come from the nflverse combine data (nflreadpy.load_combine(), sourced from Pro Football Reference), 2010–2026 combines, grouped as in the chart: offensive linemen average about 313 lb and 6-foot-5 with a median 40 of 5.21 s; tight ends 4.72 s and linebackers 4.66 s (median 40); see the chart for every position.↩︎

  6. Michael Lewis, The Blind Side: Evolution of a Game (W. W. Norton, 2006). The opening chapter describes Lawrence Taylor’s sack of Joe Theismann on Monday Night Football, November 18, 1985.↩︎

  7. Associated Press via Yahoo Sports, “Lions, Penei Sewell reportedly agree to 4-year, $112M deal that makes him highest-paid OT in NFL” (April 2024): https://au.sports.yahoo.com/lions-penei-sewell-reportedly-agree-to-4-year-112m-deal-that-makes-him-highest-paid-ot-in-nfl-182233921.html ; on the 2026 move to left tackle after Taylor Decker asked for his release: Associated Press via WTOP, “Penei Sewell’s move to the blind side will be easy for the versatile Lions star, Dan Campbell says” (May 29, 2026): https://wtop.com/nfl/2026/05/penei-sewells-move-to-the-blind-side-will-be-easy-for-the-versatile-lions-star-dan-campbell-says/↩︎

  8. On the rugby origin and the names as row labels rather than measured depths: “History of American football positions,” https://en.wikipedia.org/wiki/History_of_American_football_positions (the fractions “indicate only a form of ordinal number”; the Irish rugby nomenclature used quarter-back, half-back and full-back).↩︎

  9. San Francisco 49ers, Pro Bowl release (December 2025), noting Juszczyk’s 10th Pro Bowl, a record for a fullback: https://www.49ers.com/news/kittle-mccaffrey-juszczyk-williams-gifford-weeks-moore-selected-to-2026-pro-bowl-games ; in the 2026 training camp: https://www.49ers.com/news/day-6-of-49ers-camp-2026-competition-heats-up-ahead-of-the-preseason↩︎

  10. Kansas City Chiefs, “Travis Kelce makes history in Chiefs’ win over Denver” (December 2022): https://www.chiefs.com/news/travis-kelce-makes-history-in-chiefs-win-over-denver; see also https://en.wikipedia.org/wiki/Travis_Kelce↩︎

  11. Super Bowl LVII, February 12, 2023, State Farm Stadium, Glendale, Arizona: Kansas City 38, Philadelphia 35, the first Super Bowl in which two brothers played against each other. https://en.wikipedia.org/wiki/Super_Bowl_LVII↩︎

  12. NFL Rule 7 (formation: at least seven offensive players on the line at the snap) and Rule 8, Section 1 (eligible receivers, including the T-formation quarterback exception: a quarterback who takes his stance under center is ineligible unless he legally moves at least one yard behind the line, or to the end of the line, and is set for a second before the snap). NFL Football Operations rulebook: https://operations.nfl.com/the-rules/nfl-rulebook/ ; summarized at https://en.wikipedia.org/wiki/Eligible_receiver↩︎

  13. Super Bowl LII, February 4, 2018, fourth-and-goal from the 1: Foles lined up behind right tackle Lane Johnson, Corey Clement took the direct snap and flipped the ball to Trey Burton, who threw to Foles. “Philly Special”: https://en.wikipedia.org/wiki/Philly_Special ; Philadelphia Eagles, “Gadget play works to perfection for TD”: https://www.philadelphiaeagles.com/news/gadget-play-works-to-perfection-for-td-20335770↩︎

  14. “The New Football Rules,” Dartmouth Alumni Magazine (November 1910), on the 1910 intercollegiate rules: “seven men of the offensive team must be on the scrimmage line,” a provision aimed at “Mass Plays”: “With only four men behind the line the weight of attack is necessarily reduced.” https://archive.dartmouthalumnimagazine.com/article/1910/11/1/the-new-football-rules↩︎

  15. Pro Football Hall of Fame, “1973” (football history timeline): the numbering system was adopted on April 5, 1973 (1–19 quarterbacks and specialists, 20–49 running backs and defensive backs, 50–59 centers and linebackers, 60–79 other linemen, 80–89 receivers and tight ends): https://www.profootballhof.com/football-history/football-history/1960-1979/1973 . The chart’s “before 2021” bars show the ranges in force just before 2021, after later loosening: receivers gained 10–19 in 2004 (ESPN, December 5, 2019: https://africa.espn.com/nfl/story/_/id/28224466/behind-wide-receivers-numbers-shift-why-nfl-best-donning-nos-10-19), linebackers the 40s in 2015 (NBC Sports/ProFootballTalk: https://www.nbcsports.com/nfl/profootballtalk/rumor-mill/news/competition-committee-proposes-allowing-lbs-to-wear-jersey-numbers-in-the-40s), and defensive linemen the 50s around 2010.↩︎

  16. CBS Sports, “NFL reportedly passes new jersey number rules: Who can wear what under revised guidelines” (April 2021): https://www.cbssports.com/nfl/news/nfl-reportedly-passes-new-jersey-number-rules-who-can-wear-what-under-revised-guidelines ; on the Chiefs’ proposal and its motivation, Sports Illustrated (April 8, 2021): https://www.si.com/nfl/2021/04/08/nfl-allow-jersey-number-changes-2021-season↩︎

  17. CBS Sports, “NFL rule changes 2023: No. 0 jersey is back…” (March 2023): https://www.cbssports.com/nfl/news/nfl-rule-changes-2023-no-0-jersey-is-back-personal-foul-penalties-clarified-one-date-for-roster-cutdowns ; NBC Sports Philadelphia, “NFL rule change allows players to wear No. 0” (on the Eagles’ proposal): https://www.nbcsportsphiladelphia.com/nfl/philadelphia-eagles/nfl-rule-change-allows-players-to-wear-no-0/271995/↩︎

  18. nflverse combine data, 2022 combine: Jordan Davis (Georgia), 6-6, 341 lb, 40-yard dash 4.78 s; the median quarterback 40 in the chart is about 4.80 s.↩︎

  19. Pro Football Reference, Aaron Donald: https://www.pro-football-reference.com/players/D/DonaAa00.htm (Defensive Player of the Year 2017, 2018, 2020; retired in March 2024). Combine figures (6-1, 285 lb, 4.68 s) from the nflverse combine data.↩︎

  20. Minnesota Vikings, “2018 Combine Workout Warriors: Edge Rushers” (March 4, 2018), noting that 2018 was “the first year for the positional category”: https://vikings.com/news/2018-combine-workout-warriors-edge-rushers-20415827 . In the nflverse combine data, too, the “EDGE” label first appears for the 2018 class.↩︎

  21. NFL.com, “Browns DE Myles Garrett reaches 23 sacks, sets new NFL single-season record” (January 2026): https://www.nfl.com/news/browns-de-myles-garrett-reaches-23-sacks-sets-new-nfl-single-season-record . The previous record, 22.5, was shared by Michael Strahan (2001) and T.J. Watt (2021).↩︎

  22. nflverse play-by-play and participation data, 2025 regular season, run and pass plays: 11 personnel (one back, one tight end) on 58.8% of plays, its lowest share of the decade (planning calculation recorded in this book’s fact sheet; reproduced in Personnel).↩︎

  23. NFL Next Gen Stats via NFL.com, “NFL trend watch: Heavy personnel could shape Super Bowl LX showdown between Patriots and Seahawks”: defenses played base on 29.7% of plays in 2025, up from a low of 20.5% in 2023. https://www.nfl.com/news/nfl-trend-watch-heavy-personnel-could-shape-super-bowl-lx-showdown-between-patriots-and-seahawks↩︎

  24. Kickoffs, punts, field goals and extra points were 17.5% of 2025 regular-season plays (course calculation from nflverse play-by-play, documented in What a Play Really Is).↩︎

  25. Justin Tucker in Baltimore magazine (September 2014), “this 1.3-second field-goal operation, from the snap to the hold to the kick”: https://www.baltimoremagazine.com/2014/9/5/justin-tucker-renaissance-raven ; Kicking System (2012) gives 1.2–1.35 s as the professional range: https://kickingsystem.com/2012/08/15/special-teams-unit-field-goals-operation-times-working-with-the-snapper-and-holder/↩︎

  26. NFL Rule 9, Section 1, Article 3: when the offense is in a punt, field-goal or try-kick formation, a defender within one yard of the line at the snap must have his entire body outside the snapper’s shoulder pads. NFL.com, “New safety rules: Punt-formation penalty protects long snapper”: https://www.nfl.com/news/new-safety-rules-punt-formation-penalty-protects-long-snapper-0ap3000000482729 ; rulebook: https://operations.nfl.com/the-rules/nfl-rulebook/↩︎

  27. NFL.com, “2024 NFL season: Explaining rules for new dynamic kickoff”: https://www.nfl.com/news/2024-nfl-season-explaining-rules-for-new-dynamic-kickoff ; made permanent with changes for 2025: https://www.nfl.com/news/nfl-owners-vote-to-make-dynamic-kickoff-permanent-adjust-ball-spot-on-touchbacks-to-35-yard-line ; 2026 changes (approved March 31, 2026): https://www.seahawks.com/news/nfl-announces-approved-rule-changes-for-2026-season↩︎

  28. NFL.com, “Patriots’ 10-time Pro Bowl special teamer Matthew Slater announces retirement” (February 2024): https://nfl.com/news/patriots-10-time-pro-bowl-special-teamer-matthew-slater-announces-retirement ; the record and Tasker’s seven: https://en.wikipedia.org/wiki/Matthew_Slater↩︎

  29. ESPN, “How Deebo Samuel created his own position: ‘wide back’” (2022): https://africa.espn.com/nfl/story/_/id/33089904/san-francisco-49ers-deebo-samuel-created-own-position-wide-back (eight rushing touchdowns in 2021, the most by a receiver in a season since 1970).↩︎

  30. Pro Football Reference, 2022 NFL Draft (Baltimore, 14th overall: Kyle Hamilton, S, Notre Dame): https://www.pro-football-reference.com/years/2022/draft.htm ; combine figures (6-4, 220 lb) from the nflverse combine data, in which about 2.4% of safeties measured 2010–2026 were 6-foot-4 or taller.↩︎

  31. The Baltimore Banner, on the 2025 All-Pro team (January 10, 2026): Hamilton’s third All-Pro selection and second on the first team (46 of 50 first-team votes), after first team for 2023 and second team for 2024: https://www.thebanner.com/sports/ravens-nfl/ravens-all-pro-team-kyle-hamilton-jordan-stout-ricard-XTMJAR4HXRDQPOFJCHLCHIIG34↩︎

  32. NFL Rule 8, Section 1, Article 8; the penalty summary lists “Illegal touching of a forward pass” among the 5-yard fouls, separately from the loss-of-down fouls. NFL.com, “2025 rulebook, part 2”: https://www.nfl.com/news/2025-rulebook-part-2↩︎