Software Design is an Exercise in Human Relationships
The title is a quote from Kent Beck. I'm still reading that book I keep going on about. The one that's not a book but will become three. Tidy First? (do subscribe and read his words, not mine). Where he states this. Something that should be quite obvious really. But isn't, it seams, to many.
So, what relationships are we talking about? And how is software design an exercise in said relationships?
First of all, it's an exercise in my relationship with my self. It took a little while for me to understand how important it is to write code I will understand next week. It took a little longer to figure out that it was also important to understand it a couple of months later, or years. That's the relationship with my self.
It is also an exercise in the relationship to other programmers. We read more code that we write. I've seen different figures here, but 80/20 and 60/40 seems to be commonly occurring. So lets take the 60/40. That means that someone else will spend 60% of their time figuring out what I (or someone else) wrote. I can build the relationship with this person by making it worthwhile to read the code. Make it readable. That's one aspect. Another is the conversations we have with each other when deciding on design. How do we act towards each other. Do I listen more than I talk? Do I really hear what others are saying? How important is it to me to be right? Can I take disagreement in a constructive way? This becomes even more important as we become more experienced. Seniority creates power imbalances that can become problematic and hinder us greatly. There are other aspects to, I'm sure, but they don't come to mind just now.
Then there is the relationship to the rest of the organisation, the people who don't write programs. They usually want what they asked for now, if not sooner. This creates a conflict. Usually. We want to make software that we can understand. This takes time. More time than is strictly needed to make it work. At least in the short term. If we who write programs can't stand up against time pressure enough we end up in a rather unhappy place. Trust in our ability erodes as it takes longer and longer to deliver the same kind of change. At the same time trust also erodes if we constantly ask for more time that we need. This since the people who don't write programs will compare us to others who, at least on the surface, delivers the same stuff faster or cheaper. It's a tricky balance and there is no right answers (as far as I know any way). Again, there are more aspects on the relationships between programmers and non-programmers too. But I'll stop here.
In any case, when we work with software design (which is pretty much every single character we type into the code base by the way) we need to keep this in mind. We need to ensure we build as many good relationships as possible and break as few as possible. At the end of the day we are social beings. The most important thing in our life is relationships. Take care of them!
P.S. Go get a subscription on Tidy First?. Mr. Beck goes into far more detail and you want to read it. You know you do. D.S.