309 Blog Posts To Learn About Clean Code

cover
17 Jul 2026

Let's learn about Clean Code via these 309 free blog posts. They are ordered by HackerNoon reader engagement data. Visit the Learn Repo or LearnRepo.com to find the most read blog posts about any technology.

Clean code is a software development philosophy emphasizing code readability, maintainability, and understandability. It matters because it reduces technical debt, improves collaboration among developers, and makes software easier to debug and extend over time.

1. Mastering SOLID Principles Like the Back of Your Hand in Just 8 Minutes!

Boost Performance, Maintainability, and Scalability with SOLID Principles in React Applications!

2. 40+ Thought-Provoking Software Engineering Quotes

Sometimes a short thought can bring amazing ideas. There are some great quotes I’ve been collecting. I use them as inspiration or motto for some articles.

3. Using Black To Auto Format Your Python

How to stop worrying and embrace Auto Formatting in your python code.

4. Are Implicit Operators a Path to Clean Code or a Buggy Nightmare?

Implicit operators are a C# feature that can make our code more readable and expressive. But beware! Misuse can backfire and cause a great deal of headaches!

5. Adopting the Repository Pattern for Enhanced Backend Development With FastAPI

In this article, we'll cover the benefits of utilizing the repository pattern in building backend systems with FastAPI.

6. Code Review Anti-Patterns: How to Stop Nitpicking Syntax and Start Improving Architecture

Code reviews are pricey. Let machines catch style issues so humans can focus on what matters: security, scalability, and architecture.

7. Python Static Analysis Tools: Clean Your Code Before Running

Review of essential modern Python code static analysis tools.

8. How To Write Decoupled Code with MediatR: The Mediator Pattern

I recently wrote a blog post introducing some of my favourite NuGet packages: My Top 4 NuGet Packages for ASP.NET Core. In that post, I briefly introduced a package called MediatR. Today, I will dedicate this post to revisiting MediatR in further detail.

9. The Clean Code Book for JavaScript Developers: A Quick Summary

This blog post summarizes the book “Clean Code” written by Robert Martin on how to write a readable and maintainable code.

10. Making Your Code Look Pretty

When you are new to programming, you’re focused on making your code work—not on making it look pretty.

11. 📚 Android Components Architecture in a Modular Word

Marvel kotlin sample application using android components architecture in a modular project

12. Using Kotlin Extension Functions: The Good, the Bad, and the Ugly

Extension functions allow you to natively implement the "decorator" pattern. There are best practices for using them.

13. Clean Code: Single Responsibility, Open/Closed, Liskov Substitution SOLID Principles in TS [Part 4]

In this article, we will look at the three first SOLID principles: The Single Responsibility Principle, the Open/Closed Principle and the Liskov Principle.

14. 400+ Thought-Provoking Software Engineering Quotes

The most complete curated collection of software and programming quotes

15. 100 Pieces of Programming Advice from the Book Clean Code by Robert Martin

Clean Code by Robert C. Martin is the most recommended programming book of all time. There’s a good reason why.

16. A Deeper Dive Into Log Enrichment

In this article, we will conclude reviewing how logging concerns and code can be separated and decoupled from infrastructure and business code.

17. It’s 2023, But We Still Need to Talk About Nested Styles in CSS

Why don't I need to use nested css styles in my product and why is it a bad practice.

18. Why You Should Always Avoid Encoding Type Into Names

The Rule: When naming a variable, don't encode it's type into its name, even in a dynamically typed language.

19. How to Find the Stinky Parts of Your Code (Part I)

The code smells bad. Let’s see how to change the aromas. In this series, we will see several symptoms and situations that make us doubt the quality of our developments. We will present possible solutions. Most of these smells are just hints of something that might be wrong. They are not rigid rules.

20. How to Get Rid of Annoying IFs Forever

Why the first instruction we learn to program should be the last to use.

21. The Double-Edged Sword of Atomic Design

Unlock the potential of Atomic Design in UI development: Benefits, drawbacks, and a comprehensive case study with React.

22. Continuous Integration (CI) Branching Strategies: What You Need to Know

When you have multiple developers working on the same code, you may face a lot of challenges when merging. That's where branches come in.

23. Software Engineer Maxi Contieri on writing about “boring” fundamentals

Maxi is a software engineer and teacher from Argentina. Learn about this talented HackerNoon Writer!

24. Dependency Injection in Dart: An Easy Guide for Beginners

In computer science, a dependency occurs when one component (class, module, etc.) relies on the functionality of another component to operate correctly.

25. Enhance Your Code Architecture With SOLID Principles (with Swift Examples)

Learn how to apply SOLID principles in Swift with clear examples. Understand SRP, OCP, LSP, ISP, and DIP to write clean, scalable, and maintainable code.

26. How To Create a Python Data Engineering Project with a Pipeline Pattern

In this article, we cover how to use pipeline patterns in python data engineering projects. Create a functional pipeline, install fastcore, and other steps.

27. Using A Switch Statement in Python

Yes, you read that right. If you have been coding for a while and if Python is not the first programming language that you started with, then you definitely know what a Switch statement is, and appreciate how flawless it is, when you need to factor in multiple conditions/cases for a control flow.

28. Mastering Modal Dialogs in React Like a Pro

Explore a structured approach leveraging hooks, context, lazy loading, and Suspense for efficient and scalable dialog integration in React applications.

29. AI Coding Tip 004 - Why You Should Use Modular Skills

Create small, specialized files with specific rules to keep your AI focused, accurate and preventing hallucinations.

30. How to Find the Stinky Parts of Your Code [Part XXXV]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

31. How to Improve Code and Avoid Fights on Review

Unit tests and laziness: a dispute-free method to boost individual skills within tech teams.

32. Using Guard Clauses to Clean Up Your Conditionals [A How-To Guide]

One of the first techniques developers learn is the if/else statement. For obvious reasons if/else statements are a primary way to create logic trees. This is where we handle calculations differently depending on the input variables. However, complex and nested if/else statements become a cognitive burden to reason about. Therefore, it can be hard for the next developer to understand quickly.

33. Principles of a Clean Relational Database

The article describes how a relational database should be designed to properly work in OLTP mode.

34. AI Coding Tools Are Bad News for Lazy Programmers

AI-generated code outperforms lazy programmers. Software jobs are declining, but centaurs will survive.

35. Code That Cleans Itself: A Journey into Automated Refactoring

Join Ayse and her son Mert in a tale that weaves lessons from a teenager's messy room into innovative code refactoring techniques.

36. Helpful Tips for Writing Clean Code

In this short, but nonetheless useful article, I have summarized the most beneficial tips for writing clean code. These rules are independent of the language you use and are invaluable for both beginners and experienced programmers.

37. Clean Code: Functions and Methods in TypeScript [Part 1]

Learn how to write cleaner code by avoiding common mistakes in functions and methods.

38. 4 Simple Habits For Engineering Teams To Beat Technical Debt

In the previous article, we looked at the macro trends that make tech debt inevitable. However, even though tech debt is a fact of life, technical bankruptcy doesn't have to be. So this time, let's look at the methods we can employ to avoid technical bankruptcy and save everyone a lot of grief, time, and money.

39. A Deeper Look into Clean Architecture: Flutter vs Kotlin

Flutter app vs Kotlin app. MVI Clean Code Freezd and Riverpod

40. AI Coding Tip 003 - Force Read-Only Planning

Set your AI code assistant to read-only state before it touches your files.

41. Keeping Your Code in Monorepo -Pros and Cons

42. Less Dirty Code

Clean Code is a Lie and Nobody Writes it.

43. Code Smell 260 - Crowdstrike NULL

Learn how to avoid the null trap in privilege mode drivers to prevent system crashes, security risks, and instability.

44. How to Find the Stinky Parts of Your Code [Part XX]: We have Reached 100!

We reached the 100th code smell!

45. How To Fail A Coding Interview

A parable about missed deadlines and over-engineering

46. NO!! GitHub Copilot Will NOT Steal Your Job

GitHub Copilot is not a threat for great software designers. Just a shortcut for lazy ones.

47. Building a Wordle Game Using Test-Driven Development in 25 Minutes

Developing a complete word game is very easy with TDD

48. Decouple Your Go Components by Leveraging Mediator and Event Aggregator Patterns

Decouple your Go components by leveraging Mediator and Event Aggregator patterns. Learn how to use open-source mediator / event aggregator library called mob.

49. Clean Code: Interface Segregation, Dependency Inversion, SOLID Principles in TS [Part 5]

Dive into the advanced concepts of clean code in TypeScript, focusing on the Interface Segregation Principle and Dependency Inversion Principle.

50. Code Smell 316 - The Syntax Police Review Anti-Pattern

Syntax-focused code reviews hide architecture flaws, waste human attention, and lower quality. Automating style checks lets teams review what truly matters.

51. The Typescript Quirks That Pushed me to Create a New Dependency Injection Library

The Typescript quirks that pushed me to reinvent the wheel by creating a new-brand Dependency Injection library for Javascript.

52. Code like You're Building a Lego Castle

The article compares coding to building a castle with Legos and emphasizes the importance of following best practices to avoid mistakes and build a sturdy code.

53. How to Find the Stinky Parts of Your Code (Part II)

There are more code smells. Let’s keep changing the aromas. We see several symptoms and situations that make us doubt the quality of our development. Let's look at some possible solutions.

54. The Dirty Code Problem: Improve Your Game with Good Naming Practices

The Rule: Whenever you name a variable, function, or class, ask if it is concise, honest, expressive, and complete.

55. How too Much Love for Your Code Can Hurt the Product

A story about how important it is to keep a smooth balance between complexity and simplicity while building software.

56. Code Smell 07 - Avoid Boolean Variables

Avoid Boolean variables, they lead to conditional logic and force you to write Ifs. Create polymorphic states instead

57. Clean Code: Naming and Code Composition in TypeScript [Part 2]

Learn best practices for writing clear, efficient, and readable code that saves time and enhances developer productivity.

58. Writing Clean Front End Code

Writing clean front end code for a resilient, readable front end code repository.

59. How to Find The Stinky Parts of Your Code (Part X)

More code smells. No joke. We see several symptoms and situations that make us doubt the quality of our development.

60. How to Write Clean, Well Maintained Code Using a Static Analyzer and PMD

A static analyzer can reduce the possibility of bugs, such as when you accidentally overwrite a variable with another value.

61. How to Find the Stinky Parts of Your Code (Part III)

There are yet more code smells. Let’s keep changing the aromas. We see several symptoms and situations that make us doubt the quality of our development.

62. Untangling Heavily Nested Python Code

Reducing the nesting level of code by applying a guard clause.

63. I Wrote More than 90 Articles in 2021 and Here is What I Learned in a Nutshell

This article summarizes my experience as a writer during the pandemic year 2021

64. Code Smell 252 - NullCustomer

65. How to Write Clean Code and Save Your Sanity

Learn how to write clean code that will save you time, headaches, and sanity. This article covers practical strategies & tools to help you elevate your coding.

66. Mastering RxJS Memory Leaks: The Leak Detective Handbook

Memory leaks happen when Observables linger around in memory, long after they’ve finished their tasks. They’re no longer needed, but they stick around anyway, t

67. 6 Awesome Tips To Help You With CSS Selectors

Choosing the right CSS selectors can be a lot of trouble and there’s so much information out there that it can even be a little overwhelming at times. Words like “combinators” and “specificity” get thrown around a lot, you read how greater specificity increases efficiency but then how ID’s (the most specific) should be avoided like the plague, according to some. What’s a poor coder to do as he navigates the cascading landscape of style sheets? Hopefully by the end of this I will have been able to outline some good practices, and provide enough additional resources, to clear this issue up for good.

68. How Clean Code is Lowering the Quality of Developers

I believe that software development has a problem with mis-promotion, and over-promotion of "Clean Code".

69. Leveraging Google's Pinject to Write Loosely Coupled Python Code

Dependency Injection(DI) is a set of software design principles that enable engineers to develop loosely coupled code. This stack overflow post is the best ELI5 description of DI:

70. Functional Programming Paradigm in JavaScript

There’s nothing new about Functional Programming. Functional Programming has been around for much longer than OOP as it dates back to the 60s.

71. Code Smell 282 - Bad Defaults and How to Fix Them

Treat unknown responses as unauthorized, not as valid.

72. Code Smell 05 - Comment Abusers

Leave comments just for important design decisions. Don't explain the obvious.

73. How to Find the Stinky Parts of Your Code [Part XXXII]

It smells because there are likely many instances where it could be edited or improved. Most of these smells are just hints of something that might be wrong.

74. Clean Code: Functions and Error Handling in Go: From Chaos to Clarity [Part 1]

Learn how to write clean Go functions that pass code review. Practical patterns for single responsibility, error handling, and the defer statement from 6 years

75. Why is This So Hard?

This article explores what good code is and shares some tenets of good structure.

76. AI Coding Tip 008 - How to Use Spec-Driven Development With AI

Use AI to understand requirements and build a shared mental model while you write the code.

77. Clean Code: Interfaces in Go - Why Small Is Beautiful [Part 3]

Master Go interfaces: why single-method interfaces rule, accept interfaces return structs, and the nil interface gotcha that crashes production. From 6 years of

78. How to Find the Stinky Parts of Your Code [Part XXIV]

Most of these smells are just hints of something that might be wrong. They are not required fixed per se… (You should look into it though.)

79. From Helpful to Harmful: How AI Recommendations Destroyed My OS

Always stay in control when using AI tools. Blind trust can lead you to costly mistakes.

80. Creating a Strong Code Quality Culture in Your Organization

Learn how to build a culture of code quality to improve maintainability, scalability, and efficiency, and stay ahead of the competition.

81. Refactoring 014 - How to Remove IF

The first instruction you learned should be the least you use

82. How to Find the Stinky Parts of Your Code [Part XXII]

Most of these smells are just hints of something that might be wrong. They are not required fixed per se… (You should look into it though.)

83. A Hacker Tried to Steal $566M by Exploiting a Code Smell, Here's How

Yesterday, 2022 Oct 7th one of the larger blockchains had to be halted. This news was shocking since most blockchains are decentralized by definition.

84. Negating 'Side Effects' in Python: A Guide (With Pictures!)

A step-by-step guide on how to refactor side effects in your python code. Examples, pictures, and recipes on how to deal with dirty code with side effects.

85. The Myths and Realities of Bug-Free Code

86. Refactoring 031 - Removing OOPs

Replace vague error messages with specific, actionable feedback that helps users solve problems.

87. Clean Code for Python – Stop Writing Bad Code

Learn key principles from 'Clean Code' by Uncle Bob and apply them to Python. Write clean, readable, and maintainable code with simple yet effective changes.

88. AI Coding Tip 006 - Review Every Line Before You Commit

If you can't explain all your code, don't commit it.

89. Writing clean code: Naming

Code is read more than it is written. To write code we are constantly reading it. Here are 8 rules for writing cleaner code based by choosing better names.

90. How to Setup SonarQube Locally Using Docker

I will explain how you can set up SonarQube locally with docker.

91. AI Coding Tip 001 - Commit Your Code Before Asking For Help From an AI Assistant

Commit your work with a clear message like "feat: manual implementation of X."

92. Code Smell 12 - Null is Schizophrenic and Does Not Exist in The Real-world

Programmers use Null as different flags. It can hint at an absence, an undefined value, en error etc. Multiple semantics lead to coupling and defects.

93. Hack Your Technical Debt: The 1% Better Every Day Challenge

It's easy for technical debt to grow in our codebase. Commit to spending 20 minutes a day for 30 days to tackling technical debt and get 1% better every day.

94. How to Find the Stinky Parts of Your Code [Part XXX]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

95. Clean Code: Structs, Methods, and Composition Over Inheritance [Part 2]

Write cleaner Go code. Learn how structs, methods, and composition replace OOP inheritance the idiomatic Go way.

96. Implement This One Cultural Characteristic to Build A Healthy Codebase

It’s easy to pay lip service to company culture. But few companies actively consider those few cultural characteristics that make a meaningful difference to performance—because that’s the hard part.

97. Changing Keys, Losing Values

When you use mutable objects as keys in hashed collections, changing them breaks contracts.

98. How to Find the Stinky Parts of Your Code [Part XXVII]

Identifying smells in your code and debugging the easy way.

99. How to Find The Stinky Parts of Your Code (Part IX)

Yet more code smells? Aren't them enough?

100. How to Find the Stinky Parts of Your Code [Part XLVI]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

101. Step by Step Wordle Creation With Codex AI

I transcribe the instructions to create a working wordle using natural language.

102. Refactoring 021 - Remove Dead Code

Eliminate unused functions, constants, and "just-in-case" code.

103. Code Smell 236 - What to Do With Excessively Long Code Lines

In this article, I will shed light on the code smell associated with neglecting proper line wrapping and explore why it's considered bad practice

104. Code Smell 293 - You Should Avoid Adding isTesting or Similar Flags

When you add flags like isTesting, you mix testing and production code. This creates hidden paths that are only active in tests.

105. Refactoring 027 - How to Remove Getters

Remove or replace getters with behavior-rich methods that perform operations instead of exposing internal state.

106. Write Cleaner Code with My Top 5 JavaScript Hacks

107. Code Smell 318 - Wasting Time Refactoring Dirty Code

Don't waste time refactoring code that never changes; focus on frequently modified problem areas.

108. Small Commits, Big Wins: How Atomic Changes Transform Developer Life

Learn how atomic Git commits transform developer productivity. Discover practical strategies for cleaner code reviews, faster debugging, and painless deployment

109. Maxi Contieri on Clean Code, Refactoring, and Test-Driven Development

I blog about clean code, refactoring and TDD. I have been working on the industry for the past 25 years

110. 4 Ways Software Engineers Organize Their TODOs

TODOs are a tricky subject for developers. Many codebases are guilty of having TODOs linger around while nobody knows who’s responsible for a TODO or even has the required context to tackle it. Yet, should we feel ashamed for our lingering TODOs?

111. How to Find the Stinky Parts of Your Code [Part XXVI]

How to debug your code the easy way

112. Code Smell 08 - Send Messages Only to Your Direct Acquaintances, Not Their Friends

Send messages only to your direct acquaintances, not their friends.

113. How to Find The Stinky Parts of Your Code [Part XII]

More code smells for your reading pleasure

114. How to Find the Stinky Parts of Your Code [Part XVI]

The most beautiful code, the most beautiful functions, and the most beautiful programs are sometimes not there at all.

115. How to Find the Stinky Parts of Your Code [Part XLVII]

Finding the stinky parts of your code--debugging and programming help for software developers.

116. Refactoring 008 - Variables That Never Change Should Be Constants

Be explicit on what mutates and what doesn't.

117. How to Find the Stinky Parts of Your Code [Part XIX]

New code smells arriving!

118. How to Find the Stinky Parts of Your Code [Part XXI]

Code smells are a classic. It smells because there are likely many instances where it could be edited or improved.

119. Is Dry Code Still Relevant Today?

120. Let's Stop Calling them 'Bugs' - Software Quality is Our Responsibility

The term Bug sounds like an excuse out of our scope infecting our systems. It is not. Software quality is under our control. It is our responsibility to deliver

121. If Your Documentation Takes Two Clicks to Open, Congrats - It’s Already Outdated

An article on effective documentation practices in software development, explaining how to structure specs, READMEs, JavaDocs, and clean code.

122. The Code Is the Documentation; a Paradox That Rings True

The first time I heard someone say: “the code is the documentation”, I thought it sounded completely wrong, like a lazy excuse for not producing documentation.

123. How to Name Things Properly

Perhaps it is not news to everyone that there are two hard things in Computer Science.

124. We Should Get Rid of "Hello, World!" Forever💩

Every tutorial I've read for the last 30 years starts with the infamous 'Hello World' example. This could be one of the reasons we write crappy software.

125. Python — Duplicate For Loops

While developing a program, duplicate pieces of code may occur as a result of choosing of particular data structures.

126. Code Smell 307 - Naive Time Assumptions and How to Fix It

Time is not absolute. Your code breaks when you treat it that way.

127. How to Find the Stinky Parts of Your Code (Part V)

Are we done on code smells? Probably never!

128. Y2K22: The Problem that Caused Millions of Emails Worldwide to go Undelivered

The Y2K22 Bug is the consequence o very bad software design

129. How to Find the Stinky Parts of Your Code [Part XXXIX]

It smells because there are likely many instances where it could be edited or improved.

130. Top Coding Principles To Live By

I want to share basic concepts on how to write robust and good maintainable code. They will allow you to write better and more maintainable code.

131. Everything You Need to Know About Dead Code

A practical guide to identifying, understanding, and safely cleaning up dead code to keep your codebase fast, clean, and maintainable.

132. Code Smell 238 - Dealing With Entangled Code

Learn practical solutions to common Python code problems related to readability and scoping.

133. Code Smell 308 - The Key to Safer, Cleaner, More Polymorphic Code

Avoid methods that return Object, Any, or null instead of specific types. Make them fully polymorphic

134. How to Find The Stinky Parts of Your Code (Part VI)

Are we tired with code smells? Not yet!

135. 5 Ways to Prevent Server Hardware Failure

Use mature tools to make mature software

136. The Art of the Prompt: Engineering GenAI to Produce SOLID-Compliant Code

Generative AI writes code that works, but not code that lasts. Prompting with SOLID principles turns it from junior coder to senior architect.

137. Don't Mix Data Access Concerns With Essential Business Behavior

Passing databases creates accidental coupling and breaks business encapsulation.

138. Code Smell 271 - The Hollywood Principle

The [Hollywood Principle] is a software design principle emphasizing loose coupling between components.

139. Getting the Best Out of Code Reviews

Explore the intricate balance of art and science in code reviews. Dive into techniques for effective feedback, and a collaborative culture.

140. How to Find the Stinky Parts of Your Code [Part XVIII]

More code smells incoming

141. How to Find The Stinky Parts of Your Code [Part XI]

This another code smell chapter

142. Is "Agentic Programming" the Next Big Shift?

In 2025, the developer's role is shifting from a manual "writer" to a strategic "orchestrator," managing teams of digital agents that can self-correct.

143. How to Find the Stinky Parts of Your Code [Part XXXIII]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

144. How to Find the Stinky Parts of Your Code [Part XLIV]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

145. Your First Line of Defense for Clean Code is Pre-Commit: How to Set It Up

This article describes pre-commit, a framework for managing and running git hooks to automate code quality checks before code is committed.

146. How to Find the Stinky Parts of Your Code [Part XXV]

The smell of code smells is a classic, but you should look at it more carefully if you want to improve your code smell.

147. How to Find the Stinky Parts of Your Code [Part XXVIII]

Learn to fish out code smells and debug with ease.

148. The 6 Types of Code Refactoring That Every Programmer Should Know

Refactoring is the process of changing the current codes of software to make it easier to understand and maintain without modifying its internal functionality.

149. How to Find The Stinky Parts of Your Code (Part VIII)

Yet more code smells? Plenty of!

150. Clean Code: Package Architecture, Dependency Flow, and Scalability [Part 4]

Learn how to organize Go packages, avoid import cycles, structure scalable projects, and use interfaces and internal directories the right way.

151. Clean Code With AI

This is my talk at Tech Excellence on combining Artificial Intelligence and Clean Code

152. Code Smell 246 - Modeling Expiration Dates

In many systems, the expiry date of a credit card is often represented by simply using a Date object. This can lead to potential issues and misunderstandings.

153. Here's the 7-Step Framework I Use to Get Ahead in Automation Testing

Today, I’ll share seven best practices that transformed my testing mayhem into a lean, mean, bug-busting machine.

154. Stop "LGTM" Culture: How to Turn Code Reviews into a Masterclass with AI

Stop treating AI as just a code generator. Use this system prompt to turn it into a relentless, educational, and ego-free code auditor.

155. Code Smell 313 - “Workslop” in AI-Assisted Programming

Stop shipping AI workslop. Learn to spot plausible-but-wrong code, restore domain intent, and refactor machine output before it becomes tech debt.

156. Track & Manage Your Technical Debt To Make Better Strategic Decisions

If you are looking for a tool to start managing technical debt this article will help you make the right decision.

157. Comments, Naming, and Abstractions in the AI Era

AI hasn't killed "Clean Code," but it has changed the audience.

158. How We Cut Chat UI Frame Time by 8% with One Jetpack Compose Optimization

Learn how switching from SubcomposeLayout to Layout in Jetpack Compose reduced Chat UI frame time by 8% with real benchmark data and code examples.

159. Flip the Script: Write the Tests, Let AI Write the Implementation

TDD is widely accepted as the gold standard for producing robust, reliable, and refactorable software.

160. The Meaning, Purpose and Benefits of Code Refactoring

In the article, we cover the topic of code refactoring and discuss the value of the process.

161. Code Smell 285 - How to Fix Non-Imperative Functions

Functions with unclear names hide intent and confuse readers. Use descriptive, action-oriented names.

162. How to Set Up a Team's Systems and Culture for Strong Code Reviews

All software companies must take an intentional and structured approach to code reviews. Here are some tips on how to do that.

163. Replace Sequential IDs in Your Models With UUIDs to Prevent IDOR Vulnerabilities or Scraping

When you model your identifiers with real-world concepts rather than database rows, you avoid exposing accidental implementation details.

164. How to Find The Stinky Parts of Your Code [Part XV]

We see several symptoms and situations that make us doubt the quality of our development. Most of these smells are just hints of something that might be wrong.

165. Why I Switched to Table Driven Testing approach in Go

Table driven tests, also known as parameterized tests, have became very popular over the past few years due to their ability to eliminate repetition.

166. Java Lambda Functions: Your Secret Weapon Against Boilerplate Code

Discover the power of Java lambda functions and how they eliminate boilerplate code. Explore cool use cases, save time, and write more expressive code.

167. Learn How To Use Git Submodules on Practice

In this post we learn about concept of Submodules in git by actually troubleshooting a case of embedding multiple git repositories

168. AI Coding Tip 010 - Access All Your Code

Use terminal-based AI tools to give your assistant direct access to your local files and test suites.

169. Elevating Software Quality: A Guide to Effective Code Reviews

Explore advanced code review techniques to boost software quality, featuring AI, gamification, and industry case studies.

170. Code Refactoring Tips: No. 015 - Remove NULL

Eliminating The Billion-Dollar Mistake forever - Discover how the Null Object Pattern can streamline your code by eliminating the need for null checks.

171. How to Find the Stinky Parts of Your Code [Part XL]

Most of these smells are just hints of something that might be wrong. Therefore, they are not required to be fixed per se… (You should look into it, though.)

172. Refactoring 024 - Replace Global Variables with Dependency Injection

Replace global variables with dependency injection to improve testability and reduce coupling.

173. Refactoring 013 - Eliminating Repeated Code with DRY Principles

Learn how to eliminate repeated code, enhance maintainability, and create a single source of truth with our DRY (Don't Repeat Yourself) principles.

174. Code Smell 304: Null Pointer Exception - How to Avoid NULL References That Cause Runtime Crashes

Avoid NULL references that cause runtime crashes by using proper validation and null-safe patterns

175. Code Trashing Symptom

There are a set of skills and qualities which make the ideal software developer we are all searching to be or searching for to employ. However, right now I am going to emphasize the importance of a quality that is mostly found in senior developers.

176. Code Smell 270 - Boolean APIs

An API might have a secure parameter that enables additional security checks when set to true. While this approach seems simple, it introduces several problems.

177. Refactoring: Remove Setters #CodeSmell

Warning: Setters Considered Smelly

178. Refactoring 025 - Decompose Regular Expressions

You can break down a complex validation regex into smaller parts to test each part individually and report accurate errors.

179. Refactoring 020 - Transform Static Functions

How to replace static functions with object interactions.

180. Code Smell 259 - Control Your Environment to Avoid Test Failures

Learn how to prevent unreliable tests by generating or mocking test data, ensuring full control over the testing environment and avoiding external dependencies.

181. How to Find the Stinky Parts of Your Code [Part XLIII]

Your code smells because there are likely many instances where it could be edited or improved.

182. Misusing HTTP Status Codes Wrecks Your API Monitoring and Client Logic

Returning a successful HTTP status when the actual result contains an error confuses the API consumers.

183. Just Go Ahead and Test Your Project - Part 1

Here, I recommend reading articles about TDD (Test-Driven Development) and BDD (Behavior-Driven Development), which can evolve from this stage.

184. The "Comment" Fallacy: Why Self-Documenting Code is Still the Goal

In the bible of software engineering, Clean Code, comments are often characterized as failures to write expressive code.

185. Code Smell 303 - How to Prevent Breaking Existing Clients When You Make Changes

You should version your APIs to prevent breaking existing clients when you make changes

186. The Secret Weapon of Developers Who Want to Sleep at Night

Clean code is your secret weapon. It’s the key to fewer late-night debugging sessions, fewer headaches for your future self, and more time for yourself.

187. Programming Books May Be the Better Way to Learning to Code

Online tutorials are quick, but books build real depth. I’ll show you why reading is the secret to mastering code, and share 5 must-read programming books.

188. Here's Why You Should Replace Inheritance with Delegation

Replace restrictive inheritance hierarchies with flexible object delegation

189. Code Smell 309 - Query Parameter API Versioning

Maintain clear version documentation, test versions thoroughly, and deprecate old versions gradually. This practice will ensure that your API users are happy.

190. How to Find the Stinky Parts of Your Code [Part XXXI]

Beginners are afraid to remove code. And many seniors too.

191. Code Smell 10: Functions With Too Many Arguments

Passing too many arguments to functions hurts maintainability. Learn how to refactor parameters into meaningful domain objects.

192. Code Smell 315 - Cloudflare Feature Explosion

In the early hours of November 18, 2025, Cloudflare’s global network began failing to deliver core HTTP traffic, generating a flood of 5xx errors to end users.

193. How to Find The Stinky Parts of Your Code [Part XIV]

More smells on the way.

194. Code Smell 13 - Empty Constructors

Pass the essence to all your objects so they will not need to mutate.

195. Code Smell 274 - Cascaded Returns

Prevent chaining return statements for better code readability and flow.

196. Code Smell 268 - Ternary Metaprogramming

Ternary metaprogramming uses conditional operators to select and invoke methods dynamically. It leads to code that's harder to understand, debug, and maintain.

197. Code Smell 263 - Squatting

Resource squatting happens when attackers anticipate the naming patterns of cloud resources, like S3 buckets.

198. How to Find The Stinky Parts of Your Code (Part VII)

We see several symptoms and situations that make us doubt the quality of our development.

199. Code Smell 298 - How to Fix Microsoft Windows Time Waste

Skipping status reports in conditional branches causes silent delays and race conditions.

200. Overusing Implicit Returns Makes Your Code Harder to Read and Debug

Overusing implicit returns makes your code harder to read and debug.

201. AI Coding Tip 013 - Stop Wasting Tokens With Progressive Disclosure

You reduce token usage when you trigger conditional loading instead of loading all files at once.

202. 4 Ways to Destructure Array in JavaScript & Make Your Code Look Clean

Dive Deep into 4 ways of Array Destructuring Techniques and Elevate Your JavaScript Skills to the Next Level!

203. How to Find The Stinky Parts of Your Code [Part XIII]

We see several symptoms and situations that make us doubt the quality of our development.

204. Five Years Later: Clean Code Is Still Right (But Not Always Useful)

A reflection on clean code, five years later. What still holds up, what feels incomplete, and how experience changed how I think about cleanup.

205. Code Smell 265 - Linguistic Confusion

Overcomplicating naming conventions in code can lead to confusion, bugs, and frustration. Here's how to make your code easier to read and maintain.

206. Code Smell 243 - Concatenated Properties

If you use a separator to break the attributes, you need to make sure the separator does not belong to the domain, and you should escape it.

207. How to Find the Stinky Parts of Your Code [Part XXIII]

It smells because there are likely many instances where it could be edited or improved.

208. Refactor Like a Pro: Ditch Hardcoded Inputs for Good

That little input() call might seem harmless, but it's quietly sabotaging your ability to test, debug, and grow your project.

209. Code Smell 258 - The Dangers of Hardcoding Secrets

Use a secret manager to avoid hardcoding sensitive information.

210. An Interview With Maximiliano Contieri: Bridging the Industry-Academia Divide

In this episode, Maximiliano Contieri helps us understand the longstanding tension between academia and industry from an insider’s perspective.

211. Refactoring 007 - The Refactor That Reveals Missing Concepts

Put together what belongs together.

212. Object Design Checklist: An Index on Software Design Articles

Important concepts about Object-Oriented Programming

213. Code Smell 255 - Addressing Parallel Hierarchies in Code

Addressing redundant code structures: Learn to identify, simplify, and refactor parallel hierarchies to reduce duplication and improve maintainability.

214. Code Smell 239 - Big Pull Request

You make too many different changes in a single pull request.

215. 3 Things Coding And Prose Writing Have In Common According To Cory House

Does your code read like a book?

216. Code Smell 273 - Overengineering

Overengineering complicates your code with unnecessary abstractions and complexity. Learn how to simplify your code using the KISS principle.

217. Code Smell 09 - What Should You Do With Dead Code?

Do not keep code "just in case I need it".

218. Code and the Art of Motorcycle Maintenance: Typical Rookie Faults

With coding, just like with riding, you need to be responsible and conscious to stay in the saddle and double that to be a winner.

219. Refactoring 022 - Extract Common Ancestor

Extract a common abstract class to mimic real-world structure.

220. Components Genesis: Mastering the Top-Down Code Design Approach

Learn how to write reliable and professional-looking React code using "Wishful Programming" aka "Top-Down Code Design". Great for coders of all levels.

221. Brace Yourself: Data Cleanup is Coming

It goes without saying that data is the cornerstone of any data analysis.

222. Code Smell 242 - Zombie Feature Flags

Discover the pitfalls of feature flags in software development, from the dangers of dead code to unnecessary complexity.

223. The Lack of Internal State and How it Makes Your Classes Easier to Test and Refactor

You likely often hear that test-driven development (TDD) or just writing tests can make your code better.

224. Code Smell 287 - Unused Local Assignment

Avoid assigning values you never use.

225. Refactoring 037 - Testing Private Methods

You can and should test private methods without using AI.

226. Refactoring 032 - Apply Consistent Style Rules

When machines generate large amounts of code, you need to apply one consistent style to all files.

227. How to Find the Stinky Parts of Your Code [Part XXXVIII]

It smells because there are likely many instances where it could be edited or improved.

228. Code Smell 06 - Trying to Be a Clever Programmer

Don't try to look too smart. Clean code emphasizes readability and simplicity.

229. How to Implement the Visitor Pattern Correctly

Avoid combining the Visitor pattern with instanceof checks.

230. Comments: The Good, the Bad and the Ugly

I don't believe comments are failures, but rather a tool that, when misused, can hinder more than help. As we'll see, some comments are extremely useful.

231. Code Smell 283 - Unresolved Meta Tags

Incomplete or null meta tags break functionality and user experience.

232. How to Prevent Your Code From Turning Into Sausage That Goes Beyond the Screen

Today, we'll talk about a bug that shows in practice how "code sausage" can cause a series of problems related to the last line effect

233. Adding Source Attribution to Question Answering Systems

Without source attribution, even the most accurate system risks losing user trust.

234. Code Smell 261 - DigiCert Underscores

In digital certificate validation, missing an underscore prefix can lead to significant issues, as seen with DigiCert’s recent problems.

235. Understand the Intent of Patterns And Principles Before Applying Them

TL;DR;

236. How to Avoid Code Smells - A NDepend Tutorial

.NET developers can evaluate and visualize the codebase using the robust static analysis tool NDepend. It aids programmers in understanding the quality and main

237. Code Smell 277 - UPPERCASE Acronyms

Treat acronyms like normal words to improve human readability.

238. Code Smell 290 - Refused Bequest

Subclasses should honor ALL their parent’s contract.

239. Code Smell 245 — Exec() and Eval()

Don't use metaprogramming. It is not that cool.

240. How to Find the Stinky Parts of Your Code [Part XXXVI]

Coding tutorials to help you in your coding life.

241. When You Forget to Throw, Your Code Will Blow

Creating a new exception without throwing it leads to silent failures.

242. Premature Memoization: How to Properly Apply It - Code Smell 250

Memoization can help you improve the performance of recursive functions involving redundant computations but compromise code readability and maintainability

243. Keep Your Happy Path Flowing, Not Nesting

Arrange your code so the main logic flows along the left margin, handling edge cases early with guard clauses.

244. Code Smell 264 - Hanlon's Razor

Overthinking and overdesigning your code can lead to unnecessary complexity. Learn how.

245. To Err is Human, to Test is Divine

We are humans, we forget, we make mistakes, we change things, ideas; This happens when we work solo, imagine when you are in a team!

246. How to Find the Stinky Parts of Your Code [Part XXXVII]

It smells because there are likely many instances where it could be edited or improved.

247. Domain Driven Design - The Basics

DDD gives us a framework for a way of aligning business with technology throughout the whole project lifecycle.

248. Code Smell 240 - Dead Store Code

Learn how to detect and address dead store code smells with expert tips.

249. Prompt Engineering for Senior Devs: Scaling Excellence Without Technical Debt

This guide explores the specific prompt engineering patterns senior devs use to generate boilerplate, unit tests, and documentation.

250. Code Smell 03: Functions Are Too Long - Here's How to Fix That

Refactor and extract functions longer than 5 lines. Here's how.

251. Code Smell 267 - Objects Aliasing

Discover the importance of using immutable objects in programming to prevent unexpected changes, reduce bugs, and improve code predictability.

252. Refactoring 016 - Building With The Essence

Pass essential attributes during object creation to reduce mutability and eliminate getters and setters.

253. Code Smell 299 - How to Fix Overloaded Test Setups

Bloated setup that's only partially used makes your tests more coupled and harder to understand.

254. Refactoring 030 - How to Avoid Accidental Redundancy

  1. Identify methods that receive owned attributes
  2. Remove those parameters from the method signature
  3. Replace usage with direct access to the attribute

255. Code Smell 297 - Syntactic Noise

Stop writing cryptic code! Learn how to reduce syntactic noise, improve readability, and make your software easier to maintain and debug.

256. How to Find the Stinky Parts of Your Code [Part XLII]

Your code smells because there are likely many instances where it could be edited or improved.

257. Code Smell 300 - Package Hallucination

Avoid hallucinated or fake packages that can compromise security and stability.

258. Clean Code and Speed: Not Either/Or

Refuting claims that clean code hurts performance, this article shows how proper design delivers speed without sacrificing maintainability.

259. Code Smell 278 - DirName and File

Learn how to avoid ambiguous variable names like 'file' and 'dirName' in your code.

260. 6 Examples to Differentiate Desirable Technical Debts From Undesirable Ones

Technical Debts have been in the center of software engineers debate for quite some time. Not only its analogy to financial terms has been discussed, but also the different contexts and aspects a debt contains.

261. Code Smell 262 - Not Replaced Constants

A major security flaw, PKfail, persisted unnoticed for 12 years, compromising hundreds of devices.

262. Code Smell 275 - Missing Test Wrong Path

This article highlights the critical need for fail conditions in tests expecting exceptions.

263. Refactoring 035 - Use Separate Exception Hierarchies for Business and Technical Errors

Use separate exception hierarchies for business and technical errors.

264. Code Smell 286 - Parent-Child Method Overlaps

Avoid using private methods in parent classes with names that child classes can use.

265. Refactoring 033 - Removing Redundant or Unused Annotations

Make your code simpler and more maintainable by removing redundant or unused annotations.

266. Dev Diary #2: Run Away from Nesting Functions in Your Code

Discover how the Orchestrator/Actions Pattern can simplify your codebase, making it easier to navigate, test, and maintain.

267. Code Smell 254 - Be Explicit

Be explicit when creating tests to ensure clarity and maintainability.

268. Code Smell 257 - Simplifying Property Names By Removing Prefixes

Avoid using prefixes on collections whenever possible.

269. Build Scalable Products by Coding for Future Feature Expansion

How to build scalable products by coding for future feature expansion & code deprecation while maintaining a simplified user interface for complex functionality

270. Code Smell 272 - API Chain

Use primitive steps to verify API behavior instead of direct requests.

271. Finding the Stinky Parts of Your Code: Code Smell 256 - Mutable Getters

Avoid mutable getters to protect your code's integrity and encapsulation. Learn how to return immutable copies in Java for safer and more predictable coding

272. Refactoring 017 - Convert Attributes to Sets

Using sets for attributes simplifies your code and makes state management easier.

273. Code Smell 310 – Why Generic Date Names Break Your Code

Use descriptive date names that reveal their role and business purpose instead of generic "date" labels.

274. Code Smell 279 - Loop Premature Optimization

Don't optimize loops without a clear need and concrete real-world evidence

275. The Mighty App Developer vs a Pesky Bug

A year ago, I, the almighty mobile application developer, was brought down by a pesky bug that was causing my precious creation to crash frequently for users.

276. Code Smell 284 - Encrypted Functions

Discover why cryptic code hurts readability, security, and trust in your software.

277. Code Smell 241 - Referential Transparency Violation

Learn how to write pure functions to enhance code readability, maintainability, and testability.

278. Code Smell 04 - Stop Abusing Strings—Use Real Objects Instead

Use real abstractions and real objects instead of accidental string manipulation.

279. Code Smell 292 - Missing Return

Missing return statements cause unexpected behavior.

280. Code Smell 269 - Low-Level Addition

Learn how declarative code improves readability and maintainability by simplifying logic and reducing verbose loops.

281. Refactoring 034 - Wrapping Messy Parameters Into a Single Meaningful Entity

Wrap messy parameters into a single meaningful entity.

282. Code Smell 244 - Incomplete Error Information and How to Fix It

You show an error and provide no useful information

283. How to Find the Stinky Parts of Your Code [Part XLV]

Your code smells because there are likely many instances where it could be edited or improved. Most of these smells are just hints something might be wrong.

284. Code Smell 266 - Collection Aliasing

Learn why using immutable collections in Java is crucial for avoiding unpredictable behavior and unintended side effects.

285. Code Smell 253 - Silently Truncating Your User Data Without Warning

If you limit text lengths, enforce them everywhere!

286. Top 10 C++ Open Source Project Bugs Found in 2019

Another year is drawing to an end, and it's a perfect time to make yourself a cup of coffee and reread the reviews of bugs collected across open-source projects over this year. This would take quite a while, of course, so we prepared this article to make it easier for you. Today we'll be recalling the most interesting dark spots that we came across in open-source C/C++ projects in 2019.

287. The HackerNoon Newsletter: Code Smell 282 - Bad Defaults and How to Fix Them (12/3/2024)

12/3/2024: Top 5 stories on the HackerNoon homepage!

288. The HackerNoon Newsletter: AI Coding Tip 004 - Why You Should Use Modular Skills (1/27/2026)

1/27/2026: Top 5 stories on the HackerNoon homepage!

289. Navigate Debugging Challenges with These Proven Techniques

290. How to Find the Stinky Parts of Your Code: 249 - Constants as Numbers

You map concepts to optimized numbers.

291. Replace AI References in Comments with Tests That Actually Work

You reference external AI conversations to explain code instead of writing declarative tests

292. Why You Must Start Refactoring Your Codebase Today

What is refactoring? Why do we go through the trouble of improving code that works?

293. Code Smell 02 - Don’t Let Mysterious Numbers Rule Your Code

Avoid Magic numbers without explanation. You don't know their source and are very afraid of changing them.

294. Code Smell 237 - Attribute Definitions Guide

295. How Dyslexia Shapes The Way I Code

Dyslexia has shaped how I read and write code, influencing my preference for structured, easy-to-scan formatting.

296. How To Find the Stinky Parts of Your Code: Code Smell 248 – Unreliable Copy

Discover the importance of verifying file copies to prevent silent modifications and uphold software principles like the Least Surprise and Fail Fast principles

297. The HackerNoon Newsletter: Everyone’s an AI User Now—But No One Read the Manual (6/20/2025)

6/20/2025: Top 5 stories on the HackerNoon homepage!

298. The HackerNoon Newsletter: My UX improvements for Flipper Zero (9/1/2025)

9/1/2025: Top 5 stories on the HackerNoon homepage!

299. Writing and Selling Unit Tests: When You Need Them and When You Don't

Unit tests help ensure your code works better and prevents bugs. However, that explanation sounds too abstract and impractical for real-world scenarios.

300. Refactoring 005 - Replace Comment With Function Name

Don't comment on what you are doing. Name what you are doing.

301. The HackerNoon Newsletter: Code Smell 293 - You Should Avoid Adding isTesting or Similar Flags (3/7/2025)

3/7/2025: Top 5 stories on the HackerNoon homepage!

302. How to Find the Stinky Parts of Your Code: 251 - Empty Collections

Learn why using declarative names is crucial for code clarity, performance optimization. and avoiding code smells.

303. Methodcentipede

Learn how to identify and refactor the Methodcentipede antipattern in Java code.

304. How to Find the Stinky Parts of Your Code [Part XLI]

Your code smells because there are likely many instances where it could be edited or improved.

305. The HackerNoon Newsletter: Changing Keys, Losing Values (2/24/2025)

2/24/2025: Top 5 stories on the HackerNoon homepage!

306. TDD Conference 2021: Opening Ceremony by Alex Bunardzic

Alex is a software engineering veteran with over 30 years of hands-on professional experience. He is a staunch advocate of Extreme Programming and TDD.

307. Code Smell 14 - God Objects

God Objects form when you concentrate too many responsibilities in a single class.

308. The HackerNoon Newsletter: Code Smell 307 - Naive Time Assumptions and How to Fix It (7/16/2025)

7/16/2025: Top 5 stories on the HackerNoon homepage!

309. Hack Your Technical Debt: The 1% Better Every Day Challenge

It's easy for technical debt to grow in our codebase. Commit to spending 20 minutes a day for 30 days to tackling technical debt and get 1% better every day.

Thank you for checking out the 309 most read blog posts about Clean Code on HackerNoon.

Visit the /Learn Repo to find the most read blog posts about any technology.