Antelope Love Fan

Bikejoring or, How to Wear Out Your Dog as Fast as Possible

Update 1/12/15

I recently had a near disaster that precipated an update to my setup.

DOG and I were trucking along having a lovely time when a deer ran out behind us. DOG immediately took off backwards causing me to run over the leash. The leash got wrapped up in the wheel, mangled my front fender, and caused me to tip over.

Luckily we were't going very fast.

To prevent future repeats, I've added a wire loop (cannibalized from an old election yard sign) that keeps the leash up off the wheel.


I'm also looking into getting rid of that short length of PVC pipe and just taping the bungee cords together directly. We'll see how that pans out.

We got our first dog a couple of months ago and he's amazing and handsome and I could ramble about him all day. But I won't. I'll save that for another post.


Today, we're talking about bikejoring.

Bikejoring is a sport where you hook your dog up to your bike and they run as fast as they can while you try to keep up. There are lots of ways to do it, all kinds of crazy custom equipment you can buy, and even official races.

My first attempt was just looping the leash around the stem of the handlebars which worked ok for a little while. It jerked the dog around too much though and he almost pulled the bike over going sideways for a squirrel .

After that, I decided to see what I could cobble together from stuff laying around the house. To date, I haven't spent a dime on the current setup.


Again, this was all just stuff I had in the garage, although it did take a few tries to get the design to a point I was happy with.

The first incarnation:

This version had a bungie cord wrapped around the bike stem. The hooks of the cord hooked into holes in PVC pipe. Unfortunately, it was hard to keep the pipe seated against the stem. It had a tendency to slip off to one side or the other and interfere with the cables on the bike.

I tried several different methods of attaching to the stem but none of them really worked, especially when the above dog took off sideways for a squirrel/rabbit/deer. I also had to unhook the bungie cords at the end each time I needed to hook or unhook the leash which is a giant pain.

In spite of all that, it still worked pretty nicely. (Video)

The final version (for now)

I realized that I didn't need the long pole. A much shorter thing worked just fine and was enough[4] to keep the leash and cords away from the front wheel and fork. When we're going full speed, the dog is out front so the leash is about 90% taut. When he's tired and we're going slower, he runs alongside and the leash hangs on the ground a bit to the side, but well away from the wheel.

After some trial and error, I settled on the design pictured below.

I drilled 4 holes to hook the bungie cords into and wrapped them with tape to keep them secure.


The whole attachment just draps over the bars. The stem of my bike sticks out enough that there aren't any issues with it slipping off.

The key bits are bungie cords on both ends so he doesn't jerk the bike too much and I don't jerk him too much. I also decided to wrap the bungie attachment points with tape to make the whole thing more solid. The carabiner is there to make it easy to get the leash on and off the attachment.

How is it?

How is it biking with a 60lb dog running full-bore?

It's amazing. Junior loves it and his excitement is infectious.

It's not really hard either. I'm careful not to ride where there's a lot of traffic, although it's easy enough to keep him to one side when a car is passing us. The hardest thing was getting used to watching the road and the dog. You have to be prepared if he bolts to the side or if he decides to stop to pee. In practice, this is easier than it sounds. I got pretty good at reading his body language after just a couple of rides.

On the flip side, Junior's been wonderful about reading what I want to do in terms of speed and direction. I think a lot of is riding consistent routes so he knows which way we normally go. But we've also developed a pretty good system of commands. I didn't do any specific training to proof these. I just try to be as consistent as possible in what I say when we're riding.


[1]: Another amazing way to wear out a dog in a short amount of time.

[2]: Usually at a stop sign.

[3]: Common obstacles are cars, joggers, or dog-walkers meaning we have to swing over to the shoulder or further out into the road.

[4]: Mostly enough. It sometimes bumps into the front wheel, although tangling doesn't seem to be a problem. I may still try to rig something across the bars to elevate it a bit.

comments powered by Disqus

All posts

  1. Thoughts on wasting time
  2. Tragedy and Perspective
  3. On the idea of admiration
  4. The joy of waiting for things
  5. Advice for junior developers
  6. The 4 common ways cars try to kill me
  7. I ran a marathon
  8. The Madness of Saturday
  9. Keeping a daily work log
  10. A frustrating Web.config transformation error
  11. My first century
  12. How _not_ to compare file versions in C#
  13. Auto-incrementing build numbers in Visual Studio 2012
  14. "The definition of the report 'XYZ' is invalid."
  15. Side effects of bike commuting
  16. By the numbers: Coldest ride ever
  17. The difference between 'git fetch' and 'git pull'
  18. Freshman Lunch Shenanigans
  19. Getting an '__doPostBack is undefined' error in IE10
  20. Noticing an odd difference between different implementations of JSON.stringify
  21. How not to make a sale
  22. Prayer for the repose of the dead
  23. You Meet All Kinds of People Cycling
  24. So iBooks Have a Hidden Unique ID
  25. The Three Most Important Pieces of Information for a Kid
  26. 20 Years Later, I Still Can't Read Ramona the Pest
  27. In which I decide not to bother with New Year's Resolutions
  28. I kinda regret deleting my Instagram account
  29. Hacking my eating habits
  30. I have been a dad for 10 years
  31. The most uncomfortable training session ever
  32. Minor hiccup with Google Drive
  33. I love living in The Highlands
  34. A dark start to the day
  35. Renting an Apartment in Boston
  36. I think I need to get over myself a little bit
  37. Making a mobile site behave like an iOS app
  38. Picasa data API fun: Creating albums and uploading images
  39. SVN working copy is nested?
  40. My one, feeble attempt at being a cracker of software.
  41. My Own Personal Daily WTF v1
  42. Get on your bike. No excuses
  43. Pixel level drawing with the canvas element
  44. New Year's Resolutions
  45. How to write a very simple jQuery Plugin
  46. Must-Have Chrome Extensions
  47. Preserving the $ with jQuery.noConflict
  48. Can't load XRegExp twice in the same frame
  49. Converting a Unix timestamp to a real Postgres date
  50. HTML5 Data Attributes and
  51. Memories Wrapped Up in Music
  52. A poem for our daughters
  53. Handling Windows API Callbacks in VB .NET
  54. My Favorite Explanation of clip: rect();
  55. Basics of QR Codes
  56. Adding/Deleting Events with the Google Calendar API
  57. Basic Authentication with Titanium.Network.HTTPClient
  58. Even better overriding the Firebug console in IE
  59. SQL Management Studio 2008 says Saving changes is not permitted.
  60. Revert to a previous revision with Subversion
  61. Catching Ajax errors with jQuery
  62. Fun with Vim movement commands
  63. Copying ADODB Recordsets Across Databases
  64. The Proxy Pattern in Javascript
  65. Snippet for popping up a jQuery UI Dialog
  66. A Caveat When Declaring Javascript Arrays
  67. With jQuery, Awesomeness Abounds
  68. One-liner to syntax check a Python script
  69. Coding for Doctors in Haiti
  70. Changing an application's favicon in CherryPy
  71. Localizing PHP with gettext
  72. Running a CherryPy app with Apache and mod_python
  73. Basics of the Alternative PHP Cache (APC)
  74. Converting an RFC 3339 date to a Python timestamp(plus an update to my Google Docs backup script)
  75. Flickr REST API Basics
  76. Short list of required web developer tools
  77. Getting the caption of an image attached to a WordPress post
  78. Simple tabbed HTML navigation buttons
  79. Making sure FireBug console calls don't bomb in IE
  80. You have to be able to talk to people
  81. Not breaking the rules, but still being a jerk
  82. Fear
  83. Growing Up Pyro
  84. Locking Down Facebook
  85. Automatically blocking Twitter spam accounts
  86. File modification date/times in Python
  87. SSH Tunneling: Taming the series of tubes
  88. My single-handed destruction of an Ecuadorian cafe
  89. Basic page routing with CherryPy
  90. Demystifying Python Decorators
  91. Handy VBScript ASP syntax shortcut
  92. Twitter Trends: Experimenting with Adobe Air
  93. Getting started with CherryPy
  94. Installing things on Linux is still a pain in the tuchus
  95. Facebook's OpenID Support: Much Improved!
  96. Basic Lighttpd Setup
  97. Be Safe and Don't Be a Jerk
  98. Facebook's OpenID Support: It's cute and all but...
  99. Basics of the PHP PCRE functions
  100. This Bash trick will make your brain explode
  101. Saving the world with PHP array functions
  102. The PalmOS Browser War That Never Was
  103. 8 years today (and 14 years last March)
  104. It's not hard to avoid sounding like a moran moron
  105. Premature Optimization less harmful than Immature Stupidity
  106. Where am I? Where are you?
  107. Using PrototypeJS with Greasemonkey
  108. Yes, it's a camera. No, it doesn't need film
  109. Backing up your Google Docs
  110. Twitter Search API: Make millions, wow your friends.
  111. The shapening
  112. Writing a simple Twitter-bot in PHP
  113. Event handling with PrototypeJS
  114. Sometimes being a dad is all too real
  115. A refugee from the world
  116. HTML Emails for fun and profit
  117. Javascript awesomeness with Prototype
  118. Regular expressions in VBA
  119. Manipulating PDF files with Visual Basic .NET
  120. Google Client Logins
  121. Your data is your life. Why aren't you protecting it?
  122. RAID basics
  123. My .vimrc file
  124. I'm just a little bit starstruck
  125. In which handiness ensues
  126. It begins
  127. Profiling PHP with APD
  128. Fun with Branching Merging
  129. Comment Engine: Round 2
  130. Comment Engine: Round 1
  131. Foray into the Google App Engine
  132. Un-befuddling OpenID
  133. From Javascript to PHP and Back Again
  134. The fun solution is not always the right one
  135. Good Lazy vs. Bad Lazy
  136. Search Replace with vim
  137. The Editor War
  138. Interviewing is hard and annoying
  139. Further Adventures of a Domino's CSR
  140. How I Single-Handedly Further Disgruntled a Disgruntled Domino's Assistant Manager
  141. Further Tales of a Disgruntled Domino's Manager in Training
  142. Domino's Nightly Stoner Encounter
  143. Most bizzare lack of tip on a delivery
  144. The Saga of an Uhappily-Married-Disgruntled Manager at Domino's: Part 1