# utsapoddar/msds-time-estimator architecture

> Architecture diagram of the GitHub repository utsapoddar/msds-time-estimator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/utsapoddar/msds-time-estimator
- Repository: https://github.com/utsapoddar/msds-time-estimator
- Video tour (about a minute): https://gitdiagram.com/utsapoddar/msds-time-estimator/video

## Overview

MSDS Time Estimator turns review observations and a learner’s completed-course history into personalized course-duration and degree-total estimates, with uncertainty intervals. The main workflow refreshes review data, builds Bayesian course-hour posteriors, uses anchor courses and learner inputs to estimate pace, then predicts target-course durations and aggregates a selected degree plan. A separate simplified predictor offers a lighter history-ratio alternative; the course decision matrix supports ranking courses. The graph follows documented capabilities and sampled code; some links to unsampled implementations are omitted where call ownership is unclear.

Main entry points: [`modules/pipeline.py`](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py) (Prediction pipeline), [`modules/form_intake.py`](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/form_intake.py) (Review intake), [`modules/simplified_predictor.py`](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/simplified_predictor.py) (Simplified predictor), [`course_params.csv`](https://github.com/utsapoddar/msds-time-estimator/blob/main/course_params.csv) (Course parameters)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Review intake"]
  node_form_intake["Review intake<br/>[form_intake.py]"]
  node_observations[("Review observations<br/>[data_points.csv]")]
  node_pending_reviews[("Pending reviews")]
end

subgraph group_model["Estimation model"]
  node_course_params[("Course parameters<br/>[course_params.csv]")]
  node_bayesian["Bayesian updates<br/>[bayesian_priors.py]"]
  node_pipeline["Prediction pipeline<br/>[pipeline.py]"]
  node_latent["Skill factors<br/>[latent_factors.py]"]
  node_topics["Topic similarity<br/>[course_topics.py]"]
  node_focus["Focus adjustment<br/>[focus_ratio.py]"]
end

subgraph group_results["Predictions"]
  node_marginals["Time distributions"]
  node_course_predictions["Course estimates<br/>[pipeline.py]"]
  node_degree_total["Degree total<br/>[pipeline.py]"]
  node_example["Example run<br/>[example_run.py]"]
end

subgraph group_alternatives["Alternatives"]
  node_simplified["Simplified predictor"]
  node_guide_priors["Guide priors<br/>[guide_priors.py]"]
  node_decision_matrix["Course ranking"]
end

node_learner(("Learner"))
node_reviews_service["Published reviews"]

node_reviews_service -->|"provides reviews"| node_form_intake
node_form_intake -->|"refreshes data"| node_observations
node_form_intake -->|"queues submissions"| node_pending_reviews
node_learner -->|"supplies profile"| node_pipeline
node_course_params -->|"loads parameters"| node_pipeline
node_observations -->|"loads observations"| node_pipeline
node_pipeline -->|"updates posteriors"| node_bayesian
node_pipeline -->|"estimates skills"| node_latent
node_pipeline -->|"transfers pace"| node_topics
node_pipeline -->|"adjusts schedule"| node_focus
node_pipeline -->|"builds intervals"| node_marginals
node_pipeline -->|"produces estimates"| node_course_predictions
node_pipeline -->|"aggregates plan"| node_degree_total
node_example -->|"runs predictions"| node_pipeline
node_learner -->|"supplies history"| node_simplified
node_course_params -->|"provides baselines"| node_simplified
node_guide_priors -.->|"provides difficulty fit"| node_simplified
node_learner -->|"tunes priorities"| node_decision_matrix
node_course_predictions -.->|"informs workload"| node_decision_matrix

click node_form_intake "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/form_intake.py"
click node_observations "https://github.com/utsapoddar/msds-time-estimator/blob/main/data_points.csv"
click node_pending_reviews "https://github.com/utsapoddar/msds-time-estimator/blob/main/data_points_review.csv"
click node_course_params "https://github.com/utsapoddar/msds-time-estimator/blob/main/course_params.csv"
click node_bayesian "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/bayesian_priors.py"
click node_pipeline "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py"
click node_latent "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/latent_factors.py"
click node_topics "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/course_topics.py"
click node_focus "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/focus_ratio.py"
click node_marginals "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/lognormal_marginals.py"
click node_course_predictions "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py"
click node_degree_total "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py"
click node_example "https://github.com/utsapoddar/msds-time-estimator/blob/main/example_run.py"
click node_simplified "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/simplified_predictor.py"
click node_guide_priors "https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/guide_priors.py"
click node_decision_matrix "https://github.com/utsapoddar/msds-time-estimator/blob/main/course_decision_matrix.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_form_intake,node_observations,node_pending_reviews,node_reviews_service toneBlue
class node_course_params,node_bayesian,node_pipeline,node_latent,node_topics,node_focus toneAmber
class node_marginals,node_course_predictions,node_degree_total,node_example toneMint
class node_simplified,node_guide_priors,node_decision_matrix toneRose
class node_learner toneIndigo
```

## Components

### Review intake

- [Review intake](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/form_intake.py): `modules/form_intake.py`
- [Review observations](https://github.com/utsapoddar/msds-time-estimator/blob/main/data_points.csv): `data_points.csv`
- [Pending reviews](https://github.com/utsapoddar/msds-time-estimator/blob/main/data_points_review.csv): `data_points_review.csv`

### Estimation model

- [Course parameters](https://github.com/utsapoddar/msds-time-estimator/blob/main/course_params.csv): `course_params.csv`
- [Bayesian updates](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/bayesian_priors.py): `modules/bayesian_priors.py`
- [Prediction pipeline](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py): `modules/pipeline.py`
- [Skill factors](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/latent_factors.py): `modules/latent_factors.py`
- [Topic similarity](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/course_topics.py): `modules/course_topics.py`
- [Focus adjustment](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/focus_ratio.py): `modules/focus_ratio.py`

### Predictions

- [Time distributions](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/lognormal_marginals.py): `modules/lognormal_marginals.py`
- [Course estimates](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py): `modules/pipeline.py`
- [Degree total](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/pipeline.py): `modules/pipeline.py`
- [Example run](https://github.com/utsapoddar/msds-time-estimator/blob/main/example_run.py): `example_run.py`

### Alternatives

- [Simplified predictor](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/simplified_predictor.py): `modules/simplified_predictor.py`
- [Guide priors](https://github.com/utsapoddar/msds-time-estimator/blob/main/modules/guide_priors.py): `modules/guide_priors.py`
- [Course ranking](https://github.com/utsapoddar/msds-time-estimator/blob/main/course_decision_matrix.py): `course_decision_matrix.py`

### Other components

- **Learner**
- **Published reviews**

## Connections

- Published reviews → Review intake: provides reviews
- Review intake → Review observations: refreshes data
- Review intake → Pending reviews: queues submissions
- Learner → Prediction pipeline: supplies profile
- Course parameters → Prediction pipeline: loads parameters
- Review observations → Prediction pipeline: loads observations
- Prediction pipeline → Bayesian updates: updates posteriors
- Prediction pipeline → Skill factors: estimates skills
- Prediction pipeline → Topic similarity: transfers pace
- Prediction pipeline → Focus adjustment: adjusts schedule
- Prediction pipeline → Time distributions: builds intervals
- Prediction pipeline → Course estimates: produces estimates
- Prediction pipeline → Degree total: aggregates plan
- Example run → Prediction pipeline: runs predictions
- Learner → Simplified predictor: supplies history
- Course parameters → Simplified predictor: provides baselines
- Guide priors → Simplified predictor: provides difficulty fit
- Learner → Course ranking: tunes priorities
- Course estimates → Course ranking: informs workload
