I started this project in January 2015 with an Android app. It was hastily thrown together for personal use, but I saw that it could be useful for other students. After 2 weeks cleaning up and bug hunting, Rutgers Course Tracker (RCT) became the first application I ever launched.
Users had the ability to "track" a section. Sections, at least at Rutgers, are identifiable a 5 digit number used for registration. RCT stored this number in a local sqlite database for as long as the user is tracking it.
RCT would wake at a configurable period to scrape Rutgers University servers for course information relating to that index number. If RCT detects that the tracked section is open for registration, it would issue a notification to the user.
It places an unnecessary load on Rutgers servers. Any university network should be able to handle, by my estimates, an additional 1500 requests per minute. But even so, Rutgers University's servers are not known for their stability and I hated the idea that my app was exacerbating their problems in any way.
Further, RCT woke periodically at a minimum of 15 minutes to make several network requests. Given that this is a mobile application, waking the CPU and radios every 15 minutes is superfluous and wasteful. Though none of my users complained about the battery useage, my own tests found a noticeable impact that I just could not live with.
Students at New Jersey Institute of Technology (NJIT), a university near to Rutgers University's Newark campus, expressed a need for an app similar to RCT. The structure of their course information was similar enough to Rutgers that that user interface wouldn't need much change. The complication in adapting the app exists is in that much of a business logic behind the UI was tied to Rutgers. The architecture was not general enough to take on this new problem.
This final problem was the most difficult and the most interesting of the bunch. It was clear that solution was to move all of business logic and heavy lifting to a server separate from app. At the time, I lacked the experience and skill to execute something of that scale. I had never written any server side software or worked seriously with any DBMS.
In November 2015 I took a database class at NJIT and choose to write NJIT Course Tracker as my term project. I wrote a server side program would scrape NJIT course information and dump it into a database. The client app would then query an API I wrote for information about courses at NJIT. It was very much a learning experience and a precursor to the architecture I have today.