Technical debt in ML systems in MLOps - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When working with machine learning systems, technical debt can slow down how fast the system runs as it grows.
We want to understand how the cost of running or updating ML systems changes as they get bigger or more complex.
Analyze the time complexity of the following ML pipeline update process.
for model in deployed_models:
for data_batch in new_data:
preprocess(data_batch)
predictions = model.predict(data_batch)
evaluate(predictions)
retrain(model, full_training_data)
This code updates each deployed model by processing new data batches, making predictions, evaluating them, and then retraining the model.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over models and data batches.
- How many times: For each model, it processes every data batch, then retrains once per model.
As the number of models or data batches grows, the total work grows by multiplying these counts.
| Input Size (models x data batches) | Approx. Operations |
|---|---|
| 10 models x 10 batches | ~100 operations plus 10 retrains |
| 100 models x 100 batches | ~10,000 operations plus 100 retrains |
| 1000 models x 1000 batches | ~1,000,000 operations plus 1000 retrains |
Pattern observation: The work grows quickly as both models and data batches increase, multiplying the total steps.
Time Complexity: O(m * n)
This means the time to update grows roughly by multiplying the number of models (m) and data batches (n).
[X] Wrong: "The time grows only with the number of models, not data batches."
[OK] Correct: Each model processes all data batches, so both counts multiply the total work.
Understanding how technical debt affects ML system updates helps you explain real challenges in keeping models fresh and efficient.
"What if retraining was done only once for all models together? How would the time complexity change?"
Practice
technical debt in ML systems usually mean?Solution
Step 1: Understand the meaning of technical debt
Technical debt refers to shortcuts or quick fixes made during development that cause issues later.Step 2: Relate to ML systems context
In ML systems, this means messy code, missing tests, or poor design that slows future work.Final Answer:
Quick fixes that cause problems later -> Option CQuick Check:
Technical debt = Quick fixes causing future problems [OK]
- Confusing technical debt with adding features
- Thinking it means more hardware
- Assuming it is about documentation only
Solution
Step 1: Identify characteristics of technical debt
Technical debt often shows as messy code and missing tests.Step 2: Match options to these characteristics
Messy code with no tests describes messy code with no tests, which is a clear sign of technical debt.Final Answer:
Messy code with no tests -> Option AQuick Check:
Messy code + no tests = Technical debt [OK]
- Choosing well-documented code as debt
- Confusing deployment pipelines with debt
- Thinking version control causes debt
def train_model(data):
model = Model()
model.train(data)
return model
model1 = train_model(data1)
model2 = train_model(data2)
# Later code uses model1 and model2What technical debt risk does this code have?
Solution
Step 1: Analyze the code behavior
The function trains models but does not save them to disk or persistent storage.Step 2: Identify technical debt risk
Not saving models means retraining is needed every time, causing inefficiency and maintenance problems.Final Answer:
Model objects are not saved for reuse -> Option AQuick Check:
Models not saved = Technical debt risk [OK]
- Assuming code is clean without checking persistence
- Ignoring data validation as debt here
- Confusing duplicate code with saving models
AttributeError: 'NoneType' object has no attribute 'predict'
Which technical debt issue is most likely causing this?
Solution
Step 1: Understand the error message
The error means the model variable is None, so it was not loaded or saved correctly.Step 2: Link error to technical debt
Not saving/loading models properly is a common technical debt causing runtime failures.Final Answer:
Model object was not properly saved or loaded -> Option DQuick Check:
None model = save/load issue = Technical debt [OK]
- Blaming syntax errors for runtime NoneType errors
- Assuming data preprocessing caused this error
- Ignoring model persistence issues
Solution
Step 1: Identify best practices to reduce technical debt
Automated tests and version control improve code quality and track changes, reducing debt.Step 2: Evaluate options for reliability and update speed
Add automated tests and version control for models and code supports reliability and faster updates by preventing errors and managing versions.Final Answer:
Add automated tests and version control for models and code -> Option BQuick Check:
Tests + version control = Less technical debt [OK]
- Skipping validation to save time increases debt
- Using shortcuts adds more debt
- Ignoring documentation harms maintainability
