Software quality as a practical metric

All of that started with Twitter... I created an account on Twitter. My way to Twitter was quite long and there were, I guess, 3 major factors that made me do that: changes in my professional life, Bob Walsh's comments about Twitter and Hanselminutes episode about WPF Twitter client blu. In my 2 or 3 days Twitter "career" I've already seen famous "Something is technically wrong" so I can see myself as an experienced Twitter user.

But there are 2 other things that prompted me to think about software quality.

After listening to Scott Hanselman's podcast I installed blu. The second thing I noticed after slick UI was inability to work through proxy. I live and die by personal proxy which allows me to easily migrate between different networks during my day. So, what can I say? Nice piece of software, but almost completely unusable in my setting, which as I would guess is not uncommon.

Another sad experience is twitbacks. As a newbie I given in to temptation of working on form rather than the meaning first. I've spent quite a time with this tool, but was not able to produce any sufficiently good looking background. Main issue for me was strange resizing which made text blurry and also lead to incorrect alignment with functional elements of the Twitter page. Again, nice idea, but not usable.

Both of these cases look to me as an obvious shortcuts taken by the development teams on requirements definition or testing stage. Quality of the system output is determined by weakest link in the system. Determined to the extent that piece of software may be rendered unusable in certain common scenarios.

Network client solution cannot omit widely spread variances in Internet connectivity settings.

Image generation software can not afford generating funky images.

Check that you have not fallen into the same trap or start fixing that immediately.

Quality we do not plan for

When I was reading A Conversation with Jeff Bonwick and Bill Moore in the latest issue of the ACM Queue there was a passage that really touched my heart of software engineer:

PAWEL JAKUB DAWIDEK At first I just wanted to see how much work it would take to port ZFS to FreeBSD. I started by making it compile on FreeBSD, and once I did that, I was quite sure it would take at least six months to have the first prototype working. The funny thing was that after another week or so, ZFS was running on my test machine. It was truly surprising that the code was so portable; it was self-contained and I had initial read-write support after 10 days of work.

Isn't it really the essence of internal quality of a software system?

You may disagree but to me software product|design|implementation|etc. is great when you get something that you originally did not plan to get. This happens when you do not compromise a single bit of quality of what you do even it is not stated in the requirements. Quality always pays-off, but you have to invest in developing "101% quality" mindset in you team before you get dividends.

Outsourcing that helps you

Speaking about Niklas experience with outsourcing I wrote before. I could not help commenting his general description of his job. Don't get me wrong, but believe that outsourcing to 4 countries with 12 hours maximum time-zone difference that make you work 24/7 is not The Right Thing™. On the high-level I divide outsourcing into 2 types: outsourcing to save (i.e. Bad Outsourcing) and outsourcing to focus (i.e. Good Outsourcing).

When you outsource to save costs you send wrong signal to your vendor: whatever it is, it should be cheap. And when vendor receives this signal, he starts sacrificing things to save costs. The first thing he sacrifices is quality. Quality of office, quality of equipment, quality of workforce, quality of deliverables. This ends up as a nightmare for your managers and engineers.

On the contrary, I never repair my car myself. I outsource this activity to focus on my core competencies. And do not seek for cheap service providers. I seek for those whom I can trust, for those who save my time. Such outsourcing partners can boost your business by enabling you to deliver more value to your customers.