Any inaccuracies in this index may be explained by the fact that it has been sorted with the help of a computer. --Donald Knuth

SFI: Simple, Flexible, Informative

My Software Philosophy


I know Simple, Flexible and Informative (SFI) seems obvious, but everywhere I turn I see cumbersome, bloated software that is difficult to use and doesn't deliver much useful information. I'm sure my own software falls into this category on occasion, but SFI is always the goal.


Until we take the time to understand our problems, we don't know what simple is.

I once heard a joke on the radio. The comedian said that the great philospher Henry David Thoreau used to say, "Simplify, simplify, simplify." The comedian pointed out that he took the philosophy one step further by saying only, "Simplify."

It's a clever joke, but when dealing with today's technology, it's actually pretty hard to make something simple. Nonetheless, I believe software should be simple. I think Google gets it. Many websites have tried to imitate Google, but few succeed.

The main reasons that simplification is difficult is because people don't understand the problems they are dealing with and they try to solve too many problems at once. For example, before human kind discovered that all the planets revolve around a central sun, talented mathematicians had worked out very complicated equations that explained the motion of the planets with the Earth at the center of the universe. But when it finally hit them, they realized that the motion of the planets could be easily explained with one simple equation by making the sun the center of the solar system.

Until we take the time to understand our problems, we don't know what simple is.


Flexibility arises naturally from better organization.

You may have heard the term "object-oriented" recently. It's a way of organizing software that parallels the way the human brain abstractions. It turns out the human brain is pretty good at organizing things because we see patterns and group things that are similar. For example, "face" is an abstraction. No two faces are alike yet we always know a face when we see one. Last night on the evening news, it was reported that a man was putting wood into his fireplace when he noticed, on a piece of firewood, the exact likeness of his deceased pet dog. You see, we can even turn two smudges and a line into a face. (Must have been a slow news day.)

Software can be very complex. With millions of lines of code and thousands of separate modules it's a wonder it ever works at all...and it often doesn't. But the key to simplicity and flexibility when writing software or using it, is organization.

Over the past 10 or 15 years, design patterns have become more and more popular. Design patterns take object-oriented ideas even further by creating a set of common building blocks that can be used to solve common software problems. It's like building a house with 2x4s, I-beams and 30 inch doors. These are all standards that have developed over time because they work. Imagine trying to build a house when all you have is a bunch of tree trunks. You could do it (well, somebody could do it), but it would take a long time and the roof might leak.

Microsoft embraced design patterns when they created the .NET framework. The result is a very powerful set of tools for software development that improves flexibility. It's like having your own software lumberyard...well, you know what I mean.

Flexibility arises naturally from better organization.


Information is the key to predicting the future.

The third axis of SFI is information. Not only do I want simple and flexible software I want information about the task or the state of the system I'm working with.

In this century, information will become more available and more important to the global economy. The Internet is all about information. What's the weather forecast? ( What's going on in that election around the world? ( What's showing at the theater? ( Here's some information which is a little harder to acquire: What will the stock market do tomorrow? ( Where should I put the next McDonald's franchise? (

Today the Information Age is still in its infancy. If you want proof, just look at all the communications companies with the word "wireless" in the name. AT&T Wireless, Verizon Wireless, etc. Reminds me of time when people used to drive horseless carriages.

Fundamentally, information is important because it gives us the ability to make more accurate predictions. If it's going to rain this afternoon, maybe I shouldn't go to the game. If the movie starts at 9pm I should be at the theater before that. If the stock market is going to go up tomorrow I should close all my short positions. We all realize the importance and power of predicting the future. Yet, it's not quite so obvious to most of us that information is the key to doing that.

When I design a new software application I'm always thinking about reporting and access to information. I try to integrate reporting features into everything I do as long as it doesn't violate Simplicity and Flexibility. My WebWriter software automatically generates information at every step to let the user know what it's doing. An e-commerce web site tells you "Good job. Your order has been processed." This feedback is information that helps you predict the future (or better evaluate the present) and allows you to make better choices.

Information is the key to predicting the future.

-- SFI --