Fighting with the Black Box

Recently I had the opportunity to work with OpenSocial, an rather famous alternative for Facebook Platform. To make long story short, I have a difficult time: the API standard document is fairly good, but it depends on third-party implementations. The troubles arise from here: the OpenSocial implementation of the site is incomplete and have some non-standard parts. I was stuck.

This situation reminds me about many previous cases, in which I must work with a blackbox, with very few documents available. Zend Framework, SocialEngine, Grails… all pre-built system is a big scary Black Box. It’s like a big closed machine: you don’t know what mystery happens inside, but you must depend on it. And in case it’s bad documented, you must figure a way to wade through unexpected results & doubts… Well, I don’t like to say WTF, but it’s really that bad sometime.

On the other hand, it’s just good for not building a thing from scratch. I don’t know how many months it will take if I try to construct something like Grails/ SocialEngine by myself, in case I can live just for doing that. Every programmer once use an API/Framework: nothing new. And all must find a way to ease that pain.

So how to cope with the Blackbox?

First solution is asking senior programmers, who have lots of better experience. I have learn much from Younet seniors in SocialEngine (it have NO bit of document just yet) and just as much about Grails, Java from Evolus seniors. It was a big help when I’m with them – as it still be now.

The second place I look for help is from the community and black-box developing team. Most of this approach happens in cyber space, so I don’t have to worry about disturbing people, but it only works if someone out there know my problem. If the framework/API has a fair community, there’s a good chance that someone met a similar problem before. Hence I can try a Google search, ask on StackOverflow, or simply throw a question on the supporting mailing lists. But notice: when joining a community, there’s some responsibilities that come along with benefits. You need to figure out what you can do in returning the help you received.

Last but not least, in case you get nothing by previous ways, you can only use your creativity now. In my case, if I understand what causes the problem, I will try coming up with a work-around. If I don’t, I will try to throw several kinds of input into the Big Blackbox. The results will tell something, and changing the input little by little may tell where the problem is.

Above is all of my few heuristics for dealing with a closed system. It’s far from perfect and I am looking for some enhancement, but that’s another story.