Last night Rainer Habermann and I led an “iPimp your Architecture”. We had a special treat for the attendees… see end of article.


The first subject of discussion was the name. Alternate names for this type of session were “Trick my Architecture”, “Architect Garage” and “Fix my Architecture”. So.. before the next time we do this we will consider the name again.


First up was Ray Almonte who described a 4.5 million line, mostly c++ client / server cad app that helps design buildings that use his companies roof truss systems. He and his team have considered many things and came to the meeting looking to get a silver bullet.

Due to a lot of “global variables” the current program is almost impossible to parallelize which would dramatically speed up the processing. Currently an engineer will press the button to “design” a building and leave to go get coffee and take a break.

Although it would give his company a competitive advantage, management has not seen fit to spend what Ray has estimated to them to be ~ $500k to do the work.

He has already thought about this a lot and thinks the approach is to one by one encapsulate each of the design objects (walls, panels, trusses, etc) that are currently global variables into objects. This requires wrapping the global and then going through all the 4.5 million lines of codes changing references and method signatures to match.

One new idea from Jeff Barnes out of the discussion was to write a program to automate this renaming / refactoring of the code so that you wrap a global and then run this program on the code base to make the changes. There still may be some hand tweaking but it should be able to automatically change almost everything. Ray thought this was a great idea and will go back and investigate this approach. We are looking for a follow-up report next month!

Here are the notes I took (ok my 3rd grade teacher asked me many years later if I ever learned to write):



Thanks to Ray for transcribing the notes: Email:

1) 4,500,000 LOC ( Mostly Legacy app after merge of acquired code) 400 customers, 5k seats.

2) Originally Fortran, ported to C, then C++.

3) Lots of Globals

4) Want to process more than 1 object at a time ( Automate a repeatable pattern)

5) Typical Globals

- Piece List

- Plate List

- Different front & back end globals of same information

6) Processes on a Wall Panel

- Pricing

- Drawing

- Cutting info

- Drive MFG Equipment, ...

6) Mostly runs on 2 screens

7) Truss Design

- If not waiting for loads from other components, design

8) Urgent now, low perceived business value

- Encapsulate, abstract up

- Start over

9) Estimate ~ $500,000

10) Maybe some simplification

11) Comes down to business case

Next up was Jose who talked about software he was working on for an insurance agency commission tracking application. A few approaches were suggested including a database centric design and a more object oriented way. I did not take a picture of the notes!

Finally Rainer and I presented the basics of an app we have worked with for many years and which I originally wrote almost 12 years ago. It is a vb6 app for a call center with Nortel Meridian phone switch, multiple call center sites, sql server back end and many modifications over the years. It does not get modified very much these days but is very stable. It does have problems including not running on Vista (app ok but some of the 3rd party components it uses do not), large footprint, and the fact that the telecom world has changed and a new approach is required. Rainer has implemented one part, a new order system in .net that is appended to and takes the place of the built in order features.

Again Jeff Barnes pointed out a two part article in MSDN Magazine Jan/Feb of 2009 that shows a call center app written in Silverlight!! See:

A diagram of the vb6 system is shown below but for simplicity leaves out many details:



SPECIAL TREAT – Microsoft Surface

If you don’t know what Microsoft Surface is, check out:

At the meeting last night it just happened that Myrna Pinto and Phil West were in town with a surface unit to show some government customers. So I started directing meeting attendees into that room so they could get a look first hand. It was the first time I had ever actually put my hands on and tried a surface unit as well.