# Is second-season syndrome real?

Source: https://www.bryanmcguire.co.uk/myth-or-maths/second-season-syndrome
Published: 2026-09-30

> Promoted sides are said to struggle in their second year, once the novelty wears off. Of 23 that stayed up, 12 did better in year two and 11 worse. Sides with a great first season do fall back, but so does everyone else who over-performs.

## The claim

"Second-season syndrome." A promoted side has a brilliant first year on adrenaline and momentum. Then the novelty wears off, opponents have worked them out, and the second season is a slog.

## Why people believe it

Everyone remembers the promoted side that finished in the top half and then slid down the table a year later. Those stories are vivid, and they come with a ready explanation: the other managers now know what's coming. Nobody writes about the promoted side that finished tenth and then ninth.

## The data

Every Scottish Premiership season from 2000/01 to 2025/26, from the [football-data.co.uk](https://www.football-data.co.uk/scotlandm.php) results files.

## The method

A side counts as promoted in any season it's in the Premiership having not been in it the season before. That gives **29 promoted sides** from 2001/02 to 2025/26: more than one a season, because in some years a play-off winner came up as well, Dundee were invited up in 2012/13 when Rangers dropped out, and Rangers came back up in 2016/17. Performance is **points a game**, so every season is on the same footing. For the second season, only the **23 sides that stayed up** have one to compare.

## The evidence

### The first season is hard

Promoted sides take **1.15 points a game** in their first season, against 1.41 for everyone else. Five of the 29 finished bottom. But four finished third, so a promoted side isn't doomed to be poor.

### The second season isn't worse

| The 23 that stayed up | Points a game |
|---|---|
| First season | 1.24 |
| Second season | 1.21 |

**11 did worse in their second season, 12 did better.** On average they dropped by three hundredths of a point a game: over a 38-game season, about one point. There's no sign of a general second-season slump.

### What people are really seeing

The syndrome is real for one kind of side: the ones that had a **great** first season.

<figure class="rank-chart">
<div role="img" aria-label="Each promoted side that stayed up, with its points a game in the first season on the left and the second on the right. The nine sides above the league average of 1.38 in their first season, in gold, almost all slope downwards; eight of the nine did worse. The fourteen at or below average, in mint, mostly slope upwards; only three did worse.">

</div>
<figcaption>One line per promoted side that stayed up. Strong first seasons, in gold, fall back; weak ones, in mint, mostly improve. The two roughly cancel out.</figcaption>
</figure>

| In their first season | Sides | Change in year two | Did worse |
|---|---|---|---|
| Above the league average (1.38) | 9 | −0.30 | 8 |
| At or below it | 14 | +0.14 | 3 |

Eight of the nine sides that were above average in their first season did worse in their second: Livingston went from 1.53 points a game in 2001/02 to 0.92, Hearts from 1.71 in 2015/16 to 1.21. But the sides that struggled in year one mostly **improved**: Falkirk from 0.87 in 2005/06 to 1.32, Kilmarnock from 1.05 in 2022/23 to 1.47.

That's the pull to the middle, the same [regression to the mean](/learn/gradient-descent) that means a side's goals this season are only partly a repeat of last season's. A season well above a side's true level usually includes some luck, and luck doesn't repeat.

### Is it special to promoted sides?

If second-season syndrome were a promoted-side curse, established sides with an equally good season shouldn't fall back as far. They do fall back:

| First season on 1.39 to 1.76 points a game | Sides | Change next season | Did worse |
|---|---|---|---|
| Promoted | 9 | −0.30 | 8 |
| Established | 49 | −0.16 | 36 |

The promoted sides fell a little further, but with only nine of them, luck alone can move their average by about ±0.16. The gap, 0.14, is inside that. Any side, promoted or not, that has a season well above its usual level tends to come back towards it.

## Verdict

**Not supported.** Promoted sides that stay up do about as well in their second season as their first, 1.21 points a game against 1.24, and slightly more improve than decline. What fans call second-season syndrome is the pull to the middle: the sides with a great first year fall back, as over-performers do everywhere, while the ones who struggled tend to improve, and nobody gives that a name.

## Caveats

- **Only survivors have a second season.** The six promoted sides relegated at the first attempt, or still in their first season in 2025/26, can't be compared.
- **Small numbers.** 23 sides, and 9 in the group that matters most. The extra fall for strong promoted sides may be real but small; the data can't tell it from luck.
- **Points only.** Points deductions aren't in the results files.
- **Points a game, not position.** A side can do better and still finish lower if the league around it changes.

## Reproduce the analysis

The results files are published by [football-data.co.uk](https://www.football-data.co.uk/scotlandm.php). Download the Premiership file (SC0) for each season from 2000/01 to 2025/26 and save each under its own name, such as `SC0_2425.csv`; they aren't rehosted on this site. Then:

```python
import csv
from collections import Counter
from math import sqrt
from statistics import pstdev

names = [f"{y % 100:02d}{(y + 1) % 100:02d}" for y in range(2000, 2026)]

def points_per_game(s):
    pts, played = Counter(), Counter()
    with open(f"SC0_{s}.csv", encoding="latin-1") as f:
        for r in csv.DictReader(f):
            if r.get("FTR") in ("H", "D", "A"):
                h, a = r["HomeTeam"], r["AwayTeam"]
                pts[h] += {"H": 3, "D": 1, "A": 0}[r["FTR"]]
                pts[a] += {"H": 0, "D": 1, "A": 3}[r["FTR"]]
                played[h] += 1
                played[a] += 1
    return {t: pts[t] / played[t] for t in played}

ppg = {s: points_per_game(s) for s in names}
label = lambda s: f"20{s[:2]}/{s[2:]}"

# promoted: in the Premiership this season but not last season
promoted, others = [], []
for last, s in zip(names, names[1:]):
    for t, p in ppg[s].items():
        (others if t in ppg[last] else promoted).append((s, t, p))
print(f"{len(promoted)} promoted sides, 2001/02 to 2025/26:", ", ".join(f"{t} {label(s)}" for s, t, _ in promoted))
first = [p for _, _, p in promoted]
print(f"first season {sum(first) / len(first):.2f} points a game, everyone else {sum(p for *_, p in others) / len(others):.2f}")
finish = Counter(sorted(ppg[s], key=ppg[s].get, reverse=True).index(t) + 1 for s, t, _ in promoted)
print("where they finished (by points a game):", dict(sorted(finish.items())))

# second season: promoted sides that stayed up, first season against second
pairs = [(t, label(s), p, ppg[n][t]) for s, t, p in promoted for n in names[names.index(s) + 1:names.index(s) + 2] if t in ppg[n]]
worse = [x for x in pairs if x[3] < x[2]]
print(f"{len(pairs)} stayed up: {sum(x[2] for x in pairs) / len(pairs):.2f} points a game in the first season, "
      f"{sum(x[3] for x in pairs) / len(pairs):.2f} in the second; worse in {len(worse)}, better in {len(pairs) - len(worse)}")
for t, s, a, b in sorted(pairs, key=lambda x: x[3] - x[2]):
    print(f"  {t:15} {s}: {a:.2f} then {b:.2f} ({b - a:+.2f})")

# the pull to the middle: strong first seasons fall back, weak ones improve. Special to promoted sides?
average = sum(p for s in names for p in ppg[s].values()) / sum(len(ppg[s]) for s in names)
up = [x for x in pairs if x[2] > average]
down = [x for x in pairs if x[2] <= average]
print(f"league average {average:.2f} points a game")
for name, group in (("above average in year one", up), ("at or below average", down)):
    print(f"  promoted, {name}: {len(group)} sides, change {sum(b - a for *_, a, b in group) / len(group):+.2f}, "
          f"worse in {sum(b < a for *_, a, b in group)}")
# established sides (not newly promoted) with a first season in the same range as the strong promoted ones
low, high = min(x[2] for x in up), max(x[2] for x in up)
same = [(t, label(a), ppg[a][t], ppg[b][t]) for last, a, b in zip(names, names[1:], names[2:])
        for t in ppg[a] if t in ppg[last] and t in ppg[b] and low <= ppg[a][t] <= high]
changes = [b - a for *_, a, b in same]
print(f"  established sides on {low:.2f} to {high:.2f}: {len(same)}, change {sum(changes) / len(changes):+.2f}, worse in {sum(c < 0 for c in changes)}")
print(f"  luck alone moves the average of {len(up)} sides by about ±{2 * pstdev(changes) / sqrt(len(up)):.2f}")
```
