How the ‘materials’ of development affect software?
I find it incongruous that in the software development industry we often talk about languages, frameworks, libraries and architectural patterns but we don’t often consider them as construction materials. We do consider some ‘structural properties’ like performance, resilience, security but we often make a decision based on these properties and apply it to our entire system.
If we were fabricating something physical (non-digital) would we choose one material for our entire project? Would we ignore other properties like malleability, texture, density? Would we require the same structural rigidity everywhere or would we pick materials that had more ‘give’ in places that require change and add rigidity in places under extreme stress?
We often think about programming languages and libraries as tools but they are part of our product. The choices we make affect the amount of change we can accommodate, the ‘texture’ of those languages, frameworks and libraries have a visceral impact on how our engineers work with them, to the point that they can make engineers leave to work on something more fun.
This is often the underlying reason why we see large tech companies that start with one language and then re-write parts (or all) of their system in other languages later, usually once the need for the product has been established, the problem areas identified and the stresses caused by changes, performance constraints, load, etc. measured and understood.
This is also another reason modularization patterns, such as micro services, have gained popularity. But these patterns in themselves are material choices. When we are proving our concept viable (startup mode) should we build lots of separate components in concrete, stainless steel and glass, then fit them together with different glues, screws and fitments (often bespoke) or should we shape something quickly out of polystyrene or wood and test it first?
We should think about computer science as a material science. We should consider the intrinsic properties of our building materials and consider what is suitable for our current environment and how we might evolve to different materials as our environment changes.
If you want to discuss how the ‘material science’ of software development has an impact on your software and your development teams please contact me through the comments, email or LinkedIn to discuss in more detail.
Photo by Laura Tancredi