The 2 Values of Software

I first encountered the idea that software has 2 values while reading Robert C Martin’s “Clean Architecture” back in 2022: software is valued for being “soft” and as a “ware”. Uncle Bob had a way of saying this like this was in front of us the whole time — waving even — and he was just pointing it out.

I’ve read the book a few more times since then and I’m fairly certain I must have been so shocked at the idea of softness as a value that my succeeding read-throughs felt like I was reading the rest of the book for the first time. Except, it didn’t feel like a new idea. It felt like it was, in fact, the idea behind all the principles, practices, and patterns. The why of software design and architecture itself!

Now that may seem over-dramatic but imagine a decade of context-less information and inarticulable intuition all falling into place. I’ve finally obtained a piece of foundational knowledge in software development! Or so I believe.

I now go with the more professional-sounding duo of structure and behavior. A behavior’s value is in the present while a structure’s value is in the future — when behavior needs change or addition. Reading “Tidy First?” by Kent Beck has further reinforced this idea and why little tidyings matter.

Now while I’m still clumsy, this knowledge has helped immensely in my ability to articulate design decisions, considerations, and trade-offs. This has been indescribably valuable as a basis and filter (which is why I seriously mean foundational)  for the various advice, practices, and opinions on software development floating about nowadays.

Imagine having a piece of truth. Anything inconsistent is not the truth. And the more truth you have, the fewer lies deceive you and those around you. In a time fraught with falsehoods and a field with more success than experience, how incredibly valuable is that?