Kart Bart
Posts: 2
Nickname: kartbart
Registered: Jan, 2004
|
|
Re: What is good code?
|
Posted: Feb 27, 2005 3:55 PM
|
|
<p>Ignoring speed of development for a moment, is the <i>best code</i> software that: <li>can adapt to change <li>performs well <li>is error free <li>is as simple as possible <li>does what my customer needs
I submit that "good quality" code is none of the above. In the software world, for some strange reason, business and market forces are always ignored and poeple tend to shoot for some utopian ideal. Let me illustrate and put forth, how I as an Architect approach software quality on my projects.
Would you consider the Lexus LS 400 a good quality car? Absolutely? Do you think it is successful? Absolutely? Well, wait, there are more Honda Civics sold than the LS 400. How is that? To define quality as a set of "illity" attributes (reliability, maintainability, readability, enhance-ability, performability, scalability, etc) without consider the business drivers behind the reason for creating the software in the first place is futile. The Lexus caters to a specific market that looks for certain attributes. Cost is not one of them. The Honda Civic caters to a different market, where cost/quality ratio is a whole lot more important.
In the same way, when you approach building software, first ask what business drivers are behind it? Does it need to be introduced quickly? Is this running a critical operation where downtime cannot be sacrificed? Is this to prove a concept and get funding for a larger venture? Each of these requires a particular set of illities to be "magnified" and some other illities to be "sacrificed." Example, a fast time to market generally means the "developmentability" of the software should be very high. Very often, this means sacrificing "maintainability", "extensibility", "performability" to some degree. The same way, a mission critical app that has stringent defect and uptime requirements needs to have high "verifiability," "testability," "reliability" and this inevitability precludes "developmentability" and low-budget.
In most software development projects, if you list of the business drivers and map them to "illities," you will find that the illities are in conflict. You then need to get the business stake holders to prioritize the business drivers to get the list of illities to focus on. One can easily create a matrix of prioritized business drivers and contributing "illities" and come up with a weighted rank for the most important one after eliminating the conflicts.
From that point on, your architecture, development plan, design and decisions should be deliberately skewed to reflect those illities. At the end of the day, you may not fit the misconceived notion of software quality - but your business stakeholders will call the software a success and it will indeed be. The beauty of this approach is not only in producing the "right stuff" but in being able to defend your decisions against those pesky people who always complain about some favorite "illity" of theirs being sacrificed. By going back all the way to the business drivers of the stakeholders, you can tell them to put up the dough or shut-up.
|
|