Archive for the ‘Uncategorized’ Category

I Think I Know How Cat Burglars Feel

Friday, August 20th, 2010

I feel antsy.

Sometimes downright angry.

I walk around with thoughts spinning in my head.  I can’t get them out, and I can’t quiet them down.

It’s that frustrated, anxious feeling you get when you can juuuuust about remember someone’s name…but it never quite floats to the front of your mind.

I’m working on a project at work…something about delivering a corporate goal tracking system.

I KNOW there are too many variables:

* Too many parts to connect

* Too many people involved

* Too much too think about and too many problems to solve

I run down one street, thinking I have the solution…running through options.  scenarios.  routes I’ve seen before and routes no one’s ever visited.

I consider workflows that would finally deliver the system every company needs…FINALLY!   A way to connect the dreams and aspirations at the top of the company hierarchy all the way down to where the pedal hits the metal and the rubber meets the road.  Where stuff actually happens.

I already know I’m trying to solve a human problem with a technical solution.  I’ve been down that road and barked up that tree…talked to management and managed all these processes before.  I’m not getting my point across and not listening hard enough.

I’ve been the guy having to build these reports.  I’ve been the executive wanting to know enough when I need to, but not as much as people can share.

And so I think.

And wonder.

I build towering applications.  systems.  extremely sophisticated, dynamically interconnected, yet profoundly intuitive systems…in my head…on my whiteboard…on the back of my hand.

I draw on napkins, daydream about forms, connected views and WYSIWYG editors with no translation required to complete.

And then…

…every few hours…

…sometimes one, sometimes four…

…I hear a click.

One small piece of the gigantic puzzle falls into place.

Today…I figured out how to let people track their projects the way they want to, to define the work they do on their terms, in their language, and without having to flip their minds 180 degrees to transpose their identities into execu-speak.  The trick is to provide a simple common reporting record with the three critical vectors required for cross-functional, inter-departmental, temporally-sensitive metrics, measures, goals, mission and vision rollup, tracking, trending and management.

Egads!

Eureka!

ZOUNDS!

Finally…a solution that, when followed to its 57 different alternate worst and best-case scenarios…doesn’t require scrapping the whole system and starting from scratch!

What a relief.

god….FIVE MINUTES of peace, quiet, and success.

Time enough to take the night off.

Talk to people like I’m not compLETELY distracted…for a change.

Enjoy a good movie, and engage in conversation with the kids, my wife.  Maybe write a letter or two or ‘phone a friend’.

Starting to feel better now, even though I have a long way to go.

It’s that problem, see?

…there are so many interconnected parts.

…so many problems to solve at once.

You’ll go crazy trying to solve them simultaneously, because you have to chip off little bits at a time.  You can’t solve big problems all at once.  You have to take little bites, find hidden nooks and crannies…weaknesses, chinks in the armor, so to speak.  Every problem has weaknesses.  Every problem, no matter how big, is just a fat rolling conglomeration of little problems, all requiring their own solutions that, together, in the right order and solved in the right way, get you through the big whammy of a conundrum.

Clear through to the other side and out the other end.

So that part’s settled.

Whew!  What a relief.

Now…if only I could figure out how to automate the metrics so they are tied to these free-form, entered-at-whim projects tracked differently across every department.

Going to have to think about that one…throw it around in my head a bit…it’s like being five and wiggling a loose tooth with your tongue.  You know it will come loose and pop free eventually…all it takes is a little wiggle here, and a little wiggle there.

I love heist movies, and particularly connect with those where the protagonist hunches in front of a combination safe with kid-gloves donned, stethoscope pressed to metal, spinning the dial…ever so slowly…first one way…sthsthsthsthst…click…then the other way…sthsthsthsth…click…feeling his way through an invisible series of cogs, dials, levers and tiny gaps.

Every design project I take on feels a lot like that.  I have as many tools as the cat burglar at my disposal…wireframes, prototypes, card sorts, interviews, role-playing, personas, sketching, design patterns, industry guidance, proven research, my community, the list goes on…

And yet…when it comes right down to it…the really tough problems…the really insanely aggravating problems (the ones I REALLY love)…all come down to that simple, yet excruciatingly frustrating itch in the back of my head.

That loose tooth is still loose, yet more loose in certain spots.

The mountain I’m trying to move is a little smaller.

I’ll get through it…eventually…I’ve done this long enough that this process takes hours or days now, not weeks or months.

I’ll get through it.

Oh for the love of everything holy, though, I sincerely canNOT wait until that final tumbler falls into place.

…sthsthsthsthst….

CLICK!

(then on to the next problem…can’t wait!)

Know How to Say When

Monday, March 29th, 2010

As a quasi-product/project and design manager, I frequently have to organize a pipeline of features very quickly, while simultaneously learning the development team’s capacity, and priorities for the tasks on the business team’s agenda.

More often than not, the business team has a pretty good idea what they want; they just don’t know how to get it done. The dev team knows how to do practically anything; but don’t know what to do first.

If you wait long enough, the biz team will quickly set unrealistic deadlines on pretty much everything, while the dev team will completely freeze for lack of direction and clear priorities (or they’ll go do whatever makes sense to do next, which (if they’re good developers) isn’t the same as what the business wants.

To prevent the above paralysis, I build a simple roadmap as quickly as possible, containing every conceivable feature (larger than one iteration), arrayed in a staircase, as if they were going to be done consecutively. The roadmap doesn’t require MS Project or anything more sophisticated than a table-editing tool like Excel or Powerpoint. Even a WYSIWYG Wiki editor page can build one, of sorts.

Here’s how it works:
Size every feature roughly by iteration. It helps to group them into same-size increments. For example, if your product needs to grow an inbox, break it down into roughly three-to-five iteration-length stories, and shorten their titles like so:
Send mail between users
Add inbox page and compose, delete and reply actions
Add archive, group lists and share-this-page actions

Once your feature list is more or less laid out, line them up in priority order, as if they had to be done one right after the other.

The trick to prioritizing is that if you don’t know the priority, make it up. The ultimate goal of a roadmap is to get people to change it, so the more “wrong” the first version is, the more likely it will be fixed. The roadmap’s secondary purpose is that it shows that everything WILL get done…eventually.

Now that you have your feature list in priority order, create a spreadsheet with the following:
The first column contains each of your features
The second column contains one of five or six loose categories (I lean toward Usability, Marketing, Adoption, Performance/Stability, and Interaction, but they could also be broad feature sets as in Inbox, Authentication, Profiles, Search, etc).
The 1st row contains the year, merged across all of the columns below it
The 2nd row contains each quarter, going out at least one year from today
The 3rd row contains each month of each quarter

Assuming your iterations are 2-4 weeks long, you probably don’t need another row. Another important concept with roadmaps is that they are more effective as a communication tool than as a planning tool. The aim is clarity, not necessary precision.

Once you have the columns and rows laid out, the fun part begins.

Assuming your features in the left column are approximately the same size, lay them out in a staircase pattern, starting in the upper left corner, and putting the next one box down, then over from the previous.

When you are done, you should wind up with something like this:

Sample roadmap illustrating staircase feature pattern

In the above sample, you can see a completed roadmap.  Note that once your features are assigned to categories, turn on Autofilter in Excel to drill down to specific categories for presentations and group discussion.  Do the same for specific months to see which features fall on certain months.  In the above example, over 100 features run down the page, each with its own staircase pattern, because in our case, we could achieve approximately two large-ish features a month.

I should definitely note that while there is a lot of guesswork in the above, you MUST not evaluate feature sizes without either full knowledge of the technical platform’s abilities, or full cooperation with the development team.  Do not distribute more widely until at least the rough story sizes are agreed.

I’m leaving a tremendous amount of “management” stuff out of this, but I recently built my fourth such roadmap, and since it’s becoming a habit, I thought I’d share with others.  I’ve had pretty good feedback wherever I’ve used this technique, due largely to the increased confidence from colleagues who are happy that their ideas are finally represented on paper, in an (albeit lengthy) easily understood plan.

Once you’ve accounted for most of what the business has asked for, you can begin working hard on the things they really need, as those will float naturally to the top of the roadmap.

Once published, from that point forward, every new feature goes at the end of the roadmap, even if it’s two years out.  Your stock answer to the question “Can you do this?” should always be “Yes”, but the correct question should really be “When?”.  The roadmap above should help you and your colleagues answer that question much more effectively.

Best of luck to you and your projects,

Bryan

From the PM Trenches

Wednesday, July 22nd, 2009

Do people still write from trenches?  Are there even trenches large enough to write from?

Anyway, something I wrote for my project management class today…more of a brain-drain than anything else…

A Systems View of Project Management…

Taking a systems view of a project requires looking at not only the project’s specific requirements and proposed technical solutions, but also taking a broader view of the organizational and business impact of the project in the company or community in which the project is being delivered.

Before a project even begins, and through out execution, all of the stakeholders should look more holistically at the project and how it will impact and be impacted by the rest of the business and organization.

I am currently participating in a project where the sponsor only considered the business impact (and benefit) of his proposal, without considering the organizational or technical implications. The sponsor proposed building a new web site to attract more customers to our web service, and connecting it to two additional web sites to form a simpler way to complete contract management activities.

Unfortunately, our sponsor did not consult with the owners of any of these systems, and did not understand the impact to his project when our company reduced the support and development staff for all three groups. We have worked hard to incorporate the organizational impact on his timeline, so he can more realistically plan his project.

Additionally, our sponsor made some inaccurate assumptions about the capabilities of each system, and over-committed his project to more than we were capable of delivering. After several discussions, I was able to clarify the most difficult technical hurdles for his project, so he could understand and modify his proposal.

While I am not the sole project manager for his project, I manage one of the web sites at its center. When I investigated his proposal for an external system to pull information from our web site, I realized the amount of effort to integrate both systems so closely, would far outweigh the business benefit. I could have told him he was asking for too much, and it would take months to complete what he proposed. However, I convinced him that by removing just one of his four proposed features, he would get as much business benefit, with 25% of the effort. He agreed and we modified the project today, much to everyone’s satisfaction.

It’s much easier to view a project with just a technology, organization or business view. Many web developers I know (myself included, earlier in my career) fall into the trap of doing whatever the customer requests, without regard for the future of the application, or the long term vision of the company.

However, when I broaden my approach a little, i find that many very thorny technical problems can be solved quite easily (often better) without writing a line of code.

I believe the biggest disadvantage of using a systems approach comes when many people have different views of the systems as a whole. Projects can become more complicated and even paralyzed if stakeholders get too involved in making sure everyone in the organization is happy. At some point, people do need to get down to business and just move forward, accepting that there will always be some forgotten organizational or business implications.

Trouble with Lowpro and Prototype

Monday, July 13th, 2009

If you use Lowpro’s extensions for Prototype, you might run into this issue with Internet Explorer 7 (if not 6).

I use LowPro for its nifty shortcuts to otherwise daunting syntax for adding behaviors and page-level events to a web page.  Conventions like Event.addBehavior and Event.

Recently, perhaps with the newest version of Prototype, I started encountering problems using the class name selector in Prototype ($$), and with Event.addBehavior.  In IE7, this manifested itself with “Object doe s not support this property or method” errors around those blocks.

Temporarily, I replaced $$ with $(“id”).select(“.class”), which solved the problems with $$.  Event.addBehavior seemed more quirky, and I really didn’t want to relinquish that nice little command.

Lo and behold, I found on the LowPro web site, a command to disable LowPro’s $$ method.  If you have similar problems with LowPro, insert this statement after your call to LowPro, and you’ll be able to use $$ and Event.addBehavior with wild abandon:

LowPro.optimize$$ = false;

HowTo: Add a jiffy table of contents to a page

Sunday, July 12th, 2009

When I built this version (the umpteenth) of my personal web site, I wanted to use a few more tricks I’d learned in the past few years, and thought it would be nice to make them do some of the work for me.

If you’ve seen my resume page, you might have noticed the table of contents in the upper right corner.  It’s supposed to help the intrepid wanderer jump to different spots within the page, without having to read the whole darned thing.  (ed. Yes, my resume is long, and yes, I really should do something about that).

Anyhoo…I wanted a Table of Contents, but I didn’t want to have to update it every time I changed my resume.  Ok, I don’t change my resume that often, but bear with me here.

Table of Contents - screenshot

Well, along came Prototype and Scriptaculous.  If you haven’t heard of these, they are both JavaScript “libraries”, or collections of functions and utilities, maintained by a particular community or group, which provide certain higher-level capabilities than if you just wrote JavaScript, yourself.  jQuery is another such library, and between Prototype and jQuery, I still lean toward the former.  jQuery has a more modular architecture, and a tidier core syntax.  However, I have found its extensions lacking in a lot of areas, whereas Scriptaculous, etc, seem to be more flexible.  Maybe I haven’t done enough with jQuery, who knows…

A word about using JavaScript to manipulate a page:  I tend to do this sort of thing only when the content I’m adding is not absolutely critical to the content.  The core page functions and content should always be built right into the HTML, primarily so people who don’t use JavaScript can still read your page, but also, so search engines can still find and read your content.  JavaScript is great for adding little utilities to enhance the user experience, but should rarely be the entire experience.  (I’ve violated this rule a number of times before, usually for expediency, but it ALWAYS hinders the UE, even if it’s just for Safari users =]).

As it happens, one of the neatest things about Prototype (and jQuery, for that matter), is that it’s really easy to look into a page, using JavaScript, move things around, add stuff, remove stuff, and manipulate the page, without having to constantly rewrite your HTML whenever you want to change something.

To make a long-ish post relatively short(er), let me just paste the code that builds my table of contents, and if you’d like to know more, feel free to ask…sound good to you?  Good, here ’tis:

TOC JavaScript:

  <script type="text/javascript" src="scripts/prototype.js"></script>
  <script type="text/javascript" src="scripts/scriptaculous.js?load=effects,controls"></script>
  <script type="text/javascript" src="scripts/lowpro.packed.js"></script>
  <script type="text/javascript">
    TOC = {
      show: function() {
        $("resume").select(".sect").each(function(header) {
            var totop = new Element("a", {href: "#", className: "helper"}).update("[Return to Top]");
            var url = "#"+header.id.split("_")[1];
            var title = "";
            if (header.match('h3')) {
                title = "<strong>"+header.innerHTML+"</strong>";
                header.insert(totop);
            } else {
                title = new Element("div", {className: "indent"}).update(header.innerHTML);
            }
            var entry = new Element("a", {href: url}).update(title);
            $("toc").insert(entry);
        });
      }
    };

  Event.onReady( Toc.show );
</script>

HTML:

<div id="toc"></div>
<div id="resume">
  <h3 class="sect">Summary</h3>
  <p>Twas brillig, and the slithy toves.
  <h4 class="sect">Skills</h4>
  <p>Did gyre and gimbal in the wabe.
  <h3 class="sect">Jabber</h3>
  <p>All mimsy were the borogoves.
  <h4 class="sect">Wock</h4>
  <p>And the mome wraiths outgrabe.
</div>

Walkthrough:

If you’re curious, here’s how the above works:

Event.onReady( Toc.show ); The TOC starts building with the Event.onReady at the bottom of the script. Event.onReady is a shortcut command from Lowpro, which waits until the page loads, then runs the “show” command from the “TOC” JavaScript class. The equivalent (mostly) in Prototype is

Event.observe(window, "load", function() {});
$(“resume”).select(“.sect”).each(function(header) { This command grabs all of the page elements using the CSS class “sect” from the larger container element with the HTML ID called “resume”. Once it has all of these elements, it puts them in an array, and passes the whole bunch to a function to do something with them. The “header” variable holds each one of these array items so the function has something to talk about.
var totop… This variable (totop) creates a hyperlink that will jump to the top of the page
var url… This variable creates a new URL using the ID from the element represented by “header”, and prefixes it with a pound (#) symbol.
if (header.match(‘h3′)) {} else {} This if/else block constructs a link with a certain format, depending whether the “sect” element is a H3 tag or an H4 tag. H3 tags will be displayed in bold and flush left, while H4 tags will be normal weight and indented slightly
var entry = new Element(“a”, {href: url}).update(title); This line just creates a new hyperlink (“a” tag) using the URL and Title generated above. On the page, nothing has actually happened yet
$(“toc”).insert(entry); Ahah! There’s a special DIV tag on the page, with the ID called “TOC”. This line just plunks the above element into it.

Hopefully, you’ll find the above useful, somewhat informative, and if not, vaguely unusual. At any rate, let me know if you like it…or not =]

is rubber ducking: http://c2.com/cgi/wiki?RubberDucking

Friday, March 13th, 2009

Posted via email from Bryan’s posterous

How much would XYZ web site cost?

Friday, March 13th, 2009

I get this question a lot: “How much would it cost to make a web site like ‘XYZ Stuff!’, except with A, B and C?”

It’s not a bad question, and honestly, ask any one who’s built one or more sites before, and you’ll get a different answer from each. However, I just recently responded to one such question, and thought I’d share with you, in case you were wondering the same thing. It might not help or be applicable to your case, but just in case it is…enjoy =]:

Q: How much would it cost to build a site like [small-to-medium sized somewhat-custom web site]?

A: To answer your question, you could build what you need for free, with just a monthly hosting cost ($5-$50) to keep it running, using tools like Mambo, Drupal, or Joomla (a Google search should bring up lots of info on these). However, these free or low-cost solutions are pretty complicated and buggy to get running just the way you want them, so you always trade cost for comfort, pretty much. If you had someone build what you want it shouldn’t cost more than 5-10K to get the basics up and running, but you’ll be paying more every month to get small changes, bug fixes and new features. Another option is looking at higher-end services like Kick Apps, a Facebook community or a YouTube group to house what you want to do.

To be honest, there are a lot of easy options for an individual to post and share docs, videos, blogs and chats with everyone in the world – but they’re not very customizable. There are also lots of free tools for businesses to use to put together custom experiences (like the example given), but you have to be really technical and patient to figure them out.

Probably the most economical solution would be to find someone or a small web development group to set up a Joomla, Mambo or Drupal site like your example site has, then teach you how to keep it running. You might still pay $5-$10K for it, but you’re more likely to get something that will last longer for your needs than a custom-built web site would. I don’t think either of those 3 tools would have a problem hosting or storing videos for your combines.

As always, your mileage may vary, but I would be wary of anyone who promises to build an entire web experience from scratch for less than $1000, and especially wary of someone who promises you an exact duplication of a moderately successful, well-running web site for less than $20K. These numbers, of course, depend on what the site does and who does it, but honestly, would you spend 3 months of your life to make $500, or would you trust your business to a web site built in 8 hours?

Anyway, hope this is useful. If not, I’m always open to other opinions and perspectives =]

Bryan

Posted via email from Bryan’s posterous

Blackberry Snob: Someone who thinks you can text as fast as they can, even tho you have an ancient cell phone

Monday, March 9th, 2009

Posted via email from Bryan’s posterous

Monster Commute a free steampunk webcomic about traffic

Tuesday, February 17th, 2009

Monster Commute a free steampunk webcomic about traffic.

From the "oh FINALLY" file…

Sunday, February 15th, 2009

http://www.techcrunch.com/2009/02/14/the-death-of-web-20/

Posted via email from Bryan’s posterous