Guides
Designing progression recommendations that never silently change a plan
Explore the technical and design principles behind deterministic, user-controlled progression recommendations that preserve structured workout plans.
The Friction of Automated Progression
Software designed for the gym often attempts to assume the role of a coach. When a user completes a workout easily, these applications silently adjust the next session, increasing the prescribed weight or swapping exercises. For a novice, this automated generation provides value. However, for a dedicated trainee executing a meticulously structured training block—such as a rigid 12-week strength and mobility programme—this behavior is destructive.
When a user possesses a defined programme, their primary need is precise execution, not automated decision-making. The friction arises when software assumes it knows better than the written plan. If a programme specifies a deload week or a specific double-progression protocol, a system that silently updates planned weights based on the previous week’s performance corrupts the author’s intent.
Building software for this cohort requires a shift: the software must act as an execution layer, not a generative coach. The product purpose is to allow the user to build the plan once, and then help them follow it precisely. But how do we provide helpful progression recommendations without violating the integrity of the authored plan?
Execution Over Automation: The Immutable Plan
The foundation of a non-destructive progression system is the immutable plan. In a structured system, exercise order, set volumes, and rest periods are explicit programme data. A session must start in the exact authored order.
To achieve this, the software strictly separates the template from the execution. When a user initiates a workout, the system takes an immutable snapshot of the planned session. This snapshot moves into an active execution state.
During this session, the user is free to adapt to the gym floor. They might skip a set, add an extra set, or move a specific exercise to a “Do later” status. These user-directed skips, extras, partial segments, and deferrals are recorded as explicit execution deviations.
Crucially, these deviations belong only to the history of that specific session. They never rewrite the programme or the future workout templates. If a user modifies their session to accommodate a busy gym, the underlying template for the following week remains untouched.
Deterministic Evidence and Provenance
If the template is immutable, how do progression recommendations function? The answer lies in deterministic, session-only surfacing of historical data.
Progression must be directly rooted in the user’s recorded history. When a user arrives at an eligible working set, the system can provide a load recommendation derived deterministically from the latest comparable completed session.
For example, if the authored programme specifies double-progression logic—where a user must hit the top of a repetition range before increasing the load—the software can evaluate the previous session’s recorded history. If the user completed 3 sets of 8 repetitions at 60 kilograms (the top of a 6-8 rep range), the system calculates the logical increment based on the explicit rules.
However, a calculation is merely a suggestion until the user acts upon it. The recommendation is presented purely as session-only input. It carries explicit provenance, showing the user exactly which past session and recorded metrics generated the suggestion. By displaying the evidence directly alongside the recommendation, the system builds trust.
The Interface of Explicit Consent
The physical operating context of a gym dictates specific interface constraints. Users are operating their devices with limited attention, sweaty hands, and often under significant physical fatigue. In this environment, silent state changes are catastrophic.
When a progression recommendation is surfaced, the interface must enforce explicit consent. The system requires an active decision: they must choose to “Accept”, “Edit”, or “Keep current” regarding the recommended load.
If the user taps “Accept”, the active session’s working set is updated. If they choose “Keep current”, the authored target remains in place. If they want to make a different adjustment, they tap “Edit”.
By forcing this explicit interaction, the software ensures that recommendations never silently mutate the active session. The user remains in complete control, reinforcing the boundary between the plan and the execution.
Data Integrity and Honest Measurement
To support a system that relies heavily on historical evidence, the underlying data architecture must practice honest measurement. This means keeping recorded, calculated, authored, adjusted, and unavailable values visibly distinct.
Consider a workout history that includes skipped sets. If a user skips a set, the system must record it as skipped, not as zero repetitions or a zero load. A missing measurement is unknown, not zero.
Similarly, when evaluating periodic benchmark check-ins—such as an estimated one-repetition max (1RM)—the system must label the 1RM as a calculated estimate for planning purposes. It must never be conflated with a recorded 1RM test. If a user runs 3 kilometers, the system should not extrapolate that pace to estimate a 10-kilometer time and present it as fact.
This strict data integrity ensures that deterministic progression recommendations are based on solid ground. By maintaining distinct boundaries around data types, the software ensures progression is rooted in verified execution.
Handling Deviations in the Active Session
The reality of strength training is rarely as clean as a spreadsheet. A user might begin a set expecting to complete 5 repetitions at 60 kilograms, but fail after 3. They might immediately drop the weight to 50 kilograms and perform 3 more repetitions.
A robust progression system must handle these complex realities. In this example, the user has performed a drop segment: 60 kg × 3 followed immediately by 50 kg × 3. The execution interface must allow for repeatable, multi-segment set recording.
When the deterministic progression engine evaluates this session in the future, it must accurately parse the multi-segment reality. It cannot simply read “6 reps” and assume the user successfully completed the entire set at the initial target.
Furthermore, the system must differentiate between warm-up sets and eligible working sets. Warm-ups, mobility work, and cooldowns are structurally excluded from volume calculations, record tracking, and progression logic. By tagging these modalities, the progression engine avoids polluting its calculations.
Technical Resilience and Offline Reality
Finally, the technical implementation must acknowledge the environmental reality of the gym floor. Gyms frequently have unreliable connectivity and dead zones. An active workout tracking application must be fully functional offline.
Progression recommendations cannot rely on a network request. The evaluation of historical data and the surfacing of recommendations must occur entirely on-device, resolving against local history.
This requirement mandates a robust local data storage strategy. The device must hold the versioned JSON state of the workout history, custom templates, and active programmes. When an active session is initiated, it reads from this local state. When a set is recorded, it writes to a local session execution queue.
While optional synchronization can backup completed summaries later, the critical path of the active workout must remain entirely decoupled from the network. This ensures the user never faces a loading spinner while waiting for a progression recommendation.
Designing progression recommendations that respect structured plans requires a commitment to user agency, data integrity, and deterministic logic. By treating the authored plan as immutable, enforcing explicit consent, and keeping recorded reality separated from calculated estimates, software can provide powerful guidance without hijacking the user’s training.
Next Action
Review your current application’s data models to ensure that authored template targets, active session states, and historical execution records are isolated. Verify that your UI components never bind active session mutations directly to the underlying template document.