In this article, we will speculate about how software architecture might look like in the next decade. In the first part we will define what good software means. In further parts we'll build a sample following this definition.

The Main Principle

With time we had different limitations on performance and interfaces, but values remained the same. We were always looking for technics that would allow us to create solutions fast and extend them easily.

There are many recommendations on how good software should be created. However, many of them can be inferred form a single idea. It's is coherence & cohesion. In short, it's about putting related concepts together and non-related concepts separately.

You can see how we show how Coherence&Cohesion principle is fundamental in understanding what are good software design principles. However, the important challenge it brings is understanding what concepts that we should think about are.

Layered History

Concepts that people used to think evolved over time. In 1967 Melvin Conway claimed that software architecture is a product of organizational structure. For a long time, we were able to see different teams responsible for So they used to be a different concepts. To support it layered architecture was created. With it we had highly specialised engineers. I.e. the one did care only about database. There are could be productivity benefits from that. However, to deliver single feature we need to collaborate across all teams. And people are not extremely good in collaboration.

Layers Today

To overcomes collaborations issues layers got merged. Now, it's often too fat layers - backend and frontend.

Layers inside this two fat layers got merged. On backend, Ruby-on-Rails developers put in controller what used to be split across Data-Access-Level, Services, and Controllers. On the frontend, React developers are putting markup and js together.

You can expect that there gonna be further merge inside this two layers. And as a next step, we can expect raise of full-stack developers. It's not that unrealistic since JavaScript gets everywhere.

Post-Layers Architecture

We will explore with concepts remain since there no technical borders in our solutions. For general guidance we will be taking ideas for domain-driven-design powered by command-query responsibility-segregation.

In our example we will be building todo app. We are not gonna use any libraries so you can follow it even if you are not familiar with tools that were released last week.