DEV Community

Temitope Agboola
Temitope Agboola

Posted on


The Design of Software systems vary according to technical requirements. It is common practice for engineers to adopt a particular approach to every system they design, based on common requirements across lots of systems previously worked on.
It is correct to quickly ask the right questions, such as:
1) What is the Data Model (Nature and Structure) we are dealing with here?
2) What is the type of processing the system will be handling? We know it is necessary to be certain if the system will be doing either extremes of real-time processing, batch processing, or if its somewhere along the middle.
3) What are the security requirements?
4) Are we running on multi-threaded or single-thread technology? What are the implications on underlying Computing resources? What is the expected efficiency of the underlying Operating System's Process Control Block (PCB) and scheduler in managing the monitoring and allocation of resources for the concerned processes? Among many other questions.

However, it's also important to note that beyond API gateways, load balancers, Queues, Caches, Shards, etc, there are important factors that must be determined presently, and established, which will guide the inclusion of system components, and their varying manners and degrees of "inter-actions" before just rushing on to couple them together. This is not a call towards perfectionism; as that in itself is detrimental.

Rather, it is a call for efficient and solid design of systems, that are able to "grow" into their future versions without technical and business losses. It is also an attempt to transform the field of system design while helping engineers build better, lasting, and futuristic systems.
Every system is unique in its own rights. When we maintain this posture to determining the components and nature of interactions that should make up a system, we are often blessed with a result that stands through time, the various tests that successful systems are often faced with. And that begs the ultimate guiding question, what is a successful software system?

From my research and studies, I have determined a successful system is one that proves its possession of the following characteristics:

1) Functionality
2) Flexibility
3) Reliability
4) Security

In the subsequent article next week, I will break down the 4 characteristics above. Stay tuned!



Top comments (0)