Entries
RSS 2.0

Comments
RSS 2.0

Back to Basics

Posts have been pretty sparse on here for the past few months. I’ve taken some time off from blogging to think and rediscover my focus and priorities. In the meantime, my effort has been channeled into two projects.

The first is Ninject 2, which has essentially become a rewrite of the original Ninject codebase. I didn’t feel that there was anything specific wrong with the existing Ninject codebase – Ninject 2 started as a spike that grew into a new version of the framework. When I first wrote Ninject, I was targeting the 2.0 framework, which meant that I didn’t have access to the fancy features available in 3.5 – most prominently, LINQ. Also, there have been some problems with Ninject that have proved difficult to effectively solve – for example, lifecycle management. I believe I have solved several of these problems, and I plan to discuss the solutions further in future blog posts.

In the meantime, if you’re interested, you can see the source of Ninject 2 in Subversion. Bear in mind that it’s currently alpha code, and remains relatively unstable. However, I’m very encouraged at the direction the codebase has taken – to give you an idea, the core of Ninject 1.x weighed in at 177KB. The latest build of Ninject 2 weighs in at about 80KB, simply by reducing complexity, without cutting any (particularly meaningful) features.

I’m very excited about the second project, but I’m going to keep it under wraps a little longer. My wife and I are working to launch a startup based around a software-as-a-service offering which should go public sometime in the first half of 2009. I have a lot of things to talk about concerning the ideas behind both the product and the software that I’ve written to support it, which will undoubtedly result in a few posts in the future.

Both projects really relate to my overarching ideas about software development, that the advancement of our industry is directly related to making our software more adaptable to change. I have a lot of things to say on the topic, and this is just a teaser to let you know that some good posts are on the way. :)

Be the Underdog

Last night, I watched my Cleveland Browns wipe the floor with the New York Giants. The Browns were 1-3, and if they didn’t win this game, their season was effectively over. The Giants, reigning Superbowl champions, came into the game undefeated at 5-0, and it wasn’t believed the Browns had a snowball’s chance in hell to win. In response, the Browns beat them by three touchdowns, without punting or turning the ball over once. They had their problems, but it was a night of complete dominance for Cleveland.

Even if you’re not interested in sports, there’s a lesson to be learned. The Browns came into the game as major underdogs, with nothing to lose. They used it to their advantage, and their gameplan became aggressive and creative. They successfully ran trick plays like reverses and direct snaps, and the only successful execution of the UFO defense that I’ve seen… well, ever. The Giants didn’t see it coming, and by the time it hit them, there was nothing they could do but sit on the sidelines with puzzled looks on their faces.

37signals suggests that when developing a product, you should choose an enemy to compare with. By recognizing what’s wrong with the competition, you can find a niche that you can fill.

I’d take it one step further and see yourself as David, and choose a Goliath to attack. Embrace your role as underdog, unleash your creativity, and hold nothing back. Even if you’re already the industry leader, don’t get cocky — choose the company with the second-largest market share, and attack.

Most importantly, don’t allow yourself to be constrained by the way your competition or the industry-at-large thinks. That’s where real innovation comes from.