Recently I found a tool that will parse a .Net assembly(s) and return back an object graph of the underlying structure: Assemblies, Namespaces, Types, Members...all the way down to the IL opcodes in each method.

This opens a lot of doors to writing tools that can look at the overall architecture of your application, across many assemblies.  One tool I wrote creates a MD5 hash of the contents of each method, based on the IL opcodes and the values they are operating on.  From this I can then figure out which functions are exact duplicates of other functions in your code (Steven Mcconnell once said that copy/pasted code is a design flaw).

So I ran the tool on one of my applications and came up with a lot of duplicate functions.  But after looking at them I realized almost all were one line property getters, that were returning a private field.  The other culprit was default constructors that get generated for you by the compiler if you don't have one, or if you have an empty one.  Once I weeded these culprits out of the analysis, I came up with very few duplicated functions.

Then, just for fun, I sicked my tool on Microsoft's System.dll to see how original their programmers were.  Turned out i found 88 duplicate functions.  That means there were 176 functions that shared code with another function.