Using Azure Functions to create an attendance-taking app for Illinois Tech
In this joint development effort, Microsoft teamed up with Illinois Tech’s Interprofessional Projects Program (IPRO) to create an easy-to-update client application and a serverless computing back end to greatly speed IPRO course attendance taking.
- Jeremy Alexis – Illinois Tech Institute of Design Faculty and Director of Interprofessional Projects Program (IPRO)
- Martin Schray – Senior Technical Evangelist, Microsoft
In our solution, we created a Windows Presentation Foundation (WPF) app with ClickOnce updates, Azure Functions (serverless computing), web deployment slots, and continuous integration and deployment with Visual Studio Team Services. The solution used a USB RFID reader to read student IDs to accelerate attendance taking.
The Illinois Institute of Technology (IIT), also known as Illinois Tech, is a private, technology-focused, research university offering undergraduate and graduate degrees in engineering, science, architecture, business, design, human sciences, applied technology, and law.
One of 21 institutions that are part of the Association of Independent Technological Universities (AITU), Illinois Tech offers exceptional preparation for professions that require technological sophistication, an innovative mindset, and an entrepreneurial spirit.
The Interprofessional Projects Program at Illinois Tech
Illinois Tech offers an innovative and comprehensive approach to providing students with a real-world, project-based experience—the integration of interprofessional perspectives in a student team environment. Developed at Illinois Tech in 1995, IPRO consists of student teams from the junior through graduate levels, representing the breadth of the university’s disciplines and professional programs. The multidisciplinary IPRO team project course experience is offered via three platforms that provide students a variety of choices that tap their passion and disciplinary knowledge.
Pain point or problem area to be addressed
The Interprofessional Projects Program at Illinois Tech offers students a great experience in user-centric design. It has more than 40 class offerings and 800 students. All undergraduates must take two IPRO courses in which they will learn human-centric design principles and how to work with others in different technical disciplines. Most courses have an instructor and some courses have one or more teaching assistants (TAs), but this is not the norm. Most TAs are graduate students at Illinois Tech’s Institute of Design and are highly skilled and have a lot to add to courses, so the program would like to reduce the time they spend taking attendance. They are exploring several approaches to minimize the time and effort involved.
Currently, there is a lead time of about 5 minutes to prepare the spreadsheet used to track attendance. It also takes on average one minute per student to move from student to student, find a student’s attendance record, verify their picture, and update their attendance record. For a class of 30 to 50 students, that takes a significant amount of time that could be devoted to teaching. Since there is no assigned seating and students are organized into teams, this adds to the time and challenge of taking attendance. Most classes do not have a TA, which means the time-consuming task falls to the faculty. To maximize the time for teaching, some faculty do not regularly take attendance, so assessment including attendance is a continued focus at Illinois Tech.
There is no single, integrated way to accurately assess if students are going to class. All of the different ways that people take attendance cannot easily be integrated. It would be incredibly valuable, from an assessment perspective, to simply know how well-attended classes actually are. By dramatically lowering the amount of time to capture attendance, faculty and TAs could have more time to teach and engage students in value-adding interactions.
Solution, steps, and delivery
The current-state value stream map shows that the current manual process is fairly well-optimized without forcing students and teams to have assigned seating, which was considered onerous to the classroom experience. The current-state value stream map also pointed out that lowering the time to locate and record each student’s attendance was the key area to address in improving the attendance-taking experience.
The future state in the value stream mapping shows that lead time stayed about the same (about 5 minutes), but that the time to check in each student could be lowered to around 5 seconds per student, which was an 83 percent improvement. Our solution was to implement a Windows application that scans student RFID cards to take attendance and stores this attendance information in a .csv file for easy use by faculty and also in the cloud for a planned future attendance reporting solution.
We call the application Taking Names. We wrote a WPF client and used Azure App Service to host the ClickOnce web application for deploying the WPF application. We can publish the Taking Names WPF client directly from Visual Studio to our Azure App Service web application. This ClickOnce publishing of the app provides automatic updates of the client to the attendance workstation whenever there are new features or updates.
The Taking Names application uses a USB RFID card reader to read student RFID ID cards and check students in. We created a series of Azure Functions that provide the cloud computing and storage of application data via Azure Table storage. Azure Functions allows student names and IDs for all IPRO courses to be captured. Azure Functions also provides the functionality to look up student RFID card IDs and associate them to students. Additionally, Azure Functions is used to capture student attendance records, log system activity and events, and all other computing needs of the application.
We integrated Taking Names Git repository with Azure App Functions continuous integration/continuous deployment (CI/CD) functionality. We set up this functionality via the Azure portal.
We used the auto-scale capability of Azure Functions to ensure Azure Functions could meet the widely varied demand the system sees with high peaks of usage. We set up an Azure web deployment slot to deploy from version control to staging to allow for testing and used Azure’s Virtual IP swap to move seamlessly from staging to production by swapping IP (for example, not copying bits).
Illinois Tech Taking Names demo video
Students scan their ID cards to show they are attending class
Jeremy Alexis addresses his large IPRO class
The client application is a WPF app using ClickOnce deployment to allow for easy updating. The application talks to a set of Azure Functions that provide lookup, identification, and capture of student attendance records. The Azure Functions leverage Azure Table storage for durable and expandable cloud storage.
Taking Names architecture
Creating an application that allows effortless client application updates via ClickOnce deployment and using Azure Functions and Azure continuous deployment enabled the team to quickly move from concept to prototype to deployed solution.
Automating the previously manual processes of capturing attendance removed a monotonous and time-consuming task from faculty and teaching assistants. Automating attendance improved faculty and TA morale and allowed them to spend time previously lost to taking attendance on value-adding activities that improved the student classroom experience. The value stream mapping process provided the focal point to design this improvement and change. Azure Functions were an easy way to do “serverless computing” and allowed rapid prototyping to explore Illinois Tech’s desire to bring attendance into the 21st century.
Looking at the value stream map, we removed a number of manual steps from the current-state process. The team was able to deploy a technology solution allowing self-check-in and dramatically decreasing the amount of time needed for attendance taking. The continuous integration to Azure deployment slots and ClickOnce application updates made updating the application exceptionally painless, quick, and easy.
The Illinois Tech IPRO team is an incredibly agile organization and was thrilled to move from prototyping to quickly using this solution in its courses. From a technical perspective, the team had the following insights:
- Azure Functions has deployment slots (just like Azure App Service), making deployment easy.
- Azure Functions makes it quick and easy to develop new capabilities without worrying about servers, virtual machines, or infrastructure.
- When deployments are complete, you can easily fire webhooks as a notification mechanism.
- Using Azure deployment slots, you can deploy to a non-production site for testing and quickly move to production using Azure Virtual IP swapping.
- Azure Functions developers guide
- Azure Storage Table Design Guide: Designing Scalable and Performant Tables
- Table Service Concepts
- ClickOnce Security and Deployment
- Choosing a ClickOnce Update Strategy
- Azure runtime environment
- Continuous deployment
- Scale up an app in Azure
- Set up staging environments in Azure App Service