Week of PostSharp, Day 5 – Maintaining legacy apps

by Gael Fraiteur on 23 Aug 2013

The 'Week of PostSharp' is a joint promotion with Manning Publications where we highlight a new book each day that is special to us and hand-picked by the PostSharp team – with a small introduction about how it connects to what we are doing. We also collaborated with Manning to select a second book for each day of the week, and will be offering our choices at a 50% discount on their site! You can even read excerpts from some of the books online for free by clicking on the links below.

We hope you enjoy the deals! We’ll be adding new posts with the daily discount code throughout the week, so stay tuned.

In a previous engagement before working on PostSharp full time, I inherited a legacy app and was asked to clean it. Apparently, developers that worked on the app before me were afraid of the delete key: at least half of the source code was commented. The code was extraordinarily flat, as if subroutines were a rare commodity. While cleaning the code, I found a method named AppendToList, but the method actually prepended elements at the beginning of the list. I changed the implementation so that it fitted the name, and after a few days of hard cleaning work, the application was compiling again (C for Solaris 7) and all manual tests seemed to work again. It was not before the service got released to production that we figured out that inversing the order of inspection broke the notorious “Brian’s trigger”, several hundred lines of Oracle SQL implementing “workarounds” on the top of the longtime-obsolete order provisioning system, which was not even deployed in our development environment. As a result, we failed to activate services to dozen of customers. This was my most brutal experience with legacy applications.

Aspect-oriented programming excels at dealing with legacy apps. The proof: there is an AOP extension to COBOL. Trust me, it was not the work of some geeks, but of a large company who solves big problems with big money, Hitachi. The reason is easy: AOP allows developers to add features and behaviors to an application without actually modifying this application.

At PostSharp, we’ve always been reluctant to position our product as a “patching” technology. You can fix some bugs in someone else’s product with PostSharp, but we didn’t optimize the product for this use case. However, PostSharp does make it easy to add new features to old apps: for instance caching, logging, or performance monitoring.

For those who got the challenging but unrewarding job of maintaining an old app, we recommend Brownfield Application Development in .NET from Donald Belcham, a PostSharp MVP. The second book promoted today, Continuous Integration, will help you define your development processes so that applications are easier to maintain… and don’t fall so quickly into legacy.

You can now purchase both books with a 50% discount - but hurry, the offering is valid until August 24th, 12 midnight EST:

Brownfield Application Development in .NET starts by laying out the unique characteristics of brownfield apps—both negative and positive. It then systematically explores how you can employ well-established techniques like continuous integration, version control, and automated testing, even if they weren't part of the original dev process. You'll learn techniques to identify logical layers and tease apart dependencies to effectively separate concerns for improved flexibility. This practical book will help you improve not only your application's maintainability, but also the team's confidence in the project.

Download Free Chapter (PDF)   |   Purchase with 50% discount using the following code: pswkd5


Continuous Integration in .NET shows you how to reimagine your development strategies by creating a consistent continuous integration process. You'll use Visual Studio along with tools like Subversion, MSBuild, TFS, TeamCity, NUnit, and Selenium. And because CI is as much about the culture of your shop as the tooling, this book provides clear guidelines for starting and maintaining projects, along with metrics for measuring project success.

Download Free Chapter (PDF)   |   Purchase with 50% discount using the following code: pswkd5