Thoughts on design patterns

Good design patterns are reusable collaborations between interfaces and classes that can be applied repeatedly in many different scenarios, across projects, platforms, languages and frameworks.

Design patterns were popularized by Gang of Four book almost 25 years ago. however it is still very relevant today even though some of the patterns have been re-classified as anti patterns.

If your design attempts to satisfy everyone you will likely end up satisfying no one


Knowing these design patterns is certainly an important step, however to studying the applications of design patterns much more important. Implementing design patterns is much more nuanced and need to consider lot of tiny variants before deciding on the design pattern.

As with most notable practices, design patterns are another theoretical tool that it is better to know than not know. They can be overused and they are not always applicable, sometimes over complicating an otherwise simple solution with an explosion of classes,interface, indirection and abstraction.

In my experience design patterns tend to be either underused or overused. In some projects, there are not enough design patterns and the code suffers from a lack of structure. Other projects apply design patterns too liberally, adding un-accounted abstraction and complexity where the benefit is negligible. The balance is in finding the right places to apply the right patterns.

Note that these patterns and practices, just like all others are merely tools for you to use. deciding when and where to apply any pattern or practice is part of the art of software development. Overuse leads to code that is adaptive, but on too fine-grained a level to be appreciated or useful. Overuse also affects another key facet of code quality: readability. It is far more common for software to be developed in teams than as an individual pursuit. Thus, judiciously selecting when and where to apply each pattern is imperative to ensure that the code remains comprehensible in the future


.Net activity logs Agile Azure bad parts C# C#7.0 C# Tuples CSS Framework CSS Styling Customization designpatterns dotnet dotnet-core event hubs frontend development functions getting-started Hype Cycle JavaScript learn Next.js Node node_modules npm objects vs functions performance optimization React Redux rimraf scalability server-side rendering Software Development SOLID State management static site generation Tailwind CSS Tips Tricks Tuple Tuples Umamaheswaran Visual Studio Web Design web development

Daily writing prompt
What sacrifices have you made in life?

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: