Fluffy Red Towels

Ok, so what do fluffy red towels have to do with software development, innovation, or usability? Let me tell you a little Monday morning story….

Last weekend I was swimming in the pool (which is exciting in itself, since a week earlier we were under a heavy snowfall warning!). When I got out of the pool, I grabbed one of the new towels my wife bought recently. I was thinking to myself “wow – these are really nice towels – nice colour, very fluffy, and very, very soft to touch.” I was impressed. After a few minutes of towelling off, I realized something was not quite right. I was not getting any less wet. Perhaps it had started to snow again? In reality, the towel just was not absorbing anything at all. It seemed to be like one of those shirts with the spill-resistant coating – a nice feature in a shirt, but not quite so nice in a towel. The towel, despite being very nice in appearance and superficially pleasant to use, failed to fulfill its single biggest functional requirement – you could not dry anything with it!

It occurred to me that this is a good metaphor for much of what goes on in product design – in software and elsewhere. Many products which do take into account usability and user experience, do so at the expense of functional design (yes, realize that there are even more products out there which implement functionality and ignore the user altogether). This brought home to me an important fact: as important as usability is, it does not mean squat if the product fails to fulfill its functional requirements.

Fewer hurdles

One of the best sales guys I know told me that a large part of the sales process is removing objections on the part of the buyer. I guess one of the best ways of removing objections is by gettting rid of hurdles before they become objections.

MyMicroISV has an interesting post on 13 Fewer hurdles = more micro-ISV sales. I whole heartedly agree witht he items he lists. It amazes me (not just online, but in the real world) just how hard businesses sometimes make it to buy thier products. A case in point would be when I bought my current Tablet PC. It took (seemingly) forever to find a way to buy, mostly because the vendor seemed only to want to sell as part of vertical solutions. A consumer wanting to buy a tablet just did not seem to fit thier model (I think that this is a problem with the whole Tablet PC marketing scheme, but that’s another story).

When thinking about removing these hurdles, it occured to me that the same philosophy cold be applied to software design. How many of the programs do we continue to use which annoy the heck out of us, only because they are the only option, or the least annoying option? How many opportunities exist for just, plain good software, that does what it is supposed to do, without annoying the user? This goes back to what we all used to be taught as part of our first-year programming courses: Keep It Simple, Stupid! (I wonder, do they still teach this?).

There is a very great focus now on adding features, making things prettier, going for the latest whiz-bang bells and whistles, when in reality, what is most needed is software that just works, and does so without being annoying. This seems to be a great opportunity for the Micro ISV model.

 How hard can it be?

New Product Ideas – How hard can it be?

Ok, the title of this post is a joke. I know that new product idea generation is never easy.

Actually, I do not think that is quite true. Coming up with ideas is sometimes not all that hard – sometimes it seems like I come up with ideas faster than I can write them down, or even think about them. The real trick is coming up with good ideas, or being able to recognize the good ones form the piles of ideas in which they are buried. This, in my opinion, is the big challenge in developing a defined innovation process – how do you take this idea generation, selection, and development process more predictable and less serendipitous.

In the past, most of my efforts in this area have been within the context of an employer. This is important, because in general, this provides constraints on where you go with your ideas. For example, if you are working within a vertically targeted software company, your idea-generation efforts typically work within that vertical, and even more tightly, close to your niche area within that vertical (this is not always a good thing, it just seems to be true). If by chance you get the opportunity to take your efforts into a new vertical, you are still constrained. Typically, you will be trying to leverage what you are successful at in one vertical, and trying to replicate that success in another vertical. I am not claiming that any of this is easy, but it is not what I want to talk about in this post.

What I am thinking about right now is the challenge of starting from scratch. Here you are, on your own (alone or with a group), with no particular historical context, you have a wide-open, blue sky ahead of you. Well, where do you start? How do you decide where to begin? How do you narrow down the playing field, and how do you pick ideas to tackle (wouldn’t be nice to be able to try all of your ideas)?

To me it all starts with “what do you want to be”? What is your vision for the company you want to create? Do you want to follow the Micro ISV model, and start a company which will only be you (or at most a few of you)? Do you want to start a company which you envision will develop into a small software company, but bigger than an ISV? Or, do you want to go all the way and build the next 800 lb gorilla? Or do you have a completely different business model in mind (remember, innovation can be found in a business model as much as in a technology). This decision is vital to picking your ideas. Some ideas just will not work in some models – or at the very least will have great challenges. Unless you have a pretty good idea of where you are going, it is tough to identify an idea which will get you there. As one of my physics professors taught us “never start a problem until you have some idea what the answer looks like – otherwise you will not know when you get there”.

A second big piece of the puzzle is “what do you know how to do/what do you like to do”. Obviously, if you want to develop a useful (and hence successful) product, you need to either possess or develop a deep expertise in the relevant field. This is especially important if you are developing a vertically oriented product. Breaking into a new vertical is a huge challenge even for an established, successful company. As a start up, trying to develop a product while learning about the vertical is just making your task harder. So, if you can, it pays to attack a space you already know. That being said, you may have an idea which is so compelling that you want to attack a space you do not know well. In that case you will just need to acquire the expertise you are missing – learn it, buy it, whatever you have to do. The other side of this question is what do you like to do. No matter how good your idea is, taking it from idea to successful company is going to take an enormous amount of work. Your chances of success will be greatly improved if you are doing something for which you have a passion. Can you be successful doing something you hate? Yeah, sure. But, given the choice, why would you?

So, once you have figured out these simple questions, what next? Well, I will take that up in another post.

Friday morning rant…

This morning I am going to talk about various things which have been getting on my nerves this week (leaving aside the obvious things that always get on my nerves, like bad government, war, etc.).

  1. Software that constantly interrupts the flow of what I am trying to do by asking me stupid questions. I know many people have talk about this before, but it seems that no one actually writing software ever listens. Software should only ask you questions when it really needs to. It should never ask for confirmation to do things which are (or should be) reversible. I go to uninstall a piece of software (this happens with my Bluetooth mouse driver, Visual J# Redistributable, and almost everything in the Windows ecosystem) , and I am very intelligently informed that “if you uninstall this, you may not be able to use it anymore”. Isn’t that what “uninstall” means? What a completely useless bit of information. And, if I really need to use it again, I can always reinstall it! Many UI developers will argue that they are simply protecting the user from making mistakes. In reality, they are just doing the easiest thing so that the software does not have to take responsibility for keeping things clean. Implementing undo functionality everywhere is messy and time consuming. But, it is the right way to do it for the user. So, my note to developers is, stop wasting my time with stupid questions!
  2. Software that does not uninstall itself properly. I am getting really tired of software that installs a bunch of stuff on my computer (not just spyware, but stuff that is actually necessary to the functioning of the software), but does not clean up after itself when it uninstalls. One of the worst offenders in this category, I think, is Visual Studio. Uninstalling Visual Studio seems to take forever.
  3. Installing Open Source Software. Is it my imagination, or does a lot of open source software go out of its way to make itself hard to install on a Windows platform? To be fair, there are some projects out there which are very good about this (Apache, Tomcat, JBoss all spring to mind), but there are many which seem to be trying to be difficult. Is it a question of trying to make people think it is Windows fault that this stuff is hard to get working, so that people will be encouraged to go elsewhere? Or is it a just a lack of caring? If open source wants to dominate proprietary software, the fact is, it has to be as clean and easy to set up and make work.
    (Then again, I have run a lot of closed-source software with the same problems – not sure what their excuse is either!)
  4. Web sites that override the back button. What is it with these sites? Do they assume that their content is so compelling that there is no way you would ever want to leave? Or are they trying to stop you from leaving (like you are not going to find another way out)? This web site behaviour is just plain rude, and inconsiderate of the user. For the most part, if a site does this, I will never go back.

The Next Big Language – WHY?

I have been doing some work lately teaching myself some of the basics of Ruby, Python and a couple of other languages. As I was working with these languages, I was suddenly hit with a question – why? Over the course of my career, I have programmed in a lot of languages (somewhere around 20 that I have actually used to do useful work, I think). I am sure many of you can say the same thing. And do you know what? They all suck in one way or another! I have seen language’s popularity come and go. I have seen arguments in person, in newsgroups, and all over the web which bordered on religious fanaticism. Even as I write this, a good discussion continues in response to The Next Big Language.

Again, I ask myself “why?”

Looking back over projects in which I have participated, led, observed, or otherwise been involved, I cannot think of one where the success of failure (or degree of success – failure is not usually absolute) of the project was due to the limitations of the programming language. Nor has the programming language been the determining factor in the cost of the project, or the quality or the maintainability of the code.

There are so many factors which are accepted to have much greater impact on the course of a project than the choice of language/technology – requirements, architecture, realistic planning and tracking, and proper resourcing to name a few – that I find the whole debate around programming languages to be somewhat meaningless in the real world (actually, I find it more annoying than meaningless).

This is not to say that I do not believe we should always be innovating and inventing new ways of doing things (including programming languages). It does mean, however, that it is highly unlikely that any of these language advancements (or The Next Big Language, whatever it is) will make a significant difference in software development in either a corporate IT or commercial product development world – at least not any time soon.

Welcome to my blog

Well, I have been meaning to start this for some time, but like everyone, other things just get in the way.

A bit about myself. I have been working in the world of technology for 20-odd years. Currently, I am VP of Technology at Whitehill Technologies, Inc., where we specialize in Document Composition and Document Automation technologies, in the Legal and Financial services spaces. Prior to that I worked on internet conferencing using early VoIP, and on large military communications projects. Before even that, I worked in satellite control, and remote sensing. Going way back to university, my focus was on theoretical physics and astrophysics.

Currently my interests revolve around most aspect of software development, from technologies to management, and in the area of defining sustainable, repeatable processes for innovation within technology organizations. I also have a particular interest in Tablet PC technologies – I have been using one for several years, and I love it.

On the personal side, I still have a strong interest in all aspects of science, especially physical sciences, as well as philosophy and comparative religion. In addtion, I am into music, playing guitar (badly, I am sorry to say), and reading almost anything I can lay my hands on.