Sponsored By Aspose - File Format APIs for .NET

Aspose are the market leader of .NET APIs for file business formats – natively work with DOCX, XLSX, PPT, PDF, MSG, MPP, images formats and many more!

Listen to your users


While listening the users to improve the usability of your product seems to be a
controversial issue,
I am leaning toward the Listen to user
camp. My opinion is biased by the fact that I have the exceptional chance
to share the same job and same concerns with users of the product I am
responsible for. As all of us in the NDepend
team, our users are developers and architects with a solid interest in software quality
and maintainability.


I recently got a nice
occurrence of the Listen to your users
tenet. It is about the Structural Dependency Matrix, one of the most polished
feature of NDepend. It has been released 2 years ago and since then, we are continuously
improving it. We believe that the matrix is a unique tool to detect code
structural flaws, to understand and explore the real architecture of a code base and to forecast the cost and feasibility
of large refactoring. The matrix works hand-in-hand with the graph view, the
CQL language
and most other features of NDepend. It comes with dozens of options categorized
with the Make the simple things simple
and hard things possible

idea in mind. It has been profiled to the point where every action execute in
real time, even on hundreds of thousand’ cells matrix representing inter-dependencies
of millions of lines of code. We dog-food
it daily to improve the structure of the NDepend code itself. Despite all this work and
expertise, a user came to us recently with a very useful option that we never thought about! The ice on the cake
is that everything was here to let us implement and test it readily.


The idea consists in letting
the user remove empty rows/columns. It is especially useful when the dependency
matrix is sparse. Here is a matrix representing the coupling between the 113 types
of the namespace System.Drawing and
the 205 methods of the class System.String.
This matrix is sparse and not very handy to browse the who uses who in this coupling.




Here is the same coupling
where empty rows and columns have been removed. The sparse (113×205) matrix
became a dense (27×29) matrix. It is now much easier to gather useful
information about the System.Drawing
to System.String.





I believe that such a dense matrix represents the optimal way to browse complex coupling. The following coupling graph that shows the exact same information is partially unreadable:




The questions are why we
didn’t think of this feature before and why no user asked for it so far? The
answer is that actually this feature already existed more or less, through the possibility
of opening a dependency within the matrix by keeping only involved code elements. Here is an illustration of
this possibility:



It seems that everyone got used
to this keep only involved code element
feature that hided the need for removing empty rows or columns in a bit more complex scenario. Hopefully a fresher user
view opened our eyes on the usefulness of this feature.


Concerning the Listen to users tenets, its veracity certainly
depends on your users qualification. In the past, I have been team leader for a
software PC station that tracked expensive remote assets such as luxury cars and loaded trucks. Users
of the program were security guards that knew more about guns than
about computers. Obviously, at that time I didn’t think that it was a
good idea to listen to users to improve the usability of the PC station. But observing them using it was certainly a good idea.



This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.