16.02 – Gekko Engine

Thanks to our new Gekko Engine – iCFM is about to get a whole lot faster!

In iCFM we monitor and report on all sorts of utilisation and financial data. There are many types of service to keep track of within the application, from Scheduled Resources and Purchase Orders to Delivery Notes, Food and Taxis. We need to keep track of it all, and we need to be able to report on it quickly. Sometimes this can be millions of rows of information and it changes by the second.

This reporting feature is called “Gekko” – named after the fictional trader, “Gordon Gekko” from the ‘Wall Street’ movies.

The way we have kept track of all this reporting information up until now, was that any time a user changed something in iCFM, we processed that change and updated all related values in the “Gekko” table in real-time.

The Gekko table records things such as:

  • Project Number
  • Producer / Client / Product
  • Service Code (ratecard)
  • Date
  • Booked / Actual / Billed Quantity
  • Booked Revenue / Cost
  • Actual Revenue / Cost
  • Billed Revenue / Cost

Having all this information in one table makes reporting much easier – but keeping it in sync takes some serious CPU. It often means the user experience is slowed down while waiting for background reporting data to rebuild. Something as simple as saving a Job, adding a Food cost or applying Actuals would always need to check what effects any changes would have on the entire Project.

Since revenue is usually fixed for a whole Project, no matter how many Jobs are booked – we would also need to recalculate how much revenue is allocated to every aspect of that Project – every time any change is made to anything, ever.

While we have never had any complaints about this part of the software being slow – it is the actually number one reason that anything in iCFM takes any time at all.

In this latest update we have moved all of the Gekko calculation code out to another program known as the Gekko Engine – which is always running behind the scenes. We have massively improved the efficiency of how this data is updated, and the number of read/writes to the database has been drastically reduced because of it.

This means that the user no longer has to wait for Gekko calculations to complete before they are returned to a usable system. Saving a Job now simply saves the Job and tells the Gekko Engine to rebuild the reporting data as soon as it can.

The result is fewer hourglasses, and a much faster user experience.