Eduardo Diaz Sancha
Hi! I’m a Director of Engineering from the Canary Islands, living in Atlanta since 2022 after stints in Spain, France, Cambodia, Silicon Valley and New York. I’ve been building software since 2005 and leading consumer product and platform organizations since 2017, most recently the Post Purchase, Care and Internal Tools teams at Grubhub . Before management I shipped iOS apps for a decade and worked on Scala and Ruby on Rails backends.
I’m interested in technology, leadership, fitness and endurance training, parenting, traveling, electronic music, and many other things. Some of that ends up in my writing .
Now
Focus: AI-assisted engineering at scale (adoption, governance and measurable outcomes), customer-experience automation, and platform modernization that pays for itself.
Open to: Director / Head of Engineering roles and advisory work with teams adopting AI in their software lifecycle.
Building: Alisi , a safety-first breath-training app for athletes, as a solo founder using AI-assisted engineering end to end: agents write most of the code, and CI enforces the product rules they must not break.
Outside work: I coach endurance athletes at Salitre Coaching and race marathons and Ironman triathlons.
Full history · Resume (PDF) · LinkedIn · Email me
Fitness
My last year of training from Garmin, refreshed every day: how long I train across every sport, how much of it is hard (minutes in heart-rate zones 4 and 5), and how far I run. I care much more about the first two than about distance, and most of that time should be easy.
Training time, Oct 25, 2025 – Oct 23, 2026: 10h 45m training per week 10h 45m training per week (624 activities) Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Mon Wed Fri Oct 25, 2025 · 1h 2m Oct 26, 2025 · Rest Oct 27, 2025 · 1h 3m Oct 28, 2025 · 2h 15m Oct 29, 2025 · 41m Oct 30, 2025 · 52m Oct 31, 2025 · 1h 15m Nov 1, 2025 · 1h 3m Nov 2, 2025 · 46m Nov 3, 2025 · 1h 55m Nov 4, 2025 · 2h 37m Nov 5, 2025 · 47m Nov 6, 2025 · 2h 26m Nov 7, 2025 · 1h 32m Nov 8, 2025 · 2h 52m Nov 9, 2025 · 2h 13m Nov 10, 2025 · 1h 16m Nov 11, 2025 · 3h 10m Nov 12, 2025 · 52m Nov 13, 2025 · 48m Nov 14, 2025 · 2h 31m Nov 15, 2025 · 2h 30m Nov 16, 2025 · 2h 11m Nov 17, 2025 · 3h 53m Nov 18, 2025 · 2h 28m Nov 19, 2025 · 52m Nov 20, 2025 · 54m Nov 21, 2025 · 2h 17m Nov 22, 2025 · 1h 8m Nov 23, 2025 · Rest Nov 24, 2025 · 3h 51m Nov 25, 2025 · 55m Nov 26, 2025 · 1h 4m Nov 27, 2025 · 2h 20m Nov 28, 2025 · Rest Nov 29, 2025 · 46m Nov 30, 2025 · 2h 9m Dec 1, 2025 · 48m Dec 2, 2025 · 3h 2m Dec 3, 2025 · 46m Dec 4, 2025 · 51m Dec 5, 2025 · Rest Dec 6, 2025 · 1h 17m Dec 7, 2025 · 4h 13m Dec 8, 2025 · 58m Dec 9, 2025 · 3h 10m Dec 10, 2025 · 1h 21m Dec 11, 2025 · 1h 5m Dec 12, 2025 · 43m Dec 13, 2025 · 48m Dec 14, 2025 · 1h Dec 15, 2025 · 50m Dec 16, 2025 · 2h 20m Dec 17, 2025 · 1h 37m Dec 18, 2025 · 57m Dec 19, 2025 · 1h 28m Dec 20, 2025 · 3h 23m Dec 21, 2025 · 4h 19m Dec 22, 2025 · 2h 33m Dec 23, 2025 · 1h 17m Dec 24, 2025 · 2h 27m Dec 25, 2025 · 1h 50m Dec 26, 2025 · 57m Dec 27, 2025 · 2h 13m Dec 28, 2025 · 2h 45m Dec 29, 2025 · 2h 47m Dec 30, 2025 · 1h 21m Dec 31, 2025 · 1h 1m Jan 1, 2026 · 48m Jan 2, 2026 · 1h 45m Jan 3, 2026 · 2h 11m Jan 4, 2026 · 2h 14m Jan 5, 2026 · 3h 26m Jan 6, 2026 · 2h 3m Jan 7, 2026 · 48m Jan 8, 2026 · 47m Jan 9, 2026 · 49m Jan 10, 2026 · 30m Jan 11, 2026 · 1h 55m Jan 12, 2026 · 3h 3m Jan 13, 2026 · 3h Jan 14, 2026 · Rest Jan 15, 2026 · 51m Jan 16, 2026 · 52m Jan 17, 2026 · 2h 35m Jan 18, 2026 · 1h 36m Jan 19, 2026 · 3h 2m Jan 20, 2026 · 1h 43m Jan 21, 2026 · 47m Jan 22, 2026 · Rest Jan 23, 2026 · 1h Jan 24, 2026 · 3h 19m Jan 25, 2026 · 1h 37m Jan 26, 2026 · 5h 48m Jan 27, 2026 · 5h 27m Jan 28, 2026 · 1h 38m Jan 29, 2026 · 7h 41m Jan 30, 2026 · 6h 53m Jan 31, 2026 · 3h 49m Feb 1, 2026 · Rest Feb 2, 2026 · 2h Feb 3, 2026 · 2h 15m Feb 4, 2026 · 47m Feb 5, 2026 · 47m Feb 6, 2026 · 48m Feb 7, 2026 · Rest Feb 8, 2026 · Rest Feb 9, 2026 · 1h 40m Feb 10, 2026 · 1h 20m Feb 11, 2026 · Rest Feb 12, 2026 · 58m Feb 13, 2026 · 1h 20m Feb 14, 2026 · Rest Feb 15, 2026 · 1h 37m Feb 16, 2026 · Rest Feb 17, 2026 · 48m Feb 18, 2026 · 47m Feb 19, 2026 · 1h 11m Feb 20, 2026 · 58m Feb 21, 2026 · 1h 21m Feb 22, 2026 · Rest Feb 23, 2026 · Rest Feb 24, 2026 · Rest Feb 25, 2026 · Rest Feb 26, 2026 · 57m Feb 27, 2026 · 1h Feb 28, 2026 · 49m Mar 1, 2026 · 2h Mar 2, 2026 · 2h 58m Mar 3, 2026 · Rest Mar 4, 2026 · 57m Mar 5, 2026 · 28m Mar 6, 2026 · 1h 32m Mar 7, 2026 · Rest Mar 8, 2026 · Rest Mar 9, 2026 · 50m Mar 10, 2026 · 1h 6m Mar 11, 2026 · 48m Mar 12, 2026 · 1h 32m Mar 13, 2026 · 47m Mar 14, 2026 · 1h 39m Mar 15, 2026 · 1h 57m Mar 16, 2026 · Rest Mar 17, 2026 · 42m Mar 18, 2026 · 46m Mar 19, 2026 · 1h 3m Mar 20, 2026 · 1h 7m Mar 21, 2026 · 1h 2m Mar 22, 2026 · 1h 20m Mar 23, 2026 · 1h 23m Mar 24, 2026 · 2h 4m Mar 25, 2026 · 1h 5m Mar 26, 2026 · 1h 44m Mar 27, 2026 · 50m Mar 28, 2026 · 52m Mar 29, 2026 · 3h 3m Mar 30, 2026 · 2h 39m Mar 31, 2026 · 1h 37m Apr 1, 2026 · 57m Apr 2, 2026 · Rest Apr 3, 2026 · 1h 37m Apr 4, 2026 · 3h 3m Apr 5, 2026 · 1h 12m Apr 6, 2026 · 46m Apr 7, 2026 · 1h 1m Apr 8, 2026 · 47m Apr 9, 2026 · 51m Apr 10, 2026 · 1h 4m Apr 11, 2026 · 3h 45m Apr 12, 2026 · 2h 21m Apr 13, 2026 · 47m Apr 14, 2026 · 1h 47m Apr 15, 2026 · 1h 28m Apr 16, 2026 · 1h 19m Apr 17, 2026 · Rest Apr 18, 2026 · 45m Apr 19, 2026 · 40m Apr 20, 2026 · 3h 4m Apr 21, 2026 · Rest Apr 22, 2026 · 48m Apr 23, 2026 · 51m Apr 24, 2026 · 1h 8m Apr 25, 2026 · 1h 35m Apr 26, 2026 · 1h 46m Apr 27, 2026 · 50m Apr 28, 2026 · 55m Apr 29, 2026 · 49m Apr 30, 2026 · 1h 6m May 1, 2026 · Rest May 2, 2026 · 1h 26m May 3, 2026 · Rest May 4, 2026 · 3h 5m May 5, 2026 · 47m May 6, 2026 · 1h May 7, 2026 · 1h 26m May 8, 2026 · 3h 11m May 9, 2026 · Rest May 10, 2026 · Rest May 11, 2026 · 2h 40m May 12, 2026 · 1h 46m May 13, 2026 · 47m May 14, 2026 · 1h 36m May 15, 2026 · Rest May 16, 2026 · Rest May 17, 2026 · Rest May 18, 2026 · 24m May 19, 2026 · 2h May 20, 2026 · Rest May 21, 2026 · 1h 16m May 22, 2026 · 1h 4m May 23, 2026 · 1h 35m May 24, 2026 · 2h 2m May 25, 2026 · Rest May 26, 2026 · 46m May 27, 2026 · 56m May 28, 2026 · 1h 50m May 29, 2026 · 1h 8m May 30, 2026 · 3h 51m May 31, 2026 · 2h 7m Jun 1, 2026 · 3h 55m Jun 2, 2026 · 1h 56m Jun 3, 2026 · 1h 37m Jun 4, 2026 · 2h 20m Jun 5, 2026 · 1h 31m Jun 6, 2026 · 3h 9m Jun 7, 2026 · 1h 34m Jun 8, 2026 · 2h 54m Jun 9, 2026 · 40m Jun 10, 2026 · 1h 31m Jun 11, 2026 · 3h 32m Jun 12, 2026 · 44m Jun 13, 2026 · 1h 20m Jun 14, 2026 · 2h 42m Jun 15, 2026 · 1h 47m Jun 16, 2026 · 48m Jun 17, 2026 · 1h 6m Jun 18, 2026 · 46m Jun 19, 2026 · 55m Jun 20, 2026 · 1h 5m Jun 21, 2026 · 3h 44m Jun 22, 2026 · 2h 45m Jun 23, 2026 · 53m Jun 24, 2026 · 1h 29m Jun 25, 2026 · 1h 13m Jun 26, 2026 · 1h Jun 27, 2026 · 1h 27m Jun 28, 2026 · 1h 29m Jun 29, 2026 · 3h 3m Jun 30, 2026 · 57m Jul 1, 2026 · 1h 19m Jul 2, 2026 · Rest Jul 3, 2026 · Rest Jul 4, 2026 · Rest Jul 5, 2026 · Rest Jul 6, 2026 · 1h 12m Jul 7, 2026 · Rest Jul 8, 2026 · 1h 14m Jul 9, 2026 · Rest Jul 10, 2026 · 55m Jul 11, 2026 · 1h 6m Jul 12, 2026 · Rest Jul 13, 2026 · 55m Jul 14, 2026 · 2h 58m Jul 15, 2026 · 53m Jul 16, 2026 · Rest Jul 17, 2026 · 55m Jul 18, 2026 · Rest Jul 19, 2026 · 51m Jul 20, 2026 · Rest Jul 21, 2026 · 1h 10m Jul 22, 2026 · 55m Jul 23, 2026 · Rest Jul 24, 2026 · 44m Jul 25, 2026 · 1h 55m Jul 26, 2026 · 20m Jul 27, 2026 · 1h Jul 28, 2026 · 43m Jul 29, 2026 · 2h 1m Jul 30, 2026 · 1h Jul 31, 2026 · 2h 28m Aug 1, 2026 · 1h 30m Aug 2, 2026 · 3h 56m Aug 3, 2026 · 2h 43m Aug 4, 2026 · 1h 32m Aug 5, 2026 · 1h Aug 6, 2026 · 47m Aug 7, 2026 · 53m Aug 8, 2026 · 1h 27m Aug 9, 2026 · 1h 55m Aug 10, 2026 · 42m Aug 11, 2026 · Rest Aug 12, 2026 · 21m Aug 13, 2026 · 25m Aug 14, 2026 · 47m Aug 15, 2026 · 2h 8m Aug 16, 2026 · 46m Aug 17, 2026 · 3h 20m Aug 18, 2026 · 55m Aug 19, 2026 · 2h 6m Aug 20, 2026 · 2h 4m Aug 21, 2026 · 2h 18m Aug 22, 2026 · 1h 30m Aug 23, 2026 · 3h 40m Aug 24, 2026 · 3h 43m Aug 25, 2026 · 1h 18m Aug 26, 2026 · 1h 7m Aug 27, 2026 · 1h 15m Aug 28, 2026 · 55m Aug 29, 2026 · 1h 56m Aug 30, 2026 · 1h 35m Aug 31, 2026 · 4h 43m Sep 1, 2026 · 56m Sep 2, 2026 · 2h 35m Sep 3, 2026 · 1h 33m Sep 4, 2026 · 39m Sep 5, 2026 · 1h 37m Sep 6, 2026 · 1h Sep 7, 2026 · 50m Sep 8, 2026 · 26m Sep 9, 2026 · 2h 13m Sep 10, 2026 · 1h 5m Sep 11, 2026 · 1h 35m Sep 12, 2026 · 1h 19m Sep 13, 2026 · 3h 30m Sep 14, 2026 · 4h Sep 15, 2026 · 1h 32m Sep 16, 2026 · 1h 5m Sep 17, 2026 · 3h 40m Sep 18, 2026 · 2h 7m Sep 19, 2026 · 1h 57m Sep 20, 2026 · 9h 45m Sep 21, 2026 · Rest Sep 22, 2026 · 1h 43m Sep 23, 2026 · 2h 3m Sep 24, 2026 · 2h 49m Sep 25, 2026 · 1h 43m Sep 26, 2026 · 1h 32m Sep 27, 2026 · Rest Sep 28, 2026 · 3h 33m Sep 29, 2026 · 2h 37m Sep 30, 2026 · 1h 19m Oct 1, 2026 · 4h 1m Oct 2, 2026 · 2h 34m Oct 3, 2026 · 1h 2m Oct 4, 2026 · 3h 31m Oct 5, 2026 · 4h 59m Oct 6, 2026 · 2h 8m Oct 7, 2026 · 1h 38m Oct 8, 2026 · 2h 29m Oct 9, 2026 · 1h 24m Oct 10, 2026 · 2h 36m Oct 11, 2026 · 1h 50m Oct 12, 2026 · 44m Oct 13, 2026 · 55m Oct 14, 2026 · 1h 1m Oct 15, 2026 · 1h 41m Oct 16, 2026 · 1h 57m Oct 17, 2026 · 6h 33m Oct 18, 2026 · Rest Oct 19, 2026 · 3h 53m Oct 20, 2026 · 1h 31m Oct 21, 2026 · 38m Oct 22, 2026 · 1h 1m Oct 23, 2026 · Rest Rest <30m 2h+
Hard minutes, Oct 25, 2025 – Oct 23, 2026: 49 min in zones 4–5 per week 49 min in zones 4–5 per week Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Mon Wed Fri Oct 25, 2025 · 14 min Oct 26, 2025 · Rest Oct 27, 2025 · Rest Oct 28, 2025 · 0 min Oct 29, 2025 · 7 min Oct 30, 2025 · Rest Oct 31, 2025 · Rest Nov 1, 2025 · Rest Nov 2, 2025 · Rest Nov 3, 2025 · 4 min Nov 4, 2025 · 9 min Nov 5, 2025 · Rest Nov 6, 2025 · 7 min Nov 7, 2025 · 3 min Nov 8, 2025 · 2 min Nov 9, 2025 · 73 min Nov 10, 2025 · Rest Nov 11, 2025 · 3 min Nov 12, 2025 · 9 min Nov 13, 2025 · Rest Nov 14, 2025 · 0 min Nov 15, 2025 · 13 min Nov 16, 2025 · Rest Nov 17, 2025 · 5 min Nov 18, 2025 · 0 min Nov 19, 2025 · 2 min Nov 20, 2025 · 3 min Nov 21, 2025 · Rest Nov 22, 2025 · Rest Nov 23, 2025 · Rest Nov 24, 2025 · 0 min Nov 25, 2025 · Rest Nov 26, 2025 · Rest Nov 27, 2025 · 81 min Nov 28, 2025 · Rest Nov 29, 2025 · Rest Nov 30, 2025 · Rest Dec 1, 2025 · Rest Dec 2, 2025 · Rest Dec 3, 2025 · Rest Dec 4, 2025 · 16 min Dec 5, 2025 · Rest Dec 6, 2025 · Rest Dec 7, 2025 · 171 min Dec 8, 2025 · Rest Dec 9, 2025 · Rest Dec 10, 2025 · Rest Dec 11, 2025 · Rest Dec 12, 2025 · 19 min Dec 13, 2025 · Rest Dec 14, 2025 · 24 min Dec 15, 2025 · Rest Dec 16, 2025 · Rest Dec 17, 2025 · Rest Dec 18, 2025 · 2 min Dec 19, 2025 · 3 min Dec 20, 2025 · Rest Dec 21, 2025 · Rest Dec 22, 2025 · Rest Dec 23, 2025 · Rest Dec 24, 2025 · 27 min Dec 25, 2025 · Rest Dec 26, 2025 · Rest Dec 27, 2025 · 11 min Dec 28, 2025 · Rest Dec 29, 2025 · Rest Dec 30, 2025 · 3 min Dec 31, 2025 · Rest Jan 1, 2026 · Rest Jan 2, 2026 · Rest Jan 3, 2026 · Rest Jan 4, 2026 · Rest Jan 5, 2026 · 0 min Jan 6, 2026 · 1 min Jan 7, 2026 · Rest Jan 8, 2026 · Rest Jan 9, 2026 · 19 min Jan 10, 2026 · Rest Jan 11, 2026 · 9 min Jan 12, 2026 · Rest Jan 13, 2026 · 0 min Jan 14, 2026 · Rest Jan 15, 2026 · 10 min Jan 16, 2026 · 8 min Jan 17, 2026 · Rest Jan 18, 2026 · 0 min Jan 19, 2026 · 0 min Jan 20, 2026 · 4 min Jan 21, 2026 · Rest Jan 22, 2026 · Rest Jan 23, 2026 · 9 min Jan 24, 2026 · Rest Jan 25, 2026 · 3 min Jan 26, 2026 · 1 min Jan 27, 2026 · Rest Jan 28, 2026 · Rest Jan 29, 2026 · 0 min Jan 30, 2026 · 0 min Jan 31, 2026 · Rest Feb 1, 2026 · Rest Feb 2, 2026 · 0 min Feb 3, 2026 · 2 min Feb 4, 2026 · Rest Feb 5, 2026 · Rest Feb 6, 2026 · 18 min Feb 7, 2026 · Rest Feb 8, 2026 · Rest Feb 9, 2026 · Rest Feb 10, 2026 · Rest Feb 11, 2026 · Rest Feb 12, 2026 · 1 min Feb 13, 2026 · 0 min Feb 14, 2026 · Rest Feb 15, 2026 · Rest Feb 16, 2026 · Rest Feb 17, 2026 · Rest Feb 18, 2026 · 3 min Feb 19, 2026 · Rest Feb 20, 2026 · 27 min Feb 21, 2026 · 35 min Feb 22, 2026 · Rest Feb 23, 2026 · Rest Feb 24, 2026 · Rest Feb 25, 2026 · Rest Feb 26, 2026 · 36 min Feb 27, 2026 · 21 min Feb 28, 2026 · Rest Mar 1, 2026 · 14 min Mar 2, 2026 · 19 min Mar 3, 2026 · Rest Mar 4, 2026 · Rest Mar 5, 2026 · Rest Mar 6, 2026 · Rest Mar 7, 2026 · Rest Mar 8, 2026 · Rest Mar 9, 2026 · Rest Mar 10, 2026 · 19 min Mar 11, 2026 · Rest Mar 12, 2026 · Rest Mar 13, 2026 · 5 min Mar 14, 2026 · 57 min Mar 15, 2026 · Rest Mar 16, 2026 · Rest Mar 17, 2026 · Rest Mar 18, 2026 · Rest Mar 19, 2026 · 5 min Mar 20, 2026 · 10 min Mar 21, 2026 · Rest Mar 22, 2026 · 19 min Mar 23, 2026 · Rest Mar 24, 2026 · 23 min Mar 25, 2026 · Rest Mar 26, 2026 · 24 min Mar 27, 2026 · 4 min Mar 28, 2026 · Rest Mar 29, 2026 · 20 min Mar 30, 2026 · Rest Mar 31, 2026 · Rest Apr 1, 2026 · 0 min Apr 2, 2026 · Rest Apr 3, 2026 · 44 min Apr 4, 2026 · Rest Apr 5, 2026 · Rest Apr 6, 2026 · Rest Apr 7, 2026 · 15 min Apr 8, 2026 · Rest Apr 9, 2026 · Rest Apr 10, 2026 · 43 min Apr 11, 2026 · 11 min Apr 12, 2026 · 25 min Apr 13, 2026 · Rest Apr 14, 2026 · 0 min Apr 15, 2026 · 4 min Apr 16, 2026 · 26 min Apr 17, 2026 · Rest Apr 18, 2026 · 12 min Apr 19, 2026 · Rest Apr 20, 2026 · 184 min Apr 21, 2026 · Rest Apr 22, 2026 · Rest Apr 23, 2026 · Rest Apr 24, 2026 · Rest Apr 25, 2026 · 26 min Apr 26, 2026 · Rest Apr 27, 2026 · 4 min Apr 28, 2026 · 16 min Apr 29, 2026 · Rest Apr 30, 2026 · Rest May 1, 2026 · Rest May 2, 2026 · 14 min May 3, 2026 · Rest May 4, 2026 · 2 min May 5, 2026 · Rest May 6, 2026 · 7 min May 7, 2026 · Rest May 8, 2026 · Rest May 9, 2026 · Rest May 10, 2026 · Rest May 11, 2026 · Rest May 12, 2026 · Rest May 13, 2026 · Rest May 14, 2026 · 1 min May 15, 2026 · Rest May 16, 2026 · Rest May 17, 2026 · Rest May 18, 2026 · Rest May 19, 2026 · Rest May 20, 2026 · Rest May 21, 2026 · 15 min May 22, 2026 · Rest May 23, 2026 · 17 min May 24, 2026 · Rest May 25, 2026 · Rest May 26, 2026 · Rest May 27, 2026 · Rest May 28, 2026 · Rest May 29, 2026 · Rest May 30, 2026 · 33 min May 31, 2026 · 2 min Jun 1, 2026 · Rest Jun 2, 2026 · 2 min Jun 3, 2026 · Rest Jun 4, 2026 · 3 min Jun 5, 2026 · Rest Jun 6, 2026 · 16 min Jun 7, 2026 · Rest Jun 8, 2026 · Rest Jun 9, 2026 · Rest Jun 10, 2026 · 5 min Jun 11, 2026 · 3 min Jun 12, 2026 · Rest Jun 13, 2026 · 2 min Jun 14, 2026 · 7 min Jun 15, 2026 · 1 min Jun 16, 2026 · Rest Jun 17, 2026 · Rest Jun 18, 2026 · Rest Jun 19, 2026 · 0 min Jun 20, 2026 · Rest Jun 21, 2026 · 0 min Jun 22, 2026 · Rest Jun 23, 2026 · Rest Jun 24, 2026 · 2 min Jun 25, 2026 · Rest Jun 26, 2026 · Rest Jun 27, 2026 · 17 min Jun 28, 2026 · Rest Jun 29, 2026 · 0 min Jun 30, 2026 · 4 min Jul 1, 2026 · Rest Jul 2, 2026 · Rest Jul 3, 2026 · Rest Jul 4, 2026 · Rest Jul 5, 2026 · Rest Jul 6, 2026 · 2 min Jul 7, 2026 · Rest Jul 8, 2026 · Rest Jul 9, 2026 · Rest Jul 10, 2026 · 6 min Jul 11, 2026 · Rest Jul 12, 2026 · Rest Jul 13, 2026 · Rest Jul 14, 2026 · Rest Jul 15, 2026 · 12 min Jul 16, 2026 · Rest Jul 17, 2026 · Rest Jul 18, 2026 · Rest Jul 19, 2026 · Rest Jul 20, 2026 · Rest Jul 21, 2026 · 20 min Jul 22, 2026 · Rest Jul 23, 2026 · Rest Jul 24, 2026 · 22 min Jul 25, 2026 · Rest Jul 26, 2026 · 19 min Jul 27, 2026 · Rest Jul 28, 2026 · 3 min Jul 29, 2026 · Rest Jul 30, 2026 · Rest Jul 31, 2026 · Rest Aug 1, 2026 · Rest Aug 2, 2026 · 0 min Aug 3, 2026 · Rest Aug 4, 2026 · 3 min Aug 5, 2026 · Rest Aug 6, 2026 · Rest Aug 7, 2026 · 6 min Aug 8, 2026 · 1 min Aug 9, 2026 · Rest Aug 10, 2026 · Rest Aug 11, 2026 · Rest Aug 12, 2026 · 1 min Aug 13, 2026 · Rest Aug 14, 2026 · 9 min Aug 15, 2026 · 102 min Aug 16, 2026 · 0 min Aug 17, 2026 · Rest Aug 18, 2026 · 2 min Aug 19, 2026 · 20 min Aug 20, 2026 · 4 min Aug 21, 2026 · Rest Aug 22, 2026 · 7 min Aug 23, 2026 · 126 min Aug 24, 2026 · 0 min Aug 25, 2026 · 37 min Aug 26, 2026 · Rest Aug 27, 2026 · 24 min Aug 28, 2026 · 15 min Aug 29, 2026 · 53 min Aug 30, 2026 · Rest Aug 31, 2026 · 36 min Sep 1, 2026 · Rest Sep 2, 2026 · Rest Sep 3, 2026 · 51 min Sep 4, 2026 · Rest Sep 5, 2026 · 9 min Sep 6, 2026 · Rest Sep 7, 2026 · Rest Sep 8, 2026 · Rest Sep 9, 2026 · 1 min Sep 10, 2026 · 0 min Sep 11, 2026 · Rest Sep 12, 2026 · Rest Sep 13, 2026 · 1 min Sep 14, 2026 · Rest Sep 15, 2026 · Rest Sep 16, 2026 · 7 min Sep 17, 2026 · 17 min Sep 18, 2026 · 23 min Sep 19, 2026 · 24 min Sep 20, 2026 · 19 min Sep 21, 2026 · Rest Sep 22, 2026 · Rest Sep 23, 2026 · Rest Sep 24, 2026 · 0 min Sep 25, 2026 · Rest Sep 26, 2026 · Rest Sep 27, 2026 · Rest Sep 28, 2026 · 5 min Sep 29, 2026 · 2 min Sep 30, 2026 · Rest Oct 1, 2026 · 8 min Oct 2, 2026 · 1 min Oct 3, 2026 · 29 min Oct 4, 2026 · 9 min Oct 5, 2026 · 1 min Oct 6, 2026 · 0 min Oct 7, 2026 · 6 min Oct 8, 2026 · 41 min Oct 9, 2026 · 1 min Oct 10, 2026 · 36 min Oct 11, 2026 · Rest Oct 12, 2026 · 16 min Oct 13, 2026 · 29 min Oct 14, 2026 · 2 min Oct 15, 2026 · 1 min Oct 16, 2026 · 1 min Oct 17, 2026 · 183 min Oct 18, 2026 · Rest Oct 19, 2026 · Rest Oct 20, 2026 · Rest Oct 21, 2026 · 1 min Oct 22, 2026 · 3 min Oct 23, 2026 · Rest Rest <5 45+ min
Distance, Oct 25, 2025 – Oct 23, 2026: 44.8 km per week 44.8 km per week (220 runs) Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep Oct Mon Wed Fri Oct 25, 2025 · Rest Oct 26, 2025 · Rest Oct 27, 2025 · Rest Oct 28, 2025 · 7.4 km Oct 29, 2025 · Rest Oct 30, 2025 · 8.4 km Oct 31, 2025 · 10 km Nov 1, 2025 · 11.3 km Nov 2, 2025 · Rest Nov 3, 2025 · 21.3 km Nov 4, 2025 · 8.1 km Nov 5, 2025 · 8.4 km Nov 6, 2025 · 10.1 km Nov 7, 2025 · Rest Nov 8, 2025 · 16.1 km Nov 9, 2025 · 26.3 km Nov 10, 2025 · Rest Nov 11, 2025 · 7.1 km Nov 12, 2025 · 10 km Nov 13, 2025 · 8.4 km Nov 14, 2025 · 10.1 km Nov 15, 2025 · 18.9 km Nov 16, 2025 · Rest Nov 17, 2025 · Rest Nov 18, 2025 · 7 km Nov 19, 2025 · Rest Nov 20, 2025 · Rest Nov 21, 2025 · 8 km Nov 22, 2025 · 8.4 km Nov 23, 2025 · Rest Nov 24, 2025 · 10 km Nov 25, 2025 · 8.4 km Nov 26, 2025 · 11.3 km Nov 27, 2025 · 29 km Nov 28, 2025 · Rest Nov 29, 2025 · 8.1 km Nov 30, 2025 · Rest Dec 1, 2025 · 8.4 km Dec 2, 2025 · Rest Dec 3, 2025 · 8.3 km Dec 4, 2025 · 9.7 km Dec 5, 2025 · Rest Dec 6, 2025 · 6.8 km Dec 7, 2025 · 42.4 km Dec 8, 2025 · Rest Dec 9, 2025 · Rest Dec 10, 2025 · Rest Dec 11, 2025 · Rest Dec 12, 2025 · Rest Dec 13, 2025 · 8.4 km Dec 14, 2025 · Rest Dec 15, 2025 · Rest Dec 16, 2025 · Rest Dec 17, 2025 · Rest Dec 18, 2025 · 9.8 km Dec 19, 2025 · 10.3 km Dec 20, 2025 · 12.8 km Dec 21, 2025 · 13.7 km Dec 22, 2025 · 8.4 km Dec 23, 2025 · 6.5 km Dec 24, 2025 · 7.3 km Dec 25, 2025 · 8.4 km Dec 26, 2025 · 10 km Dec 27, 2025 · 10 km Dec 28, 2025 · 12.8 km Dec 29, 2025 · 8.4 km Dec 30, 2025 · Rest Dec 31, 2025 · Rest Jan 1, 2026 · 8 km Jan 2, 2026 · Rest Jan 3, 2026 · Rest Jan 4, 2026 · 11.3 km Jan 5, 2026 · 8.4 km Jan 6, 2026 · 8.6 km Jan 7, 2026 · 8.4 km Jan 8, 2026 · 8.4 km Jan 9, 2026 · 9.9 km Jan 10, 2026 · 5.1 km Jan 11, 2026 · 10.3 km Jan 12, 2026 · Rest Jan 13, 2026 · Rest Jan 14, 2026 · Rest Jan 15, 2026 · Rest Jan 16, 2026 · 10.1 km Jan 17, 2026 · 8 km Jan 18, 2026 · Rest Jan 19, 2026 · Rest Jan 20, 2026 · 15.4 km Jan 21, 2026 · 8.4 km Jan 22, 2026 · Rest Jan 23, 2026 · 11.2 km Jan 24, 2026 · 8.4 km Jan 25, 2026 · 14.4 km Jan 26, 2026 · Rest Jan 27, 2026 · Rest Jan 28, 2026 · 13.3 km Jan 29, 2026 · Rest Jan 30, 2026 · Rest Jan 31, 2026 · Rest Feb 1, 2026 · Rest Feb 2, 2026 · Rest Feb 3, 2026 · 12.8 km Feb 4, 2026 · 8.4 km Feb 5, 2026 · 8.4 km Feb 6, 2026 · 9.4 km Feb 7, 2026 · Rest Feb 8, 2026 · Rest Feb 9, 2026 · Rest Feb 10, 2026 · Rest Feb 11, 2026 · Rest Feb 12, 2026 · 7.2 km Feb 13, 2026 · Rest Feb 14, 2026 · Rest Feb 15, 2026 · Rest Feb 16, 2026 · Rest Feb 17, 2026 · 8.4 km Feb 18, 2026 · 8.4 km Feb 19, 2026 · 8.4 km Feb 20, 2026 · 11.4 km Feb 21, 2026 · Rest Feb 22, 2026 · Rest Feb 23, 2026 · Rest Feb 24, 2026 · Rest Feb 25, 2026 · Rest Feb 26, 2026 · Rest Feb 27, 2026 · 11.3 km Feb 28, 2026 · 8.4 km Mar 1, 2026 · 21.5 km Mar 2, 2026 · Rest Mar 3, 2026 · Rest Mar 4, 2026 · 8.4 km Mar 5, 2026 · Rest Mar 6, 2026 · Rest Mar 7, 2026 · Rest Mar 8, 2026 · Rest Mar 9, 2026 · 8.4 km Mar 10, 2026 · 12.8 km Mar 11, 2026 · 8.4 km Mar 12, 2026 · Rest Mar 13, 2026 · 8.4 km Mar 14, 2026 · 19.2 km Mar 15, 2026 · 12.6 km Mar 16, 2026 · Rest Mar 17, 2026 · Rest Mar 18, 2026 · Rest Mar 19, 2026 · 11.2 km Mar 20, 2026 · 11.8 km Mar 21, 2026 · 10.3 km Mar 22, 2026 · 14.4 km Mar 23, 2026 · 8.4 km Mar 24, 2026 · 17.2 km Mar 25, 2026 · 11.2 km Mar 26, 2026 · 14.7 km Mar 27, 2026 · 8.4 km Mar 28, 2026 · Rest Mar 29, 2026 · 29.8 km Mar 30, 2026 · 8.4 km Mar 31, 2026 · 17.1 km Apr 1, 2026 · 10 km Apr 2, 2026 · Rest Apr 3, 2026 · 11.5 km Apr 4, 2026 · 15 km Apr 5, 2026 · 12.8 km Apr 6, 2026 · 8.4 km Apr 7, 2026 · 11 km Apr 8, 2026 · 8.4 km Apr 9, 2026 · 8.4 km Apr 10, 2026 · 12.8 km Apr 11, 2026 · 8.4 km Apr 12, 2026 · 24.1 km Apr 13, 2026 · 8.4 km Apr 14, 2026 · 9.7 km Apr 15, 2026 · 10.5 km Apr 16, 2026 · 10.2 km Apr 17, 2026 · Rest Apr 18, 2026 · 8.5 km Apr 19, 2026 · 7.1 km Apr 20, 2026 · 42.5 km Apr 21, 2026 · Rest Apr 22, 2026 · Rest Apr 23, 2026 · 6.5 km Apr 24, 2026 · 8 km Apr 25, 2026 · Rest Apr 26, 2026 · 8.5 km Apr 27, 2026 · Rest Apr 28, 2026 · 11.1 km Apr 29, 2026 · Rest Apr 30, 2026 · 8 km May 1, 2026 · Rest May 2, 2026 · 16.5 km May 3, 2026 · Rest May 4, 2026 · 10 km May 5, 2026 · 8.4 km May 6, 2026 · 11.2 km May 7, 2026 · 6.5 km May 8, 2026 · 10 km May 9, 2026 · Rest May 10, 2026 · Rest May 11, 2026 · 6.5 km May 12, 2026 · Rest May 13, 2026 · 8.4 km May 14, 2026 · Rest May 15, 2026 · Rest May 16, 2026 · Rest May 17, 2026 · Rest May 18, 2026 · Rest May 19, 2026 · Rest May 20, 2026 · Rest May 21, 2026 · 13 km May 22, 2026 · 10.8 km May 23, 2026 · 16.2 km May 24, 2026 · 20.4 km May 25, 2026 · Rest May 26, 2026 · 8.4 km May 27, 2026 · 10.3 km May 28, 2026 · 7.1 km May 29, 2026 · 8.4 km May 30, 2026 · 8.9 km May 31, 2026 · 21.9 km Jun 1, 2026 · Rest Jun 2, 2026 · 11.3 km Jun 3, 2026 · Rest Jun 4, 2026 · 8.4 km Jun 5, 2026 · 10.1 km Jun 6, 2026 · 16.1 km Jun 7, 2026 · Rest Jun 8, 2026 · 8.4 km Jun 9, 2026 · Rest Jun 10, 2026 · 11.4 km Jun 11, 2026 · Rest Jun 12, 2026 · 8.1 km Jun 13, 2026 · 9.4 km Jun 14, 2026 · 16.6 km Jun 15, 2026 · 11.2 km Jun 16, 2026 · 8.4 km Jun 17, 2026 · Rest Jun 18, 2026 · 8.4 km Jun 19, 2026 · 9.5 km Jun 20, 2026 · Rest Jun 21, 2026 · Rest Jun 22, 2026 · 8.4 km Jun 23, 2026 · Rest Jun 24, 2026 · 10 km Jun 25, 2026 · 6.4 km Jun 26, 2026 · Rest Jun 27, 2026 · 16.4 km Jun 28, 2026 · Rest Jun 29, 2026 · Rest Jun 30, 2026 · 10.2 km Jul 1, 2026 · 8.4 km Jul 2, 2026 · Rest Jul 3, 2026 · Rest Jul 4, 2026 · Rest Jul 5, 2026 · Rest Jul 6, 2026 · 10 km Jul 7, 2026 · Rest Jul 8, 2026 · Rest Jul 9, 2026 · Rest Jul 10, 2026 · 10 km Jul 11, 2026 · 10.1 km Jul 12, 2026 · Rest Jul 13, 2026 · 10 km Jul 14, 2026 · 16.1 km Jul 15, 2026 · 10 km Jul 16, 2026 · Rest Jul 17, 2026 · 10 km Jul 18, 2026 · Rest Jul 19, 2026 · 8 km Jul 20, 2026 · Rest Jul 21, 2026 · 12.8 km Jul 22, 2026 · 9.7 km Jul 23, 2026 · Rest Jul 24, 2026 · 8.8 km Jul 25, 2026 · 13 km Jul 26, 2026 · 5 km Jul 27, 2026 · 11 km Jul 28, 2026 · 8 km Jul 29, 2026 · 10.1 km Jul 30, 2026 · 7.3 km Jul 31, 2026 · Rest Aug 1, 2026 · 16 km Aug 2, 2026 · Rest Aug 3, 2026 · 8.4 km Aug 4, 2026 · 11.2 km Aug 5, 2026 · Rest Aug 6, 2026 · 8.4 km Aug 7, 2026 · Rest Aug 8, 2026 · 14.8 km Aug 9, 2026 · Rest Aug 10, 2026 · 6.7 km Aug 11, 2026 · Rest Aug 12, 2026 · Rest Aug 13, 2026 · Rest Aug 14, 2026 · 8.6 km Aug 15, 2026 · 24.7 km Aug 16, 2026 · 7.2 km Aug 17, 2026 · Rest Aug 18, 2026 · 10.1 km Aug 19, 2026 · 8.4 km Aug 20, 2026 · Rest Aug 21, 2026 · 8.4 km Aug 22, 2026 · 16.2 km Aug 23, 2026 · 6.5 km Aug 24, 2026 · Rest Aug 25, 2026 · Rest Aug 26, 2026 · 8 km Aug 27, 2026 · Rest Aug 28, 2026 · 10 km Aug 29, 2026 · Rest Aug 30, 2026 · 16 km Aug 31, 2026 · Rest Sep 1, 2026 · 8.4 km Sep 2, 2026 · 8.4 km Sep 3, 2026 · Rest Sep 4, 2026 · 7.3 km Sep 5, 2026 · 16.9 km Sep 6, 2026 · 10.7 km Sep 7, 2026 · 9 km Sep 8, 2026 · Rest Sep 9, 2026 · 8.4 km Sep 10, 2026 · Rest Sep 11, 2026 · Rest Sep 12, 2026 · 14.5 km Sep 13, 2026 · 6.5 km Sep 14, 2026 · 8.4 km Sep 15, 2026 · Rest Sep 16, 2026 · 10.4 km Sep 17, 2026 · Rest Sep 18, 2026 · Rest Sep 19, 2026 · 22.1 km Sep 20, 2026 · Rest Sep 21, 2026 · Rest Sep 22, 2026 · 9.5 km Sep 23, 2026 · Rest Sep 24, 2026 · 10.1 km Sep 25, 2026 · 10.8 km Sep 26, 2026 · 16.6 km Sep 27, 2026 · Rest Sep 28, 2026 · Rest Sep 29, 2026 · 5.4 km Sep 30, 2026 · 8.4 km Oct 1, 2026 · 12.8 km Oct 2, 2026 · 7.4 km Oct 3, 2026 · 12 km Oct 4, 2026 · Rest Oct 5, 2026 · 8.4 km Oct 6, 2026 · Rest Oct 7, 2026 · Rest Oct 8, 2026 · 12.8 km Oct 9, 2026 · Rest Oct 10, 2026 · 11.3 km Oct 11, 2026 · Rest Oct 12, 2026 · 9 km Oct 13, 2026 · Rest Oct 14, 2026 · 8 km Oct 15, 2026 · 5.1 km Oct 16, 2026 · 5.1 km Oct 17, 2026 · Rest Oct 18, 2026 · Rest Oct 19, 2026 · Rest Oct 20, 2026 · Rest Oct 21, 2026 · Rest Oct 22, 2026 · 8.4 km Oct 23, 2026 · Rest Rest <5 25+ km
How these grids are made
Recent writing
Turning My Garmin Data into GitHub-Style Heatmaps
22 Oct 2026
Garmin opened a Personal API, so I built a small library that turns my training into GitHub-style activity grids on this site, and learned the most from what broke in production.
There Is No Such Thing as a Recovery Sprint
24 Sep 2026
Meta tripled its code output with AI and got a 40% rise in incidents. Any running coach would have called it: you don't get faster by making every day a hard day.
The Cognitive Dissonance of Working in Tech Right Now
15 Sep 2026
During the pandemic we were allowed to say things were scary. In tech today, doubt about AI reads as resistance, and that is a burnout machine leaders can switch off.
New essays go out first on my Substack , then land here in Writing .