TAG Meeting 2021-08-19
Attendees
First Name | Last Name | Organization |
Marcos | Alcozer | Ed-Fi Alliance |
Rohith | Chintamaneni | Arizona Department of Education |
David | Clements | Ed-Fi Alliance |
Patrick | Devanney | ClassLink |
Rosh | Dhanawade | Indiana University INsite |
Mindy | DuFault | Infinite Campus |
Stephen | Fuqua | Ed-Fi Alliance |
Jean-Francois | Guertin | EdWire |
David | Hefley | Nebraska Department of Education |
Eric | Jansson | Ed-Fi Alliance |
Jim | McKay | Instructure |
Chris | Moffatt | Ed-Fi Alliance |
Doug | Quinton | PowerSchool |
Andrew | Rice | Education Analytics |
Audrey | Shay | Wisconsin Department of Public Instruction |
Grishma | Shrestha | Infinite Campus |
Sayee | Srinivasan | Ed-Fi Alliance |
Patrick | Yoho | InnovateEDU Inc |
Agenda
Expectations re APIs and API clients re an API that has multiple years of data (see some initial details below)
Data out issues (3rd priority raised by the TAG)
“Story workshop” format for this, to capture ideas
See prioritization from TAG Meeting 2021-06-17
Background on Agenda Item #1: Multi-year API issues
This item has been reported via a couple of tickets – see https://tracker.ed-fi.org/browse/EIF-6 and https://tracker.ed-fi.org/browse/EDFI-977 The issue is whether the following is a valid use case/one that should be supported (it is not natively supported currently):
Use case: As a SIS vendor, I need to be able to read current year data from the API -- even when the API has multiple years of data -- so that I can synchronize (i.e., identify and add missing records, and delete extra records that are on the API but not in my system) my data with the data in the ODS. I need to do this because environmental conditions (e.g., system errors, bugs, network outages) lead to issues in synchronization over time.
Example case:
A SIS wants to reconcile its records for discipline actions with the records on an API (i.e., these two stores of data are no longer in sync, for whatever reason), and the API/ODS it is reconciling with has multiple years of school data.
So the SIS does a GET on the API, and receives back BOTH current year AND past year records on discipline actions. The SIS now has to filter past year records out manually. In addition, disciple actions have no school year element (SchoolYear) attached, but only a date, so the filtering must be done by using the date field.
Materials
Notes
Multi-year / Shared Instance issues was the only point of discussion
The TAG strongly recommended against use of multi-year / shared instance deployments. Those who were in a position to advise agencies noted that they advise clients against its use for all use cases.
Generally TAG members cited the inherent complexity of multi year data management and the difficulty of mixing operational (current year) and historical data.
Some example reasons given were as follows. There is an attempt to capture these in terms of importance, based on how often the objection was raised, but there was no attempt to catalog all the complexities.
The extra complexity of supporting multi-year versioning for entities in a current year model
The difficulty of handling entities that evolve over time and need versioning (descriptor options, course codes, etc.) in multi-year models
The difficulty with segmenting years in a multi-year store so that the data can be "certified" for future audits or otherwise "frozen"
The difficulty of authorization for multi-year data, and lack of current ODS support for authorization patterns that factor in a time or school year dimension
Potential performance problems with operational schemas, particularly as they are applied to historical data
The extra complexity to data uses as there is no ability to segment off of or transform to make it more comprehensible and focused for data analysts
The complexity of migration of highly normalized and relational operational schemas
TAG members generally cited the need to separate operational and historical data as known best practice.
It was also mentioned that it was logical that a current year-focused system would expect that the API it is expected to communicate with is also current year. Attempts to derive a school year from dates was mentioned as problematic, as some entities may be classified by application of local or state policy.
In terms of the use case presented, this meant that the solution #3, to ask a SIS to deal with multi-year data received back from an API received no support from nay TAG member.
There was, however, some support for the notion of expanding the multi-year capabilities of the Ed-Fi data model, but considerably less than for the notion of moving off of multi-year deployments generally. Whether that should be done by making the data model more "multi-year" by means of "tagging" transactions to a school year or of introducing more dates into the model was not covered: the general notion was that it could be helpful to have a SchoolYear in the database. The use cases for that were not explored.
This discussion raised the issue of how agencies using Ed-Fi would access analytics that required multi-year data. They would be left without a clear solution. The notion of an open source data warehouse was raised as a possible solution
from Ann Su (internal) to everyone: 2:00 PM
https://docs.google.com/spreadsheets/d/1er-SqO9H2ixyBIL9hBNJPZr4_R0LGGxzEv4RjA00wtw/edit#gid=1125278302
from Ann Su (internal) to everyone: 2:00 PM
Please check in
from jim to everyone: 2:03 PM
Ann do you have the link to the spreadsheet?
from Stephen Fuqua (internal) to everyone: 2:04 PM
https://docs.google.com/spreadsheets/d/1er-SqO9H2ixyBIL9hBNJPZr4_R0LGGxzEv4RjA00wtw/edit#gid=1125278302
from jim to everyone: 2:06 PM
thank you... i see you flagged me already :)
from chris to everyone: 2:08 PM
Marcus - would say the use case is invalid. Is that in the context of multi-year? What about year-specific mode that SEA’s use?
from Andrew Rice to everyone: 2:14 PM
why does a SIS as the vendor matter?
from Rosh Dhanawade to everyone: 2:14 PM
Can you clarify SharedInstance vs. Multi year ODS
from Rosh Dhanawade to everyone: 2:15 PM
or are they one and the same thing for this discussion?>
from jim to everyone: 2:15 PM
samething @rosh
from Patrick Yoho to everyone: 2:16 PM
Yeah, where is the documentation on shared instance vs the other options again? I get these confused every time
from Stephen Fuqua (internal) to everyone: 2:16 PM
Two different things
from Stephen Fuqua (internal) to everyone: 2:16 PM
I'll find the docs for you.
from Stephen Fuqua (internal) to everyone: 2:17 PM
In short: SharedInstance the API only accesses a single database, but in YearSpecific there are separate ODS database instances on the server, one for each year, and the API knows which to access based on the URL route.
from Patrick Yoho to everyone: 2:18 PM
@Stephen for YearSpecific, is there is single API for multiple DBs or multipe APIs?
from Stephen Fuqua (internal) to everyone: 2:18 PM
Single API for multiple DBs. https://edfi.atlassian.net/wiki/display/ODSAPIS3V520/Year-Specific+ODS+Configuration
from Rosh Dhanawade to everyone: 2:19 PM
Agreed
from Stephen Fuqua (internal) to everyone: 2:19 PM
I'm not sure this our best entry point on learning about this. Looking for something bigger picture.
from Patrick Yoho to everyone: 2:21 PM
Tbh I'm having a bit of trouble following this and knowing how to contribute. Is there a core philosphical question at the root of this?
from Stephen Fuqua (internal) to everyone: 2:21 PM
https://edfi.atlassian.net/wiki/pages/viewpage.action?pageId=25100435#PlatformDevGuideExtensibility&Customization-DbPartition
from Marcos Alcozer to everyone: 2:22 PM
I really like the student last name example as a lens to think about this issue through
from Rosh Dhanawade to everyone: 2:22 PM
this was pre-Insite so i wash my hands of that request
from Rosh Dhanawade to everyone: 2:22 PM
:)
from Patrick Yoho to everyone: 2:23 PM
Thanks @Stephen
from Andrew Rice to everyone: 2:25 PM
this is not just a SIS issue - ANY application that is using the ODS as a source and a destination has this problem
from Patrick Yoho to everyone: 2:27 PM
Yeah, this is the classic issue with lots of ed-tech applications - if you aren't storing the state of the data daily (or even better, per transaction), you're not going to be able to accurately backfill
from Patrick Yoho to everyone: 2:31 PM
We essentially only use Ed-Fi for current year data. We thus build historical data over time. If we need to go back in time for historical data beyond the implementation of Ed-Fi we pull that directly from the SIS and stay pretty specific to analytical needs.
from Stephen Fuqua (internal) to everyone: 2:33 PM
This data security issue is a really important point. I wonder if our guidance makes this problem explicit enough. In other words, if using SharedInstance, a vendor could change prior year's data. I honestly don't know if YearSpecific automatically solves that though, except that you have to be more deliberate about using the URL for the prior year.
from jim to everyone: 2:34 PM
it does if you keep differnt admin databases or your lock down the routes for the vendor
from David Hefley to everyone: 2:35 PM
In our work, we found that using dates to derive school year was a very complext problem
from Patrick Yoho to everyone: 2:35 PM
Time for a proper Ed-Fi data warehouse on top of the ODS ;)
from Patrick Yoho to everyone: 2:35 PM
lol
from Rosh Dhanawade to everyone: 2:35 PM
@patrick, what's old is new again
from Patrick Yoho to everyone: 2:35 PM
always
from Stephen Fuqua (internal) to everyone: 2:36 PM
Chris might not want to hear me but I agree with Patrick Yoho ^^
from Rosh Dhanawade to everyone: 2:36 PM
im a big fan of single year operational ODS to be honest
from Marcos Alcozer to everyone: 2:36 PM
AMT APIs that GET data across multiple year specific ODSes and present in dimension and fact tables rolling it all up nice and tidy?
from Rosh Dhanawade to everyone: 2:36 PM
using the ODS as a faux DW is problematic long term
from David Hefley to everyone: 2:36 PM
We are essentially building our own multi-year downstream Ed-Fi data warehouse that adds data year to all elements for all elements, base on the ODS it is coming from
from Jean-FrancoisGuertin to everyone: 2:37 PM
Same as Rosh, YearSpecific or InstanceYearSpecific
from Rosh Dhanawade to everyone: 2:38 PM
yes
from Rosh Dhanawade to everyone: 2:38 PM
time to lance off the boil
from Rosh Dhanawade to everyone: 2:38 PM
down with multiyear
from Marcos Alcozer to everyone: 2:39 PM
I'd love some InstanceYearSpecific out of the box
from Jean-FrancoisGuertin to everyone: 2:39 PM
We could even try to remove SchoolYear from the data model and slowly deprecate SharedInstance :)
from Stephen Fuqua (internal) to everyone: 2:40 PM
I think some of our SEA's would have a stronger feeling about that.
from Rosh Dhanawade to everyone: 2:40 PM
I will note, that Silvia has strong opinions about multi-year
from Rosh Dhanawade to everyone: 2:40 PM
we should solicit more inputs if option 2 becomes the preferred path
from Patrick Yoho to everyone: 2:43 PM
What are options 1 and 2 at this point?
from Andrew Rice to everyone: 2:44 PM
I think what I am saying is that if we are going to be multi-year, more work is required. I am actually not in support of multiyear ODS (I used to be)
from Stephen Fuqua (internal) to everyone: 2:44 PM
Rosh is describing a really interesting phenomenon with downstream security. To restate what I heard, with SharedInstance, it is easy to leave a staff member associated with a section that they might not actually be assigned to this year. Implication: in a dashboard using row-level security, they may get access to more data than intended.
from Rosh Dhanawade to everyone: 2:45 PM
that summarizes is correclty Stephen
from Rosh Dhanawade to everyone: 2:45 PM
summary*
from Rosh Dhanawade to everyone: 2:45 PM
correct*
from Jean-FrancoisGuertin to everyone: 2:45 PM
Agreed with Stephen
from Andrew Rice to everyone: 2:46 PM
one issue is that districts expect this to be multiyear
from Andrew Rice to everyone: 2:46 PM
so it is an education task to show why that is not the right impulse
from Rosh Dhanawade to everyone: 2:46 PM
Yep, we've had to work hard to state and restate that fact even in our long term members
from Andrew Rice to everyone: 2:52 PM
for some reason this topic fires me up ;) I might need a hobby
from Andrew Rice to everyone: 2:53 PM
If you dont have a warehouse the ODS needs to be multi year
from Andrew Rice to everyone: 2:53 PM
many districts do not have one
from Andrew Rice to everyone: 2:54 PM
thus the reccomendation
from Patrick Yoho to everyone: 2:54 PM
And that's what I'm talking about with the technology gap
from Andrew Rice to everyone: 2:54 PM
agree
from Rosh Dhanawade to everyone: 2:54 PM
right but you can achieve that warehouse effect on the database side even with yearspecific DOS right?
from Andrew Rice to everyone: 2:54 PM
it is hard
from Patrick Yoho to everyone: 2:54 PM
we probably should agree on a definition for data warehouse
from Andrew Rice to everyone: 2:54 PM
not for a mid sized district
from Jean-FrancoisGuertin to everyone: 2:56 PM
An ODS is designed to perform simple queries on small sets of data, while a data warehouse is designed to perform complex queries on large sets of data. An ODS deals exclusively with current operational data and basic status-level reporting, because an ODS continuously overwrites data.
from Andrew Rice to everyone: 2:57 PM
a message bus!
from Patrick Yoho to everyone: 3:00 PM
Marketing EdFi as a true ODS that mediates data transfer between systems is a whole lot more challenging than an analytics solution.
from Andrew Rice to everyone: 3:00 PM
if analytics warehouses are expensive we will get pressure to make the ODS do more. An open source warehouse would be interesting (a plug for the session I proposed at summit!)
from Patrick Yoho to everyone: 3:01 PM
I'm totally down for an open source warehouse. I'm curious what the MVP is - does it have to be transactional? I don't think so
from Patrick Yoho to everyone: 3:02 PM
Somebody was trying to sell me on CEDS at one point - never really looked at that though
from Marcos Alcozer to everyone: 3:03 PM
Is AMT not the start of the data warehouse convo?
from Andrew Rice to everyone: 3:03 PM
these questions are gnarly and imporntant to tackle
from Andrew Rice to everyone: 3:04 PM
yes AMT is a good place to start
from Patrick Yoho to everyone: 3:04 PM
Performing gets to figure out what to sync and delete in the ODS is core to how we use it - option 3 doesn't make any sense to me
from Patrick Yoho to everyone: 3:05 PM
The concept of an ODS is arcane for sure
from Jean-FrancoisGuertin to everyone: 3:05 PM
I agree with you Andrew, definitely something that passionates me as much as you since we had to deal with these very challenges when bulding our analytics layer
from Stephen Fuqua (internal) to everyone: 3:06 PM
Thank you for your support of AMT :-). If it is part of the "start" then it is a _target_ to aim for.
from Andrew Rice to everyone: 3:07 PM
David - I had the same journey thanks for sharing
from Audrey Shay to everyone: 3:07 PM
Multiyear is also the default
from Patrick Yoho to everyone: 3:12 PM
suite 4 change ha
from Stephen Fuqua (internal) to everyone: 3:12 PM
++
from Rosh Dhanawade to everyone: 3:12 PM
Temporal ODS when
from Marcos Alcozer to everyone: 3:13 PM
Suite 4 is going to be AWESOME. It will solve all of our problems now and forever
from Rosh Dhanawade to everyone: 3:13 PM
*just a joke
from Jean-FrancoisGuertin to everyone: 3:13 PM
lol
from Stephen Fuqua (internal) to everyone: 3:13 PM
If we do take this stronger stance, (a) we need to be really clear if this applies to both LEA and SEA, and (b) pro-actively ensure that all known system integrators get the news.
from David Hefley to everyone: 3:13 PM
How big of a problem is this? How many multi-year vs single-year instances are there?
from Patrick Yoho to everyone: 3:13 PM
good Q david
from Patrick Yoho to everyone: 3:14 PM
Can the opt in analytics in admin app give us a proxy heuristic?
from Stephen Fuqua (internal) to everyone: 3:14 PM
Ooh, good idea Patrick.
from Andrew Rice to everyone: 3:14 PM
David I am aware of several major installs that are multiyear
from Stephen Fuqua (internal) to everyone: 3:15 PM
Saving this chat...
from Marcos Alcozer to everyone: 3:15 PM
I have a hard stop. THANK YOU everyone for all of your thoughts and feedback.