Guidelines for system design, implementation and optimization.
According to Merriam Webster, manifesto is a written statement declaring publicly the intentions, motives, or views of its issuer.
Every field of science and engineering has an implicit set of principles, motives and guidelines, which evolve as culture in the field, being passed down from generation across generation of students, researchers, practitioners and professionals. These traditions and practices are parts of the basic curriculum, later followed by official handbooks and textbooks in the field. Some of these practices and philosophies are slowly, learnt over time with experience in the field and then, passed down to the younger generation as “a special transmission, outside the scriptures” ( Bodhidharma as Buddhists put it, analogous to how Vedas were transmitted orally over many generations before eventually being committed to writing).
Software systems are a vast field in itself, ranging from operating systems, database systems, distributed systems and today, large scale AI systems and are always rapidly ever-evolving. Such complex field requires a manifesto, outlining its principles, wisdom and philosophy learnt over time across its evolving culture, one that has spanned from Unix culture to Internet culture. Even microservices, the new software architectural style around the block has an upcoming culture and a cult following around it.
This article is a humble attempt to compile a systems manifesto, which tries to provide One size fit all for current software systems and lays the foundation for the futuristic systems to come, but can be further customized to fit the varying needs of different systems, while helping to build and strengthen the core. As a disclaimer, these guidelines are not novel, foolproof recipes, laws of system design, precise, consistent, always appropriate, or guaranteed to work. This is a work in progress and invites Request for Comments and will be updated regularly based on feedback and comments.
The manifesto is divided into three parts with seventeen mantras in each:
Wisdom for Systems Design
A smart man makes a mistake, learns from it, and never makes that mistake again. But a wise man finds a smart man and learns from him how to avoid the mistake altogether. Roy H. William
In life, knowledge or intelligence alone is not sufficient, they are necessary but not sufficient. Wisdom will help you stand out from the know-hows, from the intelligent ones and from the experienced ones but it takes time to cultivate it. System design requires wisdom, a set of wise learnings to adhere to so that the same mistakes are not repeated, which had been learnt by our past generation of practitioners.
The wisdom emerged over years of system design and implementation, and are part of the book — “ Operating systems: Three easy pieces” by Arpaci-Dusseau, Remzi H., and Andrea C. Arpaci-Dusseau. Follow this next article in series to continue delving into those wise anecdotes.
Philosophy of Systems Implementation
Science is what you know, philosophy is what you don’t know. Bertrand Rusell
In life, having a strong moral and ethical code of conduct as an implicit philosophy helps guide your way through the difficult times, helps to shape the life and reflect on your own actions. This helps you build skills in articulating your own values, to provide others with reasons for your actions and give you the means of questioning the values of others. These virtues are also required in systems implementation, so that you can reflect on why the system was designed the way it was, why it was implemented the way it is and why that was the right thing to do.
In systems implementation, the philosophy has been developed from experience and they aren’t just vague generalities but lead to specific prescriptions. They are vastly based on Unix philosophy, which made it durable, stable, adaptable and success; they are part of the book — “ The art of Unix programming” by Raymond, Eric S. Follow this next article in series to continue delving into the rules of the philosophy.
Principles for Systems Optimization
The value of a principle is the number of things it will explain. Ralph Waldo Emerson
In life, sometimes you realize that the processes and the system are bloated and inefficient and have a lot of overhead, which can be further simplified and optimized to improve the quality of life.
The same requirements occur in systems from time to time, i.e. to improve the current working of the system. But remember, you optimize after you have designed and implemented the system and you don’t want to fall in the pit of premature optimization or over optimization. These optimization principles are vastly based on Network Algorithmics, a field of study which resolves networking bottlenecks using interdisciplinary techniques that include changes to hardware and operating systems as well as efficient algorithms.; they are part of the book — “ Network algorithmics” by Varghese, George. Follow this next article in series to continue delving into the principles.
Premature optimization is the root of all evil. Donald Knuth
This manifesto presented the guidelines for system design, implementation and optimization. The wisdom should be remembered and followed while designing systems, the philosophy should be adhered while implementing and the principles should be tried while optimizing the system.
Next in this series of System Manifesto, delving into each of the sections:
- Varghese, George. Network algorithmics. Chapman & Hall/CRC, 2010.
- Raymond, Eric S. The art of Unix programming. Addison-Wesley Professional, 2003.
- Arpaci-Dusseau, Remzi H., and Andrea C. Arpaci-Dusseau. Operating systems: Three easy pieces. Vol. 151. Wisconsin: Arpaci-Dusseau Books, 2014.
- Lampson, Butler W. “Hints for computer system design.” ACM SIGOPS Operating Systems Review. Vol. 17. №5. ACM, 1983.
- Hunt, Andrew, David Thomas, and Ward Cunningham. The pragmatic programmer: from journeyman to master. Addison-Wesley Professional, 2000.
Originally published at https://www.linkedin.com on June 24, 2018.