What does it mean to be a software professional?

I’ve been reading a lot about what it means to be a “Software Professional” recently and I find it quite fascinating. The book that I am currently reading suggests that software professionals should treat their jobs the same way that medical professionals treat theirs. By that I mean that every deliverable should be completely defect free and should do no harm.

On the surface this seems like an obvious statement, but in actual fact, that’s not how the industry has been operating. Software designers are rarely given enough time to do the work necessary to test and refactor their work. The reality is more like every project is behind schedule by the time it is presented to the design team and the designer has to draw on magic to get things back on track.

What is magic you ask?

Magic is a compromise between quality and cost that produces a suboptimal result. There are a lot of outside factors that influence quality and depending on the application, quality may not be an issue. A “Proof of Concept” for a trade show is a good example of a situation where quality takes a back seat to “On time delivery”.  In these situations however we must be very clear that this kind of code is fragile and purpose built with a very short life expectancy.

I find that life is very rarely black and white, but when it comes to software design, I’m a big fan of Test Driven Design (TDD) for all projects that contain code with a life expectancy greater than a few months. For a good description of TDD, check out “The Clean Coder” by Robert Martin.

Robert or “Uncle Bob” has summarized a number of scenarios in the first few chapters of his book that every software designer should read. He has drawn on his 40+ years in the industry to craft responses to a number of common situations that most of us have experienced. Let me know what you think.

 

 

This entry was posted in General, Thinking out loud. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *