Software Development is…
Posted: July 8, 2010 Filed under: Software Engineering Leave a comment »
Reverse Engineering for Software Systems
Posted: June 30, 2010 Filed under: Software Engineering, Tips and Tricks | Tags: Reverse Engineering 2 Comments »Reverse engineering (RE) is the process of discovering the technological principles of a device, object or system through analysis of its structure, function and operation. It often involves taking something (e.g., a mechanical device, electronic component, or software program) apart and analyzing its workings in detail to be used in maintenance, or to try to make a new device or program that does the same thing without utilizing any physical part of the original.
When I started my career at an Indian public sector telecommunication company, one of the projects that I worked on was a versatile multiplexer. At that time the Indian market was still closed and technological know how from the more developed countries was limited. We did not even have a sample of the multiplexer, just a technical brochure with a feature list of the product. I am not sure if that can be called reverse engineering, but our team did manage to build a working product. By the time it hit the market, I had left the company so I do not know how well it fared. However, I had other brushes with reverse engineering, both successful and not-so-successful.
How Unique is Software Development?
Posted: June 10, 2010 Filed under: Software Engineering 4 Comments »1. Rely on his or her instinct and not measurable parameters
2. Manage people and not activities/ deliverables
3. Not set expectations with all stakeholders
The set of what one perceives to be the most common mistakes is likely to vary from person to person. Nevertheless, the second point came in for a sharp response at the forum:
I have a contention on point # 2 in your response. In any people centric organization, managing people is an integral part of Project Management. I am not sure why you consider it as a mistake. Can you explain?
This is not the first time that I have encountered this criticism- that software is “people centric” and hence the focus should be on managing people and not the deliverable. The root cause of this observation goes much deeper- that somehow, software development is something very unique, that it is not similar to other engineering disciplines, that it should not emulate manufacturing.
I aver that while, like any other discipline, software has its unique aspects, it is still part of the long tradition in engineering. Indeed, over the years, consistent attempts have been made to align it with engineering- establishment of standards, the ISO and CMM models all intend to achieve the same objective.
By stating that software is somehow “people centric”, the real point is lost- where software differs fundamentally from manufacturing is that its work products are intangible- they do not have a tangible physical inventory of items that can be measured discreetly, in that software is closer to process engineering where the basic ingredient undergoes a number of changes throughout its lifecycle. In the absence of such tangible artifacts, it seems that somehow it is people centric because that is the nearest tangible association one can make.
Over the years, there has been an increasing recognition of the engineering or manufacturing aspect within the software industry- where there is the increasing preponderance of “components” (like from Microsoft), frameworks, standards, metrics and processes.
I am sure the the debate will, nevertheless continue, and provide better insights into this still- young discipline.

