Help! I'm blocked by other people's bugs!

I'm stalled with my project due to bugs in these other projects I depend on. We hear every now and then. Maybe even use it as an excuse. The problem with this complaint is twofold.

First, using that dependency was a choice. Whenever we depend, we have to evaluate the risk of the dependency, versus the expected gains. How likely will this lib give us a productivity boost? How likely will we run into issues using it?

So, careful upfront evaluation helps us avoid the worst dependencies.

Second, it is guaranteed to run into issues even with the best kind of dependencies as well. Then we can shrug and wait for them to triage, identify, prioritize, fix and release the bug. Or we can roll up our sleeves, dive in and fix it.

For example, I was working on a green-field project with dear mates. Though somewhat inexperienced, we strived to use technology promising a balance of stability and productivity. A part of the task was sending protobuf messages through ZeroMQ. Easy.

  • Then I experienced rare crashes. Developing in Java, the segmentation fault seemed daunting. I could have sat back, but rather I kept digging, and eventually landed a small fix. Happy ending. Or is it?
  • Next I realized some field were missing from the transmitted messages. The sender side used Python, and after quite some digging, I found an indentation error in the official Protobuf Python bindings, causing some code to be executed outside a loop (details foggy).
  • More recently, I added Prometheus monitoring to a small tool I wrote in Haskell, which issued concurrent fetches. It was about 100 lines, and on the second run I managed to get a deadlock from the GHC runtime. Such is my luck. This time I worked around by limiting concurrent cores, worked on getting a minimal repro, and opened a ticket.

But was that all what could have been done?

No. There are alternate strategies. Backtrack and choose a different dependency. Ask if the feature is really needed, and maybe drop it. Hack around the bug, fix it with duct tape. If it only happens on lists of size one, pad the list with a dummy extra element.

Don't let yourself be blocked. Open bugs. But keep making progress.