Skip to main content

Cloud → Bike: Planning Workouts

Table of Contents

Planning a Training Cycle
#

One of the hardest parts of structured training isn’t the intervals themselves.

It’s deciding to do them.

After a long workday, there’s a certain kind of mental negotiation that starts to happen. Maybe today should be an easier ride. Maybe I’ll move the workout to tomorrow. Maybe I’m too tired. Maybe I should just pedal around in Zone 2 instead.

Sometimes those are legitimate adjustments. Life happens, recovery matters, and not every workout should be forced. But I’ve found that consistency gets much easier when “present me” has to make fewer decisions in the moment.

Over the past year, I’ve gradually built a system where past me plans workouts for present me.

The overall structure starts with longer training cycles. I typically work in roughly 16-week cycles focused around a broader goal: building endurance for longer rides, improving climbing power, increasing FTP, preparing for an event, or raising my aerobic ceiling. Before each cycle starts, I will use ChatGPT to define what the goal of the block actually is and what constraints exist in my real life.

That last part matters a lot because I’m very much a time-crunched cyclist. I’m not training 15 hours a week, and I’m not trying to optimize my life around cycling at all costs. Early on, we converged on a sustainable structure that usually looks something like:

  • one or two structured interval sessions per week
  • a longer weekend ride
  • consistent commute riding

That’s an amount of training I can realistically absorb into my life without the entire system collapsing after a busy week or unexpected work trip.

Once I’ve locked in on the broader goals and constraints, I use ChatGPT to generate a week-by-week progression for the entire 16-week cycle. Those plans include structured interval sessions, long ride progressions, recovery weeks, and estimated training load. I’ll usually do some sanity checking and ask questions or tweak details if something doesn’t feel quite right, but by and large the planning process is collaborative and iterative.

Importantly, I don’t have ChatGPT directly controlling anything. I’m still very much the human in the loop. I save it’s output to a note on my computer initially, just to have as a reference.

Week-by-Week Schedule
Example Week-by-Week Schedule

Intervals.icu as the Operational Layer
#

Once I’m satisfied with the plan, I start building it out in Intervals.icu. That’s where the whole thing becomes operational instead of theoretical.

One of the things I’ve come to appreciate about Intervals is that it sits in a really useful middle ground between planning and execution.

ChatGPT helps me think strategically about the structure of a training cycle, but Intervals is where the actual workouts get scheduled, tracked, and forecasted against reality.

I place all of my planned workouts into the Intervals calendar: interval sessions, long rides, commute rides, and recovery weeks. Structured workouts automatically generate estimated Load/TSS values, while longer outdoor rides get rough estimates based on expected duration and intensity. My commute rides are consistent enough at this point that I already know approximately how much training load they contribute each week.

Example Intervals.icu Calendar

Once everything is placed on the calendar, Intervals can project the Fitness and Fatigue trends forward into the future. That turns out to be incredibly useful when planning longer cycles because you can see potential problems emerging weeks ahead of time instead of discovering them accidentally after you’re already exhausted.

I’ve found myself iterating on plans pretty frequently after looking at the forecasted Fitness graph. Sometimes the fatigue ramp looks too aggressive. Sometimes a planned travel week creates an awkward training gap. Sometimes I realize a long ride progression became unrealistic once it collided with real life. In those cases, I’ll go back to ChatGPT, revise the structure, and then update the calendar accordingly.

Fitness Graph

That iterative loop has become one of my favorite parts of the whole process. The plan isn’t static, but it also isn’t random. There’s enough structure to create progression and consistency, while still leaving room for reality to intervene. And reality absolutely intervenes.

I definitely miss workouts from time to time. Sometimes work gets busy, sometimes family schedules explode, sometimes I’m simply too tired to execute a hard interval session properly. I try to stay consistent, but I’ve also learned that a sustainable training system needs enough flexibility to survive imperfect weeks.

One unexpectedly useful part of this setup is that my Intervals calendar also syncs directly into my phone’s calendar using iCal. That means all of my planned workouts simply show up alongside the rest of my life.

I don’t think this changed my behavior in some dramatic productivity-hacker way, but it did subtly change how I prepare for workouts. Seeing an interval session sitting on my evening calendar gives me time to mentally prepare for it. Sometimes that just means getting into the right headspace. Other times it’s a reminder to make sure I’m fueling appropriately during the day or that I have enough background content queued up to survive an hour on the indoor trainer.

That kind of preparation sounds minor, but I think it reduces friction more than people realize. Structured workouts are mentally easier when they stop feeling like surprises.

Text-Based Workout Creation
#

To build the actual workouts, Intervals.icu has a surprisingly simple text-based workout format for defining intervals: duration, power targets, cadence targets, repeat blocks, recovery periods, and so on. There are graphical workout builders too — both Intervals and Zwift have drag-and-drop editors — but I’ve found the text approach dramatically faster and less frustrating.

Most workouts are iterative variations of previous workouts anyway. Maybe this week’s threshold session is just last week’s workout with slightly longer intervals or slightly higher targets. In a graphical editor, that often turns into a lot of clicking, dragging, zooming, resizing, and fiddling around with tiny blocks. In the text editor, I can usually copy a previous workout, tweak a few numbers, and be done in seconds.

That workflow feels much more natural to me. Here’s an example of a 4x4 VO2Max session with 4 mintues at 110% FTP, 4 minutes at 40% FTP, repeated 4 times. It starts with a 10 minute ramp up and ends with a 10 minute cool down:

Warmup
- 10m ramp 40%-65%

4x
- 4m @ 110%
- 4m @ 40%

Cool Down
- 10m @ 40%

The format is very straight forward, and is well documented. Once you understand the structure, workouts become quick to read, quick to modify, and quick to experiment with.

I think this also subtly lowers the barrier to adjusting workouts intelligently. When editing a workout feels lightweight, I’m much more willing to tweak interval durations, recovery periods, cadence targets, or progression details instead of treating workouts as fixed artifacts that are annoying to modify.

That’s become especially useful when iterating on plans with ChatGPT. We might adjust progression timing, alter workout density, or slightly reshape interval structures over the course of a training cycle. Because the workouts are text-based, operationalizing those changes inside Intervals is quick and painless instead of becoming another layer of friction.

The Magic Moment: Workouts Automatically Appearing in Zwift
#

The single most satisfying part of this entire setup was the first time a planned workout automatically appeared in Zwift.

That sounds ridiculous to say out loud, but it genuinely changed how approachable structured training felt.

Once I connected Intervals and Zwift together, scheduled workouts simply started showing up automatically inside Zwift on the correct day. No exporting workout files. No importing workouts manually. No rebuilding interval structures twice in different apps. The workout I planned was simply… there.

That reduced a surprising amount of startup friction.

At this point, I can usually clip into the bike on my indoor trainer, start pedaling while Zwift wakes everything up, and have my planned workout running in under a minute. When the weather is dark, cold, or wet — which is a substantial part of the year in Seattle — that reduction in friction matters enormously.

I should also admit that I use Zwift somewhat differently than many people seem to. I’m not especially invested in the social features, virtual world exploration, or racing side of the platform, though the one race I did participate in was an absolutely brutal workout in the best possible way.

For me, Zwift primarily functions as an execution environment for structured training. It’s the place where planned workouts become something tangible and difficult and sweaty.

And because the workout is already waiting for me when I launch the app, there’s much less room for negotiation or procrastination.

Past me already decided what today’s workout was supposed to be.

Outdoor Workouts on the Bike Computer
#

The same planned workouts also sync directly to my Wahoo ELEMNT ROAM v3 bike computer.

I’ve only done outdoor structured intervals a handful of times because, honestly, executing clean intervals outside is much harder than doing them indoors. Traffic lights, hills, cars, intersections, wind, pedestrians, and terrain all conspire to make precision pacing considerably messier than it is on an indoor trainer.

Still, when I have done outdoor intervals, having the workout sync automatically to the bike computer has been extremely useful.

The Wahoo switches into a dedicated workout mode that provides countdown timers, interval targets, and color-coded power guidance showing whether I’m above or below the prescribed range. That turns the head unit into something closer to a live coach than just a navigation screen.

I don’t think outdoor intervals will ever feel quite as clean or controlled as indoor trainer sessions, but having the workouts automatically available on the bike computer removes a lot of operational friction there too. I don’t need to memorize interval structures or tape workout instructions to my stem like it’s 2007.

The broader pattern here is something I’ve noticed repeatedly throughout this whole ecosystem: every time a manual step disappears, consistency gets slightly easier.

What I Learned Building This Workflow
#

The biggest thing I’ve learned from all of this is that reducing friction matters far more than maximizing sophistication.

A lot of fitness technology marketing focuses on features, precision, optimization, and analytics depth. And to be fair, I genuinely enjoy a lot of those things. I clearly wouldn’t be writing blog posts about cycling data pipelines otherwise.

But over time, I’ve become increasingly convinced that the systems which survive long term are usually the ones that require the least ongoing effort.

The real enemy of consistency isn’t imperfect training.

It’s activation energy.

If every workout requires rebuilding interval structures manually, exporting files between systems, hunting for the correct route, or deciding what to do that day, eventually the whole process starts feeling mentally expensive. And when training starts feeling mentally expensive, it becomes much easier to negotiate your way out of it after a long day at work.

That’s why the “workouts automatically appearing in Zwift” moment mattered so much to me. Technically, it’s a very small feature. Psychologically, it eliminates an entire category of excuses.

I’ve also learned that planning ahead changes the emotional texture of training in useful ways.

When a 16-week cycle already exists on the calendar, workouts stop feeling like isolated acts of motivation and start feeling more like steps inside a broader progression. That makes it easier to accept that some workouts will feel hard, some weeks will feel messy, and some sessions simply won’t happen. The important thing becomes returning to the structure consistently instead of trying to execute every workout perfectly.

And honestly, the iterative nature of the process has become one of my favorite parts.

The plan is never truly finished. Life changes, fatigue accumulates differently than expected, work trips appear, motivation fluctuates, fitness improves, goals evolve. ChatGPT and I end up adjusting things constantly throughout a training block. But because the overall workflow is lightweight and flexible, those adjustments feel manageable instead of disruptive.

I also think there’s something valuable about separating strategic thinking from moment-to-moment execution.

Past me is generally calmer, more rational, and better at long-term thinking than present me standing next to an indoor trainer at 7 PM after a stressful workday. Past me can think about progression, fatigue management, event preparation, and sustainability. Present me mostly needs a system that makes it easy to clip in and start pedaling.

That division of responsibility has turned out to be surprisingly effective.

And importantly: none of this requires a perfectly integrated ecosystem or cutting-edge hardware. The core ideas here would still work with different devices, different apps, or different training platforms. The specifics matter less than the overall philosophy:

  • reduce friction
  • automate repetitive tasks
  • plan ahead
  • leave room for real life
  • make consistency easier

Because ultimately, the goal isn’t building the world’s most sophisticated training infrastructure. The goal is making it easier to keep riding bikes consistently for years.