Quote from EC: “My friend’s fake brother said I have the most annoying laugh.”

My seven year old son told me this as I walked he and his sister to the car this afternoon after seeing Madagascar 2. Fake brother? Apparently EC’s friend’s family is hosting another family temporarily. Thus the other family’s son is a fake brother in my son’s mind.

Project Vision – Don’t Even Start Without One

It’s amazing to me how many projects start up without a clear vision. I’m not talking about an idea. I’m talking about a no kidding vision. And, no, I’m not picking on those who start projects on the side or just for fun. I’m picking on the those of us who are involved with projects for our organizations and customers that started up without a clearly defined and well understood vision.

I’ve found that agile projects are especially suspect to charging full steam ahead prior to a vision being created and communicated. Dietrich Kappe from Pathfinder Development wrote a post on this topic and made a similar observation. My favorite line from Kappe is where he points out an advantage waterfall projects have over agile projects in this regard:

Waterfall, by comparison, is marginally better in this regard (but worse in most others), since the right thing to do in the face of poor vision is to not develop software until that vision has been clarified, and waterfall is excellent at not developing software until pretty late in the project.

For some reason many believe agile principles and practices will overcome the lack of a vision for a project. We get so charged up about how we’re going to deliver early and often that we get lost in developing potentially shippable software without a clear picture of what we’re trying to accomplish overall. Before we know it, we’ve got a bunch of stuff developed and that’s about it. I’m guessing that some of this is a result of the following line from the Manifesto for Agile Software Development:

Working software over comprehensive documentation

Why would this one short line cause people to not develop a vision for their project? I think it may be that too many of us have been scarred by attempts to communicate vision in multi-page documents that end up saying nothing and no one reads once they are written. As a result of our past bad experiences, we replace these nonsensical vision docs with working software. In the process, we throw out the baby with the bathwater.

I recently came across a succinct template that I think almost any project or product can use effectively to communicate vision. Joel Spolsky posted one of Jim Highsmith‘s articles on setting a product vision. Highsmith uses the formula from Geoffrey Moore’s book, Crossing The Chasm:

  • For (target customer)
  • Who (statement of the need or opportunity)
  • The (product name) is a (product category)
  • That (key benefit, compelling reason to buy)
  • Unlike (primary competitive alternative)
  • Our product (statement of primary differentiation)

To put the template into practice, let’s pretend it’s 1999 (and really, who wouldn’t right now considering the economy?) and NetFlix is getting started. The vision for NetFlix might go something like this:

For people who enjoy watching movies and similar media from the comfort of their homes, NetFlix is a web based service that provides the largest inventory of movies, TV shows, and other video available for rent with Amazon.com like product search/browse, recommendations, and reviews, combined with great customer service. Unlike the major brick and mortar video rental chains, our subscription based service can be enjoyed entirely from the comfort of the customer’s home without any worry of late fees.

Not too bad. People might actually understand and remember the vision. Imagine that!

Some may think the template above is only good for products or product focused companies. Internal projects or those that aren’t developed for resale can still make use of the template. The challenge is to think differently about certain concepts. For example, the competition for internal projects is normally one of legacy systems, manually intensive processes, or the status quo.

Bottom line, don’t start a project without a vision. If an active project doesn’t have one, stop now. Get with the key stakeholders and write one together. Remember, vision statements don’t need to be (nor should they be!) long winded, they need to cover the important points in a manner people will remember and carry with them as they get busy developing the solution.

Agile and Estimates and Contracts! Oh My!

Over the last six months, I’ve been mulling over one of those subjects that has often been a stumbling block for IT providers considering adoption of agile for their customers’ software development projects. The dilemma revolves around contracts and estimating projects. The two tend to go together. Once you have one figured out it seems you’re left with even more questions with the one remaining. I have some ideas on how to make agile contracts and estimating better based on what I’ve learned and observed over the years.

WARNING: This is a long post. I try not to write long posts. I think this one is worth it, mainly because it’s building off the ideas of those much smarter than me. Continue reading “Agile and Estimates and Contracts! Oh My!”

Apache Shindig PHP Setup Problem Solved

First things first. Shindig is an Apache incubator project that serves as an OpenSocial Container and…I’m already falling asleep. Too boring. I’m way behind the curve on all things “social networking” but I have an idea for an app that may scratch an itch I have, and it just happens that some of this social networking stuff might be a good way to jump start the idea. So that means catching up on a couple of years (or more) of stuff that’s been going in the world of web 2.0, which includes OpenSocial. I wanted a local OpenSocial test sandbox and found Shindig to fit that bill.

Now, onto the problem I was running into and the solution. Unless you want the long boring details, I can save you the trouble and tell you to make sure you have mod_rewrite enabled in Apache.

If you haven’t dozed off by now then it probably means you’re running into issues with the Shindig PHP setup and would like some more details. I followed the directions on setting up the PHP Shindig server on my laptop running Kubuntu 08.04 here at home and kept getting a 404 error. I thought that was strange since I could hit other files with my browser that I put in that directory manually for testing but not the Shindig index.php page. Turns out the Shindig index.php page tries to be more “controller/servlet” like by sniffing the URI and passing it along to the appropriate handler. If it can’t find a match, then it gives a custom 404 error. I noticed the test URI (http://shindig/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml) didn’t have any reference to index.php. Ah yes, the wonders of Apache mod_rewrite! And guess what I didn’t have enabled? Yep, Apache mod_rewrite. So, below is what I did to get things running on an Ubuntu setup from scratch (meaning no Apache 2, PHP 5 was installed or configured):

sudo apt-get install apache2 apache2-common apache2-mpm-prefork apache2-utils ssl-cert libapache2-mod-php5 php5-cli php5-common php5-curl php5-mcrypt

svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ /home/jhoover/dev/shindig

sudo mv /etc/apache2/mods-available/rewrite.load  /etc/apache2/mods-enabled/

sudo cp /etc/apache2/sites-enabled/000-default /etc/apache2/sites-enabled/shindig

sudo pico /etc/apache2/sites-enabled/shindig

Stop laughing, I use the Pico text editor. I’m, as my son would say, “weak sauce”. I know. Anyway, here’s what I have in that virtual host file:

NameVirtualHost *
<VirtualHost 127.0.0.1:80>
  ServerAdmin webmaster@localhost
  ServerName shindig

  DocumentRoot /home/jhoover/dev/shindig/php
  DirectoryIndex index.html index.php
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  ErrorLog /var/log/apache2/error.log
  LogLevel warn

  CustomLog /var/log/apache2/access.log combined
  ServerSignature On
</VirtualHost>

Once we have that in place, we need to edit our host file:

sudo pico /etc/hosts

Append the following to the hosts file and save:

127.0.0.1       shindig

Time to restart Apache:

sudo /etc/init.d/apache2 restart

Now you should be able to go to your web browser of choice and run the demo/test app:

http://shindig/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml

If all went well you should see something a little like this: