In the beginning...
When I started my position at Chicago Jesuit Academy, their data was a mess - messy, siloed spreadsheets spread across an under-organized network drive. The school also had an overcomplicated student information system (SIS) that was a poor fit for the organization, and that no one on staff had the time or expertise to use well.
Simple tasks - such as "How many students did we have enrolled on this date?" or "What was the eighth grade class's average improvement in their most recent standardized math test?" - would take hours to complete and frequently required going through paper files.
The first step...
The very first thing I did after taking the job was to recompile and clean their data. I used the source CSVs if possible, and volunteers doing data entry of paper files if not. The clean and complete data was then entered into existing SIS. Finally, I trained the heavy data users on using the new system.
Meanwhile, the SIS remained a bottleneck for faculty, and so I built a series of helper apps that took information from the SIS and made it much easier to access. Simply taking the existing data and displaying it in a user-friendly manner was a revelation for our teachers.
Apps begins to grow
Now that I had a reliable source of data - student rosters at first, but soon grades and test scores - I started to add on more features that didn't simply improve on the UI of the existing SIS but that added new functionality.
For instance, the school nurse was spending an entire Saturday each month compiling meal documentation for National School Lunch Program compliance. I built a simple app that would let her enter everything on an iPad, and reduced that compliance time from eight hours a month to five minutes.
Our principal started referring to the system as "Apps" and the name stuck.
Striking Out on our Own...
In 2016, our contract with our SIS came up for renewal. Teachers and leadership were unsatisfied with our existing SIS and all of the others on the market. So I was asked, "Why don't you just build one for us? You're halfway there..." I agreed, but on the condition that we find a third-party Learning Management System (LMS) to serve as the frontend for students and to serve as our gradebook.
We selected the Canvas LMS, and I was given one summer to
- Pull all of our data out of our existing SIS
- Build a database system to store it, and a front-end for teachers to use to access it
- Build an integration with Canvas to sync rosters and grades
- Teach the whole school how to use the new LMS and the new SIS
At this point I was running the IT department solo, but I pulled it off, and the school year began with very few hiccups. Teachers loved Canvas, it synced with the main database painlessly, and the flexibility offered by having a home-grown SIS has been incredibly valuable.
A Brave New World
CJA has been running on my SIS now for seven years. Teachers are constantly requesting new features, and most of the time I'm able to deliver. Often it's just a matter of plumbing - connecting the right libraries and APIs, writing a quick UI, plugging it into the database, and turning it on.
Auto-Translated Report Cards
For example, our SIS now communicates with Google's Translate API to automatically translate report cards into Spanish for Spanish-speaking families.
Missing Assignments Mailer
One of our Deans was spending four to eight hours a week manually compiling the number of missed assignments each of his students had, and then emailing parents about them one-by-one. This feature pulls the missing assignments automatically from Canvas, allows the teacher to compose mail merge email home, and then delivers the mail via MailerSend's API.
Parent-Teacher Conferences
Our Director of Parent Partnership was scheduling parent-teacher conferences manually, on paper, by calling up parents one-by-one. After a failed experiment to give each parent write-access to a Google Sheet with the conference times, I quickly put together a conference scheduling system. Similar to the Missing Assignments Mailer, it allows teachers to mass email parents - only instead of a list of missing assignments, they can include a unique link that lets each parent schedule their own conference slot, and change it if needed, all without calling the school.
There are a lot of off-the-shelf solutions to this, of course, but we wanted something that didn't require parents to log in and that would easily interface with our existing contact number database. There's a perpetual balancing act between building and buying; in my experience, however, if the cost (in hours and complexity) of building a tool in-house isn't significantly greater than the cost of integration with a third-party tool, the flexibility of the built tool outweighs the benefits of the bought tool, especially if you are still iterating and your future needs are uncertain.
Asset Tracking
When I started at CJA, we had a single fleet of 30 Windows PCs for student use. Soon after, I introduced iPads and Chromebooks using a cart model, and then during COVID we switched to one-to-one. A robust asset tracking system was required to keep track of device locations and to keep students (and teachers) accountable for how they treated their devices. The asset tracking system talks to Google to pull login information for Chromebooks, including date and time, the logged-in user, and the user's IP address. This has been a game changer in terms of tracking down missing devices. It integrates with our database as well, showing current device assignments to teachers on the student's info page.
Data Sharing
The second time I'm asked for a particular piece of data, I try to put together a way for people to get that data on their own. Often it's a dashboard within Apps itself, but occasionally users want to embed that data in a larger document. In order to accommodate those needs, I've built a small, very simple API that lets employees pull data directly from the database and insert it into a Google Sheet. From there, it can be embedded in a Google Doc - say, a weekly meeting agenda, or fast facts cheatsheet.
Schedules
Early on, I became a resource to other departments for hard problems - even when those problems don't have a necessarily technological solution. My first full school year, CJA moved to a ten-day rotating schedule, where each day would be different. When our principal couldn't manage the complexity on pen and paper, he passed the assignment off to me. With six grades and multiple teachers who taught across grade levels, it was like a four-dimensional sudoku puzzle - but one I relished, as it let me use the schedule as a force multiplier. I was able to get experienced teachers more time with students in situations that benefited their strengths, plus each teacher had a morning or afternoon each ten-day cycle without any responsibilities, so they could make doctors appointments, etc. without requiring a sub.
Of course, creating the schedule was only half the challenge; communicating it and keeping it up to date was a pain point for the first few years. When we moved away from our old SIS and moved to Apps, I included scheduling as a feature. It would let front desk staff know where any student was at any particular point in time for early pickups, print PDFs for students to put in their binders, and even allow our Head of School to view unoccupied faculty for any block so they could be tasked as substitutes (and mark them as such, so if another teacher called in on the same day, a sub wouldn't be double-booked).
Quick Apps
When CJA transitioned from our old SIS to Apps, the number of calls logged home went up by 200% - not because teachers were calling home more, but because Apps made it easier to log that they had. I knew anecdotally that despite the improvement a lot of calls (and, relatedly, discipline records) were still going unlogged; in an effort to make things even easier, I wrote a mobile-first single page app. Teachers would leave this open on their phones, pull up the student in question and tap-to-call the appropriate parent - and then (hopefully!) log the call there and then. Logged calls went up, but not by as much as I had hoped; some problems have technological solutions, and some problems have people solutions.
Attendance
In 2022, CJA broke ground on a new wing of the building, allowing it to serve girls as well as boys. Unfortunately, this meant that the atrium that had offered plenty of room for students to arrive and for teachers to take attendance became ground zero of a major construction effort, and students began entering and departing through a number of small side doors.
I was tasked with coming up with a way to very quickly take attendance at these new points of entry without slowing down the line of students waiting to enter the building. I came up with an RFID-based ID card system that allow students to simply tap their IDs on a USB RFID scanner attached to a Chromebook at each point of entry. The ID cards also had QR codes printed on them; if necessary, any teacher could pull out their phone and load the Attendance tool, which would activate their phone's camera and let them scan students QR codes nearly as quickly as the RFID reader. Of course, Apps also generates the QR codes and packages up all of the student data and head shots for the ID card printing software.
The Technical Stuff
Apps - and the school website and a number of other services I've written - run on a Ubuntu VPS that I also maintain. It's written primarily in PHP, with Foundation and Bootstrap frontend frameworks and a whole lot of JQuery and other JavaScript libraries. The databases are MySQL. QuickApps has a Vue frontend and a custom PHP API backend that talks to the database. For several years our alumni support team had a sibling app with a Vue frontend and a Node.js/Express.js backend.
Other significant libraries and integrations:
- Google OAuth is used for authentication; auth0 is used for authentication for Vue apps
- Google's Translate API is used for report card translation
- GAM is used to retrieve Chromebook usage data
- MailerSend is used for most email delivery
- Rosters are automatically synced with i-Ready, McGrawHill, IXL, and Apple School Manager via SFTP in the OneRoster format
- Rosters, standards, grades, and assignments are synced with Canvas via Canvas's API
- mPDF is used to generate PDFs for report cards, transcripts, schedules, expense reports and others
- pChart is used to generate test result graphs for report cards