I Need a Hero
Scenario: you're stuck and feeling defeated. Maybe you're alone in a startup office after midnight, trying to fix the firmware on a router (total hypothetical). You've tried everything, but it just isn't working!
Then, magic: you type the perfect query into Google, and find a message on the router manufacturer's forum where a person in your exact situation asks for help. Below, a response from an employee with a workaround: install this obscure patch, then reboot. You try it, and it works!
My plea today: be the kind of engineer who leaves messages like this. Be the hero.
When you're stuck on a problem, before giving up, stop and write down what you know, think of the best question you can, and post it somewhere public.
If you're working with an open source library, open an issue. If you're reading a helpful but incomplete blog post, leave a comment or email the author. If you're using a paid software product and a feature isn't working as advertised, or doesn't cover your use case, email support and post in an official forum. Whatever you do, leave some artifact that you were here and had the problem in your head.
When you do this, you are maximizing the investment you've already made. More than a few times that I've done this, soon afterward somebody enters the forum and says "Try this" and saves the day.
But even if you never get help, your message can help somebody else. I keep a personal wiki full of documents named "fix GPG", and "SubmitEvent.submitter is undefined". These are snippets of code from Gists, Stack Overflow answers, and forum posts that at one crucial moment helped me greatly. What did these wizards of programming know? Usually, just a bit more about the problem than I did.
Let me address two counterarguments. Yes, this takes a little more of your time. Yes, there's a chance you'll ask a 'dumb question'.
First, sharing your sad situation with the world takes a few minutes; why bother? Once you start contributing to the online discourse publicly, it becomes easier and easier. You sign up for Github, Stack Overflow, a few random mailing lists and forums, and you're off. One of my great joys is reading some outstanding Github issue I found and realizing it was written by a programmer I know personally.
What if I ask a dumb question? What if the issue I'm struggling with is trivial, or has been asked about a hundred times before? Well, it's possible, and if so, at least you know, and you aren't stuck anymore. But often, even when you're new, the thing you're struggling with is confusing and broken, and that feedback has value. You never know, your comment could be the tipping point that leads to a big change. There's only one way to find out.
I want to attribute this idea to Steve Klabnik, although I can't find his original post. Thanks, Steve.