Odd and Hybrid Fronts: 3-4, Okie, Tite, and Modern Nickel Fronts

Why the graphic says 3-4 and you count four men on the line, why the best run defenses of the light-box era wall off the middle with three big bodies, and how to read a front whose name keeps changing

Show the Python (shared helpers for this chapter’s diagrams)
import logging
logging.getLogger("matplotlib.font_manager").setLevel(logging.ERROR)
import os
import re
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, Ellipse, FancyArrowPatch, Rectangle, RegularPolygon
from gridiron import Play, Player, Field, offense, technique, style
from gridiron.play import draw_marker

GREEN = "#0f7a55"         # darker step of the aqua highlight, for text on the light field
OL_KEYS = ("LT", "LG", "C", "RG", "RT")


def pdf_build():
    return os.environ.get("RTG_FORMAT", "").lower() in ("pdf", "typst", "print")


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 line(labels="full"):
    """The five offensive linemen, labelled LT..RT ("full") or with one letter, T G C G T ("short")."""
    short = {"LT": "T", "LG": "G", "C": "C", "RG": "G", "RT": "T"}
    return [p.moved(label=(p.key if labels == "full" else short[p.key])) for p in offense("singleback")
            if p.key in OL_KEYS]


def te(side=1, key=None, label=None):
    """An in-line tight end: Y on the right, U on the left."""
    key = key or ("Y" if side > 0 else "U")
    return O(key, "TE", -0.7, side * 4.8, label or key)


def T(t, side=1):
    """Width of technique t on the offense's right (side=+1) or left (side=-1)."""
    return technique(t, side)


def gun11(y_attached=True):
    """Shotgun, 11 personnel: Y attached on the right (or flexed to a slot), H in the left slot, X and Z wide."""
    sk = [O("QB", "QB", -5.0, 0.0, "Q"), O("RB", "RB", -5.0, -1.6, "R"),
          O("X", "WR", -0.7, -15.0, "X"), O("H", "WR", -1.5, -9.0, "H"), O("Z", "WR", -1.5, 15.0, "Z")]
    sk.append(O("Y", "TE", -0.7, 4.8, "Y") if y_attached else O("Y", "TE", -1.5, 9.0, "Y"))
    return line("full") + sk


def go_to(p, key, end, kind="block", delay=0.0, speed=None, via=()):
    """Move `key` through absolute (d, w) points `via` to `end`, as a block, path, run or motion."""
    start = np.array(p._cur(key))
    pts = [tuple(np.array(q) - start) for q in (*via, end)]
    if kind == "block":
        return p.block(key, pts=pts, delay=delay, speed=speed)
    if kind == "pull":
        return p.pull(key, pts, delay=delay, speed=speed)
    if kind == "motion":
        return p.motion(key, pts=pts, speed=speed)
    return {"path": p.path, "run": p.run}[kind](key, pts, delay=delay, speed=speed)


def _P(fld, p, d, w):
    return fld.xy(*p.to_abs(d, w))


def say(fld, p, d, w, text, color=style.INK_2, fontsize=7.5, 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,
                bbox=dict(boxstyle="round,pad=0.18", fc=style.SURFACE, ec="none", alpha=0.9))


def point_to(fld, p, text_at, target, text, color=style.INK_2, fontsize=7, shrink=7):
    """A label with a thin leader line to the player or spot it names."""
    (xt, yt), (xp, yp) = _P(fld, p, *text_at), _P(fld, p, *target)
    fld.ax.annotate(text, (float(xp), float(yp)), xytext=(float(xt), float(yt)), fontsize=fontsize,
                    color=color, ha="center", va="center", zorder=9,
                    arrowprops=dict(arrowstyle="-", color=color, lw=0.7, shrinkA=2, shrinkB=shrink),
                    bbox=dict(boxstyle="round,pad=0.18", fc=style.SURFACE, ec="none", alpha=0.9))


def gap_tag(fld, p, d, w, text, color=GREEN, fontsize=8.5):
    """A gap letter in a small rounded box."""
    x, y = _P(fld, p, d, w)
    fld.ax.text(x, y, text, fontsize=fontsize, color=color, ha="center", va="center", zorder=9,
                fontweight="bold", bbox=dict(boxstyle="round,pad=0.2", fc=style.SURFACE, ec=color, lw=1.0))


def spot(fld, p, d, w, color=style.DEFENSE_DARK, ms=10):
    """Mark a point (a tackle, a meeting point) with an X."""
    x, y = _P(fld, p, d, w)
    fld.ax.plot([x], [y], marker="X", ms=ms, color=color, mec="white", mew=0.8, zorder=12)


def lane(fld, p, w0, w1, d0, d1, color=style.OFFENSE, alpha=0.10, ls=(0, (3, 2))):
    """Shade a rectangular lane (a run lane, a gap) from width w0 to w1 and depth d0 to d1."""
    (x0, y0), (x1, y1) = _P(fld, p, d0, w0), _P(fld, p, d1, w1)
    fld.ax.add_patch(Rectangle((min(x0, x1), min(y0, y1)), abs(x1 - x0), abs(y1 - y0), fc=color, alpha=alpha,
                               ec=color, lw=0.9, ls=ls, zorder=0.8))


def dashed(fld, p, pts, color=style.THIRD, lw=1.5, dash=(0, (3, 2.2)), end="arrow"):
    """A dashed 'what if' or 'intent' path through absolute (d, w) points."""
    xs, ys = _P(fld, p, np.array([q[0] for q in pts]), np.array([q[1] for q in pts]))
    xs, ys = np.asarray(xs, float), np.asarray(ys, float)
    if end == "arrow":
        hx, hy = xs[-2] + 0.75 * (xs[-1] - xs[-2]), ys[-2] + 0.75 * (ys[-1] - ys[-2])
        xs = np.concatenate([xs[:-1], [hx, xs[-1]]]); ys = np.concatenate([ys[:-1], [hy, ys[-1]]])
        fld.ax.plot(xs[:-1], ys[:-1], color=color, lw=lw, ls=dash, zorder=6)
        fld.ax.add_patch(FancyArrowPatch((xs[-2], ys[-2]), (xs[-1], ys[-1]), arrowstyle="-|>",
                                         mutation_scale=10, color=color, lw=lw, zorder=6))
    else:
        fld.ax.plot(xs, ys, color=color, lw=lw, ls=dash, zorder=6)


def bracket(fld, p, d, w0, w1, color=style.DEFENSE_DARK, lw=2.0):
    """A bar spanning the gaps a defender owns, with end ticks."""
    (xa, ya), (xb, yb) = _P(fld, p, d, w0), _P(fld, p, d, w1)
    fld.ax.plot([xa, xb], [ya, yb], color=color, lw=lw, solid_capstyle="butt", zorder=5)
    for w in (w0, w1):
        (x0, y0), (x1, y1) = _P(fld, p, d - 0.32, w), _P(fld, p, d + 0.32, w)
        fld.ax.plot([x0, x1], [y0, y1], color=color, lw=lw, zorder=5)


def hand(fld, p, d, w, half=0.66):
    """A hand on the ground: a dark knob on the front edge of a defender's square marker."""
    x, y = _P(fld, p, d - half, w)
    fld.ax.add_patch(Circle((float(x), float(y)), 0.26, fc=style.DEFENSE_DARK, ec="white", lw=0.5, zorder=11))


def hands(fld, p, keys, t=None, half=0.66):
    for k in keys:
        d, w = (p.players[k].d, p.players[k].w) if t is None else p.position(k, t)
        hand(fld, p, d, w, half)


def clean(ax):
    """Box-zoomed diagrams: drop hash ticks and yard numbers, clip anything outside the window."""
    for ln in list(ax.lines):
        xs, ys = ln.get_data()
        if len(xs) == 2 and ln.get_linewidth() == 0.5 and np.hypot(xs[1] - xs[0], ys[1] - ys[0]) < 1.0:
            ln.remove()
    for t in list(ax.texts):
        if t.get_text().isdigit() and t.get_alpha() == 0.55:   # yard numbers, not technique labels
            t.remove()
        else:
            t.set_clip_on(True)


def draw(p, width_in=5.8, ax=None, keep_numbers=False, **kw):
    """Play.draw, sized for the page, cleaned for a box-sized window."""
    fld = p.draw(width_in=width_in, ax=ax, **kw)
    if not keep_numbers:
        clean(fld.ax)
    return fld


def front(spec, lbs=(), others=()):
    """Defensive linemen from (key, technique, side) triples, labelled with their technique number,
    plus (key, d, w, label) linebackers / edges and any other defenders."""
    out = [D(k, "DL", 1.0, T(t, s), t) for k, t, s in spec]
    out += [D(k, "LB", d, w, lab) for k, d, w, lab in lbs]
    out += [D(k, "S", d, w, lab) for k, d, w, lab in others]
    return out


def secondary(nickel_w=None, high=11.5, safety_w=7.5):
    """Two corners on X and Z, two deep safeties and (optionally) a nickel back at apex width."""
    out = [D("LCB", "CB", 7.0, -15.0, "C"), D("RCB", "CB", 7.0, 15.0, "C"),
           D("FS", "FS", high, -safety_w, "FS"), D("SS", "SS", high, safety_w, "SS")]
    if nickel_w is not None:
        out.append(D("NB", "NB", 4.6, nickel_w, "$"))
    return out


def box_outline(fld, p, w0, w1, d0=-0.2, d1=6.6, text=None, text_at=None):
    """The box, as a faint dashed outline, with an optional count label."""
    (x0, y0), (x1, y1) = _P(fld, p, d0, w0), _P(fld, p, d1, w1)
    fld.ax.add_patch(Rectangle((min(x0, x1), min(y0, y1)), abs(x1 - x0), abs(y1 - y0), fc="none",
                               ec=style.MUTED, lw=1.0, ls=(0, (4, 2.5)), zorder=1.5))
    if text:
        say(fld, p, *(text_at or (d1 + 0.9, (w0 + w1) / 2)), text, color=style.INK, fontsize=7.2, weight="bold")


# --- frame strips (PDF) and video (web) for the simulated plays --------------------------------------
MARK_R = 0.62


def tracking(play):
    df = play.to_tracking()
    df["_id"] = df["displayName"].astype(str)
    return df


def panel(ax, play, df, t, lateral, window, rings=(), enter=(), ring_r=0.85, relabel=None):
    """One moment of a simulated play on `ax`: markers, trails of on-screen players, rings.
    `relabel(key, t)` may return a new label for a player at time t (a lineman who changes technique)."""
    tmap = df.groupby("frameId")["time"].first()
    fid = int((tmap - t).abs().idxmin())
    ylo, yhi = sorted((play.ball_y - lateral[0], play.ball_y - lateral[1]))
    fld = Field(ax=ax, orient="vertical", los=play.los, window=window, numbers=False, hashes=False,
                lateral=(ylo, yhi), to_go=play.to_go)
    cur = df[df["frameId"] == fid]
    snap = df[df["frameId"] == int((tmap - 0.0).abs().idxmin())]
    first = snap[snap["x"].between(play.los + window[0] + 0.8, play.los + window[1] - 0.8)
                 & snap["y"].between(ylo + 0.8, yhi - 0.8)]
    ids = set(first["_id"]) | {"football"}
    inside = cur[cur["x"].between(play.los + window[0], play.los + window[1]) & cur["y"].between(ylo, yhi)]
    ids |= set(inside["_id"]) & set(enter)
    shown = cur[cur["_id"].isin(ids) | (cur["side"] == "ball")]
    trails = df[(df["frameId"] <= fid) & df["_id"].isin(ids) & (df["side"] != "ball")]
    for (_, side), g in trails.groupby(["_id", "side"]):
        xs, ys = fld.xy(g["x"].values, g["y"].values)
        ax.plot(xs, ys, color=style.OFFENSE if side == "off" else style.DEFENSE, lw=0.9, alpha=0.4, zorder=3)
    ppy = fld.pts_per_yard()
    for _, r in shown.iterrows():
        x, y = (float(v) for v in fld.xy(r["x"], r["y"]))
        if r["side"] == "ball":
            ax.add_patch(Ellipse((x, y + 0.45), 0.7, 0.42, fc=style.BALL, ec="white", lw=0.5, zorder=9))
            continue
        lab = str(r.get("label", "") or "")
        if relabel is not None and r["side"] == "def":
            lab = relabel(str(r["displayName"]), t) or lab
        if r["side"] == "off":
            ax.add_patch(Circle((x, y), MARK_R, fc=style.OFFENSE, ec="white", lw=0.6, zorder=8))
            tc = "white"
        else:
            ax.add_patch(RegularPolygon((x, y), 4, radius=MARK_R * 1.3, orientation=np.pi / 4,
                                        fc=style.DEFENSE_TINT, ec=style.DEFENSE, lw=1.0, zorder=8))
            tc = style.INK
        fs = max(4.0, min(8.0, ppy * (0.85 if len(lab) <= 1 else 0.62)))
        ax.text(x, y, lab, ha="center", va="center", fontsize=fs, color=tc, fontweight="bold", zorder=10)
    for key, col in rings:
        r = cur[cur["displayName"] == key].iloc[0]
        x, y = fld.xy(r["x"], r["y"])
        ax.add_patch(Circle((float(x), float(y)), ring_r, fc="none", ec=col, lw=1.6, zorder=7))
    for patch in ax.patches:
        patch.set_clip_on(True)
    return fld


def strip(moments, lateral, window, notes=None, rings=(), ncols=2, width_in=5.2, after=None, enter=(),
          relabel=None):
    """Numbered frame strip. `moments` is a list of (play, t, tag)."""
    cache = {}
    nrows = int(np.ceil(len(moments) / ncols))
    pw = width_in / ncols
    span_w, span_d = lateral[1] - lateral[0], window[1] - window[0]
    fig, axes = plt.subplots(nrows, ncols, squeeze=False,
                             figsize=(width_in, nrows * (pw * span_d / span_w + (0.62 if notes else 0.25))))
    for ax in axes.flat[len(moments):]:
        ax.axis("off")
    for i, (ax, (play, t, tag)) in enumerate(zip(axes.flat, moments)):
        if id(play) not in cache:
            cache[id(play)] = tracking(play)
        fld = panel(ax, play, cache[id(play)], t, lateral, window, rings, enter, relabel=relabel)
        if after:
            after(fld, play, t, i)
        lab = "snap" if abs(t) < 1e-6 else f"{t:+.1f} s"
        ax.set_title(f"{i + 1}.  {lab}" + (f"   {tag}" if tag else ""), fontsize=8.3, color=style.INK_2, loc="left")
        if notes:
            ax.text(0.5, -0.03, notes[i], transform=ax.transAxes, ha="center", va="top",
                    fontsize=7.1, color=style.INK)
    fig.tight_layout(h_pad=1.3 if notes else 0.6, w_pad=0.6)
    return fig


def video(segments, lateral, window, rings=(), width_in=4.6, after=None, enter=(), relabel=None):
    """Web version: each (play, tag, [(t, note), ...]) segment played in turn, notes as captions."""
    import shutil
    from matplotlib import animation
    from IPython.display import HTML, display
    span_w, span_d = lateral[1] - lateral[0], window[1] - window[0]
    fig, ax = plt.subplots(figsize=(width_in, width_in * span_d / span_w + 0.45))
    frames = []
    for play, tag, notes in segments:
        df = tracking(play)
        tmap = df.groupby("frameId")["time"].first()
        frames += [(play, df, float(tmap[f]), tag, notes) for f in sorted(df["frameId"].unique())]

    def update(k):
        play, df, t, tag, notes = frames[k]
        ax.clear()
        fld = panel(ax, play, df, t, lateral, window, rings, enter, relabel=relabel)
        if after:
            after(fld, play, t, -1)
        txt = ("snap" if abs(t) < 0.05 else f"{t:+.1f} s") + (f"  {tag}" if tag else "")
        cur = [n for tt, n in notes if tt <= t + 1e-6]
        ax.set_title(txt + (("\n" + cur[-1].replace("\n", " ")) if cur else ""), fontsize=8.5, color=style.INK,
                     loc="left")
        return []

    anim = animation.FuncAnimation(fig, update, frames=range(len(frames)), interval=100)
    html = (anim.to_html5_video(embed_limit=40).replace("<video ", '<video style="max-width:100%;height:auto" ')
            if shutil.which("ffmpeg") else anim.to_jshtml(default_mode="once"))
    plt.close(fig)
    display(HTML(html))


def animation_or_strip(moments, notes, lateral, window, rings=(), after=None, enter=(), ncols=2, width_in=5.2,
                       relabel=None):
    """Video on the website; a numbered, captioned frame strip in the PDF."""
    if pdf_build():
        strip(moments, lateral, window, notes=notes, rings=rings, ncols=ncols, width_in=width_in,
              after=after, enter=enter, relabel=relabel)
        plt.show()
        return
    segs = []
    for play, t, tag in moments:
        if not segs or segs[-1][0] is not play:
            segs.append((play, tag, []))
    for (play, t, tag), n in zip(moments, notes):
        for s in segs:
            if s[0] is play:
                s[2].append((t, n))
    video(segs, lateral, window, rings=rings, after=after, enter=enter, relabel=relabel)

The graphic in the corner of the screen says the defense is in a 3-4. You count. Four players at the line of scrimmage, two of them standing up, two with a hand on the ground. Next snap, after a substitution you barely notice (a huge man jogging on, a linebacker jogging off), there are five across the line, three of them enormous and wedged inside the offensive tackles, with a single linebacker behind them. The offense hands the ball to its running back on an inside run, the kind that worked all afternoon last week, and he runs into a wall two yards deep. No blocker ever touched the linebacker. “That’s their tite front,” says the analyst. “Three big bodies inside, and nobody can get to the second level.” So which is it: a 3-4, a four-man line, a five-man line? And how did a defense with only six men near the ball stop a run aimed at six blockers? This chapter is about the other family of fronts, the odd ones, and about why, in the modern game, the names on the graphic tell you less than the picture on the field.

You’ll be able to:

NoteYou’ll need
  • Even Fronts: an even front has nobody head-up on the center (the 4-3 Over puts its 3-technique toward the tight end, the Under away from him), and every even front has a rule, usually tied to the tight end, that tells you where the linemen will line up.
  • Defensive Line Play: technique numbers from the defense’s side (the 0 nose, the 3, the 4i, 4 and 5 on the tackle, the 9 and the wide-9), one-gap versus two-gap, setting the edge and contain.
  • A First Look at Defense: base defenses (the 4-3 and the 3-4), nickel, the box and the light box, and two-high safety shells.
  • Zone Running: inside and outside zone, double teams that climb to linebackers, and the cutback.

How to read the diagrams. As in the rest of Part 5: offense is blue circles, defense orange squares, plays go up the page, and left and right are always the offense’s left and right. Defensive linemen are labelled with their technique number (a 0 is a nose head-up on the center, a 4i is on a tackle’s inside shoulder). E is an edge player standing up at the end of the line; M and W are inside linebackers; $ is the nickel back; C a cornerback; FS and SS the safeties. Offensive linemen are LT, LG, C, RG, RT, shortened to T G C G T in the smaller panels; R is the running back and F a fullback. New in this chapter: a dark dot on the front edge of a defender’s square is a hand on the ground. A square with no dot is a player standing up. Counting dots is how you will tell fronts apart, because counting players stopped working a long time ago.

Odd and even: who is on the center?

Every front in football starts with one question, and you can answer it from the couch: is anybody lined up head-up on the center?

Show the Python
fig, axes = plt.subplots(1, 2, figsize=(6.6, 3.2))
OFF = line("short") + [te(+1), O("QB", "QB", -1.9, 0, "Q"), O("RB", "RB", -6.2, 0, "R")]
even = front([("LE", "5", -1), ("L1", "1", -1), ("R3", "3", 1), ("RE", "5", 1)],
             lbs=[("WILL", 4.5, -2.0, "W"), ("MIKE", 4.5, 0.8, "M"), ("SAM", 4.2, 6.2, "S")])
odd = front([("LE", "5", -1), ("NT", "0", 1), ("RE", "5", 1)],
            lbs=[("WILL", 4.6, -2.0, "W"), ("MIKE", 4.6, 2.0, "M")],
            others=[("LOLB", 1.0, -6.2, "E"), ("ROLB", 1.0, 6.2, "E")])
for ax, dfn, ttl, hd, msg in [
        (axes[0], even, "Even: nobody on the center", ("LE", "L1", "R3", "RE"), "nobody head-up:\nat most a shade"),
        (axes[1], odd, "Odd: a nose on the center", ("LE", "NT", "RE"), "the nose is\nhead-up on him")]:
    p = Play(OFF, dfn, los=35, to_go=None)
    f = draw(p, ax=ax, lateral=(-8.2, 8.6), window=(-7.6, 7.0), title=False)
    hands(f, p, hd)
    point_to(f, p, (-3.6, -4.3), (-0.7, 0.0), msg, color=style.DEFENSE_DARK, fontsize=6.8, shrink=6)
    ax.set_title(ttl, fontsize=9, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.7)
plt.show()
Figure 30.1: The one-glance test. Left, an even front (the 4-3 Over of Even Fronts): the two defensive tackles split the center between them, one shaded on his shoulder (the 1) and one outside a guard (the 3), and nobody stands directly over the ball; the ends are in 5s and the Sam (S) is off the ball outside the tight end. Right, an odd front (the 3-4 Okie of this chapter): a nose tackle head-up on the center (the 0), with an end on each offensive tackle and a stand-up edge (E) at each end of the line. Dark dots are hands on the ground: four in the even front, three in the odd one. Both have seven players in the front.

If nobody is head-up on the center, the front is even: the defensive tackles line up on or around the guards, the center is uncovered or only shaded, and you are looking at one of the four-man fronts of Even Fronts. If a big man stands right over the ball, nose to nose with the center, the front is odd: it is balanced around a 0-technique nose tackle. The classic odd fronts have three down linemen (the 3-4, which puts five on the line once you count its two standing outside linebackers) or five (the old 5-2), rather than four.

Why does one alignment decide the family? Because of what it does to the offensive line’s arithmetic. In an even front, nobody is square in front of the center: at most a tackle shaded on one of his shoulders, a man he can work on together with a guard, and often nobody at all, in which case he is free to help or to climb to a linebacker. The defense has eased the center’s job in exchange for putting its tackles where they can attack the guards. In an odd front, the center has a man in his face on every snap, and a nose head-up on him is responsible for both A gaps, one on each side of the center. The center can’t block him alone at a good angle in either direction, so one of the two guards usually has to help. That is the founding idea of every odd front: put a heavy man on the center, make the offense spend two blockers on him, and let somebody else run free. You met that nose in Defensive Line Play. This chapter is about the fronts built around him.

A warning before we start, which the rest of the chapter will keep proving: “odd” and “even” describe where linemen stand, not who is on the roster. A team that calls itself a 3-4 team plays an even front on plenty of snaps, and a 4-3 team can put a nose on the center. Keep your eyes on the center.

The 3-4 Okie

The 3-4 Okie is the classic 3-4, the one drawn in every coaching book: a nose head-up on the center, a defensive end on each offensive tackle, a stand-up edge at each end of the line, and two inside linebackers behind the guards. The name is short for Oklahoma, because the alignment is Bud Wilkinson’s Oklahoma 5-2 of the late 1940s and 1950s with its two outside men standing up (more on that history below).

Show the Python
OFF21 = line("short") + [te(+1), O("QB", "QB", -1.9, 0, "Q"), O("FB", "FB", -4.5, 0, "F"), O("RB", "RB", -7.0, 0, "R"),
                        O("X", "WR", -0.7, -15.0, "X"), O("Z", "WR", -1.5, 15.0, "Z")]
OKIE = front([("LE", "5", -1), ("NT", "0", 1), ("RE", "5", 1)],
             lbs=[("WILL", 4.6, -2.1, "W"), ("MIKE", 4.6, 2.1, "M")],
             others=[("LOLB", 1.0, -6.2, "E"), ("ROLB", 1.0, 6.2, "E")]) + secondary(high=12.0, safety_w=8.0)
p = Play(OFF21, OKIE, los=35, to_go=10, title="The 3-4 Okie vs 21 personnel")
f = draw(p, width_in=6.4, lateral=(-18.5, 18.5), window=(-9.5, 15.5))
hands(f, p, ("LE", "NT", "RE"))
point_to(f, p, (-4.6, -7.4), (0.5, -0.1), "nose (0): head-up\non the center", color=style.DEFENSE_DARK, fontsize=7)
point_to(f, p, (-4.6, 8.4), (0.5, 4.0), "ends on the tackles\n(5s here; 4s to two-gap)", color=style.DEFENSE_DARK,
         fontsize=7)
point_to(f, p, (3.7, -11.4), (1.0, -6.7), "stand-up edges (E):\nrush, set the edge, drop", color=style.DEFENSE_DARK,
         fontsize=7)
point_to(f, p, (8.3, 0.0), (5.2, -1.6), "inside LBs behind the guards:\nthe men the front keeps clean",
         color=style.DEFENSE_DARK, fontsize=7, shrink=8)
plt.show()
Figure 30.2: The 3-4 Okie against a two-back, one-tight-end offense (21 personnel, the kind of offense it was built for), all eleven defenders. Three hands on the ground: the nose (0), head-up on the center, and the two ends, here in 5-techniques on the tackles’ outside shoulders (in the two-gap version they line up head-up, in a 4). At each end of the line a stand-up edge (E): on the tight-end side on Y’s outside shoulder (a 9), on the open side a couple of yards outside the tackle. Two inside linebackers (M and W) stand about four and a half yards deep behind the guards, where no lineman blocks them unless a guard leaves to do it. Four defensive backs: two cornerbacks (C) on the wide receivers and two safeties (FS, SS) deep.

Read Figure 30.2 as a list of jobs, the way you learned to in Defensive Line Play.

  • The nose takes on the center, and very often a guard as well. He is usually the heaviest man on the defense, because his whole value is in not moving.
  • The ends sit on the offensive tackles. In the classic version they are head-up there, in a 4-technique, and they control the tackle and play the gap on either side of him. Others line up on the tackle’s outside shoulder, a 5. They are long and strong, the 290-to-320-pound bodies built to lock out a tackle at arm’s length.
  • The outside linebackers are standing up at each end of the line. Against the run they set the edge; against the pass, one or both rush; and on some snaps one drops into coverage. They are the lightest players in the front, edge rushers in all but stance.
  • The inside linebackers stand behind the guards, and here is the design’s point. Count the offensive linemen who don’t have a defender on or near them before the snap: the two guards. In zone-blocking terms they are uncovered (Zone Running), and an uncovered guard wants to climb straight to a linebacker. The Okie’s whole design is to make that impossible: the nose is too much for the center alone, so one guard has to stay and help; the ends hold the tackles so they can’t climb either. If the front does its job, at most one blocker reaches the second level, and two linebackers are left to make tackles.

One alignment, two ways to play it

What the front does after the snap is a separate choice from where it lines up. A 3-4 can be a two-gap front, in which the three linemen control blockers and read, or a one-gap front, in which every defender attacks a gap at the snap. You learned the difference player by player in Defensive Line Play. Here is what each looks like across the whole front.

Show the Python
GAPS = [(-4.0, "C"), (-2.4, "B"), (-0.8, "A"), (0.8, "A"), (2.4, "B"), (4.0, "C"), (5.95, "D")]


def owners(f, p, groups, d=-3.0):
    """Under the gap letters: a bar spanning the gap(s) each player owns, with his label beneath it."""
    for w0, w1, lab in groups:
        bracket(f, p, d, w0 - 0.35, w1 + 0.35, lw=1.6)
        say(f, p, d - 0.75, (w0 + w1) / 2, lab, color=style.DEFENSE_DARK, fontsize=7, weight="bold")


fig, axes = plt.subplots(1, 2, figsize=(6.6, 4.0))
SHORT_OFF = line("short") + [te(+1)]
# two-gap 0-4-4
dfn = front([("LE", "4", -1), ("NT", "0", 1), ("RE", "4", 1)],
            lbs=[("WILL", 4.7, -2.0, "W"), ("MIKE", 4.7, 2.0, "M")],
            others=[("LOLB", 1.0, -5.9, "E"), ("ROLB", 1.0, T("9"), "E")])
p = Play(SHORT_OFF, dfn, los=35, to_go=None)
f = draw(p, ax=axes[0], lateral=(-8.4, 8.4), window=(-5.4, 7.6), title=False)
hands(f, p, ("LE", "NT", "RE"))
for w, g in GAPS:
    gap_tag(f, p, -2.2, w, g)
owners(f, p, [(-4.0, -2.4, "4"), (-0.8, 0.8, "0"), (2.4, 4.0, "4"), (5.95, 5.95, "E")])
say(f, p, 6.5, 0.0, "M and W: read, then fill", color=GREEN, fontsize=6.9, weight="bold")
say(f, p, 2.6, -6.3, "sets the\nedge", color=style.DEFENSE_DARK, fontsize=6.6)
axes[0].set_title("Two-gap 3-4: control, then read", fontsize=8.8, loc="left", color=style.INK, fontweight="bold")
# one-gap: shaded, each into a gap
dfn = front([("LE", "3", -1), ("NT", "1", 1), ("RE", "5", 1)],
            lbs=[("WILL", 4.7, -1.4, "W"), ("MIKE", 4.7, 2.6, "M")],
            others=[("LOLB", 1.0, -5.6, "E"), ("ROLB", 1.0, 6.2, "E")])
p = Play(SHORT_OFF, dfn, los=35, to_go=None)
for k, end in [("LOLB", (-0.6, -4.35)), ("LE", (-0.35, -2.45)), ("NT", (-0.35, 0.82)), ("RE", (-0.35, 4.02)),
               ("ROLB", (-0.6, 6.05))]:
    go_to(p, k, end, "path", speed=3.0)
for k, end in [("MIKE", (2.0, 2.4)), ("WILL", (2.0, -0.85))]:
    go_to(p, k, end, "path", speed=3.0)
f = draw(p, ax=axes[1], lateral=(-8.4, 8.4), window=(-5.4, 7.6), title=False)
hands(f, p, ("LE", "NT", "RE"))
for w, g in GAPS:
    gap_tag(f, p, -2.2, w, g)
owners(f, p, [(-4.0, -4.0, "E"), (-2.4, -2.4, "3"), (-0.8, -0.8, "W"), (0.8, 0.8, "1"), (2.4, 2.4, "M"),
              (4.0, 4.0, "5"), (5.95, 5.95, "E")])
say(f, p, 6.5, 0.0, "each man attacks one gap", color=style.DEFENSE_DARK, fontsize=6.9, weight="bold")
axes[1].set_title("One-gap 3-4: shaded, then attack", fontsize=8.8, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.7)
plt.show()
Figure 30.3: Two 3-4s against the same one-tight-end offense, with each defender’s gaps (the bars under the gap letters) and first steps (arrows). Left, two-gap: the nose (0) and the two ends, head-up on the tackles in 4-techniques, each own the two gaps on either side of their blocker; the edge (E) on the tight end owns the D gap; the open-side edge sets the edge outside. Six gaps need only three linemen, so both inside linebackers start with no gap at all: they read and fill wherever the ball goes. Right, one-gap: the same personnel lined up shaded, each man aimed at one gap (arrows). The nose shades to the tight-end side (a 1) and attacks that A gap; the open-side end moves down to a 3 on the guard and takes the B gap; the tight-end-side end takes the C gap from a 5; the edges take the outside gaps, and the linebackers fill the two gaps left over (the Mike the B gap toward the tight end, the Will the other A gap). If you have read Even Fronts, the right-hand picture should look familiar: it is the 4-3 Under with the Sam called an outside linebacker.

The two-gap 3-4 is the old-school version, and its appeal is the math in the left half of Figure 30.3. Three linemen can hold six gaps if each of them can stand up a blocker and play either side of him. That leaves the two inside linebackers gap-free: they don’t have to guess at the snap; they watch the play develop and run to the ball, and the linemen in front of them keep the blockers off them. (Against one back, that is. Against a fullback, like the one in Figure 30.2, the offense has an extra blocker who can lead through a hole, and one inside linebacker has to meet him there while the other fills off the nose; Linebackers has that fight.) Bill Parcells’s New York Giants of the 1980s played it, with Bill Belichick as his defensive coordinator, and Belichick’s New England Patriots of the 2000s played it with linemen like Vince Wilfork, Richard Seymour and Ty Warren, all built like the job: big, long and patient.1

The cost, as Defensive Line Play explained, is that two-gappers are always reacting. They rarely make plays behind the line or sack the quarterback, they need bodies the draft produces only a few of each year, and on passing downs the defense usually has to take the nose off for someone quicker.

The one-gap 3-4 keeps the personnel and changes the job. Line the ends up shaded into gaps, shade the nose, and tell every defender to attack his gap at the snap, and the 3-4 becomes an attacking front. The right half of Figure 30.3 shows the most common way to do it, and it holds a secret: lined up this way, a “3-4” is almost exactly the 4-3 Under of Even Fronts, a nose shaded to the tight end, a 3-technique away from him, a 5 and a 9 to the tight end’s side, with the Sam linebacker called an outside linebacker and standing up. Run this chapter’s one-glance test on it: nobody is head-up on the center any more, so by alignment this “3-4” is an even front.

That is why “3-4” by itself is a weak clue. The number of linemen tells you how many there are; their alignment and first step tell you how they play. A two-gapper’s first step goes into the blocker, hands first, and he stays at the line. A one-gapper’s goes into a gap, and he is across the line before the blocker has finished his first step. Watch the ends for two snaps and you will know which 3-4 you are watching.

ImportantWhy it exists

The 3-4 trades linemen for linebackers, and two-gap play is what makes that trade affordable. Take a defensive lineman off the field and put a linebacker on, and you gain a player who can rush, drop into coverage or fill a run lane, and who keeps the offense guessing which of those he’ll do. You lose one big body at the line. The two-gap 3-4 covers the loss with technique: three linemen hold six gaps, and the linebackers run free. The one-gap 3-4 covers it with movement and speed: every man attacks, and the extra linebacker is just one more fast player who can come from anywhere. Either way, the defense is betting that a fourth linebacker is worth more than a fourth lineman. In an era of spread offenses, three-receiver sets and quarterbacks who throw on first down, that bet has mostly paid.

Where the 3-4 came from (and why nobody agrees)

Ask who invented the 3-4 and you will get at least four answers, each true about something. The honest version is a family tree, not a birth certificate.

The ancestors: five men on the line. In 1947 Earle “Greasy” Neale, the Philadelphia Eagles’ head coach, built his defense around a five-man line with two linebackers behind it. It was called the Eagle defense, and the Eagles won NFL championships with it in 1948 and 1949.2 Bud Wilkinson took the five-man line to the University of Oklahoma, where it became the Oklahoma 5-2, the defense behind his Sooners’ 47-game winning streak in the 1950s. (That is where Okie comes from.) Now look at a 5-2 the way a coach of the 1970s did. The two men at the ends of the line were defensive ends, but they were usually smaller and quicker than the three linemen inside them, and their jobs were to set the edge and, on some plays, to drop. Stand them up, call them linebackers, and the same seven players become three linemen and four linebackers. Nobody had to invent the 3-4; it was hiding inside the 5-2.3

The NFL arrivals, early 1970s: several claimants.

  • Bill Arnsparger, Miami, 1972. The Dolphins’ defensive coordinator under Don Shula had a linebacker, Bob Matheson, who could play with his hand on the ground or standing up. Arnsparger moved him around the front, sometimes as a fourth linebacker, sometimes as a rushing end, and the package was named for his jersey: the 53 defense. The Dolphins went 17–0. Was it a 3-4? On some snaps, yes, and it is often named as the 3-4’s NFL ancestor; the story belongs to The 1978 Liberation.4
  • Chuck Fairbanks, New England, 1974. Fairbanks had coached the Oklahoma 5-2 as the Sooners’ head coach, and when he took over the Patriots he brought it with him, standing up its ends. His 1974 Patriots are usually named as the first NFL team to use the 3-4 as their regular base defense.5
  • Bum Phillips, Houston, 1974–75. Phillips, the cowboy-hatted Texan who had devised the technique numbers you have been using since The Language of the Run Game, was the Oilers’ defensive coordinator under Sid Gillman, and had talked Gillman into a 3-4, when they traded for nose tackle Curley Culp in October 1974; he kept the 3-4 when he became head coach in January 1975. Culp, a former NCAA heavyweight wrestling champion at Arizona State, was strong enough to need two blockers, and Phillips gave him the credit: “Curley made [the 3-4 defense] work. He made me look smart.”6

The boom and the bust. Within a few years the 3-4 was everywhere. John Madden’s Raiders switched to it in 1976, after injuries thinned their defensive line, and won the Super Bowl; Arnsparger’s Dolphins went to it full time in 1977; and by the late 1970s and early 1980s it was the league’s most common base defense.7 Then offenses changed again, the one-back passing games of the 1980s and 1990s made four-man fronts with fast defensive ends fashionable, and by the mid-1990s only a handful of teams, most notably Buffalo and Pittsburgh, still lined up in a 3-4. The revival came in the 2000s, led by the Steelers and Belichick’s Patriots, and took a new shape that the rest of this chapter is about: the stand-up edge rusher, the one-gap 3-4, and in the 2020s the five-man tite front. The longer arc, including the 3-4’s role in the rise of the hybrid edge (the stand-up edge below, treated as a position of its own: part end, part linebacker), is in Dynasties and Counterpunches and The Single Wing to the Scoring Drought.

So who invented it? Wilkinson’s 5-2 supplied the alignment, Arnsparger the idea of a hybrid end-linebacker, Fairbanks and Phillips the commitment to it as a base defense, and Madden the Super Bowl that sold it. That is the usual shape of football history: a problem (offenses running more and throwing more on early downs), several smart people solving it in the same few years, and credit that depends on whom you ask.

The stand-up edge

The 3-4’s most important legacy isn’t the nose. It is the player at the end of the line who isn’t sure whether he is a lineman or a linebacker, and doesn’t need to be.

A stand-up edge lines up at the end of the line of scrimmage in a two-point stance, standing, instead of with a hand in the dirt. In a 3-4 he is called an outside linebacker, and the roster lists him that way; on the field, most snaps, he is an edge rusher doing a defensive end’s job. Lawrence Taylor in the 1980s, Kevin Greene and Greg Lloyd in the 1990s, DeMarcus Ware and Von Miller in the 2000s and 2010s, T.J. Watt today: the most feared pass rushers of the 3-4 era stood up.

Why stand? Three reasons, each a trade.

  1. Vision and options. Standing, he sees the whole backfield, and he can move in any direction at the snap: rush, take on a blocker, or turn and drop into coverage. A lineman in a three-point stance, weight forward on his hand, is committed to going forward. The offense can’t rule out a drop from a standing edge, so it can’t be sure who is rushing. That uncertainty is the seed of the simulated pressures of Part 7: four-man rushes in which a lineman drops into coverage and a player the offense didn’t count rushes instead.
  2. Width and a view of the tackle. Standing, he can align wider and watch how the tackle sets before he commits to an inside or outside move. It isn’t a free win: plenty of rushers still prefer a hand down for a faster get-off on obvious passing downs.
  3. Disguise. A front with two standing edges can become a four-man line, a five-man line or a three-man rush without anyone substituting. That is the trick behind the opening of this chapter, and it gets its own animation below.

What it costs. Mostly leverage against the run. A defender in a three-point stance comes out low, and the low man wins at the line; a standing edge has to sink as he takes on a tackle or a tight end, or he gets pushed upfield and the edge goes soft. That is why the stand-up edges who last are the ones who can set the edge as well as rush (in Defensive Line Play’s terms, who keep their outside arm free against a 300-pound tackle), and why many of them put a hand down in short yardage and at the goal line, where leverage is everything. The most common hand-down moment of all is on passing downs in nickel, when the 3-4 outside linebacker becomes, in everything but the roster, a 4-2-5’s defensive end (more on that below). The body type is in between, too: usually 245 to 265 pounds, lighter than a defensive end, heavier than an inside linebacker. Teams that play four-man fronts draft the same players and call them defensive ends. The player is the same; the label follows the scheme.

CautionCommon misconception

“A 3-4 outside linebacker is a linebacker, so he covers people.” Some do, some of the time. Most of the great ones spend the large majority of their passing-down snaps rushing the quarterback. When you see a 3-4 outside linebacker drop into coverage, it is usually a deliberate surprise, designed to put a defender where the quarterback expected an empty space, not his everyday job.

The Phillips branch: the attacking 3-4

The 3-4’s revival in the 2000s split along the line from Figure 30.3. Belichick’s Patriots and the Steelers kept versions that leaned on two-gap play up front. The other branch came from one family, the Phillipses.

Wade Phillips, Bum’s son and his linebackers coach in Houston from 1976 to 1980, spent four decades as a coordinator and head coach running his father’s 3-4, and running it the attacking way, not the two-gap way the Parcells and Belichick branch made famous.8 Phillips’s linemen were shaded into gaps and attacked them; his outside linebackers rushed; the ends were penetrators, not anchors. When he took over the Houston Texans’ defense in 2011, the team’s own preview called it “his one-gap scheme,” and the line coach said it was “not like a two-gap type defense where you need that 350-pound nose man.”9 The proof arrived the following year, when the Texans’ 5-technique end, J.J. Watt, led the league with 20.5 sacks and was Defensive Player of the Year: the end of a 3-4, the position that used to exist to let linebackers make tackles, had become the defense’s best pass rusher.10

Four years later Phillips took the same ideas to Denver, where the 2015 Broncos allowed the fewest yards in the league and won Super Bowl 50 with two stand-up edges, Von Miller and DeMarcus Ware, chasing the quarterback.11 Their film room is below.

A two-gap 3-4 and a one-gap 3-4 use the same eleven bodies and ask opposite things of them. The modern descendants of both branches meet in one front, which is next: it has a two-gap nose like Belichick’s and one-gap linemen beside him like Phillips’s.

The tite front: walling off the middle

The tite front is an odd front with five men on the line: a nose on the center, two defensive linemen in 4i-techniques on the inside shoulders of the offensive tackles, and an edge player outside each tackle. Fangio and his coaching tree call it tite; Kirby Smart’s Georgia calls the same picture the mint front; and, as the dialect section below shows, some playbooks call it Eagle.

It is a reduced front on both sides. In a reduced front, the defensive linemen slide a gap inward from their usual spots and an edge player takes the outside gap they left. The 4-3 Under of Even Fronts reduces one side (its backside end moves down toward the guard); the tite takes the Okie and reduces both ends, from the tackles’ outside shoulders (5s) to their inside shoulders (4is). That one move inside is the whole front.

Why move the ends inside? Put a nose on the center and a 4i in each B gap, and the whole interior of the line, from one tackle’s inside shoulder to the other’s, has a big body in it. Now run the covered-or-uncovered test from Zone Running for inside zone to the offense’s right. The center is covered (the nose is on him), the right guard is covered (the 4i is on his play side) and so is the left tackle. The left guard and the right tackle are uncovered, and in an ordinary front those are the two men who would climb to linebackers. Here they can’t, because each stands next to a defender who can’t be blocked one-on-one: the left guard has to help the center with the nose, and the right tackle has to help the right guard with the 4i. The offense can still double-team, but every double team is spent on a lineman, and every blocker who stays on a lineman is a blocker who isn’t on a linebacker.

If that sounds like the bear front of Even Fronts, it should: both fronts decide that no interior blocker will be free. The bear does it by covering the center and both guards (a 0 and two 3s), and the 46 that made it famous put eight men near the ball to fill everything else. The tite sits on the center and the tackles’ inside shoulders, which does the same job against the inside runs with five on the line and two safeties still deep. The price of that choice, as we’ll see, is the space outside the tackles, where the bear had bodies and the tite has only its edges.

Here is the tite doing its job against the most common run in football, inside zone.

Show the Python
def tite_iz():
    off = gun11(y_attached=True)
    dfn = [D("LE", "OLB", 1.0, -5.3, "E"), D("L4", "DL", 1.0, T("4i", -1), "4i"), D("NT", "DL", 1.0, 0.0, "0"),
           D("R4", "DL", 1.0, T("4i", 1), "4i"), D("RE", "OLB", 1.0, 6.1, "E"),
           D("MIKE", "LB", 4.7, 0.8, "M")] + secondary(nickel_w=-6.2, high=11.0, safety_w=7.6)
    p = Play(off, dfn, los=35, to_go=10)
    # doubles: C + LG on the nose, RG + RT on the play-side 4i; they hold, nobody climbs.
    # (blockers stop about 1.25 yd short of their man, centre to centre: contact, with both labels readable)
    go_to(p, "C", (-0.35, 0.3), speed=1.4); go_to(p, "LG", (-0.35, -1.0), speed=1.6, via=[(-0.6, -1.3)])
    go_to(p, "NT", (0.9, -0.05), "path", speed=0.6)
    go_to(p, "RG", (-0.3, 1.95), speed=1.6, via=[(-0.55, 1.75)]); go_to(p, "RT", (-0.3, 3.25), speed=1.6)
    go_to(p, "R4", (0.9, 2.6), "path", speed=0.5)
    # the left tackle cuts off the backside 4i; the backside edge squeezes but stays square (he has the QB)
    go_to(p, "LT", (-0.3, -2.3), speed=1.6); go_to(p, "L4", (0.9, -2.35), "path", speed=0.8)
    go_to(p, "LE", (0.7, -4.0), "path", speed=1.2, delay=0.2)
    # the tight end blocks the play-side edge, who holds the edge
    go_to(p, "Y", (-0.3, 5.0), speed=1.6); go_to(p, "RE", (0.9, 6.1), "path", speed=0.4)
    # the Mike reads and fills the C gap; the strong safety comes down; the nickel holds his slot
    go_to(p, "MIKE", (2.7, 2.3), "path", speed=3.6, delay=0.35)
    go_to(p, "MIKE", (2.1, 4.4), "path", speed=4.6)
    go_to(p, "SS", (4.0, 5.4), "path", speed=5.6, delay=0.45)
    go_to(p, "FS", (9.6, -5.2), "path", speed=2.0, delay=0.5)
    go_to(p, "NB", (4.0, -6.0), "path", speed=0.8, delay=0.3)
    # the QB rides the mesh and carries out a keep fake; the back presses the B gap, bends outside the tackle
    go_to(p, "QB", (-5.1, -0.4), "path", speed=1.5)
    go_to(p, "QB", (-5.6, -3.0), "path", speed=3.0, delay=0.15)
    go_to(p, "RB", (-1.9, 2.15), "run", speed=6.0, via=[(-4.7, -0.2), (-3.8, 1.4)])
    go_to(p, "RB", (0.8, 4.35), "run", speed=5.5)
    p.handoff("RB", t=0.5)
    return p


def tite_marks(fld, play, t, i):
    hands(fld, play, ("L4", "NT", "R4"), t=t, half=0.57)
    if t >= 1.45:
        spot(fld, play, 1.45, 3.4, ms=8)


P_TITE = tite_iz()
animation_or_strip([(P_TITE, 0.0, ""), (P_TITE, 0.5, ""), (P_TITE, 1.0, ""), (P_TITE, 1.5, "")],
                   notes=["five on the line, one LB:\nsix in the box vs six blockers",
                          "both doubles stuck on a\nlineman: nobody climbs",
                          "the B gap is full;\nthe back bends outside",
                          "the unblocked Mike fills\nthe C gap: about a yard"],
                   rings=(("MIKE", style.DEFENSE),), lateral=(-7.8, 8.6), window=(-6.6, 7.2),
                   after=tite_marks, width_in=5.4, enter=("SS",))
Figure 30.4: The tite front against inside zone right (simulated, in Big Data Bowl tracking coordinates; faint lines are each player’s path so far). The offense is a shotgun one-back set with three receivers and an attached tight end (11 personnel), six blockers. The defense is in nickel with a five-man line (dark dots are hands on the ground): a nose (0) and two 4i-techniques with a stand-up edge (E) outside each tackle, one linebacker (M), a nickel back ($) outside the box, and two safeties deep, above the top of the picture until the strong safety (SS) comes down in panel 4. 1: six in the box against six blockers, and the inside linebacker (ringed) has nobody in front of him. 2: the center and left guard double the nose; the right guard and right tackle double the play-side 4i. Neither double moves its man, so neither can send a blocker up to the Mike. The backside edge squeezes down but stays square, keeping the quarterback (who could keep the ball) in front of him. 3: the back presses the play-side B gap, his aiming point, and finds it full; he bends outside the tackle, into the C gap. 4: the Mike, never touched, fills that gap and makes the tackle (X) about a yard past the line, with the strong safety arriving from depth.

Walk through Figure 30.4 with the zone rules from Zone Running in mind. Inside zone wins with double teams: two linemen drive a defensive lineman backward, and when the linebacker behind commits, one of them comes off and blocks him. That requires two things: a lineman the pair can move, and a linebacker within reach. The tite takes away both.

  • The doubles can’t move their men. The nose plays the center and whichever guard joins the double: what analysts of these light-box fronts call “gap-and-a-half” play, in which a big two-gap nose controls one A gap and leans into the other.12 The 4i sits in the B gap, exactly where inside zone’s aiming point is, so the right guard and the right tackle have to block him together. Neither can come off to climb: the 4i is already in the hole, so the moment one of them leaves, the man who stays is blocking him from the wrong side and the hole closes.
  • Nobody climbs. With every blocker spent on a lineman, the one inside linebacker is never touched. That doesn’t mean he has no job. He owns a gap like everyone else (the next section counts them), but he can fill it without having to beat a block first, and the wall in front of him has already told the running back where not to go.
  • The cutback is plugged. Inside zone’s best friend is the bend back to the weak side. In the tite, the backside A and B gaps have the nose and the backside 4i in them, and the backside edge is squeezing down the line behind them. He squeezes square, though, not flat down the line: against a shotgun team the quarterback can pull the ball and run where the edge just left, so the edge closes the gap without giving up the quarterback.

What’s left for the runner is outside the tackle, and here it matters how he gets there. A bounced inside run is late and alone: the back has pressed the B gap, stopped, and turned, and while he did, the Mike, the play-side edge and a safety coming down have had a full second to get there. That is the trade the tite offers on purpose. It turns the inside runs that win against two-high defenses into bounced runs that its linebacker and safeties can chase down. A run designed to go outside is a different matter, because it arrives with its blockers already out there. That is the tite’s weak spot, and we’ll come to it.

Why the tite exists now: six men, seven gaps

The tite has existed in college for a long time, but it took over the NFL conversation in the late 2010s for a reason you have met before: two deep safeties. Defenses facing modern passing offenses want to keep both safeties deep, as long as possible (A First Look at Defense has the numbers: split-safety looks reached a record 42 percent of dropbacks in 2025).13 Two safeties deep and five defensive backs on the field leaves six men in the box. Against an offense with a tight end attached, that is six defenders for six blockers and seven gaps. By the one-man-per-gap accounting of one-gap football, the numbers don’t work.

Show the Python
fig, ax = plt.subplots(figsize=(5.4, 3.9))
TITE = [D("LE", "OLB", 1.0, -5.3, "E"), D("L4", "DL", 1.0, T("4i", -1), "4i"), D("NT", "DL", 1.0, 0.0, "0"),
        D("R4", "DL", 1.0, T("4i", 1), "4i"), D("RE", "OLB", 1.0, T("9"), "E"), D("MIKE", "LB", 4.7, 0.8, "M")]
p = Play(line("short") + [te(+1)], TITE, los=35, to_go=None)
go_to(p, "MIKE", (2.4, 3.9), "path", speed=3.0)
p.highlight("MIKE", color=style.DEFENSE)
f = draw(p, ax=ax, lateral=(-8.4, 9.6), window=(-5.4, 7.6), title=False)
hands(f, p, ("L4", "NT", "R4"))
for w, g in GAPS:
    gap_tag(f, p, -2.2, w, g)
owners(f, p, [(-4.0, -4.0, "E"), (-2.4, -2.4, "4i"), (-0.8, 0.8, "0"), (2.4, 2.4, "4i"), (4.0, 4.0, "M"),
              (5.95, 5.95, "E")])
lane(f, p, 7.0, 8.4, 0.0, 4.6, color=style.DEFENSE, alpha=0.10)
say(f, p, 5.6, 7.7, "alley:\nsafety\nor $", color=style.DEFENSE_DARK, fontsize=6.6)
say(f, p, 6.5, -2.6, "M: unblocked, but he owns\nthe C gap toward the TE", color=GREEN, fontsize=6.8, weight="bold")
plt.show()
Figure 30.5: The tite’s gap accounting against a tight end on the right (one common way to assign it; staffs vary). Seven gaps (green letters) and six men in the box. The nose (0) owns both A gaps: he is the one two-gap player. Each 4i owns the B gap he lines up in, one gap apiece, played by locking onto the tackle’s inside half. The open-side edge (E) owns the C gap on his side; the tight-end-side edge, on the tight end’s outside shoulder, owns the D gap. That leaves one gap, the C gap between the right tackle and the tight end, and it belongs to the Mike. He is unblocked, not unassigned. Outside all of them, the alley (the lane between the edge and the sideline where a bounced run goes) belongs to a safety or the nickel, coming from depth.

Figure 30.5 shows how the tite makes the numbers work. One nose who holds both A gaps is the extra defender the box doesn’t have: five men on the line take six of the seven gaps, the Mike takes the last one without a blocker in his way, and the safeties can stay home on the pass and fit the run late, from depth, with the alley outside the edges left to a safety or the nickel. The 4is are one-gap players (each has his B gap), but they play it from an inside shade, by locking onto the tackle rather than darting past him, which is why they need the length and strength of two-gappers.14 The assignments vary by staff and by how many linebackers are on the field. A college tite with two inside linebackers often lets the nose play just one A gap, the one away from the center’s first step, with a linebacker filling the other;15 the NFL’s nickel tite, with one linebacker, leans on the nose to hold both.

The Fangio tree, Vic Fangio himself and the coaches who worked under him, Brandon Staley among them, built their light-box run defense on exactly that bargain. Fangio’s 2018 Chicago Bears, his last season as a coordinator before he became Denver’s head coach, played their 3-4, often in the tite, with big interior linemen (Akiem Hicks and the nose Eddie Goldman) and two stand-up edges (Leonard Floyd and Khalil Mack, acquired in a trade the week before the season), and allowed the fewest points in the league (283) while leading it in takeaways (36).16 The light-box bargain is clearest in Staley’s 2020 Rams, who by one count played a light box on about 78 percent of snaps, the second-highest rate in the league, and allowed the fewest points in the NFL (296).17 Fangio himself is still at it: he is the Eagles’ defensive coordinator in 2026, his third season there.18

What the tite gives up

Every front is a trade. The tite’s costs are specific, and offenses know them.

  • The pass rush. Three of its five linemen are big interior players built to hold blocks, not beat them; the 4is especially are aligned to take the run away, not to rush. To get four rushers, the tite often has to rush both edges and two interior men, or send an off-ball linebacker. Cody Alexander, one of the most widely read writers on defensive structure, names this as the front’s main drawback: “its inability to get a rush without sending an off-ball defender.”19
  • The perimeter. With three big bodies inside the tackles, the defense outside them is thin: one edge on each side, a linebacker flowing from the middle, and safeties coming from depth. Runs that are designed to start outside, outside zone, tosses, the jet sweeps of Perimeter and Misdirection, arrive there with blockers in front of them and go straight at that thinness. The next section shows how.
  • Angles for gap runs. Linemen lined up inside their blockers hand a gap scheme easy down blocks: on power to the right, the right tackle blocks down on the 4i and the right guard down on the nose, both from the side. The tite survives power with technique, not alignment: the 4i squeezes the down block and closes the B gap anyway, the edge meets the pulling guard and spills the ball back inside, and the lone linebacker fits off the spill. If any of the three loses, there is nobody behind them but safeties. (Run Fits and Box Math draws a full fit against power.)
  • The quick game and the RPO. A light box with a single linebacker leaves big spaces underneath. The RPO was built for exactly this defender: a lone linebacker who must fill the run will leave the space behind him open for a throw.
  • Rare players, again. Like the two-gap 3-4, the tite needs a nose who can hold two blockers and two 4is with the length to play from an inside shade. The front is only as good as those three men.

Two practical notes before we leave it. First, the tite is balanced, so unlike the Over and Under it has no strength call for its interior: the 0 and the two 4is stay put wherever the tight end lines up, and only the edges and the Mike adjust (the edge on the tight end’s side widens to his outside shoulder, and the Mike’s gap goes with him). Second, when the offense detaches its tight end and goes 2x2 or empty, there are only five blockers and six gaps, and the five-man line covers all six by itself, so the Mike becomes a truly free player. That sounds ideal, but those formations are usually passing formations, and a five-man line that rushes four is exactly the problem in the first bullet above, which is one reason defenses so often meet them with a four-man front instead.

Inside zone or outside zone? How a front chooses

The tite is the clearest example of a principle that runs through all of defensive front design, and it is the best way to understand why a defense changes fronts from week to week: every alignment makes some blocks easier and others harder, and a defense picks the alignment that makes the offense’s favourite blocks hard.

Recall the two zone plays from Zone Running:

  • Inside zone is won by double teams that move a defensive lineman back and then climb to a linebacker. Its aiming point is the play-side B gap.
  • Outside zone is won by reach blocks: each blocker steps sideways and tries to get his head outside the defender in front of him. Its aiming point is the tight end’s outside leg, and its biggest gains come from the edge being reached (the bounce) or the defense over-running the play (the cutback).

Now ask what kind of alignment makes each one hard.

Show the Python
def zone_panel(ax, outside):
    off = [q for q in gun11(y_attached=True) if q.key not in ("X", "Z", "H")]
    dfn = [D("LE", "OLB", 1.0, -5.3, "E"), D("L4", "DL", 1.0, T("4i", -1), "4i"), D("NT", "DL", 1.0, 0.0, "0"),
           D("R4", "DL", 1.0, T("4i", 1), "4i"), D("RE", "OLB", 1.0, 6.1, "E"),
           D("MIKE", "LB", 4.7, 0.8, "M"), D("SS", "SS", 9.0, 7.4, "SS")]
    p = Play(off, dfn, los=35, to_go=None)
    if not outside:
        for k, end in [("C", (0.0, 0.15)), ("LG", (-0.1, -0.7)), ("RG", (0.0, 1.95)), ("RT", (0.05, 3.1)),
                       ("LT", (-0.1, -2.1)), ("Y", (-0.05, 5.4))]:
            go_to(p, k, end, speed=2.0)
        go_to(p, "RB", (-2.7, 2.1), "run", via=[(-4.7, -0.2), (-3.9, 1.2)])
        p.highlight("MIKE", color=style.DEFENSE)
    else:
        for k, end in [("C", (-0.25, 0.75)), ("LG", (-0.3, -0.35)), ("RG", (-0.35, 2.85)), ("LT", (-0.3, -1.6)),
                       ("Y", (-0.25, 6.0))]:
            go_to(p, k, end, speed=2.0)
        go_to(p, "RT", (2.3, 3.0), via=[(-0.2, 4.6), (0.6, 4.4)], speed=2.0)    # combo on the edge, then climb
        for k, end in [("NT", (0.95, 1.0)), ("R4", (0.95, 3.4)), ("L4", (0.95, -1.6))]:
            go_to(p, k, end, "path", speed=1.0)
        go_to(p, "RB", (-2.6, 6.2), "run", via=[(-5.0, 0.4), (-4.0, 3.6)])
        go_to(p, "MIKE", (3.0, 5.6), "path")
        go_to(p, "SS", (4.0, 8.6), "path")
        p.highlight("RE", color=style.DEFENSE)
    go_to(p, "QB", (-5.2, -0.5), "path", speed=2.0)
    f = draw(p, ax=ax, lateral=(-8.0, 11.6), window=(-7.4, 10.6), title=False)
    hands(f, p, ("L4", "NT", "R4"))
    if not outside:
        lane(f, p, 1.75, 3.0, -0.2, 2.8, color=style.OFFENSE, alpha=0.12)
        lane(f, p, -0.5, 0.5, -0.2, 2.8, color=style.OFFENSE, alpha=0.12)
        spot(f, p, -1.85, 2.45, color=GREEN, ms=9)
        say(f, p, -6.8, 6.4, "aims at the\nB gap: a wall", color=style.OFFENSE_DARK, fontsize=6.7)
        say(f, p, 7.8, 2.2, "nobody climbs:\nthe Mike is unblocked", color=style.DEFENSE_DARK, fontsize=6.7)
    else:
        lane(f, p, 6.6, 9.4, 0.0, 4.6, color=style.DEFENSE, alpha=0.12)
        spot(f, p, -1.4, 6.6, color=GREEN, ms=9)
        say(f, p, -6.8, 6.6, "aims outside\nthe Y", color=style.OFFENSE_DARK, fontsize=6.7)
        point_to(f, p, (-3.2, 9.4), (0.2, 6.4), "Y + RT on\none edge", color=style.DEFENSE_DARK,
                 fontsize=6.7, shrink=6)
        point_to(f, p, (6.0, -2.6), (2.4, 2.9), "C gap empty: the\nRT climbs to M", color=style.OFFENSE_DARK,
                 fontsize=6.7, shrink=3)
        say(f, p, -2.6, -4.4, "0 and 4is must\nrun sideways", color=style.DEFENSE_DARK, fontsize=6.5)
        say(f, p, 2.6, 10.1, "alley", color=style.DEFENSE_DARK, fontsize=6.5)
    return f


fig, axes = plt.subplots(1, 2, figsize=(6.6, 4.4))
zone_panel(axes[0], outside=False)
axes[0].set_title("Inside zone: into the wall", fontsize=9, loc="left", color=style.INK, fontweight="bold")
zone_panel(axes[1], outside=True)
axes[1].set_title("Outside zone: test the edge", fontsize=9, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.6)
plt.show()
Figure 30.6: The same tite front against the two zone runs, first steps only (illustrative). Left, inside zone: the run aims at the play-side B gap (green X), right where the 4i stands, and the three interior linemen (dark dots) occupy all five offensive linemen, so the doubles have nobody to climb to and the one linebacker (ringed) is never blocked. The shaded lanes are where the back wanted to go: both full. Right, outside zone: the run aims outside the tight end (green X), and everybody steps to the right. Now the tite’s alignment works against it. The play-side C gap, between the right tackle and the tight end, is empty, so the right tackle is uncovered: he helps the tight end on the edge (ringed, E) and then climbs to the only linebacker. The nose and the 4is, big bodies built to hold their ground, have to run sideways to keep up with the line. And outside the edge there is nobody until the Mike and the strong safety (SS) get there to fill the alley (shaded). The tite takes the middle away and asks one edge to win against two blockers.

The rule of thumb that falls out of Figure 30.6 is simple to state:

  • To beat the double team, line up on top of or just inside the blockers. A nose on the center and 4is inside the tackles leave the offense’s two uncovered linemen stuck on doubles; the pairs can’t move their men and can’t leave them. That is the tite’s answer to inside zone and duo, the double-team runs. (Gap runs like power, as the last section showed, are a fight it wins with technique, not with alignment.)
  • To beat the reach, line up outside the blockers, and leave no gap empty on the edge. A reach block is hardest when the defender is already a step to the play side of the blocker: a 3-technique outside the guard, a 5 outside the tackle, a 9 or a wide edge outside the tight end. Against outside zone the tite’s problem isn’t that its linemen are easy to reach; the 4i is actually a hard reach for the guard. It is that the C gap is empty, so the play-side tackle is free to help on the edge or climb to the lone linebacker, and that its biggest men have to run sideways. That is why the classic answer to an outside-zone team is a wider front, with shades outside the blockers, often a four-man even front with a 3-technique who can penetrate before the guard’s reach lands, as in Defensive Line Play’s one-gap animation.

The two answers pull in opposite directions, which is why no front stops everything. A tite that pulls its ends inside to choke inside zone has emptied the gaps outside the tackles that outside zone attacks; a wide four-man front that beats the reach leaves the interior gaps to linebackers who can be climbed to. Defenses solve the dilemma in three ways, and you can watch for all of them:

  1. Change the front by opponent. A defense facing an inside-zone and duo team plays a lot of tite; the same defense facing a wide-zone team widens its edges and plays more four-man fronts. Fangio’s own defenses varied in exactly this way: Alexander notes that in Denver Fangio favoured a four-down front more often than his former assistant Staley, who preferred the five-man front.20
  2. Change the front by down, distance and formation. Tite on first-and-10 against two tight ends, four-man front on second-and-long against three receivers.
  3. Change the front after the offense lines up. Shift from one to the other at the last moment, so the offense’s blocking calls are made against the wrong picture. That is the last section of this chapter.

Who, in either front, makes the tackle on the run that gets through? That is the job of the run fits, the full eleven-man accounting of who owns which gap and who forces the ball back inside, in Run Fits and Box Math.

Nickel fronts: 4-2-5, 3-3-5, 2-4-5

Everything so far has been about base defenses. But the modern NFL plays nickel, five defensive backs, on most snaps: about 60 percent of all runs and passes in 2025, with base (four defensive backs) on about 30 percent and dime on most of the rest.21 So the front you will see most often on Sunday is a nickel front, and nickel fronts have their own three-number names. All three end in 5: five defensive backs. The first two numbers split the other six players between the line and the linebackers.

Why can’t a 3-4 team just stay in its Okie against three receivers? Because the third receiver has to be covered by somebody. In the Okie that somebody is an outside linebacker, who walks out from the end of the line to stand over the slot. That leaves a four-man front in the box with one soft, empty edge where he used to be, and a 250-pound rusher in coverage on a receiver. Taking a big man off for a nickel back, and rebuilding the front from what is left, is the better trade. The three nickel fronts are the three ways to rebuild it.

4-2-5: the default

Show the Python
off = [O("QB", "QB", -5.0, 0.0, "Q"), O("RB", "RB", -5.0, 1.6, "R"),
       O("X", "WR", -0.7, -15.0, "X"), O("H", "WR", -1.5, -9.0, "H"), O("Y", "TE", -1.5, 9.0, "Y"),
       O("Z", "WR", -0.7, 15.0, "Z")] + line("full")
dfn = front([("LE", "5", -1), ("L3", "3", -1), ("R1", "1", 1), ("RE", "5", 1)],
            lbs=[("WILL", 4.6, -1.8, "W"), ("MIKE", 4.6, 1.6, "M")])
dfn = [q.moved(w=q.w - 0.9) if q.key == "LE" else (q.moved(w=q.w + 0.9) if q.key == "RE" else q) for q in dfn]
dfn += [D("LCB", "CB", 7.0, -15.0, "C"), D("RCB", "CB", 7.0, 15.0, "C"), D("NB", "NB", 4.6, -6.8, "$"),
        D("FS", "FS", 12.0, -7.6, "FS"), D("SS", "SS", 9.5, 8.6, "SS")]
p = Play(off, dfn, los=35, to_go=10, title="4-2-5 vs 2x2: four down, two backers, five DBs")
f = draw(p, width_in=5.0, lateral=(-18.5, 18.5), window=(-6.8, 14.0))
hands(f, p, ("LE", "L3", "R1", "RE"))
box_outline(f, p, -5.8, 5.8, text="the box: 6 defenders vs 5 blockers", text_at=(7.4, 0.0))
point_to(f, p, (3.4, -12.2), (4.6, -7.5), "nickel ($): apex,\nhalf run, half slot", color=style.DEFENSE_DARK,
         fontsize=7)
point_to(f, p, (5.6, 13.6), (9.5, 9.3), "safety moved\ndown over Y", color=style.DEFENSE_DARK, fontsize=7)
plt.show()
Figure 30.7: The 4-2-5 against a shotgun 2x2 (two receivers on each side, 11 personnel with the tight end, Y, flexed out as a slot receiver on the right). Four hands down: two ends in wide 5-techniques and two tackles, a 3 and a 1 (this is the four-man even front of Even Fronts). Two linebackers (M and W) in the box. Five defensive backs: corners (C) on the outside receivers, the nickel back ($) in the apex between the left tackle and the slot receiver H, and two safeties deep, the right one moved down closer to Y. With no tight end attached the offense has five blockers, and the box (dashed) holds six defenders: four linemen and two linebackers.

The 4-2-5 is the even front with a linebacker swapped for a nickel back: four down linemen, two linebackers, five defensive backs. It is the most natural answer to three receivers, because it changes as little as possible. The four-man line is the same one the defense plays in base, so the linemen’s rules don’t change; the two linebackers who stay on are the Mike and the Will, the better athletes; and the nickel back takes the slot receiver the Sam would have been chasing.

Count the box in Figure 30.7 and you will see why it holds up against the run as well as it does. With the tight end split out, the offense has five blockers; the 4-2-5 has six in the box. One more defender than blockers is the plus-one idea of Run Fits and Box Math, and the nickel at the apex makes a seventh who can fill late. The offense’s usual answers are to bring the tight end back in tight (six blockers), or to read an unblocked defender with the quarterback, the option principle, which turns the quarterback into the extra man.

2-4-5: the 3-4 team’s nickel

Here is the front from the chapter’s opening.

Show the Python
fig, axes = plt.subplots(1, 2, figsize=(6.6, 3.3))
SHORT_GUN = line("short") + [O("QB", "QB", -5.0, 0.0, "Q"), O("RB", "RB", -5.0, 1.6, "R")]
for ax, two_four in [(axes[0], False), (axes[1], True)]:
    if two_four:
        dfn = front([("L3", "3", -1), ("R1", "1", 1)], lbs=[("WILL", 4.6, -1.8, "W"), ("MIKE", 4.6, 1.8, "M")],
                    others=[("LE", 1.0, -5.0, "E"), ("RE", 1.0, 5.0, "E")])
        hd, ttl, msg = ("L3", "R1"), "2-4-5: two down, two standing", "roster: 2 DL, 4 LB"
    else:
        dfn = front([("L3", "3", -1), ("R1", "1", 1)], lbs=[("WILL", 4.6, -1.8, "W"), ("MIKE", 4.6, 1.8, "M")])
        dfn += [D("LE", "DL", 1.0, -5.0, "5"), D("RE", "DL", 1.0, 5.0, "5")]
        hd, ttl, msg = ("L3", "R1", "LE", "RE"), "4-2-5: four hands down", "roster: 4 DL, 2 LB"
    p = Play(SHORT_GUN, dfn, los=35, to_go=None)
    f = draw(p, ax=ax, lateral=(-8.2, 8.2), window=(-7.4, 7.2), title=False)
    hands(f, p, hd)
    say(f, p, 6.3, 0.0, msg, color=style.DEFENSE_DARK, fontsize=7, weight="bold")
    bracket(f, p, 2.05, -5.0, 5.0, color=style.INK_2, lw=1.2)
    say(f, p, 2.85, 0.0, "four on the line", color=style.INK_2, fontsize=6.7)
    ax.set_title(ttl, fontsize=9, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.7)
plt.show()
Figure 30.8: Two nickel fronts, one picture. Left, a 4-2-5: four defensive linemen, two of them defensive ends with their hands down at the edges. Right, a 2-4-5, the usual nickel of a 3-4 team: the nose has come off the field, the two remaining linemen play the tackle spots (the same 3 and 1), and the two outside linebackers stand up on the edges (E, no dot) where the 4-2-5’s ends have their hands down. Same alignments, same two linebackers behind them, same five defensive backs (not shown); on the field both are four-man lines (bracketed). Only the stances, and the roster, differ.

The 2-4-5 is what a 3-4 team usually plays when the offense brings out a third receiver: the nose tackle comes off for a nickel back, the two ends slide inside to play the tackle spots, and the two outside linebackers stay on the edges, standing. You met it as a footnote in A First Look at Defense; look at it now in Figure 30.8, next to a 4-2-5, and the two are the same front. Four players on the line, two linebackers behind them, five defensive backs. If the 2-4-5’s outside linebackers put their hands down, you couldn’t tell them apart at all.

So why the different name? Because the name is built from the roster, not the picture. The 2-4-5’s edges are listed as linebackers because, in the team’s base defense, they are the 3-4’s outside linebackers. Bring the same two players onto a 4-3 team and they would be listed as defensive ends, and the identical alignment would be called a 4-2-5.

3-3-5: three meanings

The 3-3-5 is three down linemen, three linebackers and five defensive backs, and it is the one name in this section that means different things depending on who says it.

  • When an NFL coach calls a 3-3-5 front, he means a five-man line in nickel: three linemen inside, a stand-up edge on each end, and one linebacker behind them. The tite of Figure 30.4 is exactly this, the 3-4 team’s nickel with its nose back on the field. It is the light-box run front of the Fangio tree, and the Staley branch of that tree calls it Penny, a nickel with a nose.22
  • When the roster count says 3-3-5, it usually means something else: a four-man line with one edge listed as a defensive end and the other as a linebacker. That is what most of the 3-3-5 snaps in the data below are.
  • In college, “3-3-5” usually means the 3-3-5 stack, a different defense with three linemen and three linebackers stacked directly behind them, usually credited to Joe Lee Dunn at Memphis in 1991 and spread in the 1990s as a way to put more speed on the field against spread offenses.23 It belongs to The College Laboratory.

Which one you are looking at, the hands will tell you: three down inside the tackles with an edge on each side is the coach’s 3-3-5; four men on the line is the roster’s.

The labels, measured

You can see how loosely these names attach to the football in the play-by-play data. Since 2023, the nflverse participation file (charted by FTN) lists the roster position of every defender on every snap, so each snap’s personnel can be counted as linemen–linebackers–defensive backs. Here is every 2025 nickel snap, split by what the roster labels call it.

Show the Python
from gridiron.data import nfl, pbp
from IPython.display import Markdown

style.apply()


def split_personnel(s):
    """(DL, LB, DB) counts from an FTN-era string such as '3 CB, 2 DE, 2 DT, 1 FS, 1 MLB, 1 OLB, 1 SS'."""
    c = {}
    for v, k in re.findall(r"(\d+)\s+([A-Z]+)", str(s)):
        c[k] = c.get(k, 0) + int(v)
    dl = sum(c.get(k, 0) for k in ("DE", "DT", "NT", "DL"))
    lb = sum(c.get(k, 0) for k in ("OLB", "ILB", "MLB", "LB"))
    db = sum(c.get(k, 0) for k in ("CB", "FS", "SS", "S", "DB"))
    return dl, lb, db


part = nfl().load_participation([2025]).to_pandas()[
    ["nflverse_game_id", "play_id", "defense_personnel", "defenders_in_box", "number_of_pass_rushers"]]
pb = pbp(2025, columns=["game_id", "play_id", "season_type", "play_type", "down", "defteam"])
pb = pb[(pb.season_type == "REG") & pb.play_type.isin(["pass", "run"]) & pb.down.notna()]
snaps = pb.merge(part, left_on=["game_id", "play_id"], right_on=["nflverse_game_id", "play_id"])
snaps = snaps[snaps.defense_personnel.notna()].copy()
cnt = snaps.defense_personnel.map(split_personnel)
snaps["dl"], snaps["lb"], snaps["db"] = [c[0] for c in cnt], [c[1] for c in cnt], [c[2] for c in cnt]
snaps = snaps[snaps.dl + snaps.lb + snaps.db == 11]
snaps["label"] = snaps.dl.astype(str) + "-" + snaps.lb.astype(str) + "-" + snaps.db.astype(str)
NICKEL_SHARE = (snaps.db == 5).mean()
BASE_SHARE = (snaps.db == 4).mean()
nk = snaps[snaps.db == 5]
LABELS = ["4-2-5", "3-3-5", "2-4-5"]
share = nk.groupby("defteam").label.value_counts(normalize=True).unstack(fill_value=0.0)
share = share.reindex(columns=LABELS, fill_value=0.0)
share["other"] = 1 - share[LABELS].sum(axis=1)
share = share.sort_values(["2-4-5", "3-3-5"], ascending=[True, True])
league = nk.label.value_counts(normalize=True)

fig, ax = plt.subplots(figsize=(6.6, 6.4))
colors = {"4-2-5": style.SERIES[0], "3-3-5": style.SERIES[1], "2-4-5": style.SERIES[2], "other": style.GRID}
left = np.zeros(len(share))
ys = np.arange(len(share))
for lab in LABELS + ["other"]:
    ax.barh(ys, share[lab].values * 100, left=left, color=colors[lab], height=0.72, edgecolor=style.SURFACE,
            linewidth=1.2, label=lab if lab != "other" else "other / unlisted")
    left += share[lab].values * 100
ax.set_yticks(ys)
ax.set_yticklabels(share.index, fontsize=7.2)
ax.set_xlim(0, 100)
ax.set_xlabel("share of the team's nickel snaps (%)", fontsize=8)
ax.grid(axis="y", visible=False)
ax.invert_yaxis()
ax.set_title("2025 nickel snaps by roster label: same front, two names", fontsize=10)
ax.legend(loc="lower center", bbox_to_anchor=(0.5, -0.13), ncol=4, fontsize=7.5, frameon=False)
ax.tick_params(axis="x", labelsize=7.5)
fig.tight_layout()
plt.show()
Figure 30.9: What each team’s nickel snaps are called, if you count roster positions: 2025 regular season, every run and pass play with five defensive backs, by defense. Blue: four defensive linemen and two linebackers (4-2-5). Orange: three and three (3-3-5). Green: two and four (2-4-5). The league splits into two camps that line up almost identically on the field: teams whose edge rushers are listed as defensive ends (mostly 4-2-5, top) and teams whose edge rushers are listed as outside linebackers (mostly 2-4-5, bottom), with a few in between whose two edges carry one label each (3-3-5). Grey is everything else, about 3 percent of the league’s nickel snaps: mostly 1-5-5 and 5-1-5 counts, plus a handful of snaps with a defender listed at an offensive position. The table below the chart shows that the three labels have the same box count and the same pass rush. Data: nflverse participation (FTN charting) joined to play-by-play via nflreadpy; positions are as FTN lists them, which follows team rosters.
Show the Python (box count and pass rush by nickel label)
def as_markdown(df):
    """A small table as a Markdown pipe table, which prints cleanly in every format."""
    cols = list(df.columns)
    rows = ["| " + " | ".join(cols) + " |", "|" + "|".join([":--"] + ["--:"] * (len(cols) - 1)) + "|"]
    rows += ["| " + " | ".join(str(v) for v in r) + " |" for r in df.itertuples(index=False)]
    return Markdown("\n".join(rows))


rows = []
for lab in LABELS:
    g = nk[nk.label == lab]
    passes = g[(g.play_type == "pass") & (g.number_of_pass_rushers > 0)]
    rows.append({"roster label": lab,
                 "share of nickel snaps": f"{len(g) / len(nk):.0%}",
                 "avg. defenders in the box": f"{g[g.defenders_in_box > 0].defenders_in_box.mean():.1f}",
                 "avg. pass rushers": f"{passes.number_of_pass_rushers.mean():.1f}",
                 "four-man rushes": f"{(passes.number_of_pass_rushers == 4).mean():.0%}"})
as_markdown(pd.DataFrame(rows))
roster label share of nickel snaps avg. defenders in the box avg. pass rushers four-man rushes
4-2-5 37% 6.1 4.3 75%
3-3-5 18% 6.0 4.3 69%
2-4-5 41% 6.0 4.3 75%

Two things jump out of Figure 30.9 and the table under it. First, the league splits cleanly into two camps, and the split has nothing to do with what the defenses do: it is about how teams list their edge rushers. Teams whose edges are “defensive ends” play the 4-2-5; teams whose edges are “outside linebackers” play the 2-4-5. Second, the three labels describe nearly identical football. All three put about six defenders in the box, all three rush about four on passes, roughly three times in four exactly four.

That is why this book, and every coach you will read, asks you to count hands, not names. Before the snap, count the players with a hand on the ground and the players standing at the ends of the line, and note where the man nearest the center is. Four down is a four-man line, whatever the graphic says. Two down with two standing edges is a four-man line too, built from 3-4 personnel. Three down inside the tackles with an edge on each side is a tite, five on the line. The personnel label tells you which players are on the field, which matters for what they can do (a 3-4 outside linebacker can drop into coverage more comfortably than a 4-3 end); the alignment tells you what they are about to do.

Multiple defenses: one personnel group, many fronts

If the label is personnel and the front is alignment, nothing stops a defense from playing several fronts with the same eleven players. Almost every NFL defense now does. A multiple defense (also called a hybrid defense) lines up in more than one front family, odd and even, four-man and five-man, often from the same personnel and sometimes switching between them before the snap. “Now every team is ‘multiple,’” one analyst wrote more than a decade ago, and it has only become more true.24

Belichick’s Patriots were the model of the idea: a defense that might be a two-gap 3-4 one week and a four-man front the next, built to take away whatever the opponent did best. The modern versions go further, changing fronts within a series, and the most effective way to do it is a shift: show the offense one front, then move into another as the quarterback is calling the protection.

Show the Python
def shift_play():
    off = gun11(y_attached=True)
    dfn = [D("LE", "DE", 1.0, -5.0, "5"), D("L3", "DL", 1.0, T("3", -1), "3"), D("R1", "DL", 1.0, T("1", 1), "1"),
           D("RE", "DE", 1.0, T("5", 1), "5"),
           D("WILL", "LB", 4.7, -1.6, "W"), D("MIKE", "LB", 4.7, 2.0, "M")] + secondary(nickel_w=-6.2, high=11.0,
                                                                                         safety_w=7.6)
    p = Play(off, dfn, los=35, to_go=10)
    # the shift (Georgia's move into mint): the 1 to the nose, the 3 out to a 4i, the right end down to a 4i
    # with his hand still down, the left end stands up and widens; the Mike walks up outside the tight end
    go_to(p, "R1", (1.0, 0.0), "motion", speed=0.5)
    go_to(p, "L3", (1.0, T("4i", -1)), "motion", speed=0.2)
    go_to(p, "RE", (1.0, T("4i", 1)), "motion", speed=1.0)
    go_to(p, "LE", (1.0, -5.6), "motion", speed=0.4)
    go_to(p, "MIKE", (1.0, 6.1), "motion", speed=3.0)
    go_to(p, "WILL", (4.7, 0.6), "motion", speed=1.4)
    go_to(p, "LCB", (7.0, -14.7), "motion", speed=0.1)        # (keeps the clock running: a still opening frame)
    # after the snap: pass protection and a four-man rush; the walked-up Mike drops to the flat
    p.dropback(1.5)
    for k, end in [("LT", (-1.6, -3.6)), ("LG", (-1.4, -1.6)), ("C", (-1.3, 0.0)), ("RG", (-1.4, 1.6)),
                   ("RT", (-1.6, 3.4)), ("Y", (-1.3, 5.6))]:
        go_to(p, k, end, speed=2.0)
    go_to(p, "LE", (-2.4, -4.9), "path", speed=4.0)
    go_to(p, "L3", (-0.15, -2.4), "path", speed=2.0)
    go_to(p, "R1", (-0.1, 0.1), "path", speed=2.0)
    go_to(p, "RE", (-0.15, 2.5), "path", speed=2.0)
    go_to(p, "MIKE", (5.0, 9.4), "path", speed=5.6)
    go_to(p, "WILL", (7.0, 0.4), "path", speed=4.0)
    go_to(p, "NB", (6.0, -7.6), "path", speed=3.0)
    for k, r_ in [("H", (6.0, -9.6)), ("Z", (8.0, 15.0)), ("X", (8.0, -15.0))]:
        go_to(p, k, r_, "path", speed=6.5)
    go_to(p, "RB", (-3.3, 2.1), "path", speed=3.0)
    return p


P_SHIFT = shift_play()
_KF = P_SHIFT._compile()[0]
_HALF = {k: float(_KF[k][0, 0]) / 2 for k in ("LE", "L3", "R1", "RE")}     # half-way through each man's shift
_NEW = {"LE": "E", "L3": "4i", "R1": "0", "RE": "4i"}


def shift_label(key, t):
    """Technique labels follow the shift: each lineman takes his new number half-way through his move."""
    return _NEW[key] if key in _NEW and t >= _HALF[key] else None


def shift_marks(fld, play, t, i):
    keys = ["L3", "R1", "RE"] + (["LE"] if t < _HALF["LE"] else [])
    hands(fld, play, keys, t=t, half=0.57)


t0 = min(float(f[0, 0]) for f in _KF.values())
animation_or_strip([(P_SHIFT, round(t0 + 0.4, 1), ""), (P_SHIFT, -0.7, ""), (P_SHIFT, 0.0, ""),
                    (P_SHIFT, 1.1, "")],
                   notes=["shows a four-man line:\nfour hands down",
                          "the shift: ends slide in or stand\nup; the Mike walks up",
                          "snap: five on the line,\nthree hands down: a tite",
                          "four rush; the walked-up\nMike drops to the flat"],
                   rings=(("LE", style.DEFENSE), ("MIKE", style.THIRD)), lateral=(-10.6, 11.4),
                   window=(-8.4, 8.8), after=shift_marks, width_in=6.0, relabel=shift_label)
Figure 30.10: Same eleven players, two fronts (simulated; dark dots are hands on the ground; each lineman’s label is his technique, and it changes when he moves). The defense is in 4-2-5 nickel personnel (four defensive linemen) against a shotgun one-back set with the tight end (Y) attached on the right. 1: it shows a four-man even front: four hands down, a wide 5 on the left, a 3, a 1, and a 5 on the right tackle, with the Mike and Will behind them. 2: as the quarterback calls his protection, the front shifts. The 1 slides onto the center; the 3 and the right end both slide to 4is, the end keeping his hand down; the left end (ringed) stands up and widens: the edge who changes stance. The Mike (ringed) walks up outside the tight end. 3: at the snap, five on the line, three hands down, all three inside the tackles: a tite, and every interior spot is still held by a defensive lineman. 4: the offense passes. Four rush (the three linemen and the standing left edge), and the walked-up Mike drops into the flat: a front that showed five on the line rushed four, and the player who looked like a rusher is in coverage.

Why go to that trouble? Because, as Zone Running explained, an offensive line decides its blocking before the snap: who is covered, who doubles, who climbs, and, on a pass, which way the center slides and who picks up which rusher. A front that shifts at the last moment makes those decisions against the wrong picture. In Figure 30.10 the line set its rules against a four-man even front with two linebackers; at the snap it faced a five-man line with one, and on the pass, the player it had counted as a rusher (the walked-up Mike) was in coverage. Notice what the shift does not do: it never puts a 250-pound edge rusher on a tackle’s inside shoulder. Every interior spot of the tite is still held by a defensive lineman; the only man who changes stance is the end who stands up on the outside. Georgia’s defense under Kirby Smart is known for exactly this move, from a 4-2-5 into its mint front without a substitution: one tackle to the nose, the other tackle and an end to 4is, the other end standing up and walking out.25

The cost of being multiple is complexity. Every front has its own gap assignments and its own fits, and every player has to know all of them; a shift that is a beat late leaves a gap empty at the snap. That is why multiple defenses are built around smart, versatile players (edges who can rush and drop, linemen who can play a 3 and a 4i) and why they live and die on the communication of the green-dot linebacker who relays the call.

Dialect: Okie, Eagle, G, and the problem with names

You now know what the fronts are. A word about what they are called, because front names are the least standardized vocabulary in football. Every staff has a language, inherited from the coaches who trained its coaches, and the same word can mean different things in neighbouring buildings. Two names you will hear are good examples.

Show the Python
DIALECT = [("Okie", [("LE", "5", -1), ("NT", "0", 1), ("RE", "5", 1)], ()),
           ("Eagle (one dialect)", [("LE", "4i", -1), ("NT", "0", 1), ("RE", "4i", 1)], ("LE", "RE")),
           ("G: nose on a guard", [("LE", "5", -1), ("NT", "2i", 1), ("RE", "5", 1)], ("NT",))]
fig, axes = plt.subplots(1, 3, figsize=(6.6, 3.1))
for ax, (ttl, spec, moved) in zip(axes, DIALECT):
    dfn = front(spec, lbs=[("WILL", 4.6, -2.1, "W"), ("MIKE", 4.6, 2.1, "M")],
                others=[("LOLB", 1.0, -6.2, "E"), ("ROLB", 1.0, 6.2, "E")])
    p = Play(line("short") + [te(+1)], dfn, los=35, to_go=None)
    for k in moved:
        p.highlight(k, color=style.DEFENSE)
    f = draw(p, ax=ax, lateral=(-8.1, 8.3), window=(-4.6, 7.0), title=False)
    hands(f, p, ("LE", "NT", "RE"))
    if "G" in ttl:      # the uncovered center has to step sideways to reach the 2i
        point_to(f, p, (-3.2, -3.6), (-0.8, -0.2), "C now steps\nsideways", color=style.OFFENSE_DARK,
                 fontsize=6.5, shrink=5)
    ax.set_title(ttl, fontsize=8.6, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.5)
plt.show()
Figure 30.11: Dialect, drawn against the Okie (left). Middle, the Eagle front as many modern 3-4 playbooks use the word: the ends pinch from the tackles’ outside shoulders (5s) to their inside shoulders (4is), which is the same picture Fangio’s staffs call tite and Kirby Smart’s Georgia calls mint. Right, a G front: one letter in the call moves one man, the nose, off the center onto the guard’s inside shoulder (a 2i, G for guard), here toward the tight end. Everyone else is where the Okie put him, but the center is now uncovered and has to step sideways to help on the nose. Dark dots are hands on the ground; the ringed players are the ones who moved.

The Eagle front has meant at least three things. In the 1940s it was Greasy Neale’s five-man line, the Philadelphia Eagles’ defense and the 3-4’s ancestor. In the late 1980s Fritz Shurmur, the Los Angeles Rams’ defensive coordinator, built a linebacker-heavy package he called the Eagle, and later wrote a coaching book on it, The Eagle Five Linebacker Defense (1993). Its usual shape had only two down linemen, with five linebackers; in the Rams’ 21–7 playoff win over Philadelphia after the 1989 season, Shurmur went further, playing zone on every snap and using five linebackers and six defensive backs, with no defensive linemen at all, on long-yardage downs.26 And in modern 3-4 playbooks, “Eagle” is a reduction, but staffs disagree about which one. In some it is the Okie with both ends pinched inside to 4is: the middle panel of Figure 30.11, the same alignment other staffs call tite or mint. In others it is a one-side change-up: an outside linebacker walks up onto the tackle and the end beside him reduces inside to a 3, which is the Under-like 3-4 of Figure 30.3.27 Several meanings, one word, and only context tells you which.

The G front is a tag rather than a whole front: it moves the nose from the center (or from his shade on the center, in a four-man front) onto a guard’s inside shoulder, a 2i. “G” is for guard. It is a small move with a specific purpose. Inside zone’s first double team is usually the center and a guard on the nose, both stepping forward into him so they can drive him back and then let one man climb to the linebacker. With the nose on the guard instead, the center has to step sideways to reach him. A sideways step carries no push, so the double forms a beat late and moves nobody, and by the time either blocker can come off it, the linebacker behind the nose has already filled. You’ll most often see the G tag on four-man Over and Under fronts, where it moves a 1-technique to a 2i. The right panel of Figure 30.11 borrows the same move for the Okie to show what it does; whether a three-man front uses the letter G for it varies by staff.28 Run the one-glance test on it, too: with the nose on a guard, nobody is head-up on the center, so a G front is, by alignment, even, whatever the base defense is called. That is the point of the tag. It changes who is covered.

Mint is the same kind of word: Georgia’s name, under Kirby Smart, for the front Fangio’s staffs call tite. The point is not to memorize every staff’s dictionary. It is to read the alignment first and attach the name second. If an analyst says “Eagle” and you see 4is inside the tackles, you know what he means even if his playbook and yours disagree.

NoteMadden vs. real life

In Madden, the defensive playbook is a menu of named fronts: pick “3-4 Odd” or “Nickel 3-3-5 Wide” and the players run to their spots. Real defenses don’t call a front from a menu so much as build it from rules. The call names a front, a tag or two (a G, a slant, who is the edge), and a coverage, and each player’s alignment then depends on where the offense puts its tight end and its back, which side is the wide side of the field, and whether the offense shifts. Two teams can call the same word and line up differently, and the same team can call two different words and end up in the same alignment. The names are shorthand for a set of instructions, and every staff writes its own.

Film room

NoteFilm room: Houston Texans 2011–2012

The scheme: Wade Phillips’s one-gap 3-4 in his first two seasons in Houston, the defense of the Phillips-branch section above. Pick any 2012 game and watch J.J. Watt.

What to notice:

  • The ends’ alignment and first step. Watt often lines up on a tackle’s outside shoulder, like an Okie end (he moved around, inside to a 3 or a 4i too), and then attacks the gap at the snap instead of controlling the man. Count how often his first step is across the line.
  • What the outside linebackers do. On most passing downs, both are rushing; Phillips’s 3-4 rushed four like any four-man front.
  • How often the “3-4” looks like an Under front with a linebacker standing up. That is the one-gap 3-4 of Figure 30.3 in its natural habitat.
NoteFilm room: Denver Broncos, Super Bowl 50 (2015 season)

The game: Super Bowl 50, February 7, 2016, at Levi’s Stadium: Denver 24, Carolina 10. Phillips, now Denver’s coordinator, had the league’s top defense by yards allowed, and in the Super Bowl his two stand-up edges, Von Miller and DeMarcus Ware, chased the league MVP, Cam Newton, all night. Miller was the game’s MVP, with 2.5 sacks and two forced fumbles; Malik Jackson fell on the first in the end zone for Denver’s first touchdown.29

What to notice: the edges. Before each snap, find Miller and Ware: standing, wide, often on different sides from snap to snap. Watch whether they rush or drop (mostly rush), how they win around the tackles with speed, and how, on Newton’s scrambles and designed runs, they keep contain rather than racing past him. When Denver goes to nickel, look for the 2-4-5 of this chapter: Miller and Ware stay on the edges, standing or with a hand down, and the 3-4 has quietly become a four-man line. The stand-up edge as a weapon is this game.

NoteFilm room: Philadelphia Eagles 2024

The season: Vic Fangio’s first year as the Eagles’ defensive coordinator. The defense allowed the fewest yards in the NFL, about 278 a game, and the season ended with a 40–22 Super Bowl LIX win in which the Eagles pressured Patrick Mahomes with four-man rushes.30 Its five-man front was the tite of this chapter, with Jordan Davis, a 341-pound nose at his combine, between two 4is, usually Jalen Carter and Milton Williams, and two edges outside them.31

What to notice:

  • Count the hands down on early downs. Three inside the tackles, with an edge on each side, is the tite.
  • Watch Davis against a double team on an inside run: does the pair move him? Then find the linebacker behind him and see whether a blocker ever reaches him.
  • Watch the safeties on those runs. They start deep, often 12 yards or more, and arrive late but fast. That is the light-box bargain: the front holds the line so the safeties can stay home on the pass.
NoteFilm room: Georgia 2021

The season: Kirby Smart’s Georgia defense, which many observers rank among the best in college football history, won the national championship, beating Alabama 33–18.32 Its front featured two interior linemen the Eagles later drafted in the first round, Jordan Davis and Jalen Carter, so the 2021 Bulldogs and the 2024 Eagles are, in a sense, the same front four years apart.

What to notice: the pre-snap movement. Smart’s Georgia defenses are known for lining up in a four-man front and shifting into mint, as in Figure 30.10, while the offense calls its plays (the source for that move describes the scheme in 2025; watch whether the 2021 unit does it). Watch the offensive line’s heads turn as the front changes, and then where the run goes.

Watch for it on Sunday

TipWatch for it

Before the snap: count the hands, find the center.

  • Is anybody head-up on the center? A nose over the ball means an odd front; nobody there means an even one.
  • Count the hands on the ground. Four is a four-man line, whatever the graphic says. Two down plus two standing edges is also a four-man line, usually a 3-4 team’s 2-4-5 nickel. Three inside the tackles plus a standing edge on each side is a five-man tite (or mint) front.
  • Who is standing on the edges? A standing edge is a rusher who might drop; note his number and watch him on passes.
  • Where are the ends: outside the tackles (5s, built to beat the reach and set the edge), head-up (4s, two-gappers) or inside them (4is, a tite, built to choke inside runs)? From the high sideline camera, look at the two helmets: is the defender’s helmet on the guard’s side of the tackle’s helmet, on top of it, or on the far side? If you can’t tell, the end-zone replay angle (see Even Fronts) shows it at once.

At the snap: the first step and the count.

  • Did the front change in the last seconds? A shift (an edge sliding inside, a linebacker walking up) means the defense is trying to beat the offensive line’s blocking calls.
  • Do the ends step into the tackles’ chests (two-gap) or into the gaps (one-gap)?
  • On a pass, how many rushed, and who? Five on the line rushing four means somebody standing at the line dropped.

After the play: where did the run go?

  • Against a tite, did the inside run get through, or did it bounce outside? If it bounced, who made the tackle: an edge, the linebacker, or a safety?
  • Did the offense’s play fit the front? Inside zone into a tite is a fight on the defense’s terms; outside zone and perimeter runs test its edges.

For your prediction log (How to Watch a Broadcast): on first and second down, write down the number of hands on the ground and whether the front was odd or even, then whether the run went inside or outside. After a quarter you’ll know which front the defense uses to stop what, and whether the offense noticed.

Predict the play

TipPredict the play

Drill 1. Name it, then pick a run. First-and-10 from the offense’s own 35. The offense is in the shotgun with three receivers and an attached tight end (Y). The defense is in nickel. Name the front. How many defenders are in the box, and how many blockers does the offense have? If you were calling the run, would you run inside zone, or something else?

Show the Python
off = gun11(y_attached=True)
dfn = [D("LE", "OLB", 1.0, -5.3, "E"), D("L4", "DL", 1.0, T("4i", -1), "4i"), D("NT", "DL", 1.0, 0.0, "0"),
       D("R4", "DL", 1.0, T("4i", 1), "4i"), D("RE", "OLB", 1.0, 6.1, "E"),
       D("MIKE", "LB", 4.7, 0.8, "M")] + secondary(nickel_w=-6.2, high=11.5, safety_w=7.6)
p = Play(off, dfn, los=35, to_go=10, title="Drill 1: first-and-10, nickel")
f = draw(p, width_in=5.0, lateral=(-11.6, 11.6), window=(-7.0, 13.4))
hands(f, p, ("L4", "NT", "R4"))
plt.show()
Figure 30.12: Drill 1: the defense’s alignment before the snap (dark dots are hands on the ground). Two safeties deep, a nickel ($) over the slot on the left, and the corners on the wide receivers (outside the picture).

A tite. Three hands down inside the tackles (a 4i, a 0 and a 4i) with a stand-up edge on each side make five on the line, and one linebacker stands behind them: the coach’s 3-3-5, the Penny of the Fangio tree.

Six in the box against six blockers (five linemen and the tight end), with two safeties deep and the nickel outside the box. On paper that is a light box, and analysts will tell you to run against light boxes. But this light box was built to be run into. Inside zone aims at the play-side B gap, where the 4i is; the nose and the 4is will occupy all five offensive linemen, and the Mike will fill his gap unblocked, as in Figure 30.4.

The better calls test what the tite gives up. Outside zone or a toss to the tight-end side attacks the empty C gap: the right tackle is uncovered, so he can help the tight end on the edge or climb to the only linebacker, and the Mike and the strong safety have to beat the ball to the alley. A run with the quarterback reading the backside edge (a zone read) turns the unblocked edge into a wasted defender. Or don’t run at all: a single linebacker in a light box is exactly the defender an RPO or a quick throw underneath attacks. The defense has dared you to run inside; the smart offense declines.

TipPredict the play

Drill 2. Choose your front. You coordinate the defense. This week’s opponent runs outside zone more than any other play, from tight formations with the quarterback under center, and its tight end is an excellent blocker. Here are two fronts you could show on first down. Which would you rather be in, and where will the run most likely go against each?

Show the Python
fig, axes = plt.subplots(1, 2, figsize=(6.6, 3.5))
OFF_UC = line("short") + [te(+1), O("QB", "QB", -1.9, 0, "Q"), O("RB", "RB", -7.0, 0, "R")]
fA = [D("LE", "OLB", 1.0, -5.6, "E"), D("L4", "DL", 1.0, T("4i", -1), "4i"), D("NT", "DL", 1.0, 0.0, "0"),
      D("R4", "DL", 1.0, T("4i", 1), "4i"), D("RE", "OLB", 1.0, 6.1, "E"), D("MIKE", "LB", 4.7, 0.8, "M")]
fB = front([("LE", "5", -1), ("L1", "1", -1), ("R3", "3", 1), ("RE", "9", 1)],
           lbs=[("WILL", 4.7, -2.0, "W"), ("MIKE", 4.7, 1.6, "M")])
for ax, dfn, hd, ttl in [(axes[0], fA, ("L4", "NT", "R4"), "Front A: tite"),
                         (axes[1], fB, ("LE", "L1", "R3", "RE"), "Front B: wide four-man")]:
    p = Play(OFF_UC, dfn, los=35, to_go=None)
    f = draw(p, ax=ax, lateral=(-8.0, 8.8), window=(-8.4, 6.8), title=False)
    hands(f, p, hd)
    ax.set_title(ttl, fontsize=9, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(w_pad=0.7)
plt.show()
Figure 30.13: Drill 2: two fronts against the same under-center, one-tight-end formation. Front A: the tite: a 0 and two 4is between two stand-up edges, the right edge on the tight end’s outside shoulder (a 9), one linebacker. Front B: a four-man even front aligned wide: a 3-technique on the right guard’s outside shoulder, a 1 on the center, a 5 on the left tackle and a defensive end (9) on the tight end, with two linebackers.

Front B is the better bet against this opponent, though neither is free. Outside zone lives on reach blocks. In Front B, the defenders on the play side are all outside the men who must reach them: the 3 outside the right guard, the end outside the tight end. Those are the hardest reaches in football, and a quick 3-technique can be through the B gap before the guard gets there (the one-gap animation in Defensive Line Play). If the reaches fail, the back can’t get outside and has to cut up early, into two linebackers.

In Front A, the trouble is the gap nobody is in. The play-side C gap, between the right tackle and the tight end, is empty, so the right tackle is uncovered: he can help the tight end, an excellent blocker, on the edge, or climb straight to the only linebacker. The 4i and the nose, big men built to hold ground, have to chase the play sideways. Everything rests on one edge against two blockers, with one linebacker and a safety coming from depth to fill the alley. Expect the ball to bounce outside if the edge is reached, or to cut back if the Mike over-runs it.

What Front B gives up: the interior. Against the same team’s inside zone, the 1 and the 3 can be doubled and the doubles can climb to two linebackers. That is why defenses facing an outside-zone team mix fronts by down and formation instead of living in one, and why the tite’s teams widen their edges (or switch to four-man fronts) against wide-zone offenses.

TipPredict the play

Drill 3. Which 3-4 is it? Two snaps from the same 3-4 defense against the same formation, and the linemen line up in exactly the same place both times: a nose head-up on the center and the ends head-up on the tackles. The pictures freeze each snap a quarter-second after the ball moves. Where a lineman has moved, a dashed outline shows where he started. For each snap, say whether the front is playing two-gap or one-gap, and which linebackers you expect to be free.

Show the Python
STEPS3 = {False: {"LE": (0.72, -3.2), "NT": (0.72, 0.0), "RE": (0.72, 3.2)},
          True: {"LE": (0.62, -2.4), "NT": (0.62, 0.8), "RE": (0.62, 4.0)}}
START3 = {"LE": (1.0, -3.2), "NT": (1.0, 0.0), "RE": (1.0, 3.2)}
fig, axes = plt.subplots(2, 1, figsize=(6.0, 4.6))
for ax, snapB in [(axes[0], False), (axes[1], True)]:
    dfn = front([("LE", "4", -1), ("NT", "0", 1), ("RE", "4", 1)],
                others=[("LOLB", 1.0, -6.2, "E"), ("ROLB", 1.0, 6.2, "E")])
    dfn = [q.moved(d=STEPS3[snapB][q.key][0], w=STEPS3[snapB][q.key][1]) if q.key in START3 else q for q in dfn]
    p = Play(line("short") + [te(+1)], dfn, los=35, to_go=None)
    f = draw(p, ax=ax, lateral=(-8.0, 8.0), window=(-2.0, 2.8), title=False, width_in=6.0)
    for k, (d0, w0) in START3.items():
        d1, w1 = STEPS3[snapB][k]
        (x0, y0), (x1, y1) = _P(f, p, d0, w0), _P(f, p, d1, w1)
        if snapB:   # where he started (dashed) and the step that took him into the gap
            ax.add_patch(RegularPolygon((float(x0), float(y0)), 4, radius=0.94, orientation=np.pi / 4,
                                        fc=style.SURFACE, ec=style.DEFENSE, lw=1.1, ls=(0, (2, 1.6)), zorder=6))
            (xe, ye) = _P(f, p, d0 + 0.62 * (d1 - d0), w0 + 0.62 * (w1 - w0))
            ax.add_patch(FancyArrowPatch((float(x0), float(y0)), (float(xe), float(ye)), arrowstyle="-|>",
                                         mutation_scale=12, color=style.DEFENSE_DARK, lw=1.8, zorder=13))
        else:       # hands on the blocker's chest
            (xc, yc), (xd, yd) = _P(f, p, 0.06, w1 - 0.6), _P(f, p, 0.06, w1 + 0.6)
            ax.plot([float(xc), float(xd)], [float(yc), float(yd)], color=style.DEFENSE_DARK, lw=5.0,
                    solid_capstyle="butt", zorder=12)
    ax.set_title("Snap A" if not snapB else "Snap B", fontsize=9, loc="left", color=style.INK, fontweight="bold")
fig.tight_layout(h_pad=0.8)
plt.show()
Figure 30.14: Drill 3: the interior of two snaps, a quarter-second after the ball is snapped (the linebackers, behind them, are not shown). Both snaps started from the same alignment: a 0 and two 4s, each nose to nose with a blocker. Snap A: each lineman is still nose to nose with his blocker, hands on his chest (dark bars). Snap B: each lineman has stepped diagonally, all toward the tight end (arrows from the dashed outlines where they started), and is now in the seam beside his blocker.

Snap A is two-gap. The alignment couldn’t tell you, but the first step can: each lineman has stepped straight into the blocker in front of him and put his hands on his chest, about to lock out and read. That means three linemen are holding six gaps, the edge on the tight end has the D gap, and both inside linebackers are free: they have no gap of their own at the snap and will read and fill wherever the ball goes. If the linemen win, nobody blocks either of them.

Snap B is one-gap, from the same head-up alignment. Every lineman has slanted into a gap beside his blocker, all toward the tight end: the left end into the B gap, the nose into the A gap toward the tight end, the right end into the C gap. Every lineman has one gap, so the linebackers have one each too: the Mike the B gap toward the tight end, the Will the other A gap, exactly the assignments of the right half of Figure 30.3. Nobody is free, but everybody is fast. One-gap teams usually line up shaded, as in that figure, but plenty of them line up head-up and slant, precisely so that the alignment gives nothing away. That is why the first step, not the alignment, is the tell.

Back to the broadcast

The chapter opened with a graphic that said 3-4 and a picture that kept changing. Now you can read both.

  • The graphic says 3-4, and you count four on the line, two standing: that is the 3-4 team’s 2-4-5 nickel, its nose on the bench and its two outside linebackers on the edges. The roster says 2-4-5; the football is a four-man line.
  • Next snap, five across the line, three of them enormous and wedged inside the tackles, one linebacker behind them: a tite, built by sending the nose back on for a linebacker, the coach’s 3-3-5. A multiple defense like Georgia’s can reach the same picture without substituting at all, by shifting a four-man line into it at the last moment.
  • The inside run into a wall, the linebacker never touched: the tite’s whole purpose. A nose and two 4is occupy all five offensive linemen, the doubles can’t climb, and the one linebacker fills his gap unblocked and makes the tackle. That is how six defenders stop a run aimed at six blockers: one of them, the nose, is doing the work of two.

Takeaways

  • Find the center. A defender head-up on the center makes the front odd; nobody there makes it even. The odd fronts are built around a heavy nose who takes two blockers so somebody else can run free.
  • The 3-4 Okie is one alignment played two ways. Two-gap (head-up, control and read) keeps the inside linebackers clean at the cost of rare bodies and little pass rush; one-gap (shaded, attack) turns the 3-4 into an aggressive front, often an Under with a standing Sam. The first step tells you which.
  • The stand-up edge is the 3-4’s great legacy. Standing gives him vision, width and the option to drop, which makes the defense’s rush uncertain; the price is leverage against the run.
  • The tite walls off the middle. A 0 and two 4is leave the offense’s uncovered linemen stuck on doubles that can neither move them nor climb, so a light box with two safeties deep can still stop inside runs; the one linebacker owns the last gap, unblocked. It gives up pass rush, the perimeter (an empty C gap against outside zone) and the space underneath.
  • Fronts choose what to stop. Line up on or inside blockers to beat double teams (inside runs); line up outside them, with every outside gap filled, to beat reaches (outside zone). No front does both, so defenses change fronts by opponent, by situation and by shifting at the snap.
  • Nickel labels are roster labels. As roster counts, 4-2-5, 2-4-5 and 3-3-5 describe nearly the same box count and pass rush; what differs is whether the edges are listed as ends or linebackers. (When a coach calls a 3-3-5, he means the tite.) Count hands, not names, and read alignment before dialect.

Connections

Builds on: Defensive Line Play (techniques, one-gap and two-gap, the edge) and Even Fronts (the four-man fronts and their strength rules), with A First Look at Defense (base, nickel, the box) and Zone Running (inside and outside zone) as the background.

Sets up:

See also (case study): Fangio’s Two-High Revolution and Macdonald’s Answer, the tite front and the light box as the run-defense half of the two-high era.

If you want to go deeper: Cody Alexander’s MatchQuarters site and books (defensive structure, including the tite and four-down fronts, from a coach’s view); Chris B. Brown’s The Art of Smart Football and his Grantland and Smart Football writing on the 3-4 and its noses; and the 2024 Eagles’ or 2021 Georgia Bulldogs’ games, watched for nothing but the three men inside the tackles.

NoteGo deeper

Measuring the wall. The tite’s promise is that nobody climbs: every offensive lineman is still engaged with a defensive lineman a second after the snap, so the linebacker behind them is untouched. Tracking data can test that. A simple measure is the distance from the linebacker to the nearest offensive blocker: two players whose centres are about a yard apart are in contact, so anything under about 1.5 yards means a blocker has reached him. Here it is at three moments for the Mike in the simulated tite play above, and, for contrast, for the Mike in the same inside zone against a four-man front that leaves the play-side guard uncovered (a 1 on the center and a 3 on the left guard), so that the guard can climb. Both are computed from Big Data Bowl-format frames (simulated, BDB-format):

Show the Python (nearest blocker to the linebacker, from tracking frames)
def nearest_blocker(play, key, times=(0.5, 1.0, 1.5)):
    trk = play.to_tracking()
    me = trk[trk.displayName == key].set_index("time")
    ol = trk[trk.displayName.isin(OL_KEYS + ("Y",))]
    out = {}
    for t in times:
        m = me.loc[round(t, 1)]
        o = ol[ol.time.round(1) == round(t, 1)]
        out[f"+{t:.1f} s"] = f"{np.hypot(o.x - m.x, o.y - m.y).min():.1f} yd"
    return out


def even_iz():
    """Inside zone right against a four-man front: 3 on the left guard, 1 on the center's right shoulder,
    5s on the tackles. The right guard is uncovered: he helps on the 1, then climbs to the Mike."""
    dfn = [D("LE", "DE", 1.0, T("5", -1), "5"), D("L3", "DL", 1.0, T("3", -1), "3"),
           D("R1", "DL", 1.0, T("1", 1), "1"), D("RE", "DE", 1.0, T("5", 1), "5"),
           D("WILL", "LB", 4.7, -1.6, "W"), D("MIKE", "LB", 4.7, 1.6, "M")]
    p = Play(gun11(y_attached=True), dfn, los=35, to_go=10)
    go_to(p, "C", (-0.35, 0.0), speed=1.4); go_to(p, "R1", (0.9, 0.9), "path", speed=0.5)
    go_to(p, "RG", (-0.2, 1.2), speed=2.0); go_to(p, "RG", (2.9, 1.9), speed=3.2)
    go_to(p, "MIKE", (3.6, 2.2), "path", speed=2.2, delay=0.35)
    go_to(p, "LG", (-0.3, -2.0), speed=1.6); go_to(p, "RT", (-0.3, 3.4), speed=1.6)
    go_to(p, "RB", (-1.9, 1.5), "run", speed=6.0, via=[(-4.7, -0.2), (-3.8, 1.0)])
    p.handoff("RB", t=0.5)
    return p


as_markdown(pd.DataFrame([{"defender": "Mike vs inside zone, tite (simulated)", **nearest_blocker(P_TITE, "MIKE")},
                          {"defender": "Mike vs inside zone, uncovered guard (simulated)",
                           **nearest_blocker(even_iz(), "MIKE")}]))
defender +0.5 s +1.0 s +1.5 s
Mike vs inside zone, tite (simulated) 4.6 yd 3.1 yd 2.5 yd
Mike vs inside zone, uncovered guard (simulated) 4.1 yd 1.8 yd 0.8 yd

Read the rows across. The tite’s Mike closes on the line of scrimmage because he is filling, yet no blocker ever gets within reach of him; against the uncovered guard, the distance shrinks toward the 1.5-yard line and then falls below a yard, which is the guard arriving on him. On real frames the same measure, computed for every inside linebacker on every run, separates fronts that keep linebackers clean from fronts that don’t. The 2025 Big Data Bowl release (2022 season, weeks 1–9) has tracking for every player and a players file with positions; pair it with the nflverse participation data above to tag each snap’s front. The data needs a free Kaggle login, so this cell is not run when the book is built.

Show the Python (real Big Data Bowl tracking; not run in the build)
import numpy as np
import pandas as pd
from gridiron import bdb

plays = pd.read_csv("data/bdb/plays.csv")
players = pd.read_csv("data/bdb/players.csv")[["nflId", "position"]]
runs = plays[plays["isDropback"] == False]
trk = bdb.load_tracking("data/bdb/tracking_week_*.csv")
if "position" not in trk:
    trk = trk.merge(players, on="nflId", how="left")

OL = {"T", "G", "C"}
out = []
for g, pl in runs[["gameId", "playId"]].itertuples(index=False):
    one = bdb.prepare(trk, plays, game_id=g, play_id=pl, label="position")
    at1 = one[one["time"].round(1) == 1.0]
    lbs, ol = at1[at1["position"].isin(["ILB", "MLB"])], at1[at1["position"].isin(OL)]
    for r in lbs.itertuples():
        out.append({"gameId": g, "playId": pl, "nflId": r.nflId,
                    "nearest_ol": float(np.hypot(ol.x - r.x, ol.y - r.y).min())})
clean = pd.DataFrame(out)
(clean.nearest_ol > 1.5).mean()   # share of inside-linebacker run snaps with no blocker within 1.5 yards at 1 s

  1. Belichick was the Giants’ defensive coordinator under Parcells from 1985 to 1990: Pro Football Hall of Fame, Bill Parcells, https://www.profootballhof.com/players/bill-parcells/, and “Bill Belichick,” Wikipedia, https://en.wikipedia.org/wiki/Bill_Belichick. The Patriots’ 3-4 line of Seymour, Warren and Wilfork, “asked to control the blocker and really let the linebackers come and make the play”: Mike Reiss, “Analysis: D-line,” Boston.com (December 8, 2005), https://www.boston.com/sports/new-england-patriots/2005/12/08/analysis_dline; Wilfork’s two-gap technique: Chris B. Brown, “Ode to the War Daddies,” Grantland (February 6, 2012), https://grantland.com/features/bill-belichick-vince-wilfork-new-england-patriots-defense/.↩︎

  2. Neale’s switch “from a 5-3-3 to the 5-2-4 for the 1947 season”: Tony Fitts, “A History of the Eagles Defensive Backs,” Philadelphia Inquirer (September 9, 2009), https://www.inquirer.com/philly/sports/20090909_A_History_of_the_Eagles_Defensive_Backs.html. The Eagle defense’s five-man line and its passage to Wilkinson’s Oklahoma 5-2: “5–2 defense,” Wikipedia, https://en.wikipedia.org/wiki/5%E2%80%932_defense. Neale’s championships (1948, 1949): Pro Football Hall of Fame, https://www.profootballhof.com/players/earle-greasy-neale/.↩︎

  3. Wilkinson’s “5–2 Oklahoma defense” as the origin of the 3-4: “3–4 defense,” Wikipedia, https://en.wikipedia.org/wiki/3%E2%80%934_defense. Wilkinson’s 47-game winning streak (1953–57): “Bud Wilkinson,” Wikipedia, https://en.wikipedia.org/wiki/Bud_Wilkinson.↩︎

  4. “Bob Matheson,” Wikipedia (acquired before the 1971 season at Arnsparger’s request; the “53” defense named for his number; a precursor of the 3-4): https://en.wikipedia.org/wiki/Bob_Matheson. The Dolphins’ 1972 season (17–0, including Super Bowl VII): “1972 Miami Dolphins season,” Wikipedia, https://en.wikipedia.org/wiki/1972_Miami_Dolphins_season.↩︎

  5. The 1974 Patriots under Fairbanks, who had coached the 5-2 at Oklahoma, as the “first NFL team to regularly employ the 3–4”: “3–4 defense,” Wikipedia, https://en.wikipedia.org/wiki/3%E2%80%934_defense; “Chuck Fairbanks,” Wikipedia, https://en.wikipedia.org/wiki/Chuck_Fairbanks.↩︎

  6. “Curley Culp,” Wikipedia (traded from Kansas City to Houston on October 22, 1974, while Phillips was Gillman’s defensive coordinator and had persuaded him to play a 3-4; his 1967 NCAA heavyweight wrestling title at Arizona State; the Phillips quotation): https://en.wikipedia.org/wiki/Curley_Culp. Phillips named head coach on January 25, 1975: “Bum Phillips,” Wikipedia, https://en.wikipedia.org/wiki/Bum_Phillips. Bum Phillips and the technique numbers: The Language of the Run Game.↩︎

  7. “3–4 defense,” Wikipedia: Madden’s 1976 Raiders switching after injuries to their defensive line; the 1977 Dolphins going “full-time to the 3–4 under Arnsparger”; its peak in “the late 1970s and early 1980s”; its rarity by the mid-1990s outside Buffalo and Pittsburgh; and the Steelers’ use of it as their base since 1982: https://en.wikipedia.org/wiki/3%E2%80%934_defense.↩︎

  8. “Phillips has followed the general principles of his father Bum’s 3–4 defensive scheme for most of his career,” in contrast to the “relatively passive two-gap” 3-4: Robert Mays, “How Wade Phillips Fits Into the NFL’s Coaching Youth Movement,” The Ringer (July 2, 2018), https://www.theringer.com/nfl/2018/7/2/17511594/wade-phillips-rams-coaching-evolution. Wade coached under Bum as the Oilers’ linebackers coach for Bum’s last five seasons there (1976–1980): Houston Texans, “Bum Phillips visits Texans practice on Wednesday” (August 8, 2012), https://www.houstontexans.com/news/bum-phillips-visits-texans-practice-on-wednesday-7843046.↩︎

  9. Houston Texans, “2011 position preview: defensive line” (September 7, 2011): Phillips “views them as a perfect fit for his one-gap scheme”; defensive line coach Bill Kollar: “We’re more still of a one-gap type defense… It’s not like a two-gap type defense where you need that 350-pound nose man”: https://www.houstontexans.com/news/2011-position-preview-defensive-line-5715572.↩︎

  10. J.J. Watt led the NFL with 20.5 sacks in 2012 and was Defensive Player of the Year that season (and in 2014 and 2015): Pro Football Reference, https://www.pro-football-reference.com/players/W/WattJ.00.htm; “J. J. Watt,” Wikipedia, https://en.wikipedia.org/wiki/J._J._Watt. Wade Phillips was Houston’s defensive coordinator 2011–2013 and Denver’s 2015–2016: “Wade Phillips,” Wikipedia, https://en.wikipedia.org/wiki/Wade_Phillips.↩︎

  11. “Super Bowl 50,” Wikipedia (February 7, 2016, Levi’s Stadium; Denver 24, Carolina 10; Von Miller MVP; Denver “ranked first in the NFL in yards allowed”; Phillips as defensive coordinator): https://en.wikipedia.org/wiki/Super_Bowl_50. Ware and Miller as Phillips’s outside linebackers: “2015 Denver Broncos season,” Wikipedia, https://en.wikipedia.org/wiki/2015_Denver_Broncos_season.↩︎

  12. “Light boxes with gap-and-a-half fronts to pressure with less and encourage offenses to run,” in a discussion of Staley’s tite front and Jordan Davis: “Are Jordan Davis and nose tackles a new premium position?”, Philly Cover Corner (May 5, 2022), https://phillycovercorner.com/2022/05/are-jordan-davis-and-nose-tackles-a-new-premium-position/.↩︎

  13. NFL Next Gen Stats: split-safety coverage on 42.0% of dropbacks in 2025, the highest since tracking began in 2018: NFL.com, “The coverage that turned the Seahawks into Super Bowl winners and is taking the NFL by storm,” https://www.nfl.com/news/the-coverage-that-turned-the-seahawks-into-super-bowl-winners-and-is-taking-the-nfl-by-storm (this book’s checked facts, planning/FACTS-current.md §10).↩︎

  14. Ohio State’s version under Matt Patricia, “a 5-1 front with a head up 0-tech Nose Tackle, two 3-techs, two Edge players, and just one off-ball Linebacker,” in which “both B-gaps are occupied by Defensive Linemen”: Michael Pettit, “Defensively Speaking: Texas,” Buckeye Huddle (September 2, 2025), https://buckeyehuddle.com/2025/09/02/defensively-speaking-texas/. The NFL tite as “two 4i’s and a two-gap Nose”: Cody Alexander, “Flipping the Script,” MatchQuarters (August 1, 2022), https://www.matchquarters.com/p/flipping-the-script.↩︎

  15. The nose “will fill the A-gap away from where the center steps to,” with the linebackers working the other interior gaps: Seth Galina, “Setting the Nose in the Tite Front,” USA Football (March 13, 2019), https://blogs.usafootball.com/blog/7088/setting-the-nose-in-the-tite-front.↩︎

  16. “2018 Chicago Bears season,” Wikipedia (the Mack trade on September 2, 2018; Hicks and Goldman on the defensive line; a 12–4 record): https://en.wikipedia.org/wiki/2018_Chicago_Bears_season. Points allowed (283, fewest; Baltimore next at 287) and takeaways (36 interceptions plus lost fumbles, most; Cleveland next at 32): author’s count from nflverse schedules and play-by-play, 2018 regular season; Pro Football Reference, https://www.pro-football-reference.com/years/2018/opp.htm. Fangio became the Broncos’ head coach in January 2019: “Vic Fangio,” Wikipedia, https://en.wikipedia.org/wiki/Vic_Fangio.↩︎

  17. Philly Cover Corner (May 5, 2022): “Staley’s Tite front with three defensive linemen inside the tackles and five on the line vs. six blockers,” and “In 2020 with the Rams, Staley ran a light box 78% of the time, 2nd highest in the league, on way to the league’s best defense”: https://phillycovercorner.com/2022/05/are-jordan-davis-and-nose-tackles-a-new-premium-position/. The 2020 Rams’ 296 points allowed, fewest in the league (Baltimore next at 303): author’s count from nflverse schedules, 2020 regular season; Pro Football Reference, https://www.pro-football-reference.com/teams/ram/2020.htm.↩︎

  18. Fangio remains the Eagles’ defensive coordinator in 2026, after joining for the 2024 season: this book’s checked facts (planning/FACTS-current.md, item C10).↩︎

  19. Cody Alexander, “Flipping the Script,” MatchQuarters (August 1, 2022): “With two 4i’s and a two-gap Nose, the defense can be over-reliant on off-ball LBs and secondary players rushing the passer,” and “one of the main drawbacks of the front is its inability to get a rush without sending an off-ball defender”: https://www.matchquarters.com/p/flipping-the-script.↩︎

  20. Alexander, “Flipping the Script” (as above): Fangio used his four-down front more often in Denver, while Staley preferred the five-man front: https://www.matchquarters.com/p/flipping-the-script.↩︎

  21. Author’s calculation from the nflverse participation file (FTN charting) joined to play-by-play, regular-season 2025 run and pass plays with personnel recorded, via nflreadpy (the code is in this chapter’s nickel-labels figure). It agrees with NFL Next Gen Stats’ 29.7% base-defense rate for 2025: NFL.com, “NFL trend watch: heavy personnel could shape Super Bowl LX showdown between Patriots and Seahawks,” https://www.nfl.com/news/nfl-trend-watch-heavy-personnel-could-shape-super-bowl-lx-showdown-between-patriots-and-seahawks.↩︎

  22. “Staley and his offshoots favor the Penny Front”: Cody Alexander, “The Fangio System’s Penny Sam 8,” MatchQuarters (June 19, 2023), https://www.matchquarters.com/p/fanigio-penny-sam-8. Penny as “a 5-1 front with a head up 0-tech Nose Tackle, two 3-techs, two Edge players, and just one off-ball Linebacker”: Pettit, “Defensively Speaking: Texas” (cited above). Names vary by staff, which is this chapter’s point.↩︎

  23. Joe Lee Dunn’s first 3-3-5 at Memphis in 1991, swapping a lineman for a defensive back because he lacked big linemen, amid the spread-offense “upheaval”: Chris B. Brown, “The Birth of the 3-3-5 Defense,” Grantland (June 6, 2012), https://grantland.com/features/an-excerpt-essential-smart-football-birth-3-3-5-defense/.↩︎

  24. Jene Bramel, Footballguys (March 5, 2014): “Now every team is ‘multiple’”: https://www.footballguys.com/article/14bramel_rtd_idp_coaching_changes. Belichick “is trying to take away your strength when he has a flexible enough defense to do that”: Bramel in Matt Waldman, “Conversation with Footballguys’ Jene Bramel,” Rookie Scouting Portfolio (August 7, 2011), https://mattwaldmanrsp.com/2011/08/07/conversation-with-footballguys-jene-bramel/.↩︎

  25. Georgia’s mint front and its pre-snap move from a 4-2-5 (“The RDT becomes the nose and the RDE slips into a 4i. The boundary end stands up and walks. The other DT becomes a 4i”): Coach Kou, “Georgia 3-4 Mint Front: Games and Pressures,” Coach Kou’s Substack (July 8, 2025), https://coachkoufootball.substack.com/p/georgia-3-4-mint-front-games-pressures.↩︎

  26. “Fritz Shurmur,” Wikipedia (Rams defensive coordinator 1982–1990; author of The Eagle Five Linebacker Defense, 1993): https://en.wikipedia.org/wiki/Fritz_Shurmur. The Eagle as “two defensive linemen, five linebackers,” used extensively 1988–1990: “1989 Los Angeles Rams season,” Wikipedia, https://en.wikipedia.org/wiki/1989_Los_Angeles_Rams_season, and “Kevin Greene,” Wikipedia, https://en.wikipedia.org/wiki/Kevin_Greene. The 1989 NFC wild-card game (Rams 21, Eagles 7): “Los Angeles went with five linebackers and six defensive backs on long-yardage situations and played zone defense every play,” UPI, “Analysis” (December 31, 1989), https://www.upi.com/Archives/1989/12/31/Analysis/1604631083600/.↩︎

  27. For one modern definition (the ends “align themselves slightly further inside on the shoulders of the offensive tackles… only responsible for one gap”), Trevor Sikkema, Pewter Report (May 16, 2017), https://www.pewterreport.com/cover-3-4-3-vs-3-4-versatile-can-bucs-defense/2/. For the one-side meaning (a change-up front in which the outside linebacker walks up on the tackle and the end reduces to a 3-technique, for single-gap control): Steve Erxleben with Spencer Leno, X&O Labs, https://www.xandolabs.com/?p=112023. Names vary by staff.↩︎

  28. Chris Haddad, “The Over Front Install Guide,” Viqtory Sports (updated April 9, 2026): in the G front, “the Nose tackle moves from a 1-technique to a 2i (inside shoulder of the guard),” which makes the center work laterally and slows combo blocks on inside zone: https://www.viqtorysports.com/the-over-front-in-football-explained/. The guide discusses G only on four-down fronts; the Okie version in the figure is an illustration.↩︎

  29. Miller’s 2.5 sacks and two forced fumbles in Super Bowl 50, the first recovered by Malik Jackson in the end zone for Denver’s first touchdown: “Super Bowl 50,” Wikipedia, https://en.wikipedia.org/wiki/Super_Bowl_50; “Von Miller,” Wikipedia, https://en.wikipedia.org/wiki/Von_Miller.↩︎

  30. The 2024 Eagles allowed 4,732 yards (278.4 per game), the fewest in the NFL: Pro Football Reference, https://www.pro-football-reference.com/teams/phi/2024.htm. Super Bowl LIX (February 9, 2025): Eagles 40, Chiefs 22, with the Eagles’ pressure coming from four-man rushes: this book’s checked facts (planning/FACTS-current.md §1) and “Super Bowl LIX,” Wikipedia, https://en.wikipedia.org/wiki/Super_Bowl_LIX.↩︎

  31. John McMullen, “Eagles 2024 training camp preview: interior defensive line,” SI.com Eagles Today (July 15, 2024): “Carter will mainly play 4i and 3-technique in Fangio’s variable fronts while Davis will handle the nose/shade,” and “the five-man (50) includes two overhang players outside two 4i techniques who bookend nose tackle Jordan Davis,” with Milton Williams at the other 4i: https://www.si.com/nfl/eagles/onsi/news/eagles-2024-training-camp-preview-interior-defensive-line-01j2vh9mv12p. Davis’s combine weight (341 pounds, 2022): nflverse combine file, as in Defensive Line Play.↩︎

  32. The 2021 season (national championship win over Alabama, 33–18; “one of the greatest defenses in college football history”; Jordan Davis and Jalen Carter on the roster): “2021 Georgia Bulldogs football team,” Wikipedia, https://en.wikipedia.org/wiki/2021_Georgia_Bulldogs_football_team. The Eagles drafted Davis (13th overall, 2022) and Carter (9th overall, 2023): “Jordan Davis (defensive lineman),” Wikipedia, https://en.wikipedia.org/wiki/Jordan_Davis_(defensive_lineman); “Jalen Carter,” Wikipedia, https://en.wikipedia.org/wiki/Jalen_Carter.↩︎