Member-only story
Risks and Benefits of The 9 Popular Software Design Principles
Improve your software engineering skills
Every software developer with a little bit of experience knows that keeping things simple and stupid (KISS) makes sense. Once you have learned to use classes and functions, you don’t want to repeat yourself — keep things DRY.
The goal of all of those principles is to make software easy to maintain by reducing mental complexity.
№1: Don’t repeat yourself (DRY)

DRY is the core of software development. We structure our code in packages and modules. We factor out functions. We try to make the code reusable so that we hopefully have an easier time maintaining it.
Benefit: Complexity reduction. The more code you have, the more you need to maintain. DRY typically leads to less code. This especially means that you only need to adjust once place for typical changes.
Risk: If you do it too much, the code typically gets more complex.
Tooling support: There are programs to find duplicated code. For Python, there is pylint --disable=all --enable=similarities src
№2: You Ain’t Gonna Need It (YAGNI)
YAGNI is the realization that too much abstraction actually harms maintainability. Java devs, I’m looking at you!
Benefit: Complexity reduction. Removing abstractions makes it clearer how the code works.
Risk: If you apply YAGNI too much and thus make too few abstractions, you will have a hard time extending your software. And junior devs might mess with the code in a bad way.
Tooling support: None (maybe once could count references to classes throughout the codebase?)