Never for Duke Nukem Forever

I was wondering how much longer the game Duke Nukem Forever would be in development. But after 12 years of development on the never-ending game, it looks like developer 3D Realms is out of money and shutting down. I was actually looking forward to the game.

3D Realms is one of the developers I wanted to work for at one point in my life, so it's a little disappointing that they've gone down. Then again, if it's taking over 12 years to make a game that will likely never be completed, then it was probably not all that productive of a place anyway.

More on Reuse

Jeff Atwood of the Coding Horror blog posted his latest on reuse with an article entitled "Don't Reinvent The Wheel, Unless You Plan on Learning More About Wheels", in which Atwood advocates reinventing the wheel as a "call to arms for deeply educating yourself about all the existing solutions".

Avoiding the reinvention of the proverbial wheel is a standard bit of received wisdom in software development circles. There's certainly truth there, but I think it's a bit dangerous if taken too literally — if you categorically deny all attempts to solve a problem with code once any existing library is in place.

I don't think anyone is saying that you should avoid reinventing the wheel at all costs. The reality is that there are times when rolling your own is desirable. As Joel Spolsky said:

And that's where I learned a key lesson in software architecture: for your most important, mission critical stuff, you have to use a tool that is one level lower in abstraction than ideal. For example, if you're writing a cool 3D shoot-em-up game (like Quake, around the same time period) and your key number 1 differentiator is to have the coolest 3D graphics, you do not use whatever 3D library you can find. You write your own, because it's fundamental to what you do. The people who use 3D libraries like DirectX are using them because they are trying to differentiate their games on something other than 3D performance. (Maybe the story line.)

Bottom line: the issue of reuse is not nearly as black and white polarizing as the Coding Horror blog wants to make it.

There are times to reuse and times to reinvent the wheel – knowing the difference is one of the keys to being a good software developer. Even beyond that, it really goes back to basic engineering tradeoffs.

In most cases, however, the software developer who embraces reuse as much as possible will be in a better position and have better opportunity than the software developer who likes to reinvent wheels. It's often a missed fact that invention and innovation occurs only through an iterative process of work built on top of prior work, which quite frankly is pretty much the definition of reuse.

Besides, as Jesse, a commenter in the Coding Horror blog post said, "Doing something that you know can be done is not invention."

On Reuse

I believe in software reuse. If you want to release a product in today's world then I believe it's too costly to not reuse as much software and technology as you can within your given context.

Granted, reusing software is not always the best solution, but more often than not it is a very strong candidate. I believe that if an engineer or organization is not going to reuse software then the onus is on them to provide a strong enough rationale why not. And if the engineer or organization can't defend their rationale with good reasoning? Then the argument against reuse is not strong enough.

Unfortunately, not everyone thinks this way. That's not surprising. Engineers like to do fun stuff and reusing software or technology takes away some of that fun stuff. I get it. I like to do fun stuff too. I used to write my own rendering engines and XML parsers and Winsock code, but then one day I woke up from this comatose state.

My world changed when I stopped looking at software development at the technology level and started looking at the product end state where adding value to the product became my number one priority. The how and technology used were still important, but they were driven by adding value.

Now, there are times when reuse shouldn't be used: new technology research, education opportunities, and so on. But most of us live in a world run by businesses that build products for customers and minimizing cost and schedule are important to the business, and reuse is a way to ensure cost and schedule are minimized.

So, when in this world of business I hear something against reuse I just shake my head. Some developers just need to go away. Really. They make the world a less productive place.

To cap this off, here are some actual excuses I have heard against reuse – along with my own thoughts on the excuses.

Mr. No Reuse: Software ABC doesn't provide every feature we need and won't be just a drop-in for us, so we can't use it.
Me: I hope you're joking. Not every piece of software can be written to your liking.

Mr. No Reuse: Our product has special needs.
Me: Special needs? Such as, minimizing cost and schedule so we can make money? No problem or product is so special that we should limit our reuse. We should maximize it.

Mr. No Reuse: I want to learn about XYZ technology and this is the best opportunity for me to do that.
Me: Good for you. I support continuing education. Now go start your own business and you can do that all you want.

Mr. No Reuse: In Software ABC, I don't like the API or how they do things.
Me: I'm sorry they didn't ask for your opinion when they designed it; however, it does the job and thousands of other developers use it already without complaint.

Unfortunately, people like this really exist. Don't be one of them.

Passion

This guy rocks. I like his direct, no-bullshit style. His message? Love what you do. Have passion. You will succeed. Look and listen. He's a living example of his message.

 Gary Vaynerchuck of Wine Library TV:

h/t Jeff Tunnell

Software Development Like Golf?

I'm a fan of analogies. While sometimes they can be like a bad joke, othertimes they can be an effective means for communicating a complex topic.

Software Development is one such topic, and I often deal with trying to communicate the challenges of software with those who have little or no experience in it, so finding good analogies is always helpful for me.

Bernie Thompson took one such shot at an analogy in a post entitled "Software Development is like golf…". His premise is that your chosen path to the pin is always the problem, and to succeed you have to weigh your capabilities (people), the course (technology), and the conditions (the market).

As a (very) amateur golfer, I can agree with this analogy and it's one I may even use myself. The only disagreement I have with it is that this analogy can be applied to most engineering disciplines. That is what engineering is about anyway: balancing factors and making tradeoffs.

Still, it's a good analogy. In engineering you can't always "go big, or go home" as I like to call it on the golf course, and to be successful you have to be willing to adapt to changing conditions in your design, market, and customers.

In fact, in most sports the most successful teams and individuals are the ones that can adapt to the evolving situation of the game, and the way to adapt to the situation is to constantly assess tradeoffs like the ones Thompson chose to address in the game of golf.

Some Principles of Design

I'm trying to document some basic, yet ever-important software design principles into a list that I can reference and expand on in the future. You often see these principles discussed individually, but I believe that they need to be considered collectively.

So, this is what I have so far:

  • The KISS principle – Keep It Simple Stupid
  • Iterate early, often
  • Create Functions that fit on one screen (20-25 lines max)
  • Create Classes with one role and purpose
  • Usefulness first, usability later
  • Plugins for extensibility when possible

It's nothing groundbreaking, but it's a start of basic principles software developers should consider. Any others?

Video Gaming Trends

Wow, I knew the video gaming industry was invading or has already invaded the mainstream entertainment market, but I don't think I recognized the depth of its invasiveness and the trend that has taken hold.

Earlier in December, Advertising Pawn posted an impressive presentation entitled "Gaming Trends" that I suggest everyone browse, regardless of your techie geek affiliation.

As a sample, did you know that 65% of households in the United States now play games? Or that the average game player age is now 32? Or how about that 2 million Spore creatures were created and shared in a month? And as if that wasn't enough, worldwide the gaming industry is a $34 billion dollar industry – that's bigger than DVD's, the Box Office, Movie Rentals, Books, or Music. Here's the video:

Video Gaming Trends

View SlideShare presentation or Upload your own. (tags: marketing advertising)

Around 2001 I believe the industry was valued at around $8 billion dollars.

The major causes of the massive growth consist of a few things:

Read more »

New Online Collaboration Tool: Stixy

I've seen a few of these new, higher fidelity collaboration tools under development, but this one is rich. Stixy.com is an online collaboration tool for notes, photos, documents, and todo lists. The site recently went from private beta to public beta, and bets of all it's free.

Rather than share a bunch of documents, you create a Stixyboard, which you can then share and collaborate on any note, photo, document, or todo list that you place on that Stixyboard, including copying and pasting or linking to any website. This is a bit different from most collaboration tools where you collaborate on the document itself and not on a "board". Very neat.

Read more »

End of 2008

The blog updates have been a little dormant over the last month or so, but sometimes life gets in the way.  In any case, it's the end of the year and a great time for a reflection of the year's events as we move on to another.

Personally and professionally it's been a challenging year of change, adjustment, and education. My experiences and personal studies have gained me a deeper understanding of politics, finance, and history and offered opportunities to improve softer skills like rhetoric, leadership, and organization. And of course, my never-ending search for a better way to build software has continued.

It's been an interesting year for the world, too. The United States elected an African American to president. The financial industry (and markets) collapsed. China's massive growth continued. Wars raged on. Some things changed, some things didn't.

Technology continues to change how we live and work. In my view the iPhone has had the biggest impact. Even though it wasn't introduced this year, the applications and business model it has brought is rapidly changing our world.

Read more »

Xobni is Good

Thanks to Drew Sikora for posting a tweet about Xobni the other day. Their tour video was good enough to capture my attention and get me to download their Outlook plugin that makes me never want to go back to a life of Outlook-without-Xobni.

What's so great about Xobni? Simplicity. Immediate access to information I want. Excellent search capability. Social networking tied to email.

I better be careful, or I'll sound like a Xobni-fanboy. Really though, you can't beat the price (free) and if you're a heavy Outlook user like me then this plugin may help you tame the email beast.