Getting over the hump

Almost every person I work with has some type of programming project they work on at home.  Michael (last I checked) is writing a synthesizer to go along with the midi controller keyboard he now owns, Matthew is writing an application so that he can update his music library’s metadata more easily, and other people have other tiny projects that they work on when the go home at night.

Me?  I watch southpark until I fall asleep.

Some days, I wonder if something is wrong with me.  Like I’m a bad geek for not programming when I go home.  Hell, my own brother puts most of us to shame, having started what (I think) is the most popular linux PVR project in existence, MythTV.

So what’s wrong with me?

It seems that everyone I talk to has the same formula – play around long enough with things on your computer, and you’ll find some type of pain point.  Most people see that pain point and either run in the other direction or try to buy their way around it, generally (on Windows) with some shitty shareware product that purports to solve exactly your problem.  Of course, the application looks like it was written in VB 4 and is half in German, but hey, it’s better than dealing with the original problem, right?  Programmers, though, jump into the problem full force.  The write something to solve the problem.

But I don’t, at least not really.  I’ll search for “solutions”, generally hacks that people have found to work around problems, but I’ll never write a line of code.  I used to think that I was missing some key driving nerd component.  I also hit these pain points (people who know me certainly know that – I complain like a little girl about every single one), but I’ve never once sat down to write a computer program to solve any one of them.

That’s right – I have never written a piece of software to solve a problem I was having, outside of school, work, or when Isaac asked me to do something for MythTV.  Never.  Not once.

So I must be faulty, right?

But then I realized it, last night around 12:30am.

I was sitting around, browsing the intarweb, being a bum, when I came upon the e text editor screencast.  The “e” text editor is a shameless copy of TextMate, which is probably the most important and novel editing application since VI/Vim (and before that Emacs).  I was watching the video, and thinking to myself: “Wow, I wish I could do that in the editor I work on”.  And I started thinking about how I would structure it, and what exactly it would do, and what it would look like, and so on.

And then I realized: I can’t do this today on the codebase I’m working on.  To do what I want to do, I have to wait 2 months for a “new” feature to be written by another developer.

Guess how long my attention span is?  You at least get partial credit if you said “less than two months”.  Extra credit if you added “…retard.”

So then I started thinking, and I realized that this happens an awful lot.  About two weeks ago, I was getting annoyed at an issue with Pidgin, and I went through the same exercise.  “Let’s see, I could do *this*, and then that would….”.  And then I realized:  I have to enlist in the source code, which I’d probably do on my linux box, which is, unfortunately, underpowered (being my backup machine) and slow.  And I’ve looked through the pidgin codebase before (well, the Gaim codebase, back before the lawsuit and the year-long wait between 2.0 beta and 2.0), and it is pretty ugly code.  And all that for what?  Feeling a little bit better about some small thing?  Besides, it isn’t likely that my stuff would make it back into Pidgin anyways.

Same thing happened a month or so before that – I wanted to write a vim emulation for the stuff I’m working on at work.  Once again, the foundation wasn’t there, and my solution would have to be ugly and hacky.  I’d spend weeks writing something that would never make it into the product, when I could just be lazy and actually use vim instead.

Thunderbird before that – I wanted to write something for thunderbird/sunbird (not an extension).  Enlist in sources (which is goddamn annoying for mozilla stuff on windows), figure out how the code works, and then, maybe, finally get to writing what I want.

And that’s when it hit me:

I can’t make it over the hump.

I think that no matter what it is you want to work on, there is going to be some kind of hump.  There will always be some work you have to do before you can even start on the work you want to do.  Problem is, for me, that I don’t want to get over any hump.  If there is a problem I want to work on, I want to work on that problem and nothing else.  I want to write *foo*, not figure out why there is no framework to write a *foo* in the firstplace and write that.  Not figure out why the developers for this application thought programming in C++ was C with classes.  Not figure out that the developers of this Java app decided that, in leiu of documentation for types, they would simply put the documentation in the 300-character long class name (WindowsCDTrayPopOutConfigurationManagerAppletGTK).

Bleh.

At school, I could get over the hump because there really wasn’t one – school projects are generally designed to be “hump”-less, so that the work-to-noise ratio makes the noise virtually undetectable.  At work, I’m paid to get over the hump, so it doesn’t feel like wasted work in the same way.  With Isaac and MythTV (and the many other situations where I’ve helped out people with projects and questions), the people asking me are benefiting from it, so I feel like there is a purpose to it all, not just trying to solve some little annoyance that I’m presented with.

What it comes down to, at the end, is that I have yet to hit on an idea for a personal project that outweighs any kind of “hump” cost.  Not the thunderbird stuff, not pidgin, and not the cool things I want to write for work.  And in the end, especially in the work area, I’m not the one really losing out.

The reason Firefox is so goddamn popular is because it has 7 bazillion add-ons (well, the reason firefox is so popular is because it blocked pop-ups, waaaaay back when, but maybe this is a close second or third), and the reason it has so many add-ons is because the hump cost is so low.  Sure, enlisting in firefox’s source code is a royal pain in the ass, but writing a plugin doesn’t require anything like.  Writing a plugin is writing a few lines of javascript, “zip”ping up the folder structure around it, and putting it in a special directory.

Konqueror is almost the same, except that konqueror (Yahoo! Widgets) doesn’t provide you with, well, widgets :)  It’s like write GUI applications when all you have is “draw geometric shape”, “write this text here”, and “plop this image here”.  Buttons?  Combo boxes?  SOL, buddy.

In general, that’s the point of the software “community” – one guys “wastes” some of his time so that lots of people can benefit, if only a little.  The overall cost/benefit to the community is positive, as a person will create much more benefit (to a large number of people) than he will cost (being that it only affects himself).

And this isn’t just open source software.  Take TextMate, which has a thriving community of people creating content for this (relatively expensive, compared to the generally high quality and low cost of Mac text editors) proprietary piece of software.

So let that be my advice to anyone reading this who is going to write the next big open source application – if you want your application to draw in lots of contributors, make it dreadfully easy to hack.  Write it in a language and style that is easy to grok.  Include actual documentation.  Don’t have some wacky, in-house build process that requires 73 steps to just compile the goddamn code.  Don’t use some shitty source control product that crashes more often than Windows ME.

Either that, or just pay people.  Your choice.

  • good to have you back, Noah
blog comments powered by Disqus