Hi Dave,
Thanks for responding. I especially appreciate your point about playing to XBlock's weaknesses. I have not yet been through any serious trial by fire with XBlocks, and I know you have.
Until recently, I was thinking along the lines that the best approach to adding an independent suite of functionality to the LMS (that would include both course components and administrative / course-level features) would be to structure it as a Django app and design its views at some composable grain, such that XBlocks could import and utilize its views/helpers to render contextual bits of application into the course structure. So in this model, XBlock and Django app interface are used independently as adapters, to integrate a shared library of views/models/features into courses. I believe this integration model is viable, but I believe it comes with its own, perhaps less desirable shortcomings:
* it's necessary to develop / test your stuff both in XBlock-world and in Django-world.
* the need to generalize for two types of integration ends up requiring a third generalization now (views or at least resources that can render in a straight Django app, as well as in an XBlock).
* you still end up with run-time dependencies from your host LMS to your external functionality - INSTALLED_APPS to begin with, but in practice much more, since you need to integrate navigation and look-and-feel somehow, both in your courseware and authoring environments.
* did i mention: you are explicitly coupled to Django. Obviously not a dealbreaker, but certainly limits portability.
Based on what I understand today I think making XBlock *the* way of integrating with courseware is better. While none of the shortcomings you've mentioned are trivial challenges, there is nothing preventing us (
edx.org, the OSS community) from building out the capabilities presently lacking in XBlock, should we elect to invest the effort. I realize that's an idealistic statement, but a feature built half in XBlock and half outside is, in my opinion, going to be a much more clunky and convoluted affair. I don't think there's a point in having XBlock if it fails to deliver on our hopes for a cleaner and more modular system, let alone if it makes things harder. If there is one right way to integrate with the platform, then we can at least be sure efforts will be focused on making that way work optimally.
I'm not as worried about the kinds of applications we have in mind for the tabs being unsuitable for XBlock. In most cases I think we are just shipping a javascript application to the frontend and waving goodbye to it. (This does underscore the urgent work we need to do on asset pipelining, js dependency management, and so on.) We want the host environment to call the shots as far as basic infrastructure, appearance/theming, and lining up our runtime services for us. I just think it will be bad if we have to have two different ways to do roughly the same thing - one for blocks, one for Django apps.
Specifically regarding forums, there are no plans to use student-scoped Field data. Forums data is too big and complex for what Fields are designed to do, and we need more transparent access to that data. We'd instead expose our content APIs as a runtime service, and in addition, lay in whatever other runtime services necessary to filter/authenticate requests for that content. Fields *do* seem like a great fit for course-wide configuration of a block, or across all blocks of a given type in a course, and that use case goes hand in hand with the course-level proposal.
In general I agree that authors should be favoring the runtime - but we also have to put more useful runtime services out there, both as enabling functionality and as example material.
Sorry for the long essay.
Best,
Jim