(I worked up this image a while back intending to write this post in response to something going on at the time, but I was lazy and never did it. Seeing the image again prompted me to, well, just f-ing write it, so here it is.)
Often times, especially in the open source community, we all want to make a contribution by doing something that is, perhaps, outside of our area of expertise. So we come up with an idea, investigate how to bring it to fruition, adjust our original designs as we learn, then finally share our contribution with others.
And then, all too often, someone chimes in to say that you shouldn’t be doing in the way you are doing it. They’ll tell you either you should use a different design, or a different technology, or something. In the Open Source community you often hear this if your solution uses any non-open source technology, be it survey monkey, twitter, etc. Other times you’ll be told that you should use LibFoo instead of LibBar, or Ruby instead of PHP, or any number of other technologies the person has taken a specific interest in for one reason or another. And you know what, those people just might be right, their solution might be better than yours. If you’re out of your area of expertise, there’s a very good chance that their solution is better than yours.
But here’s the thing, if you already have something, and the people telling you to change it aren’t willing to help you change it, then just fucking do it, do it your way, even if it’s the wrong way. Because in practically every case, doing it your way will be immensely better than doing nothing at all and, more often than not, doing it their won’t actually make it all that much better.
Remember that even though you’re volunteering your time, it still has value. If someone wants you to hold off and re-do your solution, you need to consider how much value will be lost, both in terms of your time as well as the time the community will spend without any kind of solution, and then decide if the changes are actually worth the cost.
One last point to consider, whenever people start talking about the “best” solution, what they really mean is “the best solution I can think of”, which as history constantly informs us, is almost never actually the “best” solution possible. In fact, the distance between their solution and the optimal solution is likely to dwarf the distance between their solution and yours. So it’s not a question of a good solution vs. a bad solution, it’s a question of a good solution that exists vs. a slightly better solution that doesn’t.