“Which parameters make software applications high-quality? And which parameters or methods, while desirable, are not directly ‘quality’?” This is the question the author of this article asks himself. Most of his ‘parameters’ make a lot of sense, but be aware that the article is about what makes an open source program high quality, and not programs in general. This important bit is stated in the one-sentence ‘abstract’.
The Source is Available, Preferably under a Usable Licence
Hmm, I find that argument weird. Just because the source is available does not mean that the end product is high-quality. It can mean that but it is an absolute truth.
Nor does not having source code available mean that the program is not high quality either. IMHO, this article has a strong open source bias, and should be renamed to: “What Makes Open Source Software High-Quality?’
A high quality piece of software should ‘mostly’ function correctly.. are you f**king kidding me? Only in the open source world, where it seems that people are used to being stuck with a buttload of alpha/beta-quality software on Sourceforge does this make absolutely any sense. The only time I would ever consider using something that only works most of the time is when there’s absolutely no alternatives available. If that means I have to pay $ for something, then so be it.
A few more items that the article doesn’t touch on:
– Portability. I agree with this, but not hte way the author intended. Software should be portable enough so that you can copy it to a USB thumb drive, re-install the OS, copy it back to the hard drive and have it run, or just run it off the thumb drive. Anything that barfs DLL/library files all over the system is a loser, IMHO.
– Modular. If you have a program that does several different things that are separate from each other (such as a web browser that does email as well), I should be able to tell the program not to load up in memory the parts I don’t use, or to only load it when needed.
– Ease of use. This excludes any app where I have to memorize shortcut keys right from the start to get anything done. It’s cool to have them, but at least give me a menu to work with until I learn my way around. Those who don’t need such a thing should be free to turn it off (see above point).
– Stable. This shouldn’t need any explanation.
– Customizable enough to keep power users happy, but keep those options just far enough out of reach so that new users who aren’t looking for them don’t get overwhelmed.
Nor does not having source code available mean that the program is not high quality either. IMHO, this article has a strong open source bias, and should be renamed to: “What Makes Open Source Software High-Quality?’
I was just thinking about this as I’m skimming through the article. It is very heavily open-source biased. And there are things that are just rather stupid, IMHO. Like for example, an average user does not need access to the sources nor will she care about them, average user won’t be compiling the stuff and so on. So, is it almost like the author is talking about what is high-quality open-source software with a developer in mind, not from general usability point from the end-user point of view.
So, my list of things in his list that DO NOT make software high-quality:
* The Source is Available, Preferably under a Usable Licence: – this is useful only for developers, and it doesn’t mean the software is any good.
* The Software is Easy to Compile, Deploy and Install: – Look above. I’ve installed both pretty poor apps and pretty good apps both with exactly the same routine “./configure && make && make install”. And this is again only useful for packagers or developers.
* The Software Has Packages for Most Common Distributions: – This has nothing to do with the quality of the software rather than the distributions packagers bothering to include the software. This point also assumes you are using an OS which comes in multiple distributions.
Uhm, maybe that’s why I explicitly mentioned that in the teaser :
”
Only in the open source world, where it seems that people are used to being stuck with a buttload of alpha/beta-quality software on Sourceforge does this make absolutely any sense.
”
yeah, because software from outside the FOSS world has never been known to be beta quality at time of purchase has it.
Please, the FOSS types are nuts because they accept a few bugs as a tradeoff for more flexible software without mysteries. The non-FOSS types are nuts because they accept steaming turd nutty quality software (How’s Vista doing these days?) like it was handed down on two stones. All of it is human written software so it’s all buggy crap; The FOSS types just discuss it openly instead of hiding behind closed doors fo fear of marketing image.
I do like your list of attributes though. portable, modular, customizable configuration.. I have to reread the article but I think your much closer to what makes software of high quality though I’d add peer reviewable source code as a bonus (but not a deal breaker if code quality doesn’t suffer).
Edited 2008-05-06 18:36 UTC
In a lot of cases though, the FOSS crowd doesn’t have a choice.
Haha, don’t know… don’t use it. There’s a lot of bad software out there, both open source and not. The difference is that most of the ‘non-FOSS’ crowd will use a piece of software whether it’s open source or not. Just because we use propietary apps doesn’t mean we’re anti-FOSS. This is not a pro-choice/pro-life kind of thing. It’s a ‘use the best tool for the job’ kind of thing
oh absolutely, there’s enough examples of crap software on any platform. I also find the FOSS or nothing croud distastfully extreme though if I can get the needed functions from something libre, the binary blob option better have something compelling to justify itself.
(VMware Workstation is probably the next software purchase unless I have to breakdown and get a DX10 OS license – There’s nothing else in Vista for my needs).
I do think that source availability leads to better software and having the option to complile source has saved me a few times but it’s not a deal breaker if the closed source offering justifies itself. I’m not a trained developer so the source is as usefull too me as too any average user. Being able to find an active community of developers and see the bug reports and fixes makes a big difference though.
My objection was purely too the idea that because it’s under a libre license, it’s crap or that one software example is representative of the whole market. Or, because it’s under a closed license, it’s automatically great software. There are bad examples on all platforms just like there are some really good examples on all platforms.
HAHA?! you claim open source users are stuck with alpha/beta quality software??
i can only conclude you are an Microsoft moron… lol, and you are one to talk? sure there are lots of unfinished software available on sourceforge, but this isnt actually the stuff people use..
and if we are to talk about beta and alpha.. well then lets talk about YOUR FRIGGIN OS, you are participating in the worlds biggest pre-alpha test, and they even have you pay to do it..
yeah thats right, mod me down, it always hurts to hear the truth, doesent it?
Hi chris_dk!
Sure, the availability source by itself does not guarantee the software is high-quality. And a lot of high-quality software is binary only or even proprietary.
What I meant to say is that availability of the source and the more liberal its licence is, contribute to the quality of the software. That’s because the source allows improvement (enhancements, bug fixes, etc.), studying it to find out how to do things, integration into other FOSS software (including possibly GPL one), usage in “proprietary” contexts (if BSDL or LGPL, etc.), etc. etc.
While having a sub-optimal source licence, won’t absolutely prevent your software from being high-quality, having a liberal one will increase the quality a lot.
As I noted below, what I’ve given are various parameters (or criteria) not a “Must have” checklist.
I hope I made myself clear.
“What Makes Software High-Quality?”
Aw, that one is easy: Intelligent people with social antennas.
Postfix is a great example of something that is high quality. It does what it does exceedingly well, and it’s simple to set up for most scenarios, and once you start it it will run for donkey’s years.
Same with BIND, PostgreSQL, OpenSSH, OpenVPN, likely a good few other open source products.
And to include something for the Windows users, PuTTY and VMware Workstation are good examples of stuff that “just works”.
-A
By that same token, calc.exe, mspaint.exe and notepad all do what they do really well and they just work. Never had a problem with them. But they do next to nothing. Notepad can’t even open text files that don’t have their \n’s followed by \r’s.
There needs to be more factors like how much it can do. But you go too far and your software is bloated.
You overlooked “It does what it does exceedingly well”.
mspaint.exe doesn’t do it well as in functionally well. That’s called Gimp, Photoshop or similar. Now, if you look at my examples you’ll fint postfix to be an exceedingly functional SMTP server, and so on for the others in their fields.
-A
– Be made NOT by Microsoft.
Seeing as the article is mostly crap, I thought I’d give my own 2 cents on what makes software “high quality”.
1) Intuitiveness
The software needs to be intuitive to use. It must not do something that the user doesn’t expect. It needs to adhere to the UI guidelines of the platform, since this would be most intuitive for users of said platform.
2) “Discoverability”
This follows on from intuitiveness. The software should be easy enough to use that you can pick it up from the get go without having to resort to a manual. It should be designed so that more advanced features can be “discovered” along the way. That way, the user isn’t bogged down by the initial steep learning curve.
3) Documentation
This is the manual that the user can fall back on when points 1) and 2) don’t hold true. Every feature needs to be documented, with more material focused on the more complex aspects of the software. For example with an image manipulation package, there’s no real need to document most of the items under the standard File, Edit menus. However, it would be good to document the functionality of filters. It would be even better if you documented how to perform common tasks, e.g. red eye removal, sharpening and image, noise reduction, etc.
4) Stability
The application needs to be stable and not crash when the user performs some common operation. It is granted that bugs and thus crashes will happen. These can be minimized by being rigorous in the development phase, by testing frequently and thoroughly. Unit tests and automated testing tools help a lot here.
5) Support
Bug reports need to be addressed quickly. Even if a fix isn’t released, an acknowledgment should at least be given so that the user knows that their feedback has been received. Developers should also keep users abreast of the latest developments, and plans for the project. Not all users are keen to know this, but there are many who do. These users tend to be the keen ones (i.e. enthusiasts), who are more likely to spread the news of your product by word of mouth. Keep them up to date, keep them happy and your product will do well.
6) Speed
Your software doesn’t have to be a speed demon. It shouldn’t be too sluggish either. What is important is “perceived speed”. If a process is going to take longer than a second, provide a progress bar so that your users know that your program hasn’t hanged. One example could be the an image editing program I use on the Mac. When you perform an operation, it doesn’t show a progress bar! This may not be an issue when you’re working with 2 MP images and operations take a second or two to complete. However, it is a big issue when you are dealing with 10 MP images. The application looks like it’s completely hanged until the operation completes, some 20 seconds later. The GIMP actually performs slower than this particular app if you time the operations, but it doesn’t feel slower since it shows a progress bar and you know that the the application hasn’t hanged! Always always provide feedback to your user when performing long operations. Failure to do so will frequently result in your app being called “slow” even if it is faster!
Wow …. that’s a long list -.-
yes software has to be ‘responsive’ and can’t lock on you.
From a developer’s standpoint (and maybe a user’s, too), I like this point most:
Picking up your example of an image manipulation program, there are some features that are interesting for, let’s say, a graphics engineer for commercials, a photo technician or a guy who postprocesses images for a newspaper. Words like “histogram”, “color separation” or “handling of artifacts” come into mind – words the average user (who possibly insists on having a pirated copy of the latest “Photoshop” on his PC in order to watch his holiday pictures) does not understand. — On one hand, a good documentation could explain what these functions are used for, how they work and how you could use them for specific problems. On the other hand, the first mentioned professionals will know, they don’t need such kind of documentation.
Documentation in general is important. At this point, I’m usually praising the BSD operating systens where everything (system binaries, tools and utilities, maintenance procedures, kernel interfaces, drivers, library calls and file layouts) have their own manpage which is available without any external connection just after install. And you have the system handbook on your hard disk, too, in different languages. In my opinion, it’s great just to type “man mencoder” or something similar to get a manpage that as been written with the user in mind, containing examples and explainations that are easy to follow and that do enable the reader to achieve his goal. Sadly, this tradition doesn’t seem to be followed anymore by “modern” applications…
I mentioned many of the things you’ve mentioned here in my article, although possibly not clearly enough. (I don’t know). I’m sorry that you felt the article was “mostly crap”, but many of the things you’ve mentioned appear there.
Oh well, I guess you can’t please all the people all the time. Nor should you try.
That put aside, I found your comment to be insightful (but I only skimmed it).
Perhaps the author should have taken a glance at ISO-9126 which is an international standard for evaluation of software quality.
http://en.wikipedia.org/wiki/ISO_9126
While I’m not sure about the metrics described in this article, open source does have the big advantage in that it’s open to analysis of various metrics, and there are a few projects that have got funding from the EU recently to do just that.
I’ve detailed some thoughts on open source project quality here:
http://www.pixelbeat.org/docs/oss_project_quality.html
This article is very poor, it is completely UNIX-focussed. Also it explicitly contravenes guidelines such as the Aminet submission guidelines.
Hi all!
Thanks for all the comments. Just a note: while it is true that the focus in the article is on open-source software (FOSS) or similar and so is my viewpoint (being a FOSS user and developer), many of the points I mention make sense for a lot of other types of software. (including web-sites or services).
As for the parameters themselves, they should not be considered as absolute requirements for quality, but rather as a generalised weighting function. By all means, some very good software and even very popular software fails to meet some of my criteria.
There is also some useful (for a change) commentary on the Joel on Software forum:
http://discuss.joelonsoftware.com/default.asp?joel.3.627380.26
Now, I’d like to reply to the rest of the comments here.
Best Regards,
— Shlomi Fish
I applaud any attempts at defining good software, rather than relying on peoples gut feelings about software. I also think that standards such as ISO 9126 are too limited, as they only deal with quality attributes directly related to the software (functional or non-functional requirements). There is clearly a need to extend such quality models. But I am still having some issues regarding your model (or list).
For most, it seems mostly like a generalized framework containing evaluation criterias. The evaluator picks whatever requirements that are important from the list and then evaluates the software against these requirements (based on appropriate metrics). A bit like ISO 9126.
At other times it makes some fairly specific (and a tad biased) assumptions the requirements of the end-user (and implicitly – what exactly is good software). As for something like “Good Software Management” – I think it’s a mistake to evaluate software on the development methodology. “Program X is not developed with method Y – dump it”.
I think the model is too much a mix between general quality attributes and personal opinions.
I read the comments and the question that came across my mind is why nobody is saying,
“Meets the requirements of the client”
All of the rest does not matter if it does not meet the requirements of the client.
Don’t be so hard on the author just because he may not provide the ultimate most comprehensive list of requirements for every kind of quality software project out there… The article has many good points, too often forgotten and worth keeping in mind: like when it mentions good social engineering skills.
There’s more to good open source software than just good quality open-source code. Social problems have caused many otherwise promising (open source) software projects to go astray.
The article is not trying to compete with a something like the ISO standard mentioned above: http://en.wikipedia.org/wiki/ISO_9126 It complements such a well-known but mostly only technical, code-related list of requirements by offering some extra points of view.
What makes software high quality is not making it a insecure bloated overbearing unreliable piece of crap with an illogically laid out user interface. Sounds elementary, you say? There are so many programs that fail this test.
Here is some evidence of the first signs of trouble:
Quick starters–Die! Die you ill-conceived rotten marketing fiends!
Connecting to the internet–To leave your computer open to hacking. Wait, aren’t I using a text editor, why is it connecting to anything.
Need to restart a computer after software installation–IR FN with your OS.
Temp files and useless logs everywhere–Log entry #1:Log successfully created. Log entry #2: Log successfully updated. Log Entry #3 Log copied to OSNews.com for ridicule.
No Export or Save Option–Just stick your neck through this loop. Trust me. What black hood?
Right-Mouse-Button to select object–Because the programmer really hates you.
CTRL-C or CTRL-X to exit–The old X-Terminals you are fond of occupy in the deepest parts of your local landfill.
Mouse droppings and cursor droppings–I just need to scroll a little more to clear it up….
Open book programs with severely overloaded tools–If I press just nine more keys I can edit my 2D Berzier mode.
Wrong mode warning!–If you know what I want to do, then let me do it.
Backspace of Death–Damn! Now I have to reformat this whole paragraph.
File save/File open–Can’t you remember where I was a minute ago?
Okay, so I’m joking. I always used emacs because I couldn’t get anything done with vi because I couldn’t remember the commands–ed was easier.
I also laughed at the 15 or so lines of output, thinking that there should have been some silent or quiet option, as a lot of small utilities used to have. I believe a lot of people I know just forgot to turn off the debug code and it made it into various utilities and no one ever bothered to fix them because they thought the extra output belonged there. Those same utilities probably never had any simple instructions for -? or -help or whatever other prompt.
Commercial software, whether it’s Photoshop, an accounting system, or a development system, should just work and we shouldn’t have to depend on workarounds. I still have nightmares about certain C/C++ compilers.
Even if the code is neat and clean on the inside, does that help on the outside? Does a liberal source code licence help? I hope so, but I have my doubts.
By the way, how do you quit vi?