deepakvraghavan
3 min readFeb 16, 2018

What constitutes a ‘good’ architecture?

A ‘good Architecture’ is a spirited dialogue topic for two technical people as there is rarely one ‘right’ way of building applications. Over the years, there has been a lot of good literature which has been written on the topic. As I started thinking about this topic, I wanted to jot down the key features and industry leading practices that make a software program sustainable and scalable.

· Multi-tiered: For starters, we can agree that we will need a decoupled architecture such as MVC which clearly separates the different individual tiers of an application

· Unit Testing: The program is made up of multiple smaller constituent elements. Unless the individual components pass their unit tests, it’s unrealistic to think that the integrated application will be free of bugs. Unit testing is a must and not a nice to have.

· Make it S.O.L.I.D.: From the multiple authors who have talked about this topic, Uncle Bob has been the most vocal on how to write code that is loosely coupled and highly cohesive. For those who do not understand the SOLID principles, this is a good read on the topic. Here is the list of principles which makes this abbreviation:

S — Single Responsibility Principle

O — Open Closed Principle

L — Liskov Substitution Principle

I — Interface Segregation Principle

D — Dependency Inversion Principle

· Application monitoring and instrumentation: As organizations look into a bimodal enterprise, the notion of a managing product is becoming popular than individual projects. A product is perpetually in a state of continued development with no end date for new features or enhancements. In order for a product to be maintainable, usage insights and health of the application when it is running in a live environment is important. This health information not only helps to reduce the downtime of the application but also to get usage information from the consumers to understand the most popular features by looking at the usage and hits. A good application has APM telemetry planned by design.

· Agile or Fragile!: The change in software delivery has been driven by two interesting trends. Users of applications are used to getting features frequently. Companies want to leverage technology to launch new products and features rapidly and gain the early mover advantage. This lead to organizations embracing Agile Delivery with open arms. While designing software programs, it’s better to learn fast, fail fast, and recover and adapt fast to keep up with the changing needs of the business.

· DevOps: There is rarely a single Fortune 500 organization which has made investments in DevOps initiatives. Companies require that products are able to be leverage CI/CD principles using automation and repeatability. This in turn improves the quality of products and continued delight of the end users and business stakeholders.

· Cloud and Mobile first: Microsoft and Google leadership have clearly articulated that all their applications are going to be built using the Cloud and Mobile first principles. For a program to stand the tests of time, a strong attention needs to be given to leverage PAAS capabilities of Cloud (AWS or Microsoft being the popular vendors) and have any mobile version of the application be to cross platform compatible (using Xamarin or similar platforms).

No responses yet