Don’t write software you don’t need.
I mean it. Don’t do it. If you don’t need it right now, don’t write it. Don’t waste your time.
David is going to get a good laugh out of this article, because I’m only going to be parroting a lot of what he has been preaching for so long, about “frameworks are extractions.” I finally realized that he’s been talking to me. Every time he or Jason shouts “LESS SOFTWARE”, it’s been at me. I just didn’t realize it at the time.
If you write software you don’t need, you write software you won’t use.
If you write software you won’t use, you don’t know how the software will ultimately be used. You might think you have some idea. You might even have some concept of one or two practical use cases. But really all you’re doing is playing a “this might be a cool feature” game, and it’s not until the feature requests come rolling in that you realize you’ve missed the point.
And, if you’re anything like me, you’ve now got a sense of obligation to make your creation useful, despite your rapidly decreasing interest in the project. And at that point, the project ceases to be fun, and becomes a burden.
I’m guilty of this. Very, despicably guilty. Consider the following list of projects, and see if you can figure out what they have in common:
What? I wrote them? Well, yes, I did, but that wasn’t necessarily the commonality I was fishing for.
The common feature of all of them is that I didn’t need them when I wrote them. In fact, for most of them, I haven’t hardly used them since I wrote them. I don’t think I ever actually used Copland at all, nor the CAPTCHA. Net::SFTP was more a “logical next step” after Net::SSH. I wrote SQLite/Ruby because it seemed like a fun project at the time. I wrote SQLite3/Ruby because I wanted to experiment with SWIG.
Net::SSH, though, takes the cake. I wrote it because I thought that I might someday want to write a maven workalike for Ruby, and one of the features it sports is the ability to deploy libraries via ssh. Logically, I would need an SSH library in Ruby. It seemed like a good place to start at the time…
And Copland and Needle… well, suffice it to say that I’m not as convinced of the necessity of dependency injection in Ruby as I once was. A guy is entitled to change his opinions every once in while, right?
At any rate, I now have a few projects that I need, but due to this overpowering sense of obligation about the above list, I feel guilty every time I try to work on them. Instead, all I can focus on is how I ought to be documenting Net::SFTP, or addressing the bug and feature requests for both of the SQLite/Ruby projects. Or fixing a security concern about Ruby/CAPTCHA that was brought to my attention months ago.
So, I come to the point of this article: I’m looking for individuals that would be willing to adopt one or more of the projects listed above. I need to divest myself of them, and leave them in the hands of people that actually need them. This would benefit both the Ruby community (because there would be new life breathed into these projects) and myself (because I could focus on the software I need, again).
If you’re interested, let me know.
Update: Justin Dossey has volunteered for Ruby/CAPTCHA, so that’s one down. Thanks, Justin!