# Code Smell 279 - Loop Premature Optimization

> TL;DR: Don't optimize loops without a clear need and concrete real-world evidence

# Problems

- [Premature Optimization](https://maximilianocontieri.com/code-smell-20-premature-optimization)
- Reduced readability
- Increased complexity
- Difficult to maintain
- Slower debugging

# Solutions

1. Keep it simple
2. Prioritize clarity
3. Avoid premature tweaks
4. Refactor when needed

# Context

You might think optimizing every loop will improve performance, but this approach backfires when you sacrifice clarity for unproven gains.

Writing complex code to avoid *hypothetical* slowdowns often makes it hard for others (and your future self) to understand or debug your code.

It would be best if you prioritized readability. 

Keep loops simple and only optimize when you know a bottleneck exists in *real usage* scenarios.

# Sample Code

## Wrong

[Gist Url]: # (https://gist.github.com/mcsee/6ab1403ec709624ed0d20633258fed02)

```python
# Over-optimized and less readable
result = [item.process() for item in items if item.is_valid()]
```

## Right

[Gist Url]: # (https://gist.github.com/mcsee/3d6ccf81d53eeb55dfd100c8e14be382)

```python
# Clearer and easier to understand
result = []
for item in items:
    if item.is_valid():
        result.append(item.process())
```

# Detection

[X] Semi-Automatic 

Look for list comprehensions or complex loop structures that optimize performance without real performance benchmark evidence. 

# Exceptions

- Concrete evidence on mission-critical algorithms

# Tags

- Premature Optimization

# Level

[X] Intermediate

# AI Generation

AI tools often prioritize functional correctness so that they might produce clean, simple loops. 

if you prompt AI for performance at all costs, it could create over-optimized code even for straightforward tasks.

# AI Detection

With proper instructions to stress readability and maintainability, AI can detect and fix this smell by simplifying loops and choosing clarity over premature optimization.

## Try Them!

*Remember: AI Assistants make lots of mistakes*

| Without Proper Instructions    | With Specific Instructions |
| -------- | ------- |
| [ChatGPT](https://chat.openai.com/?q=Correct+and+explain+this+code%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | [ChatGPT](https://chat.openai.com/?q=Convert+it+to+more+declarative+removing+optimizations%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) |
| [Claude](https://claude.ai/new?q=Correct+and+explain+this+code%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | [Claude](https://claude.ai/new?q=Convert+it+to+more+declarative+removing+optimizations%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) |
| [Perplexity](https://perplexity.ai/?q=Correct+and+explain+this+code%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | [Perplexity](https://perplexity.ai/?q=Convert+it+to+more+declarative+removing+optimizations%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) |
| [Copilot](https://www.bing.com/chat?showconv=1&sendquery=1&q=Correct+and+explain+this+code%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | [Copilot](https://www.bing.com/chat?showconv=1&sendquery=1&q=Convert+it+to+more+declarative+removing+optimizations%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) |
| [Gemini](https://gemini.google.com/?q=Correct+and+explain+this+code%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | [Gemini](https://gemini.google.com/?q=Convert+it+to+more+declarative+removing+optimizations%3A+%60%60%60python%0D%0A%23+Over-optimized+and+less+readable%0D%0Aresult+%3D+%5Bitem.process%28%29+for+item+in+items+if+item.is_valid%28%29%5D%0D%0A%60%60%60) | 

# Conclusion

Don’t sacrifice readability by optimizing too early.

You can optimize later if a loop becomes a proven bottleneck. 

Until then, clear and simple code will save time, reduce bugs, and make it more maintainable.

# Relations

%[https://maximilianocontieri.com/code-smell-20-premature-optimization]

%[https://maximilianocontieri.com/code-smell-129-structural-optimizations]

%[https://maximilianocontieri.com/code-smell-06-too-clever-programmer]

# Disclaimer

Code Smells are my [opinion](https://maximilianocontieri.com/i-wrote-more-than-90-articles-on-2021-here-is-what-i-learned).

# Credits

Photo by [Tine Ivanič](https://unsplash.com/@tine999) on [Unsplash](https://unsplash.com/photos/spiral-concrete-staircase-u2d0BPZFXOY)
        
* * *

> More computing sins are committed in the name of efficiency without necessarily achieving it than for any other single reason.

_W. A. Wulf_ 
 
%[https://maximilianocontieri.com/software-engineering-great-quotes]

* * *

This article is part of the CodeSmell Series.

%[https://maximilianocontieri.com/how-to-find-the-stinky-parts-of-your-code]
