We often speak of software as possessing properties, usually expressed using –ilities (extensibility, reusability, scalability), by adherence to some principle (separation of concerns, don’t repeat yourself), defined by metrics (coupling, cohesion) or even using broad, subjective characterizations such as “fragile”, “robust”, “clean”, etc.
This is also true for physical materials: we define a material as a conductor, or an insulator; as being compressible or incompressible; etc. However, a property in physics is frequently defined as a reaction to a precise stimulus (often a force). We define [in]compressibility after we clearly understand compression.
In software, when we speak of properties like “extensibility” or “fragility” we’re left to arbitrary definitions, because the forces at play are unknown and undefined. Yet there are forces acting on our software. We are shaping our software in certain ways exactly because they react "better" to those forces. We just don’t know those forces well enough to even name them, and therefore we don’t use them properly when we design software structures.
This work is about a possible theory of forces in software, and how it can inform the way we design, the way we talk about design, and the way we think about design.
This is also true for physical materials: we define a material as a conductor, or an insulator; as being compressible or incompressible; etc. However, a property in physics is frequently defined as a reaction to a precise stimulus (often a force). We define [in]compressibility after we clearly understand compression.
In software, when we speak of properties like “extensibility” or “fragility” we’re left to arbitrary definitions, because the forces at play are unknown and undefined. Yet there are forces acting on our software. We are shaping our software in certain ways exactly because they react "better" to those forces. We just don’t know those forces well enough to even name them, and therefore we don’t use them properly when we design software structures.
This work is about a possible theory of forces in software, and how it can inform the way we design, the way we talk about design, and the way we think about design.