Software erosion and package tangles

Posted by & filed under Complexity, Emergent Design.

My recent post on architectural erosion in the findbugs code-base was generally well received, but there were some skeptical voices. In a comment, Emeric questioned whether cyclic dependencies at the package level are anything more than a smell (if that). Itay Maman was a little more forthright, offering a little series of posts arguing that… Read more »

Software erosion in pictures – Findbugs

Posted by & filed under Complexity, Emergent Design.

My particular area of interest in software these days is the importance of levels of abstraction above the raw code. In Java, the most natural place for these to manifest themselves is through the package structure (though this is certainly not the only possibility). Recently I used Structure101 to do some analysis on the evolution… Read more »

Package design matters – Part 1

Posted by & filed under Architecture, Complexity, Dependency Management, Emergent Design.

Java packages are often used like file-system folders to organize source. But source files differ from “normal” files in that they are highly inter-dependent. Considering this interdependence as a package hierarchy evolves can have significant productivity benefits. Packages as Folders Java packages provide an ideal way to organize code into a scalable, hierarchical structure that… Read more »

Complexity Debt – don’t “fix it”, “keep a lid on it”

Posted by & filed under Complexity, Emergent Design, Structure, Structure101.

So you just discovered that your code-base has racked up a whole load of complexity debt. This  maybe explains why progress seems so painfully slow lately. You briefly think of suggesting a major complexity-reducing refactoring effort. This will delay the next release significantly, but foreshorten the time to the following releases. Plus a cleaner, simpler… Read more »

Tracking complexity debt

Posted by & filed under Architecture, Complexity, Dependency Management, Emergent Design, Structure, Structure101.

Un-monitored, the complexity of a code-base increases with its size. Jboss and Struts are perfect examples. However monitoring complexity helps you keep complexity debt under control, or even down to zero. If you publish the last couple of years worth of releases of your project to a Structure101 repository, you’ll probably see something like this… Read more »

Manage complexity like debt

Posted by & filed under Complexity, Structure, Structure101.

Ben Hosking writes in Managing Complexity – The aim of Designing Code that: “The most important part of design is managing complexity“ I like the simplicity of that. What happens if you don’t manage complexity. Well, it starts to cost. Talking at OOPSLA 2004, Ward Cunningham (Mr. Wiki) compared complexity with debt: “Manage complexity like… Read more »