Fish and temperature
How the app decides the season phase from the lake temperature and the date, and where it looks for smallmouth bass in each phase.
In plain words
Smallmouth bass are cold-blooded: their body temperature follows the water, and so does their year. They hold deep and feed little in winter, move shallow to spawn as the water warms in spring, spread out over deeper structure in summer, feed actively as the water cools in fall, and drop deep again as winter comes.
The app turns this into seven season phases, decided from the lake-average temperature, its trend over the last 7 days and the date. Each phase has a target depth band (where the plan looks first), a secondary band and a preferred temperature range. The rules and bands are Starting value: SPEC 5.3 except where tournament evidence supports them; the backtest and logbooks check them.
Season phases
Rules are checked from the top; the first that fits decides. Warming means a 7-day trend of 0 F per day or more.
| Phase | Rule |
|---|---|
| Winter | Below 45 F, any date. |
| Pre-spawn | 45 to below 58 F and warming, Mar 1 to Jun 30. |
| Spawn | 58 to below 68 F and warming, May 1 to Jun 30. |
| Post-spawn | 58 to below 70 F, May 1 to Jul 14. |
| Summer | Jul 15 to Sep 15; or from Jul 1 to Sep 15 at 68 F and above. |
| Early fall | 58 to below 68 F and cooling, Sep 1 to Nov 30. |
| Late fall | Below 58 F and cooling, Oct 1 to Dec 31. |
| Otherwise | Before Jul 1: summer from 68 F, post-spawn from 58 F, else pre-spawn. From Jul 1: summer, early fall or late fall by the same limits. Working rule: fallback |
Example: on 2026-10-08, with the lake at 61.4 F and a trend of -0.46 F per day (the golden projection), the engine gives early fall: Lake 61.4 F, cooling 0.46 F a day over the last 7 days: 58-68 F and cooling between September and November, so early fall.
Regulations sit on top of the phases: a closed season removes water from the plan whatever the phase (Regulations).
Source: SPEC 5.3. Engine: seasonPhase in packages/engine/src/season.ts.
Depth bands by phase
| Phase | Primary | Secondary | Preferred lake | Evidence |
|---|---|---|---|---|
| Winter | 18-27 ft | none | 35-45 F | Starting value |
| Pre-spawn | 8-16 ft | 16-22 ft | 45-58 F | Starting value |
| Spawn | 3-10 ft | 10-14 ft | 58-68 F | Starting value |
| Post-spawn | 2-14 ft | 14-20 ft | 62-72 F | BFL 2014 (2-12 ft), BFL 2012 (14-16 ft) |
| Summer | 15-24 ft | 10-15 ft | 66-77 F | every July-August win 15-24 ft |
| Early fall | 10-16 ft | 16-21 ft | 58-68 F | 2019 AOY 11-12 ft; MLF 2010 guide 3-7 ft on windblown rock |
| Late fall | 16-22 ft | 22-27 ft | 45-58 F | Starting value |
The preferred temperature ranges are Starting value: each phase's own temperature range; summer from the tournament record. The tournament wins in the record came at lake temperatures of 65.7-76.3 F. Outside that range the bands rest more on starting values, and when the lake is more than 5 F outside it the plan's confidence is low (Validation).
Fronts move the band
- The two days after a cold front: the primary band extends up to 4 ft deeper, to 22 ft at most, keeping its shallow edge and never cutting a deeper edge it already has. Early fall: 10-16 ft becomes 10-20 ft.
- The day before a front: the band moves 3 ft shallower, not above 4 ft. Early fall: 7-13 ft.
These modifiers are Starting value; the post-front rule was changed on 2026-10-01 after the first backtest (it had shifted summer's 15-24 ft to 19-22 ft and given the 2018 FLW winner's area no depth credit; SPEC 5.3).
Source: SPEC 5.3; tournament records (Data and sources). Engine: DEPTH_BANDS, PHASE_TEMP_F, adjustedBands in season.ts.
Calculator
Season phase and depth band
Runs the app's engine in this browser: seasonPhase, adjustedBands (packages/engine/src/season.ts).
Engine basis: Lake 61.4 F, cooling 0.46 F a day over the last 7 days: 58-68 F and cooling between September and November, so early fall. Evidence for the band: 2019 AOY 11-12 ft; MLF 2010 guide 3-7 ft on windblown rock.
Constants
| Constant | Value | In the code | Basis |
|---|---|---|---|
| Phase temperature limits | 45, 58, 68, 70 F | PHASE_LIMITS_F | Starting value: SPEC 5.3 |
| Phase date windows | see the table | PHASE_WINDOWS_MMDD | Starting value: SPEC 5.3 |
| Fallback split | Jul 1 | PHASE_FALLBACK_SPLIT_MMDD | Working rule: first half of the year by spawning temperatures |
| Post-front extension and cap | 4 ft, 22 ft | POST_FRONT_EXTEND_FT, POST_FRONT_CAP_FT | Starting value: changed after the 2026-10-01 backtest |
| Pre-front shift and floor | 3 ft, 4 ft | PRE_FRONT_SHALLOWER_FT, PRE_FRONT_FLOOR_FT | Starting value: SPEC 5.3 |
| Tournament record temperatures | 65.7-76.3 F | RECORD_RANGE_F (confidence.ts) | 2019 AOY to 2025 Elite (data/seed/tournaments.csv) |
Constants are in packages/engine/src/season.ts unless named otherwise. Depth bands and preferred temperatures: the tables above.
Sources
- Tournament reports behind the evidence: the record list on the Data and sources page.
- Bryant, W.C. and Smith, K.D. (1988). Distribution and population dynamics of smallmouth bass in Anchor Bay, Lake St. Clair. Michigan DNR Fisheries Research Report 1944.
- Links: References.