Is quality really a business decision?

A couple weeks ago, I posted my response to Joel’s Duct Tape programmer article. In that post, I linked and quoted an article by Casey Charlton which said that quality was a business decision. I started thinking a lot about that statement, and asking myself the question, is quality really a business decision?

If you are a developer, has the business ever asked you to create a 50% quality product? Has the business mandated that functionality not work 10% of the time? Maybe the bubble I live in at Rackspace shields me from businesses like this, but Pat has never told me to sacrifice quality on anything. In fact, he only expects the results of my work to meet his expectations. He never asks me for code coverage, or code complexity, or any other metric trying to determine the quality of the code. He only asks for results.

Maybe the confusion is over the term quality? There is a difference between functional quality and code quality. I can achieve high functional quality with bad code quality. It might not be easy, but I could hire 2 QA people for every developer and probably achieve it.

The business does directly impact functional quality. If the business is creating the functional requirements, meeting those requirements is functional quality. Those requirements could even seem very technical, like scaling to 100M users, but they are still functional requirements.

Now that we understand functional quality is a business decision, whose decision is code quality? It is a pure engineering decision. Based on business requirements and delivery dates, software engineers determine how to achieve results and how much duct tape to use. Don’t believe me? Read Wikipedia’s definition of Software Engineering (no, I didn’t write it and it is cited):

Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

The problem is most developers don’t realize this. Instead of trying to achieve both functional and code quality, developers assume a deadline means they should sacrifice code quality. Notice the wording I used, ASSUME. There is no systematic, disciplined, quantifiable approach as to why most developers choose to sacrifice code quality. This is not how engineers are supposed to work.

Think about the parallel of civil engineering. Civil engineers are given a task, like building a bridge. They are also given a budget and timeframe. From there, they determine the materials and methods to use to create a safe structure. They even predicate how long the bridge will last before needing maintenance.

How awesome would it be if software engineers could do the same thing? Software is still such a new practice, we are continually figuring things out, but eventually we will get there. People like Uncle Bob and the Agile Manifesto crew have tried to establish patterns and practices that guide developers based on their experiences.

Quantifying code quality and its impact on functional quality, performance, deadlines, maintainability, and learn-ability is extremely hard. But, we have to strive to understand this information. It will continue to make us better professionals that can reliably accomplish great things.

What are your developers talking about?

I found myself in the middle of an argument over the differences between static and global variables today. I started to give my input, and stopped dead in my tracks.internet_argument

I don’t care what the answer is.

I love the fact that my developers enjoy programming enough to argue about the semantics of it. I love that they take software development so seriously. I love that they want to know the answer.

Facilitating an environment where developers can continually improve is super important to me. Good software developers are passionate about programming and are always learning. Great software developers are obsessive about programming and are learning too fast for me to be comfortable. If there isn’t constant communication about new programming principles and practices, something isn’t right.

What are your developers talking about?

Quality

Yesterday, I ordered a sandwich at Panera, and saw something quite unexpected. As they were cooking my sandwich, half the sandwich looked delicious, and the other half was starting to falling apart. The cook threw the ugly half in the trash, and cooked another one. Even though the bad half would have tasted the same, the presentation was important enough to throw it away. How many other fast-food restaurants would have done that?

How does this relate to software? Am I saying you should spend more time making an awesome interface? Maybe.

What I am really saying is that Panera’s food is awesome. And they look delicious too. Without good food, the presentation is worthless. Without good presentation, the food can’t truly be appreciated.

It takes an awesome product to make a user happy. The presentation is only one piece of what makes it successful. Every person involved, from the UI designer, to the DBA, make this happen.

Using Snagit to create rich posts

“A picture is worth 1000 words”

Most blogs that I read integrate media, specifically pictures, into their posts. A video can be avoided. Text can be skimmed. But pictures can’t be overlooked. Good pictures draw you into an article, or website, and add to the story the author is trying to tell you.

Last week, I posted a setup guide for NHaml with nearly 25 screen shots. Surprisingly, I was able to grab all the screenshots, cropped and everything, in about 15 minutes. Using the old school method of Print-Screen + Paint would have taken at least twice as long, and looked half as good.

postscreenshotPaying money for a screenshot utility seems ridiculous, but after playing around with it for a few days, I had to buy Snagit. I only used about 1% of its features, and that 1% is good enough to warrant spending the money. If you want to create media rich blog posts, I would highly recommend it. Even though the example is a little ridiculous, it shows how effortless creating great looking graphics with Snagit.

Stop pulling your hair out, use Process Explorer

How many times have you tried to open a file in Windows, only to see it is already in use by some another program? Thus begins the witch hunt of process destruction, until you can open the file.

Process Explorer gets rid of this problem. Just search for a file name, and it tells you which process has a hold of it. This is only a small piece of its functionality, but a huge piece of my sanity. Why doesn’t Windows Ship with all the SysInternals stuff?