What I’ve been up to for over 3.5 years

I’m sitting at the Miami International airport waiting for my flight back to London and looking at the past 3.5 years. I had a chance to work on a fantastic project that finally went live, 100% live. 3.5 years ago I joined Monochrome as a contractor to work on a project for a company trading aircraft parts. When starting, late 2007, no one was expecting it will take so much time to complete. So what is this monster?

In short: a CRM, sales support, warehouse management and stock control system. In detail: a system to manage customers, suppliers, create purchase and sales orders, invoices and full stock control system, basically to run the whole company, 2 branches actually. It is built mainly with Adobe ColdFusion 9, Adobe Flex 3 and Microsoft SQL Server 2008 R2. Almost 60,000 lines of ColdFusion code and 25,000 lines of MXML+AS3. This application is used on a daily basis by about 70 people in 2 different locations. The data between these two locations is exchanged in near real-time manner, US and UK offices get better overview of the business.

When we started at Monochrome we had to deal with a totally different creature than what it is now. This new application (called ICS) was about to replace one mans job, a green screen system written in COBOL for over 20 years. The old technology imposed quite a few limitations – the client really wanted to keep developing new user interface on top of existing database (yes, I know…) This was achieved with Liant Relativity Data Server, it takes flat COBOL data files and exposes them via ODBC (Liant was bought by Microfocus who recently introduced COBOL for .NET4). As we kept developing we never really experienced any problems with performance. But ICS had to go to live user testing at some point. That’s where the problems started. We experienced serious performance issues and a lot of server crashes. It turned out that the reason was the database driver, it was slow and couldn’t handle joins so we ended up running lots of small queries that in ideal world could be replaced with a view or something. It took as over 2 years get to the stage when we were feature complete but with massive performance issues. Phase one was complete anyway, the client was happy, he he expected this sort of problems. Mind you, the company itself evolved a lot to suit to the new processes we were developing and implementing – this partially is the reason why the initial phase took so long.

This is where the things changed slightly (from now on “we” means me and the client only). Second phase, moving away from the legacy database and putting final touches would happend on site. There was quite a few reasons for this decision but this blog is not the right place to get into the details. I was offered a contract, things got really interesting.

First, we had to decide what the final hardware setup is going to be like. We had 2 old Dell 2950 32 bit servers already – we needed more. So we have got a couple of Dell R410 64 bit, 8TB storage, 24GB RAM machines – these are now serving as primary servers while 2950s are used as backups. Each location has its own set of servers. For virtualisation we use VMWare ESXi 4 on 64-bit machines and ESXi 3.5 on 32-bit machines. Each server is running 2 Windows instances, one for the web server, one for the database (Windows 2008 R2 on ESXi 4 and Windows 2008, R2 is 64 bit only, on ESXI 3.5). So 8 Windows instances in total. Each setup is exactly the same (apart from the amount of memory assigned to the VMs). Primary servers have 10GB RAM assigned for SQL Server 2008 R2 and 3GB for ColdFusion 9. US database serves as a backup for UK and UK database serves as a backup for US – we are using SQL Server log shipping without a mirror server instances. On top of that we have an offsite backup for full and transaction log database backups.

Software architecture of the core application is pretty straightforward, no real magic there. Flex application created with Flex 3 and Cairngorm 2 talking to ColdFusion 9 using remote objects. Oh, and we have an AIR wrapper for the application so we can use it inside the browser and on the desktop). But I mentioned before: “It is built mainly with Adobe ColdFusion 9, Adobe Flex 3″. We also use Java, C#, Ruby and node.js. Quick rundown:

  • Java: we use Jasper Reports for forms printing – stuff like order acknowledgements, invoices
    seriously, never thought that reporting software can be used this way, Jasper Reporting with iReport is a fantastic product I would happily pay the money for (if I was the project owner and I was paying the bills…)
    Jasper generates PDFs for us, these get printed using Qoppa jPDFPrintCLI product. I have to say – if you ever have to print PDF files I can recommend Qoppa for fantastic support.
  • C#: we have a scanning process integrated into the workflow, you see, when aircraft parts are coming in they often come with printed certificates. These certificates have to be scanned and stored forever. We are using Twain.NET desktop application (sitting in the tray) talking to the Flex app via sockets
  • node.js: our system required a realtime messaging and object locking mechanism. We have initially used Red5 for this but once we learned about node.js there was no point keeping Red5 running. Our realtime messaging server was running just fine for last 12 weeks last time when I checked. And it has only 200 lines of code.
  • Ruby: we use it for a lot of maintenance tasks

Of course every project of such a big scale needs source control. At the beginning of the development SVN was the choice but with time we moved to Git, many reasons behind this decision – but Git feels much better ;) We have an automated build server running Ubuntu with Apache Ant connecting to Github and building the application on demand.

And in the end there is an HTML application for mobile devices. It gives access to the most important details of customers, parts, batches, suppliers and so on.

This was an interesting journey. In some spare time I’ll try to describe most interesting parts in more details.

We are boarding, see you on the other side…

2 Responses to “What I’ve been up to for over 3.5 years”

  1. kgallaha Says:

    Hi there, welcome back to the world, interesting post. So now that you’ve ‘finished’ with this massive project, here are some questions for you:

    1. what are your thoughts on working another project using the same platforms? Specifically Flex & ColdFusion vs. HTML/CSS/JavaScript and JAVA/Python/PHP.

    2. What about Cairngorm 2? Have you worked with any ‘modern’ frameworks yet?

    3. What tools did you use over the history of the project for development & testing? Plug-ins?

    If you stick with Flex I would highly recommend using Flex 4, dropping Cairngorm 2, and picking up Parsley as a framework. Mate also looks good, Swiz, Spring ActionScript and Robotlegs are also available.

  2. radekg Says:

    These are all good questions. I’ll try answering in a separate article sometime over the weekend.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>