Features that Suck!

May 21, 2008

Features come in many types: only one type really matters. The rest suck!

The one that matters is the User Requested Feature. Sadly its apparent that this type of feature never crosses the mind of many of the folks that build applications and web sites. And even more sadly these features tend to be complex so get dropped first when projects enter Phase 3.Designed by someone who likes tetris

The first type of feature that does not matter is the Developer Feature. These can range from outright bugs to messy APIs that can only be used if you know what going on behind the scenes. Diabolical UI Crimes also belong in this category. These confusion inducing features come from a lack of User Requested Features.

The second type of feature that does not matter is the generic spec feature. These usually come about due to BAs  guessing what users would like from their application. “Well we have a list of things… so… we’ll definitely need to sort by every column, …bound to be important”

Outlook is a perfect example, you can sort and group (slowly) all your email but what you really want to do is search, which you can’t do. Contrast that with GMail. Give people what they want not what you think they want. Lookout did just that and Microsoft bought them to hide their shame. Again this type of feature comes from a lack of User Requested Features.

When the owners wife adds a feature...The third type of feature that is not important is the old technical expert feature. These come in the form of ropey architectural decisions like “we’ll use technology blah” from technologists that are now above programming so just deal out great wisdom… yawn. If you can’t code it, don’t suggest it.

The fourth (be certainly not final) type of feature that doesn’t matter is the infinite configurability feature. Whenever a decision point comes; you go both ways and then let the user configure which behavior they ‘want’. Let me tell you a secret: users don’t care, and being asked just angers them. Take as many decisions as possible, use intelligent defaults and don’t make users think!

User Requested Features are almost the only type of feature your software should have. The problem is that they can be complex, tricky to implement and usually require some creativity to solve. But they’re so neglected there is always some low hanging fruit.

So… if you’re a developer, try asking your users for a small feature they would like and …just add it. If you work for BigCo you’ll start making powerful friends and if you work on the Internet you’ll drive more traffic!

And who knows you might just enjoy it…


(Short && Simple) == Sweet

May 20, 2008

There’s quote attributed to Blaise Pascal that goes:

“The present letter is a very long one, simply because I had no leisure to make it shorter.”

It’s an observation that brevity is more difficult to produce that verbosity.

However, modern programming ideologies encourage you to write your solutions in a verbose framework or with an X-first methodology (pick an X) or with restrictive rules to help you “be a better programmer”.

It\'s all very complex you see

There are plenty of (typically aggressive) ideology pundits that will rattle off the usual straw-man arguments about using their strict set of rules: the power of sameness, easier maintainance, easily understood code… etc. etc. You can usually spot these people because conversations with them feel like you’re playing an old skool text-based adventure game …and you’re probably stuck in a loop.

The truth is that only Deliberate Practice will make you a better programmer. Only loose coupling and simple architecture will make a system maintainable. And the ONLY way to make good software is to build it for the people that will use it, with their feedback.

Having 7 classes where you could have had 2 is gold-plating. Building everything to an interface is gold-plating. Having more than 1 factory is gold-plating.

So the next time your tempted to build a system of abstractions think of the words of Seneca:

“Love of bustle is not industry”

Aside: In Pascal’s day letters cam in iterations because there were word processors, perhaps a good thing we’ve lost…


I wouldn’t trust you with a barge poll

March 31, 2008

Much like common sense is not all that common, plain English is rarely plain. And this is even more true when you’re speaking a domain specific language (or to the man on the street, jargon). In the world of software development we speak a very dense DSL packed with nouns that have very specific meanings. I use the word dense because there are also loose DSLs,

As example of the difference consider an address and a phone number. The address may have redundant information in, like street name and post code, or country for an non-international letter. A phone number on the other hand has no redundant information and hence is susceptible to having its meaning completely destroyed by a typo. With an address we have a little more leeway but enough typos and your letter won’t get to where you were hoping.

So when we speak in a dense DSL we need to be careful to say exactly what we mean; for example in interviews I often ask what does static mean in the context of C#. The answer I usually get is:

It means you only have one copy.

Which isn’t wrong but it’s vague, and vague is pretty close wrong in my book. A better answer would be:

Static can be used as modifier keyword to declare a member variable on a class

Far better; it shows a precise knowledge not only of the C# language but of the DSL that surrounds it. Also It’s not overly precise, it gets to the point and stops.

Now this is a simple example but the concept of terseness is widely applicable. Often I’ve found people who pride themselves on the terseness of their code don’t extend that same pride to the duration of their sentences. So given that I don’t have the time to make this any shorter, I’ll leave it there.


The Iceberg and the Swan

December 5, 2007

I’ve heard a phrase used recently a number of times and it has struck a cord. The phase was [and I paraphrase]:

… the product should be like a Swan, serene above water, legs kicking frantically below…whooper-swan.jpg

The insinuation is that although there is work occurring below the waterline that work is compact and simple and should not impact the product; the serene Swan. This is a very valid view to hold and one that also conveys the some separation between form and function.

iceberg.jpgHowever, most modern systems do not approach the elegance of a Swan. A more adept metaphor is probably that of the Iceberg. There is typically a lot more below the water line (i.e. not visible to the user) than above the water line.

The waterline on our Iceberg is somewhat movable also as different people may see varying amounts of it. But most importantly an Iceberg and a Swan have very different maneuverability characteristics.

Some projects are Swans and some are Icebergs. Neither is implicitly better, but if you mix the 2 up; you’re going to be in big trouble.


SilverLight 2.0, Parallel FX and ASP.NET MVC

November 30, 2007

Blizzard of great new stuff for today, summarized nicely by ScottGu.

The new Parallel FX stuff is really quite cool. It’s a cliche to say that the number of CPUs in a typical machine is increasing while each individual CPU is not actually faster. But it’s great to see Joe Duffy release Parallel FX and PLINQ to to actually address the challenge.

All very cool can’t wait till next week for ASP.NET MVC.


Web 2.0 is Identity 1.0

November 29, 2007

Identity has been something that, as a society, we’ve been trying to get right for a long time. And it’s a difficult problem to crack, as the rise of identity theft goes to show. I’m not interested in a nitty gritty discussion of authorization models, although in light of the government’s recent blunder, one would certainly be prescient. Nor am I interested in the layers of ‘user’ that exist in modern computer system. I’m interested in my identity on-line.

greatwar1.jpg

Until recently, your email was most likely the proxy for your on-line identity but; with the sigmoidal growth of Facebook; for many people that is changing. Facebook is now the defacto standard identity for students. Google & pals are hot on their heels, but why?

The huge amount of demographic information in Facebook is like crack to advertisers and since Google is the world’s largest advertising company their interest is guaranteed. But the real reason is: Facebook have a better data model. Google’s complimentary services have ‘Chinese walls’ that block interaction. EBay have 21 different logins across their empire. These partitions are artificial but were once necessary to instill trust.

But now people trust the web with their personal information. In fact they don’t even care if their information is shared with gusto. This trust, in some cases, may be misplaced; but as more people do it, more mainstream companies move in; making the web a safer place (Dell won’t steal you identity, for example).

Unified identity is critical to the future of the web. And it’s interesting that something that was previously provided by governments is now a commercial entity.


3 types of programmers

November 26, 2007

Jeff Atwood has a pretty formulaic piece on there being 2 types of programmers. 20% Gurus and 80% Morons is effectively his argument and it’s a pretty slack one. There are lots ways to slice and dice the development community into different groups but at the sweeping generalization level (where Jeff casts his net) there are definitely 3. I’ll call the third group that Jeff missed; Executive Programmers (EPs for short)

EPs make up a small minority, their ranks include people like Facebook founder Mark Zuckerberg, Bill Gates and Steve Jobs. Not all are entrepreneurs but all are business people or leaders. Steve Jobs is a great example because his business partner Steve Wozinak is one of the worlds top Gurus (one of Jeffs 20%ers).

But without Jobs; Wozinak would have been nothing. His incredible gift for being a technologist would never have been expressed in a world-changing way. That’s not to say Jobs could have done it on his own. Nor did Zuckerberg write every line of facebook. Nor did Gates write Windows 3.11 but each is perfect example of an Executive Programmer.

To paraphrase Bruce Lee: “To the Executive Programmer, a program is just a program.” EPs understand how their systems fit into the economic and social context of the day. They get the actual value of technology. And some of them change the world.

So if you think you’re a Guru and you’re a little bored of all the same old ideas orbiting about; why not take the next step and make your own a reality.