Thursday, October 4, 2007
Understanding MP3 Compression
Thursday, September 27, 2007
Digital Audio Primer
Wednesday, September 26, 2007
Saying Goodbye to Illinois
Tuesday, September 25, 2007
Enjoying Pandora
I've really been enjoying listening to Pandora lately. It is a net radio service that builds a "station" for you based on your tastes. You begin by entering a song or an artist you like. It then plays music it thinks is similar. You are allowed to give the selections a thumbs up or thumbs down. Based on your input, it refines the programming. This is a great way to discover new music. Today I started with Evanescence and discovered Leaves' Eyes and Nightwish. Now if someone just would just make a full-featured Pandora module for Media Center...
Monday, September 24, 2007
What Is A Microphone Array?
A Little Design Advice
A recent article on InfoWorld lays out "The eight secrets that make Apple No. 1." There are many things in the article that I disagree with but there are two that stick out as good advice for software design.
The first "secret" is that engineering supports design and not the other way around. Traditionally the software industry has done engineering first and design second. This might be because CS schools emphasize code and don't give you a better grade for prettier UI. It could be because programming originated in a command-line environment where a friendly UI wasn't really possible. It could just be because the typical programmer has a bad sense of style. Whatever the reason, it's true that more software is written engineering first than design first. Try using software written 10+ years ago and you'll see an extreme example of why it shouldn't be. In today's world where things like WPF and AJAX give us so much flexibility in UI, there is no excuse to constrain the user experience based on what is easy to engineer. Part of the reason the original Mac turned out as well as it did was because Steve Jobs was such a fanatical advocate for it to look good. He was ahead of his time.
This can be taken too far. The Macintoshes of the mid to late 1990s looked nice but the engineering below it was failing. They were slow and flaky. They didn't even have pre-emptive multitasking yet. The Amiga had it in 1985. A solid engineering base is definitely required but the part that interacts with the user needs to be designed from the user backward.
The second "secret" I want to mention is what the author calls, "You can't please everyone, so please people with good taste." I disagree with the recommendation to just target the high end. Walmart made a lot of money following the opposite approach. The key takeaway here though is to target a customer segment. Don't target the whole market. Trying to satisfy everyone is a great way to satisfy no one. You'll get higher customer satisfaction if you solve a few people's needs 100% than if you solve everyone's needs 80%. The siren song of targeting everyone is always high. There's more money in the whole market than in a niche. However, trying to get that money is easier if you target a niche, satisfy it, then move on to the next niche. It also means that your customers will be more sticky. If your product is an 80% solution, that means there is 20% that people don't like. That's 20% that if someone solved, customers would just to the competing product. If a customer has a 100% solution, she will be very loyal and unlikely to jump to a different supplier.
Friday, September 21, 2007
Metrics of Software Quality
This post over on TestingReflections brings up an interesting point. Michael answers the question, "What are the useful metrics for software quality" with another question. He asks, in a roundabout fashion, what is it that we value about the software? He rightly points out that some of the things we normally associate with software quality may not be what we're looking for in some circumstances. He suggests these metrics as possibilities:
- Is it testable?
- Is it supportable?
- Is it maintainable?
- Is it portable?
- Is it localizable?
These are all great questions that will affect many software projects. A few more that come to my mind that often matter are:
- Does it meet the specification?
- Is it extensible?
- Is it documented (both the code and for the customer)?
- Is it deterministic (does it behave the same each time)?
Michael points out that none of his metrics--and really none of mine--are quantifiable. They are qualitative metrics. The bind testers often find themselves in is that they are asked by management to produce numbers (pass rates, code coverage, complexity values, bug trends, etc.) to describe quality. While those are useful pieces of information, they do not accurately describe the state of the program nor of the code.