Table of Contents
- Introduction
- Data file Directory Structure
- Change Management Workflow
- Roadmap JSON file
- Rel-Links JSON files
- Pipeline Overview
Introduction
This repository design is for the automation of training and evaluation requirements, traceability, and metrics. Below are the requirements of our organization's Master Training Tasks List (MTTL).
- Must contain all necessary Knowledge, Skills, Abilities, and Tasks (KSA&Ts) for the organization's work roles
- We must be able to link every KSA&T to "one or many" work roles
- The proficiency of each KSA&T as they relate to their respective work role.
- Should be able to trace the training required to accomplish a specific KSA&T at a specific proficiency level
- Should be able to trace the evaluation material to accomplish a specific KSA&T at a specific proficiency level
- Individuals should be able to submit a change management request to add/remove/modify a work role KSA&T.
We have chosen not to use a traditional database for a few reasons: One, traditional databases do not provide the foundational tools necessary to operate in the "Agile" paradigm. Git (gitlab) provides the infrastructure for change management, distribution of work, and more. Two, gaining access to a Relational/Non-Relational database on our organization's enterprise network takes too much time. Limiting the necessary requirements to operate the tool also allows for potentially fast exportation of the code base to other networks/organizations.
In short, we are using Git and Gitlab for change and project management, Gitlab continuous integration (CI) pipelines and a disposable MongoDB service in the pipeline to join the data and build the presentation layer, and Gitlab Pages to host the presentation layer to view the information. To do this we must first organize the data in a logical manner to promote scalability/sustainability. The items below will be necessary to maintain this concept.
- The MTTL repo will not contain a single MTTL file. Instead, the MTTL file will be an artifact that is produced in the repo's CI/CD pipeline.
- The meat of what makes the MTTL repo is the knowledge, skill, ability, and task files, and the WORK-ROLES.json and SPECIALIZATIONS.json files that contain a list of all work-roles and specializations.
- The knowledge, skill, ability, and task files will be datasets of all of the knowledge, skills, abilities, tasks that are required for the organization. These items will only have the KSA&T to KSA&T relationship information, topic information, requirement source information, and available training and evaluation information. Proficiency of work roles/specializations will be located inside the TTL files in the 'work-roles' folder respectively.
- The WORK-ROLES.json and SPECIALIZATIONS.json files will be dictionaries of work role/specialization specific information which will contain work role/specialization repository URLs that will contain progression information for the MTTL Training Roadmap
Data file Directory Structure
MTTL Repo
├─ docs
├─ frontend
├─ scripts
├─ requirements
│ ├─ KNOWLEDGE.json
│ ├─ SKILLS.json
│ ├─ ABILTIES.json
│ └─ TASKS.json
├─ rel-links
│ ├─ training
│ | └─ *.rel-links.json
│ └─ eval
│ └─ *.rel-links.json
├─ work-roles
│ └─ *.json
├─ .gitlab-ci.yml
├─ CODEOWNERS
├─ mttl.py
├─ Roadmap.json
- docs: mdbooks user documentation
- frontend: directory for the MTTL Gitlab static page
- scripts: directory with all source CI/CD python and bash scripts
- requirements: directory with all MTTL KSAT JSON files
- rel-links: directory with training/eval relationship-link files
- work-roles: directory with work-role JSON files containing requirement mappings
- .gitlab-ci.yml: Gitlab CI/CD configuration file
- CODEOWNERS: Gitlab ownership file to designate necessary approval for changes to specific files
- mttl.py: Entry point maintenance script
- Roadmap.json: file to designate work role progression and repository links to material on training/evaluations
Change Management Workflow
The change management workflow is depicted below.
graph TD;
NEW_REQUEST[NEW CUSTOMER REQUEST]-->|ASSIGN POC| REVIEW(REVIEW REQUEST);
REVIEW-->CLARIFY(CLARIFY REQUEST);
CLARIFY-->RESPONSE{CUSTOMER RESPONSE};
RESPONSE-- Revise -->CLARIFY;
RESPONSE-- Accept -->CREATE(CREATE MERGE REQUEST);
CREATE-->UPDATE(MAKE UPDATES);
UPDATE-->GOVREVIEW(GOV/CUSTOMER REVIEW);
GOVREVIEW-->APPROVED{CHANGES APPROVED};
APPROVED-- No -->UPDATE;
APPROVED-- Yes -->DONE[MERGED TO MASTER]
APPROVED-- Rejected -->DEAD[CLOSED WITHOUT MERGE]
Roadmap JSON File
This section will describe the Roadmap.json file. This file currently house information about the work role progression within the squadron which is used to generate the Training Roadmap
Rel-Links JSON Files
This section describes the *.rel-links.json file; rel is short for relation. There will be many of these files inside the 'rel-links' folder that will describe what KSAT and proficiency actual training/evaluation material adheres to. These file will be used in the pipeline to create metrics and visualization for the MTTL. You can find the template for these json object in the json_templates.py file under the trn_rel_link_item_template()
and evl_rel_link_item_template()
functions.
Pipeline Overview
graph TD;
START-->STAGE_VALIDATE[Stage: Validate]
STAGE_VALIDATE-- Job -->VALIDATE_docs([Docs])
STAGE_VALIDATE-- Job -->VALIDATE_K([Knowledge])
STAGE_VALIDATE-- Job -->VALIDATE_S([Skills])
STAGE_VALIDATE-- Job -->VALIDATE_A([Abilities])
STAGE_VALIDATE-- Job -->VALIDATE_T([Tasks])
STAGE_VALIDATE-- Job -->VALIDATE_TRN_REL_LINKS([Training Rel-Links])
STAGE_VALIDATE-- Job -->VALIDATE_EVL_REL_LINKS([Eval Rel-Links])
STAGE_VALIDATE-- Job -->VALIDATE_WORK_ROLES([Work-Roles])
VALIDATE_docs-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_K-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_S-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_A-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_T-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_TRN_REL_LINKS-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_EVL_REL_LINKS-->STAGE_PRE_BUILD[Stage: Pre-Build]
VALIDATE_WORK_ROLES-->STAGE_PRE_BUILD[Stage: Pre-Build]
STAGE_PRE_BUILD-- Job -->PRE_BUILD_PREP([Build Prep])
PRE_BUILD_PREP-->STAGE_BUILD[Stage: Build]
STAGE_BUILD-- Job -->BUILD_MTTL([MTTL Dataset])
STAGE_BUILD-- Job -->BUILD_TTL([TTL Dataset])
STAGE_BUILD-- Job -->BUILD_EXTRAS([Extra Datasets])
STAGE_BUILD-- Job -->BUILD_METRICS([MTTL Metrics])
STAGE_BUILD-- Job -->BUILD_ROADMAP([Roadmap])
STAGE_BUILD-- Job -->BUILD_Docs([Docs])
BUILD_MTTL-->STAGE_TEST[Stage: Test]
BUILD_TTL-->STAGE_TEST[Stage: Test]
BUILD_EXTRAS-->STAGE_TEST[Stage: Test]
BUILD_METRICS-->STAGE_TEST[Stage: Test]
BUILD_ROADMAP-->STAGE_TEST[Stage: Test]
BUILD_Docs-->STAGE_TEST[Stage: Test]
STAGE_TEST-- Job -->TEST_DUPS([Test Identical KSATs])
STAGE_TEST-- Job -->TEST_FIND([Test MTTL find])
STAGE_TEST-- Job -->TEST_INSERT([Test MTTL insert])
STAGE_TEST-- Job -->TEST_MODIFY([Test MTTL modify])
STAGE_TEST-- Job -->TEST_DELETE([Test MTTL delete])
STAGE_TEST-- Job -->TEST_PAGES([Test Pages])
TEST_DUPS-->STAGE_DEPLOY[Stage: Deploy]
TEST_FIND-->STAGE_DEPLOY[Stage: Deploy]
TEST_INSERT-->STAGE_DEPLOY[Stage: Deploy]
TEST_MODIFY-->STAGE_DEPLOY[Stage: Deploy]
TEST_DELETE-->STAGE_DEPLOY[Stage: Deploy]
TEST_PAGES-->STAGE_DEPLOY[Stage: Deploy]
STAGE_DEPLOY-- Job -->DEPLOY_PAGES([Deploy to GitLab Static Pages])
DEPLOY_PAGES-->FINISH>User can see MTTL changes]