I'm just returned from a week-long family trip to the coast of Maine, where we stayed in a seaside cottage near Boothbay Harbor. As with any vacation, a lot depends on the weather, and as it turned out we were pretty fortunate. We had just one rainy day all week.

One promising outing was to Reid State Park and its beautiful, wide sandy beach (a rarity in Maine). With its soft sand and roaring surf, we figured to spend the entire warm afternoon playing in the waves and throwing the football around. Instead, we fled after just 30 minutes.

You see, the beach at Reid State Park doesn't belong to the state of Maine. It doesn't even belong human beings. It belongs to the ferocious black flies that descend on it every summer. Within minutes of our settling into the sand, the insects were upon us, constantly pestering and biting painfully at our legs. My nine-year-old daughter was inconsolable. Even my boys, raised on Vermont mosquitoes, were ready to give up before long.

I'm compelled to twist this experience into an allegory about software development. Because, you see, everything about the beach at Reid State Park seemed perfect, from the gently sloping beach to the sandy ocean floor to the huge waves. And yet, something as small as a bunch of black flies ultimately defined our experience and forced us to turn away.

I run into black flies in applications I use every day. I currently own an Android phone, and I can't tell you the number of times I've ground my teeth as a lagging interface has prompted me to touch an icon or button one time too many, setting off an unpredictable chain of events. And then there is my VPN client software, which sometimes -- but not usually -- needs to be shutdown and restarted after it has dropped a connection. Unpredictable, painful and counter-productive elements in your software can mar an otherwise picture-perfect application and force users away in droves.