Thoughts on Software Engineering

Wednesday, January 04, 2006

Four Pillars of Software Development

There are four things that usually go wrong with software development. These categorize virtually all parts of software development. They are visualization, communication, specification and construction. Although, construction has got a major chunk of attention from practicing professionals, the other three are still asking for improvement.

First of them is the visualization of the problem. In most cases, the problem is not what is bothered about; it’s the solution that is actually visualized. I met a librarian few days ago. He said he wished his library be computerized. He had seen his fellow counterparts from other institutions majestically use computers. So, he too wanted one. To convince the management he invented a reason that computers may reduce the weekly report preparation time. The cost involved in computerization and its maintenance may not gain financially compared to the time spent on report preparation. If such analysis is not done in the pre-inception stage, blaming that the software development effort failed to help the business is inappropriate.
In some cases, there are valid reasons why software may help. However, as that reason is communicated through to different people, the real essence may be lost. The problem is in communication. I asked three of my colleagues to explain a picture. They found different parts interesting and emphasized on those parts that caught their interest. Clearly, many parts of the picture were missed during their explanation even after I asked twice if that’s all they see on the picture. Lots of assumptions were taken and ambiguous sentences were uttered. What all of them saw, the visualization was the same; but communication issues conveyed it wrong/incomplete/ambiguous. What appeared as a sunrise to someone was a sunset to another. What was a boat for someone was a ship to other. The fact is that the choice of vocabulary, mastery over the language and application of grammar complicates in sharing what we visualized.
The third problem is in specification. Mind and tongue speak different languages. Tongue does not faithfully reproduce everything in our mind. You may attribute it to the limitations of the natural language we use to communicate; or to the human beings itself. Moreover, ambiguity, duplication and inconsistency are very common to see.

Finally, there is the issue of construction. The rigidity of programming languages and the lack of skilled professionals inject deficiencies in code. The same problems of specification i.e., incorrectness, incompleteness and inconsistency are observed while we code too. As days progress, we have seen programming languages mature from machine-level, through assembly-level to high-level.

Construction, the process of converting specification to code has been considered at length as the issues of software development. The other three equally critical issues are left usually unattended. On comparing with other disciplines such as physics or chemistry, we are not second best in problem solving techniques; however, we are not best either.

Words of Wisdom

There are people who know people. There are people who know programs. But, we need people who know both - people and programs.

Look for local improvements in established methods. Don't always go for new methods.

The redezvous of machine to be built with the environment that will support it has to be carefully described.

-- From the work of Michael Jackson on "System Requirements and Specification".