by Mark Warren
I recently came across an interesting Perforce-related blog posting by Bruce Dawson ("Source Indexing Is Underused Awesomeness"). In his article he describes how indexing source code can be an extremely powerful debugging aid, especially when you're debugging builds made on some remote machine, however it's rarely used. Source indexing is one of the gazillions of features added to Visual Studio over its long history yet rarely understood or used by most programmers. His article details a nice solution to enable source indexing for source code held in the Perforce depot.
I think it would be unfair to call a relatively rarely used feature like this "bloatware" but I'm sure we can all think of software tools where a large proportion (the majority even?) of functions are hardly ever used. Joel Spolsky argues that it follows the common 80/20 rule - 80% of the users use only 20% of the functionality. Critically, though, it's not the same 20% of functions for all 80% of users. His article is somewhat "mature" now (incredibly it's 10 years since it was written!) but the economic arguments are much the same - hardware costs have continued to decline rapidly (good old Moore's Law) so the cost of adding more features gets less and less.
So, the trick is really how to make those hidden nuggets more discoverable and usable to a wider group of potential users. This isn't an easy task. Microsoft have tried with their "Ribbon" control that started in Office and has gradually creeped into more and more of their products (interestingly this might also be a good example of how not to solve the problem - because the Ribbon implementation has been hit & miss across the Microsoft tools & platforms, they've frequently been derided for lack of consistency and therefore poor usability).
Interestingly, when we first started trying out the new Perforce "Idea Incubator," P4IdeaX.com, the vast majority of the early requests were for stripped down versions of P4V (the Perforce cross-platform GUI). The suggestions also included a request to allow users to build their own sets of functionality to suit the way they work. Perhaps that's the best solution - let everyone tailor their own environment. Of course, then you have to make it easy to discover how to build & customize the client so the challenge hasn't been completely eliminated!
What would you describe as the "underused awesomeness" in Perforce? Is there a feature you depend on that perhaps might not be widely known? If so, add it to the comments on this article to share with the community or share it on the Perforce Forums. Do you have suggestions for the next piece of "awesomeness" for Perforce? Let us know over at P4IdeaX.com.