Designing Modern Applications: 5 Key Principles

Design Principle #1: Everything is a State Machine!

Like humans, every live software component has life-cycle stages and associated states. Rather than how a component is behaving internally, the focus should be on how states are changing. These states are conveyed in the form of events.

Design Principle #2: Convention over Configuration!

These days there is a lot of talk about configuration as code. There is something better than configuration and that is convention. Convention means that it is unnecessary, confusing, and counter-productive to configure best practices. Best practices should be hard-wired in the software or framework.

Design Principle #3: The Law of Immutability!

There are various ways to define the law of immutability and this principle is a close associate of principle 1 i.e state machine. The key idea is that when an object carries a certain state, there should be no way to corrupt this state. If the state needs to change, a new object with a new fingerprint needs to be created.

Design Principle #4: The Git Principle!

The Git Principle can also be defined as the network of trust principle. The key idea is that merit of a software artifact is best determined by how much the network trusts and validates it. In the early days of git, the best Linux commits would get promoted by more and more developers cloning it and the commit eventually making it to Linus Torvalds repository.

Design Principle #5: The Hollywood Principle!

Summary, the moral compass!

These principles as I have stated before should be regarded as virtues rather than laws. Seasoned developers should look at every design decision from the lens of these principles and skillfully apply their wisdom and experience to derive the best software architecture.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Rishi Yadav

Rishi Yadav

This blog is mostly around my cloud-native & Environments-as-a-Service (EaaS) technology insights. I would throw some crypto wisdom here and there.