Friday, November 30, 2012

We just want it to leave



Young man: "I wish this dinosaur would move!” hitting large lumbering animal with stick. "It never does anything AND eats too many leaves AND leaves big piles of unpleasant stuff all over the place; Grrr..."
Old man: "I wonder what the big fellow is up to", feeding the thing a sack of leaves.

Young man: "Why do you feed him? - He’s just dead weight. We've got a lot to do and he's not helping."

Old man: "Is it working against you?"
Young man: "No, it's just watching - occasionally moves something to big for us to handle; it's not enough to justify all the leaves though."

Old man: "How's the stick beating working out?"
Young man: "It moves a little every once in a while, but not very much; we just want to get rid of it."

Old man: "I see."

(Later in the day)
Young man: "Emergency! Emergency!  A pack of ten thousand rabid pack-rats that just came over the hill and we're going to loose everything!!"

Old man: "What are you going to do about that?"

Young man: "RUNNN!!!! We can’t stop ten thousand rabid pack-rats in less than an hour!"

Old man: Feeds the dinosaur another bag of leaves and whispers something in its ear.

Young man: "Hurry up - we've got to get out of here! - They’re almost in the valley."

Suddenly the dinosaur springs into flight and breathes fire down on the rabid pack-rats, killing them all and then lands and stomps the dead toasted carcasses into the dirt, at the same time clearing a new area for the village garden, and now it’s fertile ground.

Young man: "Hugh?  I didn't know a dinosaur could fly? And fire breathing?"

Old man: "It's not a dinosaur - it's a magic dragon.  He loves a good salad.  It’s had the fire thing for a while.  You should see the 50 caliper machine guns and 20 mm cannons in action; they’re awesome – and it has an impressive set of spells; it can turn a frog into a prince almost instantly."

Young man: "Why is it looking at me that way?"

Old man: "That's very odd.  It smiles at me; I wonder if the stick beating thing could have something to do with it?"

Young man: In danger, running away from the village as fast as he can, yelling, "IT'S NOT FAIR!”

(a different young man comes to town; has some new shinny tools, sounds really smart, and the village elders put him in charge.)

Old man: "Young man, please throw the old dinosaur a leaf every once in a while; and, um, it's probably not a good idea to hit it with a stick. I'm just saying..."
- That was funny.

Job 3.2: What happened?



Then the economy tanked (2008); the company swiftly cut twenty five percent of the work force in one day; it was so upsetting to watch - I spent the day watching Internet videos on some new technologies and then reading about them the rest of the week.  I lost some good working relationships and localized experts - i.e. my informal resource network got smaller; we're not talking about people who were marginal in any way - many of these guys were top performers, just not tied in a direct way to an income stream.  My saving grace was that I'm the original author of several critical systems and I program in a style that values results more than form and we still ship code that's fifteen years old; it's hard to stop a freight train.  This begins phase three of my third job.  Having achieved some success with my phase two mission and vision, my focus these last few years and presently is answering the question "How can I apply my time to tool up enough to bring a lot more money to the company than I cost them?" – or possibly “How can I apply my time so my co-workers bring in a lot more money than they would otherwise have been able to?” the answer was simpler in the past because the world didn't change too significantly very fast.  Now, I'm not so sure.  Although my C/C++/assembler/system-design skills are seasoned and effective, there is a four person team working full time on replacing my work with a .NET C# program. 

They're on their tenth man-year and have the potential of having a prime time solution as soon as a year from now.  It requires ten to twenty times the resources, but with resources being a million times what they used to be; it doesn’t matter.  I looked at C# the first two years it was out and abandoned it - not quite operationally sound.  Apparently, now with .NET v4, it's a lot better.  The competing group has a chance of success; how do I modify my value proposition when our customers no longer use the old program? The old answer was to do one of the following: 1) Look for a real need or problem that has an inadequate solution. 2) Make a compelling improvement to your current solution - so compelling that the competition quits with broken dreams of greatness; they know there's no way they can win.

What if the world changed and I don't know it yet?  Maybe I should concentrate on being able to affect massive changes to the software very quickly without working very hard and then go shopping for win-win-win (them-me-customer) opportunities?  What if I could outperform my competition by a factor of hundred instead of a factor of ten, and continue daydreaming and having fun all day most of the time?

Hmm.  Hold that thought for a second; this is a radical idea.  Ah - a few months ago I discovered "Eddie Obeng" (thank you TED talks!!) and read all his books; his central thesis is that the pace of change in the world has accelerated beyond any one person or organization's ability to learn how the world works before it changes again. He's been working on finding solutions and strategies to that exact problem for 15 years; my exact problem - how do I decide what to do next in an uncertain, unknown environment?  He's developed a practical way of quantifying project types and presents a very common sense analysis of how to be successful with different types.  I'm a big fan.  His work makes a lot of sense from all the notes I've taken over the years and all the projects I've seen fail and the few I've seen succeed.  His analysis of robust strategies mirrors a lot of my own experiences as well; I call it systems theory because I read different books earlier in my career.  So what do I know?

1) There are a lot of things I don't know; and there might be even more that I don't know that I don't know.

2) The world is changing for software very fast.

3) Human nature has been remarkably stable for a long time.

4) Human expectations for software utility and effectiveness are rapidly rising.

5) I don't know my competition and probably won’t until it’s too late.

6) I might not even know my stakeholders and the list changes fast.

7) My customers are different than they were last year; they changed.

What strategies might win in this environment?

1) Make a consistent effort to improve my ability to turn to much data into just-right good information.

2) Consciously turn some of my vendor-customer relationships into partner-partner relationships and help them more.

3) Spend more time with the sales guys and customers looking for problems to solve that 1) make money even if they're one-off, and 2) don't require much future effort/time, AND 3) have ongoing revenue.

4) Lower the time and effort needed to assimilate/modify/plug-together other people's work (legally).

5) Automate the things I do repetitively, and do the same for others.  Have fun looking at things that never happened before, and enable others to have fun.

Which strategy should I work on first?

I review all of them for 30 minutes every Saturday morning between 9:15 and 11:45, and then work on one each weekday for 30 minutes between 10:00 and 10:30 am.

How can I test these strategies fast and with the least effort?

1) Measure my current capabilities with some real tasks from the last month.

2) Measure again every month; make the maximum task time 1 week, so there are multiple things to measure.

What's the worst possible outcome of this course of action, in light of any possible change in the environment?

If the tools I create damage my ability to be productive (i.e. they take longer than the time they save), then the custom version of EMACS I've used and enhanced for 25 years is still my friend, and I learned something.

If management changes and/or I didn’t know the amount of time I can search for the next big thing before delivering it, then I'll be asked to pursue other opportunities; and I'll take my tools with me.

If another (perhaps younger) cowboy shows up who can (and does) outperform me, then I can cheerfully learn something if he shares, or I can move on if he's hostile. (there's only room for one cowboy in any major group these days; brawls between highly capable people are very counterproductive).

If the company changes business models and outsource or crowd-source software development, then I'll buy time to make new plans.

Epilogue
The game is afoot.

Job 3.1: Army of One



Then an interesting thing happened:
1) Microsoft released a version of Windows that actually worked.
2) Intel consistently made new computers that were multiple times faster than the old ones.
The world changed.  I changed my tools to run on Windows, changed the products to run on Windows and added windows features.  We dabbled in mapping for several years, without success; then Microsoft created a mapping program that worked, and only cost a hundred dollars a seat; it's initial interface was incomplete so I patched it (the assembler thing comes in handy sometimes).  The company grew significantly (10x) and pumped seventy or so man-years into a new PC version of the product.  I wrote the core messaging infrastructure and solved problems whenever no-one else could figure them out; occasionally I would be unsuccessful, so I trained management to believe that a problem I can't solve is by definition an "unsolvable problem"; it was fun.

In those days, if a customer had a crisis, I was the fourth person to show up (because the previous three were unsuccessful).  I was bit of a cowboy (that's an understatement - more like Denis Rodman or Darth Vader).

That was phase two of my third job.  I created, wrote down, and pursued my mission and vision:

Mission: Create software that enables the company to be highly successful.

Vision: Our products are reliable, high performance, feature complete, scalable, easily deployable, tightly integrated, and easily modified.

Strategic checklist:

* Reliable software continues to perform when something unexpected happens.

* High Performance software has transactional response times less than 1 second under full system load.

* Feature Complete software has all the features a customer role player would expect in each module.

* Scalable software gives a consistent user experience with all customer sizes and infrastructure.

* Easily deployable software is installable by anyone, without training.

* Tightly integrated software gives a consistent user experience.

* Easily modified software has a high percentage of all software features exercised by testing software with no manual labor

I was motivated by the dream of doing this better.  My hobby was reading PhD and Master's theses from the Internet and studying Bayesian statistics.

Job 3.0: A failure leading to success



I got married and moved to Birmingham Alabama.  I signed up to sell encyclopedias door to door (by choice) because I thought it would be an interesting experience - it was!  Encyclopedia Britannica had an excellent sales training program at the time.  I was mildly successful, but not enough to actually live on.  I programmed at home on a PC/XT for fun in off hours. This was more of an experiment than a job.  I gained some people skills but learned that I really enjoy the technical things more than the people things.

Six months latter I was about two months from being broke and decided to go back to programming.  An interesting thing happened again.  
1) There was exactly one company in town that was using the type of computer I was most experienced with ("DEC" VAX/VMS).  
2) They had six programmers and a huge project due to a customer in six weeks. 
3) Two of the programmers turned in their two-week notice one week ago.  I called the company and got connected with the head programmer and invited to interview.   
It was like a turkey shoot where the turkeys are in small cages.  “Can you start tomorrow?” he asked.  That was funny. 

It turns out that the project they were programming was very similar to the student information system at school; it was 30% done and they thought it was 70% done (that's why twp others left; jumping ship before things got ugly), and I not only hit the track running; I created a new track.  Those were interesting years - the early nineties.  PCs were becoming more popular and the company is sales driven so they wanted to sell them, but the product is industry specific; meaning that it's massive and filled with thousands of industry and business specific pieces of logic.  So it's not practical to "write a new one" when computers change or new languages are in vogue.  The most computer intensive part of the product was (and still is) an operational display that helps a dispatcher track and schedule trucks.  

 It's a brilliant design (information management) by one of the founders of the company from 1988.  I created a version that would run on a PC to offload processing from the VAX computer.  Then I coupled the new display and a terminal control program with a multiple session capability and exceptional response time.  Operations that used to take two minutes would now take 1.5 seconds; the customers loved it.  We called it ZNET.

That was phase one of my third job.  Zig Ziglar, Brian Tracy, and others inspired me.  My hobby (besides programming) was golfing with co-workers (future executives).