Do one thing and do it well, this is one of the most admiring UNIX’s basic, simple and underlying design principles. Though the principle sounds simple, it is a path-breaking thought process to design an OS with the principle. Rather than having one monolithic kernel dumped with many functionalities in it, it kept its kernel small and kept the system calls and libraries in an abstracted layer which is one layer above the kernel.
Even though the UNIX system introduces a number of innovative programs and techniques, no single program or idea makes it work well. Instead, what makes it effective is the approach to programming, a philosophy of using the computer. Although that philosophy can’t be written down in a single sentence, at its heart is the idea that the power of a system comes more from the relationships among programs than from the programs themselves. Many UNIX programs do quite trivial things in isolation, but, combined with other programs, become general and useful tools. - Brian Kernighan and Rob Pike, The UNIX Programming Environment (1984)
The principle is very well put into action by allowing the commands to be simple and do one thing well and be possible to make it work along with other commands with “pipes”.
(Image courtesy: web.cse.ohio-state.edu)
So, the highlight here is there is a design principle, there is a core system which supports the principle and the entire sub-systems are built around to complement each other!
If you fast forward leaving the UNIX principle behind for a while, here comes the concept of microservices. You can clearly see there is some similarity between what microservices architecture is and how UNIX is built. I find them both advocate a similar pattern of architecture. Keep the services small, isolated and serve a specific purpose.
Microservices are modular, flexible and granular web services which can be individually developed, deployed and managed to make a functional and maintainable large-scale system.
I feel only in recent times, many companies are arriving to and adopting the right approach with microservices rather than conquering the entire world with a tightly coupled monolithic architecture and make things complex and less-maintainable. It is not that someone who works on monolithic application knows everything in it, they work only on specific modules and then integrate with others where communication plays a major role. The microservices architecture provides the individual teams, complete freedom to choose what works for them and how to design it internally within the microservice.
Since microservices architecture is preferred for web applications, it needs a lot of supporting systems, networking and other aspects to get it right and working. But, if you look at the overall underlying principle, what UNIX proved us is what is getting adopted in microservices with regard to isolation and ownership.
(Image courtesy: microservices.io)
Understanding the design principles of the ecosystem helps us to design and architect better when we are on a mission to build something awesome!