My first exposure to this type of thinking came during my time as an iOS software developer. I had a coworker who tried to guide me to some of these principles in his own way, and probably started me on this track of thought. However, it still took me a few years of struggling with writing readable code and thinking about system architecture to piece together these kinds of benefits and tradeoffs for different systems.