Friday, March 03, 2006

When Software Attacks: Survival of the fittest

On the weekend I borrowed The Software Conspiracy from my local library. This was a book printed back in 2000 that focused on the crisis in the shrink-wrap market: users are more interested in features than in quality, the software companies know it, and there is no incentive (financial, legal or other) for the companies to change their ways.

I would argue that the pace of innovation has slowed down in the last few years, so some of those bugs are finally getting fixed. However, most computer users are now conditioned to accept poor quality software in both their work environment and home environment (I still get annoyed at having to reboot my set top box a few times a week, I'de be really upset if I had to reboot my cell phone).

In the book the author compares shrink-wrap software with software that powers the space shuttle:

...Unsure that a simple process could make the shuttle's computers reliable enough, NASA chose to just put redundent computer systems on the spacecraft... Instead of builing a computer program and putting an indentical version on five different computers, NASA gave the specifications for the shuttle software to five seperate teams and had them write seperate programs. Then, when the shuttle needs to do something like calculate orbital information, the seperate and independent computer systems all compute the oribital information, and then vote. Hopefully all systems agree, but if they don't, the majority rules...

I don't know if NASA still uses such an approach (they use a single operating system for their probes), but could this approach be used for developing software for other markets?

Maybe. Let's have a look at how this might be done.

Why would you take this approach?

  • You absolutely need a particular application - failure is not an option. You might need it to ensure future cashflows, might be a legal requirement, etc.
  • Reliability is critical.

How could you manage the development?

If a "majority wins" approach is used then you will need at least 3 different implementations, and definately an odd number of implementations. You could divide the effort amongst 3 different internal development groups (make sure they don't talk to eachother!), or contract the development to 3 external companies, or a combination of both. In-house develop the layer that decisions the responses from the competing systems (could be the UI layer of the application).

What are the pros?

After a short while (production release, plus another development cycle) it should be clear which of the implementations is most suited to that environment. You can collateral damage the failures and continue to deliver to the business...

What are the cons?

  • Increased cost.
  • Overhead of running a number of similiar systems in parallel.

Crazy? Maybe. The cost of such a development approach would be reason enough to kill off the idea in most markets. Still, if survival of the fittest is good enough for nature, isn't it good enough for corporates?

Tuesday, February 28, 2006

Groupthink not so smart

An interesting blog summarizing the fact that group brainstorming is less productive that the individual. From the blog:

Time and again research has shown that people think of more new ideas on their own than they do in a group. The false belief that people are more creative in groups has been dubbed by psychologists the ‘illusion of group of productivity”... because when we’re in a group, other people are talking, the pressure isn’t always on us and so we’re less aware of all the times that we fail to think of a new idea.

Does this also apply to programming? Does the best software architecture, the most innovative product ideas, come from one or two project 'architects' or from collective ownership a la XP?

Thursday, February 23, 2006

Windows bumps Unix as top server OS

From yesterday's CNet:

Computer makers sold $17.7 billion worth of Windows servers worldwide in 2005 compared with $17.5 billion in Unix servers, IDC analyst Matthew Eastwood said of the firm's latest Server Tracker market share report. "It's the first time Unix was not top overall since before the Tracker started in 1996."

That is a very intetesting development. Windows seems to have overcome its traditional reputation of unreliable, or at least it is considered reliable enough. In my experience mainframe and some of the high-end (e.g. Sun) UNIX servers by far dwarf Windows reliability. Linux servers in the corporate environments still seem to struggle; I had many frustrating days at one large Investment Bank with Linux because of unscalable NFS stacks (had to wait until the one-and-only-one NFS developer got back from his summer vacation) and the buggy ClearCase file system port from Solaris. I'm also curious about which version of Windows is the main server environment; win2k was by far the most stable I've dealt with, win XP was a big step backwards in terms of reliability.

I'll blog about the shrink-wrap software market's effect of good enough reliability soon.

Tuesday, February 21, 2006

Microsoft to destroy cell phone business

Here is an interesting development: Microsoft plan to offer a Skype-style free internet voice service for mobile phones from wi-fi enabled phones running Windows Mobile software. This is similiar to a recently unveiled Skype phone that look like a standard cell phone but work over wi-fi. If cities offer free wi-fi services this technology could send many telcos broke (bad for their stock price). Free wi-fi is just starting to be debated in the US, with Philadelphia pushing ahead and NY holding out (although it is currently free at Bryant Park).

Indian IPOs a big success

Here are some interesting stats. Last year 32 Inidian companies went IPO on the New York Stock Exchange. How are they doing? Of a total of 32 issues, only 6 are in the red. More importantly, the average loss is ~13%, while the average gain is ~83%.

Monday, February 20, 2006

JarJar Links saves Naboo - and Java dependency packaging - again

One of the problems I faced at a client site recently was due to the success of open source software. What was the problem? Some software is so popular that everybody use it, but they use and depend on a particular version of that software. For example, everybody these days is using Apache Commons, Hibernate, etc. When you have to connect to multiple systems and each system has a dependency on a different version of the same third-party lib you can run into all sorts of problems depending on which version is picked up by the classloader (you Windows people remeber DLL Hell?).

I began writing a tool to modify Java bytecode that would rewrite package names of dependent libraries so that you could create a unique dependency (e.g. if your software has a package name com.x and depends on Apache commons, then rewrite the package name org.apache.commons to com.x.org.apache.commons), but as often happens, I found a tool that already does this. JarJar Links (no, not that marketing tool from the Phantom Menance) has some Ant tasks that do a very good job of rewriting package names.

Long live the Java Dependency Empire!

Friday, February 17, 2006

The Space Elevator: Going Up!

As a sci-fi fan I'm glag to see that the Space Elevator is getting closer and closer to reality. Such a technology will have a profound impact on space exploration/exploitation - and could see a giant shift in the economy of any country that can master it.