Friday, November 30, 2012

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).

Job #2: College, Working hard, getting tired, and finding freedom.



After graduating from high school with a 2.7/4 grade point (not particularly good; I studied a lot, but not for school).  My mom sent me to Taylor University, in Upland Indiana starting in 1980/81 and I worked for the university during the summers (programming in the IT department) from my freshman through junior years.  

 An interesting thing happened during the summer of my junior year; 
1) my dad called and told me that business was bad so I needed to figure out a way to either support myself of pay for college myself. It was 1983 and Jimmy Carter's policies caused all the major pharmaceutical companies to cut R&D to almost nothing.   
2) The college IT department had been concentrating on rewriting/modernizing the student information system and was two years into the project. 

My student intern role in the previous and current summer was to maintain the old system.  The deans, VPs, and controller respected me because I was effective at solving their problems, and because I would often times work all night or all weekend when there was a crisis.  They appreciated the effort and results.  The director of IT transferred me to the new system (under a lot of pressure to show results) and I worked on it for a month and then there was my first career "surprise meeting” - I was invited to join, and I didn't know why at the time. Here was a room full of the big bosses - the guys in charge of all the departments I supported using the old system. 

I remember wondering "Why am I here?” - IT director made a mistake; he didn't realize how unhappy the stakeholders were and he allowed them to invite someone to "the meeting" who was too green to know when to shut up or know what lie was supposed to be told.  They were meeting to review the progress of the new software and make plans for when it would be available.  Again, "Why am I here?" - IT director gives the sales pitch, and stakeholders ask questions.  After about 20 minutes of discussion, the controller turned to me and said, "What do you think, James?" I'm sorry IT director, you should have coached me or never let them ask me.  I said, "Well, I've worked on it for a month, so I'm familiar with what it's trying to do - improve on the functions provided by the old system, but <pause> I can't with a clear conscience recommend migrating to this new system, if it's ever completed; I have friends in every one of your departments; people I have helped do their job over the last couple of years, and I don't want to see them more frustrated than they are now - in fact I'd like to go back to improving the old system.  I don't think the new one will ever work." - 

WOW - You could hear a pin drop.  I turned to look at the IT director; pail white face, eyes full of anger.  I panned the room; lot's of people looking down, avoiding eye contact.  IT director tries to recover - "James is only a junior and doesn't have a perspective on the full scope or extent of our progress; I don't think his opinion represents the reality of this project." I responded, "It's possible I'm completely wrong; I am inexperienced." - for the stakeholders, those words fell on deft ears though, as I represented a breath of fresh air after years of neglect; I had no idea.

Needless to say, this message was not well received by anyone.  The director of IT fired me an hour latter, and then a couple of days latter he got fired and all of his staff quit.  Needless to say, that left anyone who was anybody at the school trying to figure out how to run the school.  This was the first time I sent a message and an executive got fired, not the last - it's happened a half a dozen times over the years; mostly on purpose, this time by accident.  Over the years I discovered that power, influence, authority, and responsibility are not the same thing, and often found in strange places.

They promptly hired a new IT directory and me as his full time staff (with the negotiated point that as long as the data processing for the school was "happening", I could take as many classes as I wanted, tuition free, and during working hours).  The first year was tough; I replaced five people and because the system was developed in-house, you couldn't hire anyone who was up to speed; it was incredibly fragile and about half the operations either didn't work at all or didn't work well.  I got tired of working so hard so I automated the business processes and gave each department the power to fix any common problem all by themselves.  This freed up most of my time and gave far greater power and productivity to many of the employees in various departments.  The new IT directory was hailed as "remarkable" and I was considered the "Golden Child".  I took every class that the University offered that I was remotely interested in over the next four years, and spent my free time programming for fun.  I wrote my own editor, a couple of compilers, half a dozen interpreters, and significantly - a multi-session terminal control program that allowed an operator to do several things at once.  We called it JOBHOG.

That was my second job.  My inspiration was the mission of creating tools that empower people (especially myself); making their world better.  My hobby was applying mathematical concepts to computer programs and learning to measure algorithm performance.  My boss was a seasoned ex big bank executive and it was fun to be his right hand man.  Years after I left he was a little chagrined to admit that although I never seemed to be working on anything, he had to hire three people to replace me AND he had to keep a close eye because things didn't "just happen" any more.  That was funny.