Understanding the shape of Java software | Synapse