When I took my current job, I was assigned a specific project that supported the College’s distribution of Scholarship money to students.  This application had many errors and needed additional functionality.  Primarily, it needed to:

  1. handle students with more than one major
  2. reliably match students to Scholarship criteria
  3. allow the selection committee to give awards within in the application

This was a pretty tall order because the application was fairly large.  The bulk of functionality was within a single App model with functions that made SQL queries to the database.

In order to handle multiple majors, I would need to alter the database quite a bit.  Next, I’d have to alter several functions that were determining major and departments.  GPA and class would be affected because they can vary per major.  This wasn’t terrible, but it was a significant change to the system.  The application was new to me, the functionality was untested, and it was almost untestable in its current state.

Each of these changes magnified the complexity in matching a student to Scholarship criteria and determining eligibility.  There were other complications in that a Scholarship had multiple sets of criteria, called instances.  Although these were shown, the tables that should show qualified candidates for each set of criteria were broken and only showed all students in the final table, with functions to sort and score them.

No selections could be made from this page.  The Selection Committee would choose a matching student and make a spreadsheet with the scholarship account, the amount of the award, and the student’s id number in order to let Financial Aid know about the scholarship.

In addition to being unable to test this existing application, we had a problem with changing the application.  All development was in production.  There were no test, development, or staging environments.  Someone was almost always using the application.  And we had a narrow window at the beginning of the Fall semester during which to make these changes without interrupting a Student’s ability to fill out an application for the coming academic year.

This was madness!  We needed infrastructure to support our ability to make changes anywhere but production, and we needed to ensure we hadn’t broken other parts of the application.