Question: What are the things I should be looking for when I produce a dependency graph?

Or to put it another way, what are the characteristics of a good looking graph vs a bad one?

Edit: The context here is my first look at my assemblies in NDepend.

Answer: 
The biggest problem you can spot is definitely Dependencies Cycles. The tool NDepend proposes an interactive [dependency Matrix](http://www.ndepend.com/Doc_Matrix.aspx) and a [dependency Graph](http://www.ndepend.com/Doc_VS_Arch.aspx) that will help to spot [dependency cyles](http://www.ndepend.com/Doc_VS_Arch.aspx#Cycle). *Disclaimer: I am one of the developers of the tool*

![enter image description here](https://i.stack.imgur.com/GJXhP.png)

Notice that the dependency matrix is much more adapted than graph to spot cycles. Because a cycle avoid the matrix to be triangular.

The other ranges of problems are relative to your application structure: For example, is it normal that the UI uses directly the DB? or much worse, the DB depends on UI?

You can write [code rules over LINQ queries (CQLinq)](http://www.ndepend.com/Features.aspx#CQL) to check for forbidden dependencies. The following code rule check that UI types shouldn't use directly DB types:

```
// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0

// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()

// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
              // Ideally even DataSet and associated, usage should be forbidden from UI layer: 
              // http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
              .Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))

from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }

```
a dependency graph of what? classes? stored procedures?

cycles are bad...