Feng-shui is not a driving force in the development of software tools (though perhaps it has influenced Apple's product designers.). Feature-packed is more like it. But discovering the gazillion features, whether it is in Visual Studio, Microsoft Office or Quicken , can be a life-long quest. The .NET Framework has thousands of classes and each of these classes have numerous methods, properties and events. How do you find what you need in all of this?
I was excited about a new property, that I literally discovered thanks to Intellisense for HTML in ASP.NET 2.0 - OnClientClick, which allows you to tie client side events to a server control along with it's server side events. Little did I realize that it was possible with the Attributes property of web server controls. From Tim Stall's November 2002 (!) article on Adding Client-Side Message Boxes in your ASP.NET Web Pages, I see this example of achieving the same functionality:
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If (Not Page.IsPostBack) Then
Me.BtnDelete.Attributes.Add("onclick", _
"return confirm('Are you sure you want to delete?');")
End If
End Sub
|
But even though I am familiar with attributes, I never thought to look for an attribute to achieve this and never happened to come across that feature.
OnClientClick found me and when I saw it I was definitely curious enough to see what it was.

Discoverability, or lack thereof, has been the bain of Microsoft Office for years and years. The program has had so many features added to it over the years, though most users probably only needed 10% of them and only aware of 20% of them. (These are my own wild, but educated guesses.)
The UI of Microsoft Office 2007 has been totally rethought with the goal of better usability and discoverability. They have found an effective, yet not totally overwhelming, way to surface a lot of the features with the Ribbon Toolbar. Of course, my first response to seeing the ribbon was “ooh, that will be really easy to use with a stylus on a tablet pc!”).
Even a simple programming task like opening a text file was so unintuitive, that it was a big problem for many developers. Especially when they had to wrap their heads around file streaming just to accomplish that. A tiny little feature like the addition of File.ReadAll (and it's related methods) into .NET 2.0, though small, is very impactful and highly discoverable.
I have written more than one post on this blog about some discovery I have made in .NET and more often than not, someone has come along and laughed at my discovery, pointing out a long-known method (or heck, lots of other ways), to do the same thing. All I can do is laugh at the impossibility of not knowing everything there is to know and of course say “thanks!“.