Great thread What do software engineers who work at a large scale understand that other developers don’t? at /r/programming
After working with Christian Schools of Florida’s Susan Taylor to bring online their Master In-Service Program, which previously required reams of folders and innumerable emails and phone calls, executive director Ken Wackes instructed Engaging to do the same for the rest of CSF’s activities and processes. Bring an entire organization online—now that is what Engaging was born to do!
The accreditation process
At CSF’s heart is arguably its school accreditation process, involving a number of people over a span of years. A school prepares for its peer review by generating a handful of focus areas for improvement and by articulating its compliance with dozens of CSF accreditation standards. Every 5 years an ad-hoc team of peers visits the school to undertake a review. The review itself undergoes approval by CSF’s executive committee. Two years after the review, the school responds in detail with an accreditation progress report.
As member schools cycle through this accreditation process, various people require various levels of access to the various online forms. We developed and tested these privileges via marathon remote screensharing sessions using Skype—Ken in Crystal River, Susan in Fort Myers, Adam in Brighton. Ken and Susan became adept at logging in as different users on multiple browsers simultaneously in order to check the effects of one user’s actions on another’s view.
In a process I hereby hesitantly dub “organic agile”, having the client get so deeply involved in development turned out vital. Firstly, the job simply could not have been done otherwise—we had to role-play the organization’s activities in order to reduce them to business logic. Secondly, this involvement enabled CSF to get familiar with the resulting system and more naturally take ownership of it. And thirdly it served as training, as the site owners can publish and edit almost all the complex business logic rules in much the same way they do any other content on the site.
Complex access rules
Why complex? A new peer review can only be launched by the assigned peer review team leader, and only after the previous peer review has been addressed by the reviewed school, and that response approved by CSF’s executive committee, and the school has submitted at least two current focus areas and all eight standard compliances. Phew! A school head should not be able to see the peer review of her school until it’s approved, while an executive committee member should only see the peer review once it’s submitted. Meanwhile, peer review team members—as assembled by the peer review team leader—can access the review only until its submission — once it’s approved they’re off the case and no longer need access. Peer review team members also need to see but not edit the reviewed school’s submitted focus areas and approved annual reports. But a person can be on the peer review team of one school while on one or more focus area teams for their own school, and even be on the executive committee as well. In short, to model CSF’s accreditation process onto a system, each user requires some of four levels of access (publish, view, edit, submit) to multiple entries based on three criteria: a relationship field in the entry (relating to the school), the entry’s status, and which form is being used to access it.
All this requires orders of magnitude more complexity than provided by ExpressionEngine’s built-in member management, which allows a member to belong to just one member group. Moreover, even if a member could belong to multiple member groups—say both School Heads and Peer Review Team Members—now achievable with the HoobLong add-on, that too is insufficiently complex because she needs to be a School Head at only one particular school, not across the entire system.
Instead what we came up with is positions and their instantiations: roles. “School Head” is a position, while “John Doe = School Head @ Smith School” is a role. Once assigned the role, the specified person is granted the privileges of the specified position but only for the specified organization and for a specified period in time. Of course, a person can have any number of roles.
Roles turned out to be so powerful that for a logged-in user they became the obvious choice to supercede the site’s existing navigation. Now a personalized navigation area lists the user’s roles and team memberships, each linking to the role’s dashboard, as set by its position. For example, the School Head dashboard contains the following consoles, each with links:
- School Details
- Annual Reports
- Accreditation Progress Reports
- Approved Peer Reviews
- Accreditation Strand Compliances
- Focus Areas
- Recent In-Service Activities
Meanwhile the School Head dashboard’s sidebar lists the school’s staff members, linking to their respective in-service records.
Note in the list above that the system also handles school annual reports, with the form calculating annual dues based on membership type, inspection visits, and number of part- & full-time children and students.
Interestingly, immersed in the content management system paradigm, we didn’t notice one major flaw until the system was tested in the field. Susan joined a team of peer reviewers during their visit to a school, where they were horrified to discover that as they saved in the online form they were overwriting each other’s work! They just presumed that a text field in ExpressionEngine was a collaborative document like Google Docs, while we just presumed they’d know that’s not the case. In a way their presumption was flattering! At any rate, we added a Google Docs ID field to the Peer Reviews channel and embedded an iframe containing the Google Doc into the peer review form to serve as a collaborative worksheet. We also had to limit editing privileges on the peer review form fields themselves to the team leader.
The introduction of roles and positions to ExpressionEngine has enabled csfla.org to function as an online organization of organizations. With over 1,400 people using the system, most have just one role, that of teacher, but the assignment of more than 250 other roles enables scores of people to work independently on their CSF-related tasks. The success of the system has led us to suspect there’s more to explore regarding role-based thinking.
ExpressionEngine add-ons required:
- Assets (if only because the site operators wanted to be able to click on an asset to view it from the publish/edit screen — sheesh!)
- Textile Editor Helper (we’re still sticking with Textile)
- Zenbu (there are many types of entries and this lets the site operators find them)
- Zoo Visitor (this is how we bring the site’s members into the fold of all the other content)