This article is a part of the systemic-ts series.

Systemic VS Scriptic

A system consists of interacting and/or interrelated components. Such components interact with certain preferences, forming a BOUNDARY separating the system and the environment.

A system is usually long-running, needs to be durable, must self-regulate, and often have subsystems, each having a sub-purpose of the parent's. Having a boundary, it bounds to have a mechanism to interact with the environment--the interface.

Having many components, maintenance is harder, thus requiring a different strategy.

Scriptic, on the other hand, is a quality of software, code, script, etc, that is not systemic.

I derived the definition from how script errors are commonly handled by reporting and retrying. In a script, it is rare that an error or a message in general is passed to some other piece of code to be interpreted.

But it is not rare to see a collection of scripts become systemic over time and then the programmers begin to consider using another tool, and then another language. This complexity shift is often painful; when unmanaged, many have resorted to total rewrites with new languages.

Moreover, determining whether a program will be a system at first is often difficult at first because the formation of the system's boundary is continuous, not instant.

Systemic TypeScript series aims to select a particular strategy of writing TypeScript program that scales with complexity, where design pattern does not have to change often as a scriptic program becomes systemic. Therefore, when applied, the distinction between systemic and scriptic becomes less important and thus reducing the negative effect of complexity shift.