There always comes a time when I no longer feel confident in a piece of code. It may take a day, a year, or several years, but it usually happens. This lack of confidence can be due to a variety of reasons. In this case, it was many reasons.
I was offered a reviewer’s position at CodeCanyon in November. My job is to review code submissions, reject them if needed, or accept them and tack a price tag to them. I’ve spent a few hours reviewing other people’s code, so naturally I’ve seen code that ranges from poor to decent. As I analyze the code and offer suggestions, I came to recognize that I haven’t held my own code to my own fire. That disturbs me – primarily because I am typically my own worst critic. Everything has to be perfect before I even consider releasing something to the public. Obviously that wasn’t the case with XWebMenu v3. Despite it’s alpha status, I made some terrible design choices. So terrible that I’m embarrassed I even released the code in the state it was in.
I’ve spent the past few days working on an article discussing component design. It’s not overly technical, but it presents some ideas I consider important when reviewing code submissions at CodeCanyon. While I have religiously followed some of my own ideals and philosophies when designing components, I regrettably admit I have not followed all of them. I do not know yet where I’ll publish the article, but I’ll provide an update when I do. It’s focus is towards .NET, but the principles can easily be applied to any language.
XWebMenu is kind of my flagship DHTML widget. It’s the first DHTML widget I wrote, and other than XParser (which I really need to get back up here), it’s the only piece of JavaScript I’ve maintained over the years. I wanted to really push v3 to the limit as far as design, features, and code. With my renewed focus, that should be an obtainable task.
There is also the possibility XWebMenu will become an item for sale at CodeCanyon. The jury is still out on that decision, but I’m not going to worry about that until it’s finished.