Currently the platform has no idea who is actually engaged with a program. We have program enrollment only for Masters programs, and we sometimes connect learners with programs as soon as they touch a single course in the program which is wildly inaccurate.
To get a handle on learner engagement with programs we’re going to create a new IDA handling a new concept: program intent. Program intents will record our guess that a user intends to complete a program. Program intents are not modified, we write them when we have a guess and accumulate them.
Program enrollments are a transaction between a learner and the program provider. By using the term program intent we can record less certain states or learner only decisions. We expect multiple intents per user per program.
A program intent will have:
- user ID
- program identifier, probably program UUID
- intent reason
- intent certainty
- effective datetime
And of course standard django bookkeeping fields.
The interesting fields here are the last three. Intent reason is “why do we think this learner is engaged with this program”. Some example reasons: program bundle purchase, enrollment in all or most program courses, or directly asking the user. We expect to add many new program intent reasons and have no idea what they all are right now.
Intent certainty is a broad bucketing of reasons with only three values: CERTAIN_YES, CERTAIN_NO, and MAYBE. In the above example, program bundle purchase is a CERTAIN_YES. Asking the user will generate a CERTAIN_YES or CERTAIN_NO. The others are probably MAYBE. We have this field separated from intent reason to provide a quick summary for our initial uses without having to understand all of the reasons.
Effective datetime is the time of the event that gave us the reason. That’s not the same as when we figure it out. If a learner purchases a program today, effective datetime is today, even if we don’t figure it out until a batch job runs tomorrow.
We will put all these events in a separate IDA, the Program Intent Engagement service (PIE service, so now you understand why we added “engagement” to the name). The MVP of the service will have a write endpoint, a batch write management command for adding intents generated by reports from a data warehouse or other analytics report, and a “latest and best” read endpoint, more about that below.
The latest and best read is intended to drive UIs like a program dashboard and is called as the learner. It will return only some of the program intents. For each program:
- return the most recent CERTAIN_YES or CERTAIN_NO intent
- if there is no such intent, return the latest MAYBE intent
We expect to add more write paths and more read paths in future iterations, this MVP is meant to give us a starting point to figure out how program intents can be useful in the platform.
Once we have the PIE repo up this content will end up in an ADR there as well.