Developer Effort Analysis

Developer Effort Analysis for Gradebook Changes


Take a look at Foundation Gradebook Confluence for some idea of what Indiana's working on. They also
have some estimates of the work involved. Interestingly, they seem to think they have "Equal Weight" and "Add Drop Lowest" on their plate, but have put off this effort in favor of finishing other stuff. We should make sure they haven't done any work on these items before proceeding with them.


Summary of Gradebook API Changes

Looks like almost all the calculation changes we will have to make will be in the GradebookManagerHibernateImpl class. As a result of signature changes in that class, there may be some knock-on changes in BaseHibernateManager, which it extends, and GradebookManager, which it implements... but my best guess is that we won't have to change any signatures on the public methods, and can restrict ourselves to modifying a small number of private methods in GradebookManagerHibernateImpl. Whether this is the best place to implement these calculations may be up for some debate, and I've pinged Berkeley to see if I'm correct in thinking that we may want to break these out into a non-'Hibernate' based class. From Josh and Ray's responses, it sounds like this code is stuff that Indiana has added and that we'll need to discuss with them.

So that's the good news. The bad news is that the drop lowest grade calculations look very ugly, and may push us to significant re-write some methods that are central to the presentation of grades, and so will require very rigorous testing to be confident that these changes haven't broken anything.

The rest of the changes are fairly minor and involve adding extra properties or methods to data model objects, like Assignment, AssignmentGradeRecord, Category, CourseGrade, GradeableObject, and GradeRecord.

(info) see Summary of Gradebook API Changes

UI Effort Analysis

In summary, of the existing 9 "pages" in Gradebook, we are proposing the extensive modification of 2, the elimination of 5, and the addition of 1 to replace most of the functionality in the ones being removed. This should greatly improve the user experience of Gradebook and simplify all of the day-to-day tasks it involves.

Given how extensive our changes are, we have to make a decision as to whether it's going to be worthwhile to modify the existing JSF webapp or if we can accomplish our goals more efficiently and effectively by bringing in a new framework. We have decided to go ahead with a new UI. Currently, our best guess is that this will be implemented using the Google Web Toolkit (GWT). There is a remote possibility that we might have to step back from this and implement using JQuery to build dynamic html pages that talk to the server through AJAX over a JSON data transport layer. This is the more "home-grown" version of the same solution we'd like to put into place using GWT.

We may want to take into account the following considerations:

  • How can we integrate our changes so they do not negatively impact schools that wish to continue to use the existing functionality in its current configuration?
  • Also, how easily can we convince the community to merge our branch changes back into trunk?
  • What is the complexity and development cost for developing in JSF versus a newer framework?
  • What are the performance implications of each strategy? using GWT or JQuery.

If we decide to go ahead with a new framework, then:

  • What kind of support is there within the Sakai community and the larger Open Source community for the framework we choose?
  • How rapidly can we replace existing JSF functionality in this new framework without introducing new bugs?

(info) see UI Effort Analysis

Detailed analysis

Out of Date

The text below was based on the assumption that modifying the existing pages was a possible route. So each page is examined for its potential UI and API changes. The API changes will still be necessary, but the UI changes will for the most past be superseded by the new UI.

Legend

Symbol

Meaning

(green star)

API changes look reasonably straightforward

(star)

API changes have some significant complexity and will require more thorough testing

(red star)

API changes will require extensive discussion and rigorous testing

(plus)

New UI component

Wireframes

Gradebook Setup Changes (Category & Item Setup)

Checkboxes to select which statistics the instructor wants to display

Incorporate Grade Items into Categories and Weighting Setup

Gradebook Overview Changes

Additional Statistics Display

Read-only version of the hierarchical table UI component from Gradebook Setup Changes

  • Should be possible to develop the component above to be either read-only or editable
    • Using it in two different pages implies that its a taglib object, I think

Student Summary Changes (Grade Student All Items)

Changes to the existing table

Gradebook Item Summary Changes (Grade Item All Students)

Null entry warning popup

  • This strongly implicates the use of AJAX to talk to the server before page submission, since otherwise we will have to write a significant amount of involved javascript that duplicates logic already available in the java code.

Changes to the existing table

  • New column to select individual items per student to be excluded (warning) requires API changes (green star)
    • This should be the same underlying logic changes that are required for the Student Summary changes above
  • Comment box open/close click on/off behavior will require some Javascript, at least (question) Why is this different from the comments box in Student Summary?
  • Change tab order behavior
    • This will most likely require some fairly involved changes to the UI, since it means that we have to count each item we display in order

Course Multi-Grade (Grade All Students and Items) (plus)

New grade entry table (plus)

New widget to choose which items to grade (plus)

  • This shouldn't involve any API changes

New widget to show Course Grade Entry Options (plus)

  • This is just a condensed version of the Course Grade Options page

New widget to show Course Statistics

Course Grades Changes

Course Summary widget (plus)

  • New statistics (warning) requires API changes as per above for stats (green star)
  • Replace calculate final grades with radio button
    • raises the issue of when that change gets implemented – does clicking on the radio button refresh the screen and recalculate?

Course Grade Options Summary View (plus)

  • New ui (read-only) version of the Course Grade Options screen

Changes to the existing table

Comments Box

I'm not completely clear on what's changing here, but it looks like the existing API has all the necessary fields to provide this data.