Tuesday, February 28, 2012

"Software" and "code"

As I suspect most developers do, I make a distinction between "software" and "code":

  • Software is the end-product: a website or web-application accessible by the end user, an installable GUI program, a long-running installable service, etc.  The point is: software is the product which customers purchase and use.
     
  • Code is the source code - the building blocks from which the software is made - including "raw" code (C#, Java, Ruby, Javascript, HTML, SQL, etc), configuration files, publicly-accessible APIs, and even the designs which govern how the subsystems are built and interact.  Most significantly, customers never see the code or directly interact with it.

Considering this distinction between software and code, it's not surprising that quality of software and quality of code are measured differently:

  • "Good" software is generally measured by number of bugs found during QA, number of issues found "in the field", function points implemented,, etc.  Sometimes it is measured using more "business-y" factors, such as customer satisfaction with the product, quantity of sales, etc.  And ultimately, by the only business yardstick that really matters to the company: profitability.
     
  • "Good" code is generally measured by its adherence to industry-standard best-practices (appropriate use of design patterns, appropriate use of the language / platform's idioms, adherence to "DRY" concepts, encapsulation and code reuse, etc.).  And sometimes by more quantifiable measures (completeness of code comments, unit test coverage, etc.).  In my experience, those quantifiable measures rarely reflect the actual quality of the code, but that's a discussion for another day.

So even though code is the building material from which software is made, the two are surprisingly distinct.  With that in mind, what is the relationship between code quality and software quality? 

I think I'll mull that over, and make it my next post.
 

Saturday, February 25, 2012

First

I've been developing software for about 20 years.  Lately I've been doing a lot of ruminating about the industry, my perspective on it, and my place in it.

When I'm trying to gather my thoughts on something, writing them down is often helpful.  So that's what this blog is - me gathering my thoughts on software development.

It's quite possible the only one who will find this remotely interesting or useful is me.  But just in case others do, I figured I'd throw them out here.