Thursday, April 19, 2012

Day 9: Black-box Considered Harmful


The very first theory you learn about in the realm of "best practices" when it comes to software design (and other kinds of engineering; especially when dealing with consumer products) is the notion of black-box design.

If you do a Google search for that term you get most results referring to black box testing.  That's a similar concept, but for testing purposes instead of design.

Black-box design means developing a product (in my case, software) in such a way that the user of the software doesn't have to know HOW the software works, but only how to use it.  The notion is so pervasive, that when you design software for even other software engineers to use (libraries, etc.) you use black-box design.  Software engineers are taught to design the code so that the fewest people possible need to understand the logic; the inner-workings of the code.  Instead, you simply build your code so that a very few keywords (representing methods, functions, etc.) need to be used to make the code work.  The rules that govern these keywords are simple, fixed, and are the only thing the user needs to know to use the code.

You see this kind of thing all over.  I've seen, for instance, after factory car CD decks that have removable faces.  The faces, which are really just an array of buttons, are detachable from the rest of the player.  The consumer needs to understand the button layout, but not the details of how the disc is spun, read, played, how the bits are interpreted, how the laser moves, etcetera.  Likewise, any software you might be familiar with has these two parts as well.  The software has the visual part that the average user interacts with and then there is the actual program logic that gets executed behind the scenes.

This is a popular design approach for several reasons.  First, the best way to make "user-friendly" software is to make software that requires as little user training as possible.  The less the user needs to know about, the better.  Admittedly, software engineers are taught to be wary of how stupid (uninformed is probably a better word) the average user is and, as a result, how illogically and unpredictably they are likely to behave if you give them choices.  Oh, and by the way, even if the software fails as a result of user error, they get to freely blame the software for being "to hard to use".  This is a bargain that technologists have made in order to expedite the penetration of useful technology into mainstream use and monetisation.  It is a bargain I believe it is time to push back against.

Second, if the interface (a fancy term for the buttons and knobs) is separate from the functionality, then it's possible to change one without necessarily having to change the other.  The user's don't like where a button is laid out on the screen? No problem.  It can be moved without having to change the actual inner-workings.  I can even choose wildly different looking interfaces, like choosing from an array of face plates for my CD player, without having to re-engineer the whole unit.   Or, better yet, let's say something is wrong with the actual functionality (or, more optimistically, let's say we've discovered a more efficient way to perform some task).  No problem.  I can do that, make an update behind the scenes by replacing part of the inner-workings with the new and improved version and the user never has to know.

Third, the fewer chefs in the kitchen, the better.  The fewer people who have to be allowed direct access to deciding how the code (or hardware) actually functions, the better off we are.  With black-box design we can support modularisation, control errors more easily, and manage the process of design more efficiently.

The general principal is this; the fewer hands you have manipulating the design and development of each component the better off you are.  This isn't withstanding the "many-eyes" argument of open-source software which states that the more people who see the code, the less error prone, more reliable, and more secure software is.  You need many eyes checking for errors, you need few hands making critical changes.

So, with these things on the side of black-box design (speedier market penetration, better results) you can imagine that what I'm about to say is likely to be received with scepticism.

Namely, I think the usefulness of black-box design is expiring.  I think, that like so many drugs (LSD, cocaine, etcetera) which were once sold as "miracle cures" with black-box design what is largely seen as the palliative for all that ails the design and use of technology, there's a sinister side that lies underneath.

The agreement between consumers and developers that consumers will consume blindly anything that they don't have to be responsible for learning to use is a bargain with the devil of culturally acceptable ignorance that is reaching a tipping point.

As long as technology represents an ancillary pursuit, separate from commerce, liberty, education, freedom, and the realisation of self, then it doesn't really matter if the consumer of that technology is responsible for understanding the inner workings of it or not.  But, as technology becomes more ubiquitous, as the use of devices not only shapes, but drives the daily lives of the average person, then a basic level of understanding about the inner workings of the devices becomes necessary for everyone to possess.

I hope it's not too late to put the genie back in the bottle.  Certainly, it's going to take a concerted effort by both consumers and producers.  Developers are equally as sceptical of the ability of users to learn to use technology as users are self-confident that good technology should "just work".  Developers are happy being puppeteers and users are happy being puppets.

But, if someone is responsible for pulling your strings, and the result of those string pulls is more and more central to the living of your life then how can you exercise liberty?

As I mentioned in a previous post, now is the best time to be a developer; a creator of things; an innovator.  It's such an exciting time to be alive.  I was reminded of this clip just the other day, where Louis C.K. puts just the right spin on it... every thing's amazing and nobody's happy!

The biggest problem with black box design is that it is a self-perpetuating trap.  Our technology design depends on it, because our consumers are addicted to it.

Recently, my family has made the decision to "cut the cord", if you will, and to no longer pay for cable.  Too often, now, my wife and I find ourselves thinking, we're paying for THIS!?  The shows we actually like are few and far between, and so it's getting harder and harder to justify the none to small expense.  Toward that end I've been working to locate other forms of entertainment.  I've unlocked a wealth of media that is being created on and specifically for the Internet.  These efforts are often cutting edge, rough, or experimental but almost everything I see is better than what passes for television programming.

Felicia Day is one of the earliest creators of this form of media and is at the heart of its evolution.  Recently she's been interviewing on podcasts and the like concerning her new YouTube channel, Geek and Sundry.  In one particular interview she was bemoaning the nature of what consumers expect.  Basically, consumers have no problem accepting things which are obviously amateur.  Some of the most popular shows on YouTube, with literally millions of people watching every week, don't merely have low production values, but no production levels at all.    But, as soon as someone with a little money to spend tries to make a better show (for free distribution or not), consumers begin to compare the production levels of those efforts against those of the shows they're used to with comparatively HUGE budgets on network television.  As she put it, "There is no middle ground."

This is a phenomenon that affects every kind of technology, entertainment, or consumer product.  Even though creators are making great things with a soul and coming from a place of passion; and even though these things are often provided at either a low cost or no cost at all, people can't take into the equation what actually goes into the things they buy.  The primary reason for this, as I see it, is that due to black box design principles, consumers are divorced from what it takes to make the things they use.  It's all got to work and look perfect; and why shouldn't it, after all?  

No comments:

Post a Comment