· Recap  · 6 min read

My Sports Year 2025

A data-driven deep dive into a high-volume sports year 2025 of 704 training hours, balancing semiprofessional basketball with cycling using a Python script and the Garmin API

A data-driven deep dive into a high-volume sports year 2025 of 704 training hours, balancing semiprofessional basketball with cycling using a Python script and the Garmin API

2025 Year in Review: Basketball, Cycling & Data

The year 2025 had two main focuses for me in terms of sports: playing basketball in the 1. Regionalliga and having some summer-fun on my new roadbike & going for longer distances on the bike overall.

As a software engineer, just looking at the standard Garmin app was not enough for me. I wanted the raw data. To generate the charts below, I wrote a custom Python script that downloads my data from the Garmin Connect API. It uses pandas to clean and aggregate the metrics, and matplotlib and seaborn to render the visualizations. This allows me to build my own personalized view of my training data by executing the script for a specific year.

Here is what 2025 looked like.

📊 The Raw Numbers

To put the numbers into perspective: 704 hours of training means almost two hours of physical activity every single day of the year in average.

Total TimeActivitiesTotal DistanceElevation GainActive Calories Burned
704.0 h8646,056 km44,117 m425,187 kcal

Consistency & Recovery

  • Longest Active Streak: 47 consecutive days
  • Full Rest Days: 38 days

While 38 complete rest days might seem low for a year of basketball and cycling, Garmin also tracks every daily bike commute, which boosts the activity count. There was no strict master plan to take exactly 38 days off for recovery—it’s just how the year organically played out when I needed a break.

🏆 Season Highlights

Not every workout is the same. Here are the extreme outliers of my year:

  • 🏀 Basketball Consistency Averaging ~8 hours/week of Basketball in season
  • ⏱️ Longest Workout: 9.8 hours on June 17th (Cycling).
  • 📏 Max Distance: 276.0 km on June 17th (Cycling).
  • 🔥 Highest Burn: 5,180 kcal in a single session on July 13th.
  • 🚀 Fastest Ride (>50km): 33.4 km/h average over 50.6 km on July 19th.

📈 Calories & Nutrition & Fueling

Active calories only tell half the story. The chart below stacks my training calories on top of my estimated resting metabolic rate (~2,450 kcal).

For me, the biggest challenge is nutrition. I weigh myself every day, but it’s still hard to decide whether I should eat more or less. On long cycling days, the caloric deficit is massive and almost impossible to refill immediately. With basketball, I usually have to force myself to eat a large meal late at night after practice.

On average, I burned about 3,615 calories every single day in 2025. To put that into perspective: that is the equivalent of eating about 4.5 frozen pizzas (Salami) every day just to maintain my weight. It shows that at this level of activity, eating enough becomes just as much of a task as the training itself.

Calorie Trend

⏰ Training Times & Rhythm

It is also interesting to see when I train. The heatmap shows a very clear pattern of my daily routine.

Team practices in the gym always take up the late evening hours during the week.

Time of Day Heatmap

📉 Time Allocation & Seasonal Shifts

My training time is primarily split between basketball and cycling. As mentioned, everyday bike commuting is tracked separately in a category to keep the actual training metrics clean.

Looking at the monthly charts, you can clearly see the seasonal shifts. During the summer months, there is a visible dip in basketball, which I replaced with a significant increase in road cycling. This was the period where I focused on longer distances and endurance and tested my new road bike.

In August, things changed: I joined a new basketball team in the 1. Regionalliga going up one league. You can see the basketball volume increasing sharply from that point on as the pre-season and then the regular season started.

Strength training also follows a specific pattern. July shows the highest volume in the gym, which was the most intensive part of the basketball pre-season gym workouts with actual jump improvements, strength and power building. During the actual season, the focus in the gym shifted from building mass to injury prevention and maintenance. Most sessions then became shorter “activation” workouts right before team practice, rather than long heavy lifting sessions.

Monthly Progression

Conclusion: The Balance Between Team and Solo Sports

Looking at the final distribution, 2025 was a year of constant adaptation. Basketball and cycling are my two main pillars, but they serve completely different purposes for me. Basketball is my primary sport and simply a lot of fun. I love being in a competitive environment with a group of guys who are all highly motivated and putting in extra work.

However, since basketball and the gym are always indoors, cycling has become the perfect counterweight. I originally started because it’s the best way to get outside and clear my head. On the bike, I’m not dependent on a team or a schedule; I can push myself solo or just go for a low-effort ride if I need a break. It’s that mix of being outdoors and having time for myself that makes it so interesting.

The gym remains strictly a tool for me. I could never do bodybuilding or fitness as my “main” sport. Every hour I spend lifting is purely to become a better athlete on the court and stronger on the bike, focusing on injury prevention and functional power rather than aesthetics.

One thing the data doesn’t show is how much my body has to adapt between these two worlds. Even though cycling builds a massive aerobic base, the physical setup for basketball is completely different. Every year after the cycling-heavy summer season, I feel the transition.

My legs are used to the steady, linear motion of pedaling, so the vertical explosiveness and the lateral movements on the court take a hit at first. It usually takes a few weeks of specific training to get my “jumping legs” back and for my joints to get used to the hard impacts of the hardwood floor again. Balancing these two is a process of recalibrating the body.

Looking ahead to 2026, the goals are straightforward. I want to finish my first semi-professional season in the 1. Regionalliga strong and push my cycling limits even further. I’m planning to experiment more with ultra-cycling distances and want to increase my total yearly mileage. Since I’ve added an indoor trainer to my setup recently, I’m particularly curious to see how the time distribution will shift in the next year’s review.

Donut Chart


Data extraction, aggregation, and visualization built with Python (Garmin API, Pandas, Seaborn).

Back to Blog

Related Posts

View All Posts »
Biking from Osnabrück to Berlin

Biking from Osnabrück to Berlin

Taking a look back on a four-day, nearly 800 km bikepacking adventure from Osnabrück to Berlin and back, including a side trip to Poland, highlights, challenges, and lessons