Wednesday, February 11, 2009

How to Prioritize Anything

It's always difficult to prioritize lists that are longer than 3-5 elements because it's just too much data for most people to process. I've struggled with this problem in several forms over the years, from choosing a job offer out of college to ranking my direct reports to prioritizing feature requests for a software product. Somebody along the way figured out that if you ask people to just decide the priority of two choices multiple times then you can calculate the relative priority of an entire list... it's called "Paired Comparison Analysis".

I remember seeing this approach when we took my firstborn to get his baby pictures. They take over a hundred digital pictures of your kid and then display them on a big flatscreen and you are supposed to pick five. Getting down to about 10 is pretty easy (eyes closed, screaming, etc), but choosing those final 5 from the 10 is actually really difficult. So they pull up just two pictures at a time and ask you to choose between the two. They repeat this many times until your 5 become obvious. The efficiency of this approach is brilliant because the faster the parents choose, the more customers the studio can serve.

While the photo studio example is purely binary, a more sophisticated variant allows me to specify degree (e.g. I like this one twice as much as that one). This is overkill for some use-cases but can be valuable in more complex situations. I found some tools to enable this, but they required me to manually compute the score for each of the elements manually. Being a techie I found this to be just silly.

I built a spreadsheet which automatically calculate the scores for each element. Each element is listed down the left-hand side and repeated along the top. The bottom triangle of the grid is blanked out to avoid duplicate comparisons.



When the element on the left is better than the element on top you enter a positive number in the grid. When the element on top is better you enter a negative number. You could use the same spreadsheet to do simple binary comparisons just using the values one and negative one. If you feel that the comparison is a tie just enter zero. The scores for each element are displayed on the far left. Once you have completed scoring just sort the spreadsheet by the score.

If you'd like to try it for yourself you can download my spreadsheet here.

Monday, December 22, 2008

Happy Holidays



2008 has been an exciting year for the Quinlan household as we welcomed Carson Michael Quinlan to the family on May 21st. Carson is just starting to roll over on his own and is babbling constantly (I think he may have said DaDa, but it's hard to tell). Evan has adapted well to his new sibling and enjoys telling everyone "that's baby Carson, he's my brother!"

Kristen has returned to work part-time at Crabapple Knoll Veterinary Clinic where she co-manages inventory. She looks forward to returning back to full veterinary technician duty sometime next year. In the meantime she has been managing our basement remodeling project which should be finished in time for Christmas.

In February Matt said goodbye to JBoss/RedHat after 3.5 years and joined a small software startup in Atlanta called Appcelerator. Unfortunately, in the fall Appcelerator relocated to Silicon Valley, so Matt joined up with some of his old JBoss pals at LoopFuse. Matt's parents are only 20-30 minutes away so we get together with them often.

The pets are all happy and healthy (Tika, Chloe, Elijah, Wink, and Nougat) and continue to clog our vaccum cleaner as always :)

Happy Holidays!
Matt, Kristen, Evan, and Carson

Friday, December 19, 2008

MacBook Air Wireless Dropouts FIXED!

After 10 months of watching my wireless connection drop out randomly (and usually at the most inopportune times) I have finally found a solution. So for anyone else out there running WinXP on a MacBook (BootCamp, Fusion, or Parallels) let me save you the 10+ hours of frustration and point you directly to the solution.

You just need to replace the wireless drivers with the Broadcom drivers provided by HP.

Voila!

Tuesday, December 16, 2008

Next Stop... Loopfuse

While I have certainly enjoyed my post-Appcelerator vacation, it's time for me to return to the working world. Many of my friends have suggested that I might get a "real job" at a large established company instead of playing the startup game (again). But I'm not convinced that there is any more stability in Fortune 500 companies than anywhere else given the rash of layoffs at large companies. Especially since large company layoffs tend to be governed by seniority while smaller companies are more focused on "who do we need to survive".

I am thrilled to be joining up with some of my former JBoss colleagues (Roy Russo, Tom Elrod, and Frank Merenda) over at Loopfuse and will serve as Vice President of Sales and Marketing. LoopFuse provides a marketing and sales automation suite offering organizations the ability to generate leads from their website, score and route leads, marketing campaign capabilities, full web analytics support, and full CRM integration. This is all provided in a SAAS model so our customers don't need to install, maintain, or support any additional hardware or software.

If your company relies on it's website for a significant portion of your sales leads and you don't have an automated system to identify, score, assign, track, nurture, and analyze your leads for you, then you have been missing out. Drop me an email at mquinlan-at-loopfuse.com and I will give you an overview.

Sorry kids, daddy has to stop playing and start paying for your tuition again :)

-Quin'

Tuesday, October 21, 2008

AjaxWorld - San Jose 2008

For the past week I have been laser focused on preparing for my presentation at AjaxWorld on rapid prototypting for rich internet applications. I always seem to underestimate the amount of effort it takes to build a really compelling presentation and therefore I always end up making tweaks up until the very last minute. Maybe I'm just never satisfied and believe that it could be just a little bit better. Lucky for me it seemed to work.

The presentation generated an amazing response. About 50 people came up to me during the conference telling me how much they enjoyed the presentation and that I had crystalized their challenges and provided an interesting solution simultaneously. The Appcelerator booth was overwhelmed by people wanting to learn more about our technology. Personally, it's incredibly satisfying when you realize that you've really made a connection with your audience.

Later in the evening I was able to participate in a panel discussion about "The Future of Rich Media and Content Across All Four Screens". At first I had no idea what the concept of "four screens" meant. They are (supposedly) : the theater, the TV, the computer, and the phone/handheld. Each representing their own experience and their own idiosynchrasies. At the end the question was posed "Would your recommend Computer Science as a degree to your child?" Initially I simply answered "no" and tried to leave it at that with no explanation (b/c it was kind of humorous) but when pressed I passionately argued that <rant> computer science curriculums have NOT kept up with the pace of innovation happening in the software world and that our CS students would be MUCH better served learning SQL than learning RS/JK edge-trigged flip-flops.</rant>

Overall, I've really enjoyed the conference so far.

Thursday, October 16, 2008

What's next for Quin?

I have been incredibly fortunate during my career and I can say that I have very few regrets. From Tallan (including Carmax, ValueAmerica, & On2) to Interwoven to JBoss/RedHat to Appcelerator it has been an amazing ride. However, today I am pondering my next move. As some of you may have heard Appcelerator has recently decided to close the Atlanta office so I am soon to be unemployed.

I am looking for a senior technical management or evangelism position in the Atlanta area with a maximum of 25% travel. I have a home office now so I can work from home if necessary. I haven't gotten around to revising my resume yet (do people still bother?) but my work history can be found on linked in. If you know of any good opportunities for me please send me an email (matt-at-quinlan-dot-net) or tweet me. If you have already given me a job lead, my sincerest thanks.

Cheers!
-Quin'

Monday, October 13, 2008

Get "Rich" Quick : Rapid Prototyping for Rich Internet Applications

It's the GUI stupid!

Many years ago, I consulted for a large semi-conductor company during the early stages of a software project. They had a highly detailed and fairly rigid process for software projects that started with a complete requirements document based on an extremely verbose and granular template. As the project progressed and I saw the size of the document balloon from 50 pages to more than 200 pages, I had the realization that this document would never be read by ANYONE from beginning to end. The business owners who were responsible for ensuring that the requirements fit their actual business needs were completely overwhelmed by the document's size and complexity. Six months later the business users were given their shiny new software and they were disappointed that the software didn't match their expectations.

In reality, the software was a very solid effort that met all of the requirements specified in the document. However, business users had no ability to read the requirements document and imagine what the user interface might look like for the requirements provided. I remember feeling that the business owners didn't know what they really wanted and feeling resentful of that fact. In retrospect, I realize that almost nobody knows exactly what they want, until they see it. Why? Because to a user, the interface IS the software. Concepts like data models, middleware, rules engines, LDAP, and SSL have no real meaning outside of us techies.

So how do we avoid this? Is Agile Development the answer? Agile is definitely a step in the right direction. It codifies the practices that had evolved in the most successful and most productive software development teams of the 1990s. However, we need more. We need to enable our development teams to prototype the user interface quickly and easily so that users can actually see (better yet, use) the software EARLY in the process. In web 1.0 this was a fairly straightforward effort of building static HTML wireframes. The problem was that this work was largely throwaway b/c they had to be rebuilt as servlets, JSPs, ASPs, PHPs, etc.

As our web applications become more sophisticated this approach starts to break down even further. Today, rich internet applications include syndicated content, widgets, DOM manipulation, Ajax calls, and often a substantial amount of JavaScript. Static wireframes just cannot easily emulate this kind of rich user experience accurately.

What If?

What if you could build the user interface prototype in a matter of days or weeks without a single line of server-side code or even a datamodel? What if the business owner could not only play with this prototype, but also provide context specific feedback seamlessly while exploring the prototype? Finally, what if the prototype wasn't a prototype at all, but was the actual user-interface of the final product (zero throwaway code)... even if you haven't decided which server-side technology you want to use (Java, .Net, Ruby, PHP, Python, Perl)?

This is exactly how we develop software for our consulting customers today using the Appcelerator platform. We've been doing this for over a year now, but we haven't really given it a name until recently. We call it "Interactive Use-Cases". Essentially, we skip the entire functional requirements definition phase and move directly from use-cases to working prototype! This is only possible because of the advantages that the Appcelerator platform provides us. Let me explain.

Technological Enablers

First, Appcelerator's widget library, web expression language, and message-oriented architecture were designed to enable web developers to build UIs with the minimal amount of code (read: JavaScript) possible. As an example, Ajaxian's Dion Almaer posted a small interactive web page on his blog and invited people to port it to their favorite JavaScript framework. Compare the ViewSource of the Appcelerator version to those of the other frameworks. More app + less code = better productivity.

Second, the fact that you are not generating your HTML from server-side scripts frees you from the wasted effort associated with building throwaway static wireframes. Build applications as Ajax enabled .html files which dynamically pull data/content from the server and (re)render those sections of the page accordingly.

Third, our message-oriented architecture is ideal when prototyping because message subscribers in the browser do not care about the source of their messages (that's the point of publish/subscribe architectures). So build the entire user interface with the exact messaging code that they will need for production use. But instead of building a datamodel, DAO objects, DTOs, business logic, and such to provide the actual service implementations, just add a single line to your webapp to include a single JavaScript file containing mock implementations of these backend services. In 90% of the cases you can mock that service with a couple lines of JavaScript that generates a JSON message with a mock payload.

My favorite part about this approach is that once you have gotten sign-off from the business owners, you can remove a single line from the application and all of the mock services have now been turned off. And the server-side programmers have a complete contract of every service which needs to be developed along with test data. Even better, they can choose to implement those services in any language they prefer because the UI is just producing/consuming JSON.

Fourth, thanks to a recent enhancement by Andrew Zuercher, we can easily collect user feedback on our user interface prototype by passing an additional URL parameter which highlights the border of any HTML control on mouseOver. By CTRL-clicking on any highlighted element a feedback dialog box appears that includes the specific page and HTML control being commented on. Users can see other users comments so that feedback effort isn't duplicated. UI elements that already have comments are indicated with red borders.

annotated web page screenshot

Everyone knows that prototyping is a valuable exercise that improves the likelihood that the business users will be satisfied with the end-product. However, the limitations of web technology have made it prohibitively expensive and time consuming for all but the most critical web projects...... until now.