A few years ago, my goal was to be the best software developer ever. Over time, that didn’t go away, but I realised that best is an almost impossible tasks, as there are many different kinds of good.
My next best goal was to become a really good software architect. I have been focusing a lot more on good software design, and less on technical details of a language. And I’m slowly becoming good at it.
I sometimes look at the way other people do things, and wonder “Can they not see that this is not the ‘right’ way to do this?”. When topics such as Test Driven Development, and other design ‘best practices’ come up in discussion, I am that guy who is wholly for it, yet not everyone agrees. Actually, some don’t even understand what my fuss may be about. Software is meant to work, and what happens under the bonnet can be seen as irrelevant to the end user. I can throw terms around like ‘technical debt’, but unless someone experienced the effects of technical debt, even this doesn’t quite work out.
I am fully convinced of the negative effects of bad software design. I am also fully convinced of the benefits of good software design. But not everyone else is. There are other clearer voices shouting out loud, such as the increased cost of added time writing tests, and the perceived increased scope. And the best way for the voice of good design to be heard is for it to be clear and understandable.
A good software developer isn’t only someone who is technically proficient. A good software developer is also one who can make what he understands clear to those who do not understand. If, for example, a building falls down because of a faulty foundation, and one of the artisans failed to effectively communicate risk, the fault will not be on those who failed to understand, but on the one who failed to communicate.
My communication skills aren’t the best at the moment. But the mastery of this skill is a goal I’ve set for myself, as part of becoming an amazing developer.
How is your communication?