2015.09.16 review of Programs
Collected action items:
- Mark Haseltine (Deactivated) will schedule a discussion about how to decide what is an IDA and what is not.
- Mark Haseltine (Deactivated) will coordinate Cale and Ed to work out the relationship between Waffle and ConfigurationModel, and guidelines for their use.
- Jim Abramson (Deactivated) will look into only storing admin user data.
- Jim Abramson (Deactivated) will gather people to decide on the terminology of course/course-run/etc. He will include marketing.
- Jim Abramson (Deactivated) will explain how we get old XSeries into this system.
- Jim Abramson (Deactivated) will figure out how to support microsites in Programs in the MVP.
- Jim Abramson (Deactivated) will include the data-syncing management command in performance testing.
- Jim Abramson (Deactivated) will investigate and decide whether to use opaque keys for programs.
- Zachary Rockwell (Deactivated) will talk to product about the constancy of programs (should course edits be somehow noted or accounted for).
Attendees:
in-room: Joel, Peter, Ned, Andy, Jim, Nimisha, Clinton, Ed, Mark, Zach
hangout: Felipe, Cale, Dave
- Questions collected from the review document:
- Open questions (fundamental)
- is this big enough for an IDA? [joel]
- feature flags: Waffle vs ConfigurationModel [andy]
- replicating users into Programs [andy]
- database ids vs synthetic ids [andy]
- course vs course_key/course_id meaning run [nimisha]
- Open questions (programs)
- Can existing/closed/archived course runs be linked to a Program? [peter] NO
- multi-LMS? [peter] NO
- soft deletions? [andy]
- error recovery and frequency of async signals from LMS to Programs [will]
- new opaque keys? [andy]
- API: public or private? [nimisha]
- constancy of programs: "If someone passes a program with v1 of course1 and another student passes the program with v231 of course1 is that the same program?" [ed]
- /organizations/: integer id? [clinton]
- child orgs? [ed]
- roles for Program Admin UX in studio? [peter]
- Open questions (fundamental)
- Is this big enough for an IDA?
- jim: "borderline", things get bigger once you roll them out.
- things could move out of the LMS into here.
- joel: is this just the first part of a larger IDA?
- Can we imagine what that IDA would be, instead of "Programs"?
- Renaming it is fine.
- is there another IDA in the works which would logically be part of this?
- certificates perhaps
- "course about" project? Not an IDA, an API in the LMS
- "organizations" app? Not an IDA
- Criteria for IDA:
- Is it useful to have an LMS without Programs? yes.
- Django apps are another option
- Always in-process model
- or, more elaborately, an optional in-process model.
- We have lots of in-process Django apps
- Optional in-process: known examples use deep baked-in frameworks or languages to hide the network/in-process switch.
- "Is grouping courses fundamental enough that doing it in an IDA will be more of a problem than a help?"
- How far are we from being able to deploy django apps installed with edx-platform?
- ed: very complex question requiring touching lots of things
- asset pipeline
- wheel deployment
- test latency
- etc
- lots of cross-cutting efforts that need to converge
- definitely months of calendar time
- Classic IDA tradeoff:
- in-process ties you to edx-platform deploy schedules
- in-process is easier to debug
- [ ] Mark will schedule a discussion about how to decide what is an IDA and what is not.
- Waffle vs ConfigurationModel
- Tracking changes: waffle doesn't do that.
- Waffle is tied to the session
- so might not be appropriate for API use
- Clinton has used waffle flags, not waffle switches.
- This needs to get solved.
- Needs one DevOps and one Engineer to sit down and work it out.
- Does waffle replace feature flags?
- Rationalize how Waffle and ConfigurationModel coexist
- [ ] Mark will schedule Cale and Ed to work it out.
- Why not both? They do different things.
- Replicating users into Programs
- Jim: data isn't really replicated, the id and a pointer to another source is stored.
- this is needed for foreign keys
- this is due to lacking a user service.
- if we want to relate users to courses, we need user data in our db for foreign keys,
- and because Django relies on the user table.
- this isn't really replication, it's a pointer back to the real source of truth.
- most of these tables exist in the LMS
- would all of this be much easier running in-process?
- yes, because we'd have access to the LMS models
- it's a tradeoff:
- separation and isolation,
- but have to have copies of some data.
- What has to be kept up-to-date between the source and the copy?
- existence: records should be one-to-one
- whatever comes over in the JWT is stored
- user names: are they immutable?
- we get requests for changing user names, but we never(?) change them.
- user anonymous id is immutable
- there's a per-course anon id, and a global anon id.
- oops: none of our other APIs use anonymous id
- user names have always been considered immutable,
- but this feels wrong
- some feel that immutable user names are good
- multi-tenancy would really benefit from separating the visible user name from an internal immutable id.
- everyone agrees that getting to mutable user names is a lot of work
- JWT can adapt to future ids
- Decided: we'll keep the status quo (replicated pointers to users elsewhere), but some are uncomfortable with it.
- Perhaps only admin users need to be stored locally?
- Students are not accessing the UI directly.
- The student-facing API for JavaScript could be built without Django permissions.
- [ ] Jim will look into only storing admin users.
- Database ids vs human-readable slug for programs and organizations
- Decided: Jim will slugify
- Course independent of run: what do we call it?
- edx.org will be getting a course page, independent of course runs.
- self-paced courses: what is the run?
- [ ] Jim will gather people to decide on the terminology. Include marketing
- Can existing/closed/archived course runs be linked to a program?
- [ ] Open question: how do we get old XSeries into this system?
- Not multi-LMS.
- How to store pointers to users if multi-LMS.
- Single LMS only
- Felipe has a prototype of separating users into multiple databases
- How hard would it be to add an LMS column to the tables?
- this is not for MVP
- but straightforward enough
- Microsites: will this work with them?
- Programs would have to add a column to their data so that series could be subsetting by microsite.
- [ ] Figure out how to support microsites in Programs.
- Soft deletions:
- this slowed down teams significantly, so they removed it.
- Keep soft deletions, but keep an eye out.
- Signals from LMS to Programs to keep sync'd data up-to-date
- There will be a management command to sync data completely
- this will be used initially, and then to recover from outages.
- [ ] Include this in performance testing
- if the signal is too frequent, we can make a new less-frequent signal
- New opaque keys?
- could opaque keys be used for slugifying programs?
- "programv1" would be a key identifying a program
- [ ] Jim will investigate and decide whether to use opaque keys
- Public API or private?
- Matt is in charge of our public-facing APIs.
- Not every API needs to be public.
- This was designed to be private.
- Constancy of programs:
- Jim wants to keep it simple.
- This is really a product question
- This is the same problem with certificates: two students can earn "the same" certificate, but the courses they took were different.
- [ ] Zach will talk to product about it.
- What role is needed for Program administration?
- For MVP, global staff.
- And it will be part of E-commerce, not Studio.