GradeStat Final Report
Jump to the end to view links to our app.
Final Product
Our final product is the GradeStat web app, a tool to extend the existing functionality provided by bCourses. Course staff can use this site to manage and monitor their teaching staff with less dependence on messy Excel spreadsheets and charts. GradeStat is designed to both save time, as well as enable more consistent monitoring of grades in a large course.
Walkthrough
This walkthrough describes the basic page of GradeStat. However, we expect most of the user time to be spent on the Course and Assignment view pages which allow staff to manage and view detailed information.
Splash Page
The splash page has a simple scrolling layout. It currently contains simple marketing text and a basic description of the site. In the upper-right corner, there is a link to log in with a Google account.
Home Page
The home page, visible after logging in, has a welcome message and a brief description of how to use the site. On the left side of the screen, there is a navigation bar with links to the âCoursesâ and âSettingsâ pages.
All Courses Page
The first time this page is viewed, it prompts the user to enter their bCourses authentication token (click the â?â for instructions on how to retrieve this token). Once the user has updated their authentication token, the courses that they teach will be loaded from bCourses and listed. The user has the option to âAddâ or âRemoveâ each of these courses from GradeStat (essentially opting to store the data at GradeStat for faster retrieval and analytics). Each course listing also links to a course profile page.
Settings Page
Currently this page acts as a space to update a userâs bCourses token at any time. bCourses tokens can be optionally revoked through the bCourses site and this page has a form to upload a new one.
Course Details Page
The course page contains basic information about the course as well as a listing of all assignment and staff. In the staff listing table, the user can update the number of hours per week that each staff member should work on grading assignments. The assignments listing table contains links to the profile pages for each of the assignments.
Assignment Page
The assignment page is the most feature rich page in the app. This page contains six drop down sections. At the top, the user will find basic information about the assignment including due date, date of creation, the number of points possible and the number of submissions still ungraded. The next section contains a form to assign staff members to grade assignments. The user chooses a number of submissions to validate and a number of submissions to allow overlap between graders. Upon submitting the form, GradeStatâs algorithm uses this information and the relative number of hours assigned to each staff member to assign specific submissions to be graded by each staff member. The third section contains a table with information and links to grade all of the submission assigned to the current user. The fourth section contains a list of all submissions for this assignment. The next section contains statistics on grader participation and results. There is a table showing the average grade for each grader as well as the overall average grade for the assignment. There is also a side-by-side box-and-whisker chart showing the distributions of each graderâs grades alongside the assignment total. Another chart shows each readerâs progress in grading their assigned submissions. The chart shows what percentage of assignments they have completed with timestamps. The last section contains statistics on the overall distribution of the grades for this assignment including a table with relevant statistics and a histogram of grades.
Lessons Learned
Meteor
Pros:
Meteor has a lot of reactiveness built into its design. This capability was useful for working with API calls. A reactive framework ended up being an ideal setup for running API calls on the server to access data from bCourses and then update the views. This way, we could load most of the data on a page quickly and fill in the rest of the data as the data was returned from bCourses. Of course, this functionality was only relevant when we were not loading course data directly from the database.
Meteor also makes development really easy by integrating the dev environment with a simple deployment strategy all by using just the meteor command line tool. We feel like this is a nice advantage, but it does leave us with questions about hosting our app on alternate services should the need arise.
Cons:
Meteor takes a little more work than we were expecting. We are both used to doing more web development work with Rails where there is perhaps a slightly steeper learning curve, but a lot more work is done for you. It seemed to us that a significant amount of our code ended up being much more verbose than we thought necessary. It seemed that in order to achieve some tasks, we would often need to write a function on the server, a function on the client to interact with the server and then possibly another handler to retrieve the data. Some of this perception can no doubt be attributed simply to the fact that javascript is a more verbose language than Ruby, but we found that we were often frustrated with the ways that Meteor chose to implement features. The initial setup also took longer than expected because the default app created by meteor is extremely minimal. We spent a while just getting our app configured in a way that was helpful to us.
Additionally, because of a lack of standard configuration, we ran into problems through development that caused bugs because it wasnât clear exactly how meteor was compiling our app. Another good example, is that Meteor has an odd way of supporting traditional npm packages, despite the fact that it was implemented in nodeJS. There were times were we wanted to use regular npm packages (like a bCourses / Canvas library, we had written) but were unable to easily use these tools which cost time.
Since Meteor is a more recent framework, the documentation and support on sites like StackOverflow are not as developed yet. Even when we did find helpful tips online from other developers, they often used tools that had since been deprecated. Meteor has changed rapidly since its first release, so it was sometimes confusing what the âcorrectâ way to do something was.
Styling and Libraries
When we started writing code, we decided that we did not want our app to have any obviously recognizable traits of a site that was âBootstrappedâ or used another popular UI framework. We decided to use Yahooâs Pure CSS because of its good support for grid layout, but minimal effect on the overall theme of the site. We ended up struggling a little more because of this decision. We spent more time trying to make our site look presentable than we should have; especially because neither of us have very much design experience (and perhaps just lack an intuition for aesthetics). We learned that it is ok and probably even a good idea to use libraries to fill in the gaps in your knowledge or skill. If we had started by using a library like Twitterâs Bootstrap, we could have spent less time struggling with evasive UI bugs and more time adding/fixing broader features.
For the graphs, we used a version of HighChartsJS which was designed to work with Meteor, though this too required some customization.
In Retrospect and Moving Forward
As is perhaps apparent from the relative lengths of our pros and cons sections on Meteor, we were not the biggest fans of Meteor. It was a great learning experience and gave us a chance to work on our Javascript skills, but overall we would not implement this app again in Meteor. The plan for this project is that it will be an ongoing project that will hopefully be useful to future course staff at UC Berkeley. This means that the code base will need to be built upon by future collaborators and we fear the the use of Meteor may preclude that possibility simply because it is not as accessible.
The biggest lesson here is: Project Documentation. Meteor does indeed have many awesome features, but we felt that we spent too much time wrestling with Meteor. Perhaps, when the framework is more mature and well documented it will be a better contender in the app development space. In the meantime, Rails (version 4) + React or something like SailsJS and node seem like more stable alternatives to Meteor, unless you need the deeply reactive features Meteor provides.Â
Related Links
Proposal link: http://webtech-cs294.tumblr.com/post/111183958936/proposal-gradestat-by-lambda-lambda-lambda.
Milestone 1 link:
http://webtech-cs294.tumblr.com/post/113788229828/gradestat-project-milestone-1-team-lambda-lambda
Milestone 2 link:
http://webtech-cs294.tumblr.com/post/116986546335/project-milestone-2-gradestat
Application Link:
gradestat.meteor.com
GitHub: https://github.com/gradestat/gradestat
Screencast:
https://www.youtube.com/watch?v=9lS13BEwoL8














