Answering the Rob Conery Challenge

9/4/2009 by Brian Mavity

As I mentioned previously, I have been interested in writing my own blog engine, mainly for the sake of learning some new technologies. I understand that prevailing wisdom is that writing a blog is boring and uninteresting work, but Rob Conery put a spin on it when he invited developers to write their own blog engines and use them as their resumes (or lightsabers). It has been 6 weeks since my last post, and although I have not yet made my first commit to a source control server, I have made, as one of my college physics professors used to say, “fair to middlin’” progress.

What seems to be the problem?

In a classic case of déjà vu all over again, I decided that I was going to make this a “real” learning experience. By the time I sat down to dig into all the new things I’d need to learn for this simple project, the list had become quite the spectacle. Let’s see if I can remember all of the technologies I have spent at least 4 hours of time on in the past 6 weeks: boo, FubuMVC, Spark View Engine, Couch DB, StoryTeller, Selenium, Mono, MonoDevelop, Ubuntu, SharpDevelop, and db4o. Now consider the technologies I’ll be using that I have had prior experience with: html, css, JavaScript, and screw-unit.

The result was that I spent a significant percentage of my time learning 11 new technologies, and an infinitesimally small amount of time with the ones I knew. I fell prey to fact 6 in the Facts and Fallacies of Software Engineering.

Learning a new tool or technique actually lowers programmer productivity and product quality initially. The eventual benefit is achieved only after this learning curve is overcome. Therefore, it is worth adopting new tools and techniques, but only (a) if their value is seen realistically and (b) if patience is used in measuring benefits.

I barely scratched the surface of anything but FubuMVC and Spark, so while I did gain some knowledge, my productivity was essentially ground to a halt under the oppressive yoke of uncertainty.

That’s not so bad, is it?

That list did not materialize overnight, each and every addition had a legitimate reason to be included. What’s the harm? After all, I have a significant interest in learning all of those technologies, learning is a good thing, and good things are, well, good. Right? Wrong. Know what’s better than good? Great. You know what would be great? Actually delivering something! If I go by the only metric that really matters, execution, this blog project has been a spectacular failure up until this point.

I ended up getting so bogged down in all the learning, that I never got into a flow. More than one night ended in frustration when I didn’t make any forward progress. When I did manage the occasionally herculean task of getting something to work, more often than not, I would be content to consider that my victory for the evening and head off to bed.

Out of the ashes

Am I doomed to this life of never getting any of my fun projects started finished? In an effort to answer this question in a positive manner, this past week has been a reevaluation of my priorities and a significant paring down of the shiny new toys. I am still going to use FubuMVC, Spark, StoryTeller, and Selenium. I have been using the latter two at work so they aren’t going to impede my progress, but I am switching back to Visual Studio and c# for my coding and likely to SQL Server Expression for my data store. I now have very little that I’ll have to fight conceptually, which should allow me to get things done (git r done?) and gain some momentum.

The progress I have made so far does not include any code, but that’s not the first step in producing a product. Most importantly, I have a preliminary UI design and a small list of features that are required for me to begin using my blog engine for these posts. I have given myself an attainable goal and my brain is no longer scattered to the four corners of the earth. It is time to move forward.

Parting Words of Wisdom

Learning for learning’s sake is ok in small doses, but directed, focused learning used to reach a goal is like keeping a fine edge on your sword, even if it happens to be made of light.

blog comments powered by Disqus