USPSOIG.gov Savings Impact Model (SIM)

Posted: July 27, 2014 14:36:01 • 367 words
  • URL: uspsoig.gov/sim/run-sim
  • Started: February 2014
  • Deployed: April 2014
  • Role: Full-stack developer
  • Tech: Drupal 7.x, PHP, CSS, jQuery

Screenshots

USPSOIG.gov SIM - Initial
USPSOIG.gov SIM - Report Selected

This was an interesting side project; the USPS OIG website had an old feature called the "Savings Impact Model" (aka SIM), but it was never finished by the developer who worked on it. It seemed to be mostly forgotten for a while, but in early 2014, I was asked to finish it and get it working correctly. Since the requirements had changed significantly, this turned into a full rebuild, but I finished it within just a couple of months.

The overall concept was relatively simple: Build something that visitors can interact with, predicting the budgetary impact of the USPS OIG's audit report recommendations, if those recommendations are implemented as-written by the US Postal Service. This idea didn't really have much of a form, so I visualized it like a long-form addition/subtraction problem, like in elementary school; USPS budget on top, cost savings/avoidance underneath, and sum of those values on the last line. Then, below that, a list of the audit reports that could be clicked to include them in the equation.

Despite my usual preference for server-side coding, and my avoidance of relying solely on client-side code for anything, I chose to do this almost entirely in JavaScript, with the help of jQuery. Mainly for simplicity and security; Drupal doesn't make anything easy, and the initial timetable was very short, so with a JS-only design, the page could effectively be static, as far as Drupal itself was concerned. That made the whole project much less complex, and eliminated the possibility of introducing new attack vectors. I did do a significant amount of custom PHP work in the template file, to parse the necessary data to create links to the reports, and to gather the report title, cost savings, release date, and report summary, but the rest is JS.