The Role of Discretion

December 2nd, 2009

One area I have struggled with in my work life is the role of discretion. In some work environments, we are expected to follow instructions repeatedly. Individual discretion and variation is frowned upon. In other work environments, repetition is precisely what is frowned upon.

In manufacturing environments, as Deming elucidated, discretion and variation should be eliminated. The more repeatable a process is, the more likely it is to scale. Individual discretion results in variation. As the process scales, variation admits error, meaning the quality of the product goes down as more are produced. A survey of business history will yield multiple examples of professionals who were richly rewarded for sustaining businesses without variation.

In research environments, repetition is considered, for good reason, utterly wasteful. Professionals are expected to discover new things always. Indeed, it is considered an advancement of science to prove that what appears new is actually something old in disguise. Careers are made or destroyed when efforts thought novel are proven derivative.

In software development, the slightest suspicion that a repeated activity might be wasteful is immediately rewarded. The activity is automated and the waste eliminated. Strict adherence to process was considered a counterproductive restriction of personal freedom.

Yet, even large-scale manufacturing systems cannot last forever. Historically, R&D departments were organized to create innovations that were then implemented in manufacturing organizations. The implicit rationale was that manufacturing required a mindset focused on strict repetition, while research required a mindset focused on purposeful variation, and those two mindsets could not exist in a single individual.  Yet this model failed so many times that its failure acquired a name: The Ivory Tower. In some cases, the  research department lost touch with the real needs of manufacturing. In other cases, manufacturing stubbornly insisted that what worked in the past would continue to work in the future.

Recently, a new model has been adopted which accepts the possibility that both mindsets can exist in the same individual. Quality Circles bring together teams from across manufacturing departments to formulate process changes—purposeful variations, innovations, and improvements. But these are separate from the execution of the processes themselves, which are expected to be invariant.

Agile software development teams are beginning to adopt this model. During the iteration, adherence to plan and process is strict, but between iterations, variations and innovations are adopted or considered. Strict adherence to process actually frees the software developer from being distracted by unimportant aspects of the work, and allows him or her to formulate innovations with greater business impact for implementation on a larger scale.

max_allowed_packet on Mac OS X MySQL

August 13th, 2009

While developing a Ruby on Rails application that supported attachments, I ran into an error to the effect, “size exceeds max_allowed_packet”. This is because the default installation of MySQL does not accept network packets exceeding 1MB in length.

The solution involves using the MySQL Administrator tool. This is a useful program available as a separate package from MySQL. Unfortunately, it is not very user friendly.

  1. Click the “Options” button in the top navigation strip
  2. Choose “Advanced Networking” from the dropdown
  3. Click the pencil icon next to “Max. packet size:”. The words will turn from (disabled) gray to (enabled) black.
  4. Adjust the size using the text box, arrows, or dropdown.
  5. Click save. By default, there is no configuration file, so you may be asked to enter administrator credentials to create or modify the file.

The interface allows you to skip 3. and do 4. and 5. without complaint, but the configuration will not be changed. The change can be verified by re-launching the MySQL Administrator and by viewing the contents of /etc/my.cnf.

MySQL Administrator

The Search for Project Management Software

July 22nd, 2009

I’ve been looking for project management software to help run my consulting business. I have a small number of customers and a larger number of prospects. Some of the work is paid and some is unpaid (like moving prospects through the pipeline and developing prototypes and proposals) but in either case, I needed to prevent work from slipping into the cracks. Functionally, I needed, at minimum, the following capabilities:

  • Create a list of tasks
  • Establish durations for tasks
  • Create dependencies between tasks so that when one task is delayed (and they often are), dependents are automatically shifted. I had used Basecamp before, but it does not allow creation of such dependencies between tasks.
  • Group tasks into projects
  • Display a Gantt chart of  projects

This seemed like a reasonable set of requirements, considering Microsoft Project had these functions in its first version.

I also wanted it to be

  • web-based, so that other employees could use it when I eventually hire them.
  • free or cheap because the business is relatively poor in cash

There were a couple of good reasons why it could or should be open source.

  • The business is relatively wealthy in technical expertise (mine).
  • I envisioned customizing it and linking it into other systems.

My network query (Facebook, LinkedIn, and Twitter) yielded almost nothing. Google searches yielded a wiki page with a long list but a dearth of reviews or recommendations. Which to choose?

Since so many open source projects use SourceForge, I hit on the idea of looking for the top downloads in the project management category. OpenBravo seemed most promising because it has been downloaded a million times, over five times more than the second-place software. It claims to be a full-blown ERP system with accounting as well as project management. It runs on Tomcat. Unfortunately, my hosting relationships do not make running Tomcat software easy, so I decided to look further down the list. (In a weak moment, the engineer in me succumbed to not-invented-here angst, and briefly considered the benefits of converting the code to Ruby on Rails.)

OpenGoo was fairly easy to install, but lacks the task-dependency feature. GroupOffice seemed slightly harder to install, but also lacks this feature. I tried eGroupWare, which has an even more complex install, but I couldn’t get the project management function to work as required. The documentation wasn’t very helpful, having apparently been translated from German.

Finally, I settled on OpenProj, from Serena Software.  It is desktop-based, but at least it has the familiar interface and functions of Microsoft Project.

Marketing Is Everything

July 13th, 2009

A friend recently asked me what books I had found useful in learning about product management.

I mentioned this article by Regis McKenna, which first appeared in Harvard Business Review in 1991. It opened my eyes to the idea that  “marketing” is more than just lead generation, advertising, PR, or trade shows. As McKenna says,

Marketing is not a new ad campaign or this month’s promotion…It’s job is neither to fool the customer nor to falsify the company’s image. It is to integrate the customer into the design of the product and to design a systematic process for interaction that will create substance in the relationship.

The Marketing Funnel and the Sales Pipeline

June 21st, 2009

Sales and marketing professionals imagine a funnel or pipeline. Leads enter the process when they are generated. They are thrown out of the pipeline as they are disqualified or otherwise deferred. They progress in the process as they are qualified, closed, and ultimately become satisfied customers.

Having built my own marketing automation system, and having seen systems built by others, I wonder if there can be an explicit mapping between the funnel/pipeline and a web site’s structure. That is, can we create interactions that result in information exchanges and that automatically move leads through the pipeline?

Inspiring Commencement Address

June 1st, 2009

The Commencement Address to the Class of 2009, University
of Portland
, May 3rd, 2009
By Paul Hawken

When I was invited to give this speech, I was asked if I could give a
simple short talk that was “direct, naked, taut, honest, passionate,
lean, shivering, startling, and graceful.” Boy, no pressure there.

But let’s begin with the startling part. Hey, Class of 2009: you are
going to have to figure out what it means to be a human being on earth
at a time when every living system is declining, and the rate of decline
is accelerating. Kind of a mind-boggling situation but not one
peer-reviewed paper published in the last thirty years can refute that
statement. Basically, the earth needs a new operating system, you are
the programmers, and we need it within a few decades.

This planet came with a set of operating instructions, but we seem to
have misplaced them. Important rules like don’t poison the water, soil,
or air, and don’t let the earth get overcrowded, and don’t touch the
thermostat have been broken. Buckminster Fuller said that spaceship
earth
was so ingeniously designed that no one has a clue that we are on
one, flying through the universe at a million miles per hour, with no
need for seatbelts, lots of room in coach, and really good food but
all that is changing.

There is invisible writing on the back of the diploma you will receive,
and in case you didn’t bring lemon juice to decode it, I can tell you
what it says: YOU ARE BRILLIANT, AND THE EARTH IS HIRING. The earth
couldn’t afford to send any recruiters or limos to your school. It sent
you rain, sunsets, ripe cherries, night blooming jasmine, and that
unbelievably cute person you are dating. Take the hint. And here’s the
deal: Forget that this task of planet-saving is not possible in the time
required. Don’t be put off by people who know what is not possible. Do
what needs to be done, and check to see if it was impossible only after
you are done.

When asked if I am pessimistic or optimistic about the future, my answer
is always the same: If you look at the science about what is happening
on earth and aren’t pessimistic, you don’t understand data. But if you
meet the people who are working to restore this earth and the lives of
the poor, and you aren’t optimistic, you haven’t got a pulse. What I see
everywhere in the world are ordinary people willing to confront despair,
power, and incalculable odds in order to restore some semblance of
grace, justice, and beauty to this world. The poet Adrienne Rich wrote,
“So much has been destroyed I have cast my lot with those who, age after
age, perversely, with no extraordinary power, reconstitute the world.”
There could be no better description. Humanity is coalescing. It is
reconstituting the world, and the action is taking place in schoolrooms,
farms, jungles, villages, campuses, companies, refuge camps, deserts,
fisheries, and slums.

You join a multitude of caring people. No one knows how many groups and
organizations are working on the most salient issues of our day: climate
change
, poverty, deforestation, peace, water, hunger, conservation,
human rights, and more. This is the largest movement the world has ever
seen. Rather than control, it seeks connection. Rather than dominance,
it strives to disperse concentrations of power. Like Mercy Corps, it
works behind the scenes and gets the job done. Large as it is, no one
knows the true size of this movement. It provides hope, support, and
meaning to billions of people in the world. Its clout resides in idea,
not in force. It is made up of teachers, children, peasants,
businesspeople, rappers, organic farmers, nuns, artists, government
workers, fisherfolk, engineers, students, incorrigible writers, weeping
Muslims, concerned mothers, poets, doctors without borders, grieving
Christians, street musicians, the President of the United States of
America, and as the writer David James Duncan would say, the Creator,
the One who loves us all in such a huge way.

There is a rabbinical teaching that says if the world is ending and the
Messiah arrives, first plant a tree, and then see if the story is true.
Inspiration is not garnered from the litanies of what may befall us; it
resides in humanity’s willingness to restore, redress, reform, rebuild,
recover, reimagine, and reconsider. “One day you finally knew what you
had to do, and began, though the voices around you kept shouting their
bad advice,” is Mary Oliver’s description of moving away from the
profane toward a deep sense of connectedness to the living world.

Millions of people are working on behalf of strangers, even if the
evening news is usually about the death of strangers. This kindness of
strangers has religious, even mythic origins, and very specific
eighteenth-century roots. Abolitionists were the first people to create
a national and global movement to defend the rights of those they did
not know. Until that time, no group had filed a grievance except on
behalf of itself. The founders of this movement were largely unknown
Granville Clark, Thomas Clarkson, Josiah Wedgwood and their goal was
ridiculous on the face of it: at that time three out of four people in
the world were enslaved. Enslaving each other was what human beings had
done for ages. And the abolitionist movement was greeted with
incredulity. Conservative spokesmen ridiculed the abolitionists as
liberals, progressives, do-gooders, meddlers, and activists. They were
told they would ruin the economy and drive England into poverty. But for
the first time in history a group of people organized themselves to help
people they would never know, from whom they would never receive direct
or indirect benefit.. And today tens of millions of people do this every
day. It is called the world of non-profits, civil society, schools,
social entrepreneurship, and non-governmental organizations, of
companies who place social and environmental justice at the top of their
strategic goals. The scope and scale of this effort is unparalleled in
history.

The living world is not “out there” somewhere, but in your heart. What
do we know about life? In the words of biologist Janine Benyus, life
creates the conditions that are conducive to life. I can think of no
better motto for a future economy. We have tens of thousands of
abandoned homes without people and tens of thousands of abandoned people
without homes. We have failed bankers advising failed regulators on how
to save failed assets. Think about this: we are the only species on this
planet without full employment. Brilliant. We have an economy that tells
us that it is cheaper to destroy earth in real time than to renew,
restore, and sustain it. You can print money to bail out a bank but you
can’t print life to bail out a planet. At present we are stealing the
future, selling it in the present, and calling it gross domestic
product. We can just as easily have an economy that is based on healing
the future instead of stealing it. We can either create assets for the
future or take the assets of the future. One is called restoration and
the other exploitation. And whenever we exploit the earth we exploit
people and cause untold suffering. Working for the earth is not a way to
get rich, it is a way to be rich.

The first living cell came into being nearly 40 million centuries ago,
and its direct descendants are in all of our bloodstreams. Literally you
are breathing molecules this very second that were inhaled by Moses,
Mother Teresa, and Bono. We are vastly interconnected. Our fates are
inseparable. We are here because the dream of every cell is to become
two cells. In each of you are one quadrillion cells, 90 percent of which
are not human cells. Your body is a community, and without those other
microorganisms you would perish in hours. Each human cell has 400
billion molecules conducting millions of processes between trillions of
atoms. The total cellular activity in one human body is staggering: one
septillion actions at any one moment, a one with twenty-four zeros after
it. In a millisecond, our body has undergone ten times more processes
than there are stars in the universe exactly what Charles Darwin
foretold when he said science would discover that each living creature
was a “little universe, formed of a host of self-propagating organisms,
inconceivably minute and as numerous as the stars of heaven.”

So I have two questions for you all: First, can you feel your body? Stop
for a moment. Feel your body. One septillion activities going on
simultaneously, and your body does this so well you are free to ignore
it, and wonder instead when this speech will end. Second question: who
is in charge of your body? Who is managing those molecules? Hopefully
not a political party. Life is creating the conditions that are
conducive to life inside you, just as in all of nature. What I want you
to imagine is that collectively humanity is evincing a deep innate
wisdom in coming together to heal the wounds and insults of the past.

Ralph Waldo Emerson once asked what we would do if the stars only came
out once every thousand years. No one would sleep that night, of course.
The world would become religious overnight. We would be ecstatic,
delirious, made rapturous by the glory of God. Instead the stars come
out every night, and we watch television.

This extraordinary time when we are globally aware of each other and the
multiple dangers that threaten civilization has never happened, not in a
thousand years, not in ten thousand years. Each of us is as complex and
beautiful as all the stars in the universe. We have done great things
and we have gone way off course in terms of honoring creation. You are
graduating to the most amazing, challenging, stupefying challenge ever
bequested to any generation. The generations before you failed. They
didn’t stay up all night. They got distracted and lost sight of the fact
that life is a miracle every moment of your existence. Nature beckons
you to be on her side. You couldn’t ask for a better boss. The most
unrealistic person in the world is the cynic, not the dreamer.
Hopefulness only makes sense when it doesn’t make sense to be hopeful
This is your century. Take it and run as if your life depends on it.

Paul Hawken is a renowned entrepreneur, visionary environmental
activist, and author of many books, most recently Blessed Unrest: How
the Largest Movement in the World Came into Being and Why No One Saw It
Coming. He was presented with an honorary doctorate of humane letters by
University president Father Bill Beauchamp, C.S.C., in May, when he
delivered this superb speech. Our thanks especially to Erica Linson for
her help making that moment possible.

Portland Code Camp Presentation 1: Agile Really Can Satisfy the Suits

May 30th, 2009

Click here to download a PDF version of my presentation at Portland Code Camp 2009.

Deep Disappointment with Drupal

May 14th, 2009

When I first built a web site for my company, Now Interactive LLC, I chose a content management program called Drupal.

What I wanted was a site where I could feature products, services, clients, partners and contact information–the usual components of a corporate web site. I also wanted to blog about product management and web application design.

My first thought was to use an excellent blogging program called Wordpress.  It gives you a blogging site along with the ability to write static pages. However,  Wordpress is narrowly focused on blogging. On the home page, you see the blog, and available free templates all look like blogs. I would have to write and maintain my static pages separately and in their entirety. It became clear that I would have to customize Wordpress, which is written in PHP, and this was something I wanted to avoid.

My personal web site is a Ruby on Rails application that links to a Wordpress blogging site. The problem is that while the content management on the blogging site is user friendly and sophisticated, the content management on the Ruby on Rails side is a bit clunky. After all, the application was not written for content management but for a personal marketing campaign (which went off extremely well).

For about a solid half-day, I tried using a Ruby on Rails application that read from a Wordpress database.  The idea was that my corporate site would be written in Ruby on Rails, while the content management (editing, tagging, categorizing, and controlling revisions) would be handled by WordPress. But after struggling to get categories to display in the right order as tabs, I decided to try something else.

I had used Joomla briefly and found it counter-intuitive and complex with its notions of menus and content that might or might not actually appear in the site. A representative from OpenSourcery at InnoTech Oregon had recommended Drupal over Joomla. Sure enough, some large companies use Drupal for impressive sites. Word on the internet was that Drupal had a learning curve, but not being one to shrink from learning curves, I waded in.

Drupal was easy to install in my hosting service. I’d probably put it at 3X the effort of the (ridiculously easy) Wordpress installation. Installation of new templates was a simple matter of copying files to the server. Drupal automatically checked for updates to itself and any installed templates. It ran a daily cron job for housekeeping.

Unfortunately, I started encountering problems soon afterward.

  • I struggled to understand the difference between a Page and a Story. A Page seemed like a Wordpress page–an entire page that you managed yourself and that Drupal didn’t know much about. But I wanted to deal at a finer grain.  For example, I might want a page of partners but feature one of them on the home page. A Story seemed more like what I wanted, but it had funny features like automatically showing up on the front page.
  • I figured out how you need to create content and then create menu entries pointing to the content. Much later, I realized you could create menu entries at the same time as the content.
  • I put all my menu items in the Navigation menu, which gave me a very plain menu. I didn’t realize until much later that some templates treat the Primary Links and Secondary Links with special effects.
  • My triumph was figuring out how to assign stories to categories and link a category to a menu item. It involves yet another concept called a “taxonomy”. This is a hierarchy of categories to which you can assign stories. A menu item can be linked to a taxonomy entry, which displays all content assigned to that entry.
  • I figured out that you can order menu entries by dragging and dropping, but this is interconnected with the notion of “weight”. (What does “weight” mean for a horizontal menu?) Ordering stories on a page was much harder. Eventually, I figured out it assigns an editable timestamp to each story and displays them in reverse chronological order. By assigning the appropriate date stamps, I could alter the order in which the stories were displayed. (This is called a “kludge”.)
  • One problem I ran into was when you clicked on a menu item, you would see the name of that menu item all over the [BLEEP] place. So if I clicked on “Partners” then the page would display “Partners” in enormous letters, and each content item would say, “Posted in Partners on April 25, 2009 3:45 PM”. Of course “Partners” would not show up in the URL as you would expect. Instead, it would say, “http://www.now-interactive.net/node/15″ and this was considered a “clean” URL good for search engine optimization!
  • Eventually, I found a template that would not display so much [BLEEP]. Unfortunately, templates varied widely how much they could be configured, so I really just broke some less important stuff in order to fix some more important stuff.
  • My friend pointed out that the menu you just selected isn’t highlighted. Duh! It turns out there is some support for this, but it requires editing CSS—but not the CSS you originally installed, because Drupal has made a separate copy!
  • The interface is inconsistent. For example, assigning <none> to page and story titles ensures that no title appears, but assigning <none> to a menu name gives you a menu with “<none>” prominently featured.
  • There are very few good tips and hints on the internet, and what there is is sorely out-of-date.

After all this, I began to understand why people have made a business out of being Drupal consultants. Come to think of it, my last employer had run a web site on Joomla, but used a consultant for all changes. Indeed, since I couldn’t hire one, maybe I should consider being one…

Honestly, I had no real problem with any of this. You get what you pay for, and I had been amply warned of the learning curve. Furthermore, complexity is directly proportional to flexibility.

However, recently I have been approached by people who want a fairly simple web site. In many cases, they are using FrontPage and sending files to a server using FTP, but they want to do things like

  • mass e-mail campaigns to drive traffic to their site
  • sell an inventory of products through PayPal
  • have a private area for customers or members
  • do a slide show
  • allow reservation of resources
  • choose a site design consistent with logo colors

Drupal can certainly do all of these things and more, but it would take me a long time to set it up for these people. Furthermore, I don’t want them to have to turn to me every time they need a small change, and I don’t want to expose them to the counter-intuitive terminology and complexity of the administration interface.

In my next post, I’ll spell out what’s really needed.

Enabling PHP on Mac OS X 10.4 (Tiger)

May 9th, 2009

I didn’t see a simple solution, so here it is.

  1. Start the Apache web server as follows
    1. Bring up System Preferences. It is available under the Apple menu.
    2. Click on Sharing
    3. Make sure “Personal Web Sharing” is checked on the left. On the right, it should say “Personal Web Sharing On”
    4. You should see a message below saying “View this computer’s web site at [first link] or your personal website at [second link].
    5. Click on [first link]. Safari should come up with the Apache logo and a message saying the installation of the Apache web server was successful.
    6. Go back to System Preferences and click on [second link]. Safari should come forward with a big “X Your website here.”
  2. Edit httpd.conf
    1. Bring up a terminal window. (Terminal is located in “Applications” under “Utilities”.)
    2. cd to /etc/httpd/
    3. Bring up httpd.conf in read-write mode in your favorite editor.  I did this by doing “su [username]” where [username] is an administrator and then doing “sudo emacs httpd.conf”.
    4. Find the line that says “#LoadModule php4_module” and uncomment it. (Remove the “#” from that line.)
    5. Find the line that says “#AddModule mod_php4.c” and uncomment it. (Remove the “#” from that line.)
    6. Save the file.
  3. Restart the Apache web server
    1. Bring up System Preferences. It is available under the Apple menu.
    2. Click on Sharing
    3. Uncheck “Personal Web Sharing” On the right, it will say “Personal Web Sharing On”. The message below will disappear. If you try visiting the links in Safari, you will get an error message.
    4. Check “Personal Web Sharing” again. On the right, it should say “Personal Web Sharing On”
    5. You should see a message below saying “View this computer’s web site at [first link] or your personal website at [second link].
    6. Click on [first link]. Safari should come up with the Apache logo and a message saying the installation of the Apache web server was successful.
    7. Go back to System Preferences and click on [second link]. Safari should come forward with a big “X Your website here.”
  4. Create a test.php file
    1. In the terminal window, cd to ~/Sites. You should see index.html there. This is the file that shows “X Your website here”
    2. In the same directory, create a file named test.php. The file should contain a single line as follows: <?php phpinfo(); ?>
    3. Visit [second link] in Safari, but add “test.php” to the end.
    4. You should see a nice big table containing lots of information about PHP. The PHP logo and PHP version will be visible at the top.

Changing User Agent Strings

March 19th, 2009

An increasingly important web site requirement is to present different pages for mobile browsers. Although it’s possible to purchase a large number of mobile devices for testing purposes, some testing can be done in software only.

Typically, you’ll be detecting the kind of device accessing your site using the user agent string sent by the browser. So, you want to test that your site presents different pages based on the user string the browser sends.

Here are instructions for instructing Safari on Mac OS X to present various user agent strings. Unfortunately, there is a fixed set that doesn’t include Blackberry browser strings.

Firefox (across platforms) can be instructed to send various customizable user agent strings using the User Agent Switcher add-on.

Here is a list of user agent strings for various browsers, and here is a list of user agent strings for various mobile browsers.