Thursday, October 16, 2008

it's all about the data, stupid.

On an average day I'll touch three different operating systems, and a pile of applications on each one, and I've come to an important realization for me as a programmer: operating systems, and most applications, suck. Tying your business to any one of them undermines your business from the start (but is often a necessary evil). Most applications don't respect your data, and actively work to make your life more difficult.

My day job involves working closely with our art department, who all use Macs, and their work products (primarily images). Because of this, it's convenient for me to also work on a Mac, to simplify the sharing of data as much as possible. This works out really nicely, until I need to edit a document that a manager created in MS Office 2007. I've got Office on my machine, but it won't edit that file, or it's missing some chart, or annotation, or what have you. The fact that it was created in Office is unimportant, what's important is the data in the file not the file itself. The file format is actively preventing me from getting to the data.

Applications may be irrelevant, but what isn't irrelevant is user data. The important choices when developing, or evaluating a new system aren't whether to use OSX or Windows or Linux. What's important is deciding what needs to be done, what the constraints are (cost, time, etc) and what to do with the data. Does the data need to be secured from all prying eyes? Displayed prominently on a website? Printed to paper and stored in a humidity controlled vault in an abandoned salt mine at an undisclosed location? All of the above depending on the phase of the moon?

The applications that I enjoy working with the most are the ones that understand that the way I need to see my data today may not be what I need tomorrow. When you design an application, be it on the web, or the desktop, think about the ways in which you show and share data with your users. Is it easy for them to change the format? Is it easy for them to get at the data in as raw a form as is applicable? If your answer to either of the above is 'no', then you're not respecting your users.

I don't want to have to use MS Office to read my data I've exported from your site. I don't want to be stuck with only a PDF. I want the option to get raw, unformatted text, or a formatted TeX doc (yes, yes, wishful thinking). I want the option to get a simple CSV file, or RSS/Atom feed. I want control of my data. I want the comfort of knowing I can get my data out of your system, for my own uses, with as few restrictions as possible. Because I don't expect you to know every possible way that I may want to use my data. But I don't want you restricting me from certain options based on limited export options.

So, what's the point? (Other than that I'm apparently trying to become the next Steve Yegge, yeeshk this is getting long winded) The point is that it doesn't matter what OS you use, it probably sucks. The applications you use are less important than the data you're creating in them. What's really important is having the data that's needed, in the format it's needed in, when it's needed and if you're preventing your users from doing this, you're ripe for replacement.

Labels: , , ,

Sunday, October 12, 2008

on shameless self-promotion in a time of social networks

I can't go a single day without hearing (or overhearing) a conversation from a friend or acquaintance discussing one social network or another. I usually roll my eyes, or ignore these conversations. As an internet luddite, I try to avoid these time sucking privacy invasive services. But today I did something, something so contrary to my years of preaching that I felt it necessary to explain my motives.

Today I joined twitter, the poster-child for time wasting, self-indulgent, Web 2.0 buzzword compliance. What could possibly make such an adamant hater of social networking pull such a 180 overnight? It's really simple, shameless self-promotion.

I spent several days last week at a conference, Tulsa Tech Fest, meeting many very interesting people. I found quickly that social networks, particularly twitter, were the dominant means of communication and organization amongst the conference attendees that I was most interested in keeping up with. I heard many tales of meetups, and user groups, all of which are held in places that aren't here.

If I want an opportunity to get out of here, and do the sort of work I'd like to do, for the sort of company I'd like to be doing it for, I've got to be something more than another obscure, unknown developer. Given that I'm not currently able to live in a more developer friendly area, the best option for moving forward in my goals, is shameless self-promotion. Now, back to how this all relates to twitter.

I'm excepting my self-imposed ban on social networking, for purely self-serving reasons. I need a way to better communicate with others who are working towards the same ends that I am. Several years ago, the most prevalent tool for this sort of communication was IRC. But my brief and informal survey seems to show that a lot of conversation has moved to the vast unorganized land of twitter.

So here I am, forsaking my self imposed title as an internet luddite in exchange for the chance for some shameless self-promotion. Sometimes, I guess, we all make sacrifices in exchange for making progress towards our goals. With that in mind, I humbly apologize for my hypocrisy, and by all means follow me on twitter. (sigh)

Labels: , ,

Monday, September 15, 2008

on blinking lights and wasting time

or how I learned to quit being interrupted and regain my productivity

Hello, my name is Tanner, and I'm addicted to blinking lights.  The addiction costs me hours of my life every week, and it's time to quit.  From the minute I wake up to my screeching blinking alarm clock, until I turn off the TV, put down the phone, and go to sleep I'm blasted by little blinking lights. In every part of our life we're conditioned to pay attention to bright blinking lights, microwaves, fire alarms, emergency vehicles, phones, alarm clocks, status lights on every gadget under the sun, so why should our offices be any different.    But how do you even start trying to break a lifetime of psychological conditioning?  I set out on a quest, a quest to regain my productivity at the office from the blinking lights.  For one week I did everything I could to disable all of the blinking lights I'd found controlling my time, and in the process figured out how to regain control of my own time.

I work in your average office, working average hours (8am-5pm, 5 days a week).  I'm surrounded all day by a half dozen blinking lights.  Thanks to email, office phone, personal email, iCal, and my wonderful BlackBerry, rss readers, etc, my day consists of bouncing my attention from one blinking light to another.  To top it off I get all of my work (and personal) email forwarded to my phone, so I get hit twice when I'm at work, often separated by a minute or less.  Let's have a brief example of what occurred daily when I was at my desk.
Oh, my email icon (on a mac) has a red badge on it, I need to check my email.  My voicemail light is blinking, better drop what I'm doing and listen.  My cellphone is blinking (or vibrating), I must have a text message, personal email, or voicemail, or just another copy of that email I read less than five minutes ago.  Ohh, 10 new stories in my feed reader, I can at least skim them real quick.
The straw that broke the camel's back, was counting how many emails I got one day.  The day that I counted, I received over 30 emails.  That day was not extraordinarily busy and I didn't even include text messages, personal emails, phone calls, or rss triage sessions.  At this point I should also mention how compulsively I checked my email, if the little badge popped up, I HAD to check my email, that second, and possibly respond, or else catch myself continually glancing at the little red icon. Combine that with the latest research showing it takes on average 64 seconds to regain your concentration after an email interruption and you have a recipe for non-productivity. Some simple math shows that I was losing an average of 32 minutes of productivity just regaining my concentration, add in a minute or two actually dealing with whatever interrupted me and you've got a full hour of my day vanishing down the hole of non-productivity.  

What's worse, thanks to the little red badge, or a blinking phone, even if I managed to have the will power to ignore the new email or phone call that just came in, I'm anxious and distracted until I stop and look at the new message.  But thanks to my little experiment, in the last week I've learned how to regain those lost minutes and hours, without losing my connectivity to the rest of the office.  Now on to what I did that made such a big difference.
  1. I disabled any audible mail, or calendar sounds.  (I left pop-up alerts active on my calendar as it's easy for me to get distracted and miss meetings!)
  2. I found a wonderful (Mac only) application, that hides the unread mail indicator from Mail.app.  ( Mail Badger ) This allows me to only check my email when I am between tasks and not have a steadily increasing little red number staring at me all morning.
  3. While I'm at my desk, I set my phone to a non-vibrate, non-blink, mode for all messages.  This dodges the "double email" problem mentioned earlier, as well as keeping me from dropping concentration to check a personal email.  To increase the effect (and due to an odd issue where the screen randomly brightens as it charges) I flip my cell phone screen side down on my desk.
  4. I started screening my calls if I'm in the middle of a task.  Obviously some calls you answer right away, but some of them you let go to voicemail.  I'd done this for a while with my cell-phone, but doing it with my office phone as well has made a huge difference. While this doesn't eliminate the distraction, it does make it as minimal as possible.
  5. I taped over my voicemail light on my desk phone.  It doesn't completely hide the bright red blinking light.  It still serves as a reminder to check (or act on) whatever call came in, but again it minimizes the distraction as best as possible.
Obviously some of these steps won't work, or don't apply to everyone.  I'm still an addict, despite this little experiment.  But thanks to a few simple tricks, I have regained my productivity from the continual blinking lights.  Have other suggestions?  Put them in the comments!

Labels: ,

Sunday, July 27, 2008

on fire and forget online services

I'd intended this post to be a yet another glorious rant against twitter, but as I was gathering my thoughts on how I wanted to put it together I realized the issues I had with twitter are found in plenty of non-twitter sites. The problem really starts with my uncontrollable laziness. If a site requires me to continually visit it, just to stay on top of the goings on of the service, then I'll inevitably end up ignoring it, as any of my friends (in the non-social network sense) can attest. The "solution" to this, is what I call a Fire and Forget service. I set it up, start using it, but even if I don't come back for six months, I don't have to deal with any extra tasks punishing me for being away. Facebook is a great example, that I'm fairly familiar with, at failing miserably at this so let's break it down a bit.

To write this post I logged into facebook for the first time in I don't know how long. What I find upon logging in is a "News Feed" full of every minute detail of everyone on my list's life. There's so much data there I immediately ignore it. I then am told I have 6 friend requests, 7 green patch requests, and 15 other requests. I only know for sure what one of those three categories means. So I'll check out my friend requests. Turns out that clicking on friends requests just puts it at the top of the list of nearly 30 miscellaneous requests for me to check out. At a glance there is only one friends requests I care about, so I accept it. Now I want to ignore the rest of the mess on my screen. The only solution? Clicking each one of the ignore boxes individually until they're all gone, no select-all, nothing but individual actions. I can select all in my email, in my RSS feeds, hell in my news groups, but not on facebook. Now I realize that the reason this problem even occurs is due to the fact that it's been months since I last logged in. But so what? Just because I choose to use the service infrequently, does not mean I should be punished with performing various forms of "account maintenance" when I do decide to log in.

Now one could argue that facebook provides email notifications to keep this problem in check. You don't have to log in all the time, just when they notify you about something requiring your attention. Which sounds great, until that friend of yours goes on a picture tagging spree, and you get a dozen emails about all the pictures you now appear in. To combat this issue you can opt out of those notifications.  After a quick look of my personal notification settings, I'm given the option of disabling 37 separate notification options. Again without a select-all type option, I would have to click through each one and disable it. I can setup a spam to block facebook faster than that (and conveniently already have).

When you signup for a facebook account facebook puts the burden on you, the user, to keep the service running, and under control. By simply accepting a few friends to your facebook account, you implicitly agree to carry the burden of keeping facebook from overwhelming you.

So there's my small rant about how things are all wrong, and how I know so much better. But I haven't really provided any concrete examples of the way things can be better. So let's walk through some key ideas of Fire and Forget services.
  • Users are lazy, and already approaching information overload
  • Make defaults for user contact opt-in, not opt-out
  • Hide old, and possibly irrelevant data
  • Allow digest style notifications
  • Whenever reasonable, add select all/none options
  • Make complete account removal simple
  • Don't burden the user
  • Allow things to auto-expire
This list is not inclusive, and has the implied caveat of "whenever applicable and reasonable" to every item.  The idea is to let the service run itself, I want to set it up (Fire) and not have to manage it daily (Forget).  The key is letting me spend my time using the service not managing the service.  It's a simple list of things that will make your services more friendly to your less frequent users, without inconveniencing your constant users.  Everything on this list could be implemented almost universally.  Even twitter, the poster child for information overload, could handle almost all of these options, which is proven by the considerable number of third-party twitter add-ons offering a large majority of these features.  

Consider it a list of things to keep in mind when you're developing a new service to keep people like me happier.  If your service followed these suggestions I might even use your new application that will revolutionize and harmonize my social experiences with friends, family, and co-workers.  But probably not.

Labels: ,

Thursday, July 17, 2008

on subtle failure

While reading through the top links on proggit, I ran into a project I'd seen a long while ago and promised myself I'd keep track of.  I didn't.  But this story isn't about me and my need for a simple bookmarking/reminder service, and the ways in which such a thing could change how I keep track of interesting things on the web.  That story will come later.  No this story is about the clutter project, the project I had accidentally lost track of.

From reading their very dark website, you'll discover that clutter is YAGUIWT(Yet Another GUI Widget Toolkit). What makes it special? It's cross platform-ish, has bindings to a ton of languages, and supposedly doesn't bring the cruft that most of the well known toolkits have grown to contain. Despite being a bit dark, and being quite a visual shift from reddit's simple blue on white look, it's a visually appealing site that has the touches of professional design. It was easy to get my bearings on the site and find information about the project and things of interest, save for one little subtle thing. Screenshots.

Again, the clutter project, is a GUI/Widget toolkit, a graphical tool to make your applications usable by the masses. A tool that claims to work across several platforms, and languages. But most importantly, it's end result is a visible GUI application. I thought at first that I was just missing the link to the screenshots. They have to be there. Maybe they're just not linked off of one of the top pages. Who would make a well designed, and informative web page about a GUI/Widget toolkit, and not put up any screenshots? So, being the resourceful individual that I am, I moved on to the omnipresent google. This search should return all the instances of the word screenshot on their site. That's bound to turn up these hidden screenshots. Except it doesn't.

Failing to put up screenshots has obviously not caused the death of the project. But it's still a failure. A subtle failure, but a failure nonetheless. They've failed at managing their user's expectations. They've failed by forcing me to go hunt for information, that should be clearly displayed on their site. Or at the very least made it known that the information wasn't provided by the site. Despite failing to provide me with information I think is pertinent, as a programmer I'm still very intrigued by their product.

The time I spent hunting for the missing screenshots (and subsequently writing this post) should have been spent reading the API docs, or downloading the source, or installing a binary package, or a sample application, or any other activity that could lead to me becoming an active user, contributor, or at the least a vocal supporter. Instead I'll add the project back to my mental (or conveniently web based, and amazingly intuitive, and hopefully soon to be released) list of things to check back on when I have time. Odds are good that like the last time, I won't.

Labels:

Monday, July 7, 2008

on being an internet luddite

Welcome to the blog of the world's only web programming Internet Luddite (as far as I know). Why would any sane individual who makes a living working on and with the Internet describe themselves as a Luddite? It's simple. Despite (or possibly because of) being one of the most technically capable people in my social circle, I'm often the last to adopt the newest online service and in some cases I'm actively campaigning against them.  It's to the point that people have quit sending me invites, friend requests, pokes, or whatever.

I don't actively maintain a facebook profile.  I have one, but it was setup by my wife, and I don't login regularly.  I don't have a myspace account.  I don't follow anyone on twitter.  I don't have any delicious bookmarks.  In fact, I've all but avoided almost all of the social networking services out there.  I just recently started subscribing to and following RSS feeds.  This is my first real blog.  

I've been developing web sites and web applications both as a hobby and a profession for about six years.  I wrote my first blog engine probably in 2003 for a very web 1.0 social site.  I wrote an RSS feed parser/generator around the same time.  I've built large enterprisey applications (boooo), and am about to launch a light and lean Web 1.99 application (stay tuned for details!). So why haven't I latched onto the Holy Grail of Web 2.0, the social network?

I'm a simple person.  I'm not an extrovert.  I value my privacy.  Most importantly, I'm lazy. My experiences show me that the current crop of social networking applications, don't fit my needs.  Most of them have too many features (facebook, myspace), have poor track records with privacy (facebook, myspace), or require a time investment to keep them from overwhelming me with data  (facebook, myspace, twitter).  The other major issue, which really is at the core of a lot of the privacy problems I have with these services, is that they assume that I want to share some or all of my data with others.  If I wanted to share my links, my photos, or my documents with others, I'd use something simple and direct, like IM or email.  I know, how quaint!

So what applications and sites do I use then?  I'm a fan of what I'll call "Fire and Forget" services.  RSS readers are a good example of this, I subscribe to a feed, and the reader keeps track of everything for me.  It doesn't email me everytime every blog I'm subscribed to changes (unless I was to set it to do so), it just sits and waits for me to come back.  I can skim over them, read them, or mark them all as read and move on.  Managing my RSS list can be done at my own time.  Most importantly to me, I can handle each message individually, or choose to ignore all of the changes and start with a blank slate again.

My favorite social services, are ones in which the social features that I use are almost exclusively anonymous.  Last.fm music suggestions have brought me to a variety of music I wouldn't have ever found otherwise, but it does so without requiring a huge commitment from me.  I install their application, and listen to music like normal.  When I decide I want to check my recommendations, I can play them at my own leisure.  Amazon's "others who bought this also looked at/bought...".  I've found great music and books this way as well, typically without ever being logged in.

Well there's the brief bit about who I am, where this blog came from, and what you can expect.  Thanks!

--Your friendly neighborhood Luddite.

UPDATE: It has been brought to my attention, that the term Luddite may not be as well known as I had previously thought.  For a bit of background check out the article at the repository for all the world's knowlege.

Labels: ,