From the PM Trenches

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

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

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

March 13th, 2009

Posted via email from Bryan’s posterous

How much would XYZ web site cost?

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

March 9th, 2009

Posted via email from Bryan’s posterous

Watch your language…no, really!

February 18th, 2009

Well this is really clever.  Neat example of natural language processing and design rolled together.  Will be neat when they have more objects to play with, but looking at what others have done is also pretty cool…WordsEye Login.

Monster Commute a free steampunk webcomic about traffic

February 17th, 2009

Monster Commute a free steampunk webcomic about traffic.

From the "oh FINALLY" file…

February 15th, 2009

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

Posted via email from Bryan’s posterous

Eight More Reasons

February 15th, 2009

I’ve been noticing a few new things since I last quit smoking (this is, in fact, the 2nd time I’ve successfully quit for more than 2 hours or so…going on 2 weeks now, but who’s counting?).

Ask anyone who smokes (or knows someone who does) and they can spout off at least 5 really good reasons not to smoke.  They are all perfectly legitimate, and probably the top reasons any given smoker chooses to quit.  So for the sake of completeness, here are

The Five Biggies *:

  1. It’ll hurt and kill ya (yeah, pretty much)
  2. It’ll hurt or kill yer family and friends (well, tougher argument, but not exactly unproven either)
  3. It’ll make ya taste/smell bad (no argument there)
  4. It’ll make ya go broke (eventually…probably sooner, given trends in tax legislation)
  5. It significantly increases the chance of death-by-fire-or-smoke-inhalation caused by falling asleep in bed with a lit cigarette (kind of number 1, still, but i thought it needed repeating)

Feel free to read the above using the voice of Santa Claus from A Christmas Story (e.g. “You’ll putchyer eye out!”).

Anyway, if the above 5 reasons aren’t enough for you – they do get a little tiresome after you’ve heard them enough and have trained your highly practiced rationalizing brain against them for several years – here are a few new ones.  These may just be particular to me.  I am (was) somewhat of a non-social, conscientious smoker.  It was a concentration-aid for me, first and foremost, and never really had much to do with being or looking cool (although, I predict it’s going to make a come-back if we slip into another global depression).  Anyway, on the off-chance any of these are applicable to you, hopefully you’ll find that one more extra reason to quit that you hadn’t thought of, before.  You just might be able to quit this time, and stay quit, for good.  Here ya go:

Eight More Reasons to Quit:

  1. You get to complain about being sick again. When you smoke, you aren’t allowed to cough in public, or blow your nose, or sneeze, without someone telling you “that’s your body telling you to quit!”.  You usually grin and bear it.  People mean well.  But boy, if you don’t get sick that often, sometimes you just want to “be sick” and not “be someone whose body is telling him/her to quit something or other”.  Well, guess what?  Quit smoking and now you can bitch and moan all you want, just like normal people, at the slightest hic, the teensiest twitter, itch, pain or migraine.  The world of hypochondria is at your feet, and you are a ragweed pollen on its winds.  Enjoy!
  2. You’ll probably get more contextually relevant healthcare (related to item 1).  I haven’t thoroughly tested this one yet, but I’m due for a checkup.  At any rate, I once went to the college infirmary because I twisted my ankle hiking.  After checking me in, weighing me, measuring my height and blood pressure, the Dr. came in to find out what was wrong.  First he asked me what happened.  Next he asked me if I could still walk on the ankle.  Third question was, “Do you smoke?”.  I’m not kidding.  Before recommending a (rather ineffective) solution for my ankle (wrap it up and don’t walk on it for 24 hours, if you’re curious), he gave me a ten minute lecture on how bad smoking was for me.  Now I don’t know about you, but this isn’t the fifties, where doctors made housecalls and you got a good hour and a half to chit-chat with the PHD about your quality of life.  You get – literally – FIFTEEN minutes, max, with a doctor these days.  So when you get up the gumption to actually go see the kind doctor, you would rather spend that time diagnosing, treating, and hopefully curing, the condition for which you scheduled your appointment.  Spending 2/3rds of my time telling me something I already know, and am not prepared to handle at that time, serves no one but your good deed for the day.
  3. You can tackle all those other hygiene problems. This one’s kind of tricky and specific to your own condition.  Me, I don’t know how to judge whether I smell better or worse than I did before.  I’m told I smell better, so I believe people who tell me that.  No one really goes around telling people they smell bad, even if they smoke (well, smokers are actually told quite frequently that they smell bad).  So let’s just say for the sake of argument that when you quit, you DO smell better, and your halitosis improves, and you require less cologne and/or deodorant.  On the other hand…once you quit smoking you can no longer blame it for any such problems you had before.  For instance, my teeth were colored yellow by fluoride treatments that strengthened my teeth when I was 8 or 9 years old.  However, for most of my life folks have assumed my teeth are yellow from cigarettes.  Not sure what I’m going to tell them when they don’t turn white all-of-a-sudden, but I’ll figure out a way to correct that now – at least it’ll be worth it.
  4. You don’t have to pick up other people’s garbage. Again, might just be me, but I don’t (unless I’m actually on fire) throw my cigarette butts on the ground.  I used to.  I think every few months I might, if I felt I was standing in a land fill.  But the past 5-8 years or so, I collected them either in my pockets or (more recently) in plastic bottles in the car, and threw them away when I got the chance, in a more proper receptacle.  I got to feel better that I wasn’t poisoning the earth with my own bad habit (well, at least not in a human-accessible place – don’t get me started on pollution).  So that was my own trash, but what about others?  Now, when I’m outside where fellow smokers tend to congregate, especially if it’s somewhere nice and I’d like to continue smoking there, I tend to pick up other people’s cigarette butts and throw them away.  The logic here is that if there are no butts on the ground, the management is less likely to outright ban smoking in that particular place, and hence, I can continue smoking there.  Make sense?  You’re right, doesn’t make much sense to me, either.  At any rate, I don’t have to do that anymore, although just because I don’t mind touching them so much, I’ll probably pick a few up every once in awhile, and throw them away.  Who else is gonna do it?
  5. You can let other people set things on fire. Being the only smoker amongst friends puts you in the awkward position of having to light everything from candles, to bonfires.  I say awkward, because what usually follows one of these events is someone else’s child asking you or their parents why you are the only one who carries a lighter in his pocket.  That’s usually followed by a very brief, quiet, polite “because he smokes” comment.
  6. You can solve problems requiring more than 50 minutes of concentration. I smoked roughly 1 to 1.5 packs a day.  That usually meant a cigarette every fifty minutes or so.  Because I typically smoked when I needed to break from one task and move to another, I learned to break all of my tasks down into fifty minutes or less.  That’s actually not a bad way to get really big problems solved.  On the other hand, it helps to spend a good 70 minutes on a problem, sometimes.
  7. You have an extra pocket. Just like that.  Now I finally have a place to keep my phone!
  8. You don’t have to make your friends follow you outside.  Hangin out with your friends or co-workers having a few beers or trying to solve a problem – you have to go outside once an hour to smoke.  Inevitably your good friends tend to go with you, to keep the conversation going.  Now, you can all save on that extra exercise and stay inside.

As for me, let’s hope I’m still smoke-free next week.  I think I’ll probably be out of the woods – and KNOW that I’ve quit – sometime around 2065 or so.

* I left off: Everything Will Taste/Smell better, and You’ll Breathe Better, because a) The first is not true for me, and b) I got a whopping flu a week after I quit and I haven’t breathed worse in 9 years.  Also, during my last 1.5 year non-smoking binge, I found absolutely no difference in my breathing quality.