Sunday, February 11, 2007

Universal Issues

There are 3 axes of music: melody, harmony, and rhythm. These elements exist in most musical works, and those that don't have a particular aspect, say, melody, can be characterized as such.

This idea has inspired me, for several years now, to think of "universal issues" of a software project. That is: issues that apply to every project, even if the manifestation is absent.

An easy one is "architecture", but I think that is well-documented. Here are some others, in my experience. If you are just starting a new project, you would do well to consider these early. If the your project lead (or business manager) doesn't consider these, then, um, things are gonna get interesting. (I'm assuming you don't need a full explanation of each individual issue -- if you don't know one, hit Wikipedia).

  • Installation & Versioning. Who is the target audience for the software? How will it be packaged? What does an upgrade look like? See the quote below.
  • Licensing. How do we enforce that only our customers use the software? How does it fit in with the larger business model of the project?
  • Logging. Problems happen. And someone has to troubleshoot them. (Thankfully for Java developers, this issue is vastly simplified by log4j and friends).
  • I18n. This one is huge: there are lot of languages and cultures. Obviously Java helps tremendously here, but only if the infrastructure is actually used.
  • Performance & Scale. This one and i18n are probably the biggest "come-back-to-bite-your-glutes" issues. It is extremely important to state the goals upfront because marketing will let them creep if you aren't careful. Even if it seems obvious, assert that "the sole locale will be US/English and 95% of the web-site hits will be under 2 seconds with a max concurrent load of 100 users". If everyone agrees, then great, but my guess is that it will precipitate a rowdy discussion (which is the point -- you want this worked out upfront).
Any other universal issues, in your experience?

ps. Here is a stunning quote that applies to versioning (and more):

All code is terminal. It lives under a death sentence. Data is immortal.

--Ken Downs, NY PHP user's group, 10/24/06 (as attributed by Cafe Con Leche)

No comments: