✅ Explicit mapping: Objective → Eval → Business Goal
✅ Measurability aligned with eval criteria
Process
Step 1: Understand the Context
When a request comes in to generate learning objectives, first understand:
What topic or concept?
(Python decorators, OOP, async/await, etc.)
Who are the learners?
(Beginners, intermediate, advanced)
How long to teach?
(30 minutes, 2 hours, full unit)
What's the end goal?
(Can they build something? Understand theory? Debug code?)
What are the success evals?
(From chapter spec—what defines success?)
Step 2: Review Bloom's Taxonomy (If Needed)
If you're not familiar with the specific topic's cognitive levels, read:
📖
reference/blooms-taxonomy-programming.md
This document maps Bloom's 6 levels to programming contexts with:
Action verbs for each level (Remember, Understand, Apply, Analyze, Evaluate, Create)
Programming examples
Assessment methods for each level
Step 3: Identify Prerequisites
Read the guidance on prerequisite analysis:
📖
reference/prerequisite-analysis.md
For your objectives, determine:
What must learners know BEFORE tackling the main concept?
List prerequisites at Remember/Understand level (not deep mastery)
Trace dependency chains to foundational knowledge
Step 4: Choose Assessment Methods
Based on the Bloom's level of each objective, review appropriate assessment methods:
📖
reference/assessment-methods.md
This guides you to pair objectives with realistic assessment approaches (code exercises for Apply level, code reviews for Evaluate, etc.).
Step 5: Generate Objectives with CEFR Proficiency Levels
For each topic, create 3-5 objectives (typically):
At least one from each level needed for the topic (Remember through Create)
Progressively building in complexity
Each with clear statement, context, prerequisites, assessment method, and success criteria
Map to CEFR proficiency level (A1/A2/B1/B2/C1)
Use the template as guidance:
📄
templates/learning-objective-template.yml
Key principle
Each objective should answer:
What will learners DO?
(verb from Bloom's level)
In what context?
(the specific situation or problem)
How will we know they succeeded?
(measurable criteria)
What proficiency level?
(CEFR A1-C2)
CEFR Proficiency Mapping (Constitution v3.1.2)
Align objectives with international proficiency standards
(from skills-proficiency-mapper v2.0):
A1 (Beginner - Recognition)
:
Bloom's: Remember/Understand only
Example: "Identify Python syntax for defining a function"
Measurable: Recognition, not production
A2 (Elementary - Guided Application)
:
Bloom's: Understand/Apply with scaffolding
Example: "Complete a function definition with provided hints"
Measurable: Application with support
B1 (Intermediate - Independent Application)
:
Bloom's: Apply independently
Example: "Implement a function from clear specification without assistance"
Measurable: Real-world application without scaffolding
B2 (Upper-Intermediate - Analysis)
:
Bloom's: Analyze/Evaluate
Example: "Compare two implementations and justify which is more maintainable"
Measurable: Evaluation with justification
C1 (Advanced - Creation/Synthesis)
:
Bloom's: Evaluate/Create
Example: "Design a system architecture for scalable deployment"
Measurable: Original design with trade-off analysis
Proficiency Progression Rule
Lessons should progress A1→A2→B1 within a chapter (not jump from A1 to C1).
Three-Role AI Partnership Objectives (Section IIb, Constitution v4.0.1)
CRITICAL
AI-native learning objectives must include ability to work WITH AI in bidirectional co-learning partnership (per Section IIb forcing functions), not just independently.
Traditional Objective Format
:
LO-001: Implement user authentication (independent skill)
AI-Native Objective Format
:
LO-001: Implement user authentication working with AI as co-learning partner
- Use AI as Teacher: Learn security patterns from AI suggestions
- Use AI as Student: Refine AI's output through clear specifications
- Use AI as Co-Worker: Iterate toward optimal solution collaboratively
"Install and configure existing MCP servers and integrate them into a Python application"
blooms_level
:
"Apply"
context
:
"Using MCP in real applications"
prerequisites
:
-
"Understand MCP architecture"
-
"Can write Python clients and manage dependencies"
assessment_method
:
"Code exercise: integrate MCP server into working application"
success_criteria
:
-
"Correctly configures MCP client"
-
"Application successfully calls MCP server tools"
-
"Responses are properly handled and integrated"
-
id
:
"LO-MCP-003"
statement
:
"Design and implement a custom MCP server that provides tools for a specific domain"
blooms_level
:
"Create"
context
:
"Building reusable MCP tools"
prerequisites
:
-
"Can integrate existing MCP servers"
-
"Understand server-side architecture and tool definitions"
assessment_method
:
"Project: implement MCP server with documentation"
success_criteria
:
-
"Server correctly implements MCP protocol"
-
"Tools are well-defined with clear descriptions"
-
"Client can successfully call server tools"
-
"Code is documented and maintainable"
Key Considerations for Advanced Topics
:
These topics may require deeper prerequisites (solid Python, API design knowledge)
Use spiral learning: revisit concepts at increasing depth (basic agent → advanced orchestration)
Include both theory (understanding architecture) and practice (implementing tools)
Assessment should emphasize real problem-solving, not just definitions
Tips for Success
Start with the end in mind
What should learners be able to DO, not what will you teach?
Make them testable
Ask "How would I know if this objective was met?"
Use consistent Bloom's level progression
Build from simple to complex
Include prerequisites
Help learners self-assess readiness
Validate often
Use the validation script to catch vague language
Test with real learners
Objectives often need refinement based on actual usage
Ready to generate objectives?
Provide:
Topic/concept to teach
Target learner level (beginner/intermediate/advanced)
Available teaching time
End goal (build project? understand theory? debug code?)
Or paste existing objectives and I'll help make them more measurable!