I was recently asked a question that was, essentially, “What is your perfect job?” What is my passion? After a few moments of thought, I knew exactly what to say.

I’m passionate, work-wise, about three things: two of them I’ve always loved, the third has come about only in the past few years (see Transformation). They are related to each other, but separable in terms of job responsibilities and opportunities.

When I was in eighth grade, living in Reno, I had a friend at school – I don’t even remember his name. But his dad owned some 7/11 stores, and he used a Radio Shack TRS-80 to help him manage them. It was my first glimpse of a “personal computer”. I asked how it worked, and he showed me a “code listing” – lines and lines of BASIC. I could even recognize some of the words! I played Dancing Demon on it and started trying to figure out how to get one of those things.

After working a while as a dishwasher, I managed to save enough to buy a Model I Level II 16K TRS-80 for about $700. I was about to turn 15. I spent many nights and weekends in a scary attic space workroom typing in lines of code from SoftSide magazine and learning how to debug my typing errors using just a language reference manual. Fun stuff!

My first passion reared its head when I was 17, working at a skating rink. I became an assistant manager and started calculating payroll for the employees. I used a rate chart and a calculator, and it took me about 4 hours to do the twenty or so employee time cards every week. With a couple of years programming under my belt, I just knew I could create something on the computer to do this payroll thing for me! It took me a couple of weeks, but I wrote my first computer program that solved a customer’s pain. Including unpacking the computer, running the program with its nice summary printouts, and packing the computer back up, my payroll time was cut in half to just two hours. My first passion is simply:

Solving Customer Pains

I like to visit customers, talk to them, discover ways in which I can help them work better, faster, easier, whatever-er. This is why I created QuickBooks Keyword Search. It’s why I took on consulting jobs like my first paying gig for Plaza Diagnostics. That one took a 2+ week billing cycle for a medical diagnostics firm down to 1 night. From a “hand the papers off to a data processing company running a PDP-11” to “enter the night’s stuff into a T1000” and bill the next day! I interviewed that customer, understood his process, turned it into a program that saved him thousands of dollars. And learned to value my time more – I only charged $90 for that program.(!!!!!)

Today, this translates into visiting customers, talking to them, seeing their work, seeing them work, discovering new ways to help. You know I’m visiting customers if I’m applying for patents! There are always new ideas out there.

My second passion is all about playing around. I like to play with new languages, new platforms, new types of customers, new technologies. When I was coding in BASIC and Z-80 Assembly, I was part of Fidonet, answering questions and creating samples for people. When Windows came around, I wrote VB samples (see BlackBeltVB.com) and helped folks.

When I was stuck on version 12 or so of the accounting system our team created, I thought I’d go bonkers. I asked my boss if I could write articles for magazines, create some shareware, have some fun!! He told me, “Sure, as long as it is non-competitive with our software.” So I wrote maybe 20 or so articles, several shareware applications – one of them highly successful, and dozens and dozens of sample applications… just fiddling around with functionality and learning new things. I created a 3D rotation and transform wireframe app (it’s on the bbvb site). I tried my hand at games, at network communications tools. I even wrote my own HTML web browser!

Nowadays I still experiment with every language and new technology that comes down the pike. In one week last year, I remember that I coded in: 1) Groovy, 2) VB6, 3) Java, 4) PHP, and 5) Objective C. Groovy was for an app at work, VB6 was a quick and dirty card printer, Java and Objective C were for a Droid phone and iPad respectively, and PHP was the app that worked somewhat with the VB6 thing. I latched onto Smartphones when they first appeared, creating Palm apps and even a floating point emulator in C (of sorts – really it was just a very large integer math library) for the early Blackberries. I can’t help myself… I see an RFID reader for $39.95… wow!! Gotta have it and play with it. Cameras and GPS and motion sensors, big touchscreens… I even bypassed a UPS power switch and wired it to a phone-controlled radio transmitter relay system for remote power cycling of a computer and network switch. All that to state my second passion:


I’m usually pretty good at making connections between a need and a solution. The more I learn about new capabilities in the world of computing, about new technologies and devices, the more connections I can make and the more potential solutions. But mostly, it’s fun! It’s fun because I’m curious, I’m a programmer, so I love to find a real challenge and then figure it out. I’m like a little kid with a cube full of odd-shaped holes and a bunch of plastic shapes. I pick up each one and try to hammer it in a hole, crying out with joy when one fits!

Two down, one more passion left: acting as a catalyst. This one is really my least defined, as I haven’t really been “passionate” about it, or recognized it as something I love, until far more recently that the other two. Oh sure, I enjoyed teaching the occasional class on creativity or visiting customers, and I enjoyed participating in or facilitating brainstorming sessions. But it turned out that what I really like is to just be part of a team that wants to be more creative, wants to try more solutions and possibilities. I want to be a catalyst on that team, spurring people to greater creativity of their own. I want them to empathize with the customer the way I do. I hope that my curiosity will rub off on them. I want to instill the ability and desire to be innovative to others. I have tools that I’ve both learned and created for framing problem spaces, conducting customer visits, taking and understanding notes, using qualitative data to determine which direction a project should take.

I remember standing at the podium in a standing-room only gallery and holding up a bottle of conditioner I’d grabbed from my hotel room. My first words in that session on Walking in your customer’s shoes were, “How many of you tried to use the conditioner from the hotel?” The room erupted in laughter and people calling out – immediate customer empathy! Those little conditioner bottles were diamond shaped, stiff, filled with thick creamy conditioner. It was almost impossible to squeeze out the stuff. Observation! Empathy! Success! I took a whole room full of people and made them customers on a visit to their own hotel.

That’s something I want to do more of, and I’ve found the best way, so far, is to join with teams on their journey toward solving customer problems – be it with new offerings or old.

Be an innovation catalyst

I steal that term unashamedly from my current company, and although I mean the same thing… I think… I want more than short spurts of innovation engagement, rather I want to be part of the entire journey of investigation, learning and development: to be a real part of lots of teams.

So there’s my perfect job: visiting customers, creating offerings that solve their pains, using a variety of solutions and technologies, and as part of a team of innovators.

One of the innovation challenges in a big company is trying to work within the gravity well of the major revenue generating offerings while needing to obtain hardware, software and services that probably shouldn’t co-exist with those important offerings. You can’t spin up a Facebook app server in the same network topology as TurboTax! You probably can’t order RFID hardware from the same vendors you use for your blade servers and laptop computers.

But you can’t just step outside of the gravity well – there are good reasons for the existence of procurement and hardware exception approval processes.

There are times you can bypass it for small or temporary things, and just act like a startup and put it on your corporate credit card. But then the money might not show up in the proper place on various reports, giving the accounting department a real headache, or you clicked “Agree to terms” when you checked out, but those terms are actually not acceptable to your company.

So you have to work with them and initiate your purchase and exception requests through the system. If it’s a great system, then everything flows smoothly, suppliers are found for your stuff, the prices are the best available, and there’s no email back and forth to resolve problems.

You probably haven’t encountered that nirvana yet. Instead, your odd hardware request can’t be fulfilled, so you start on a journey of discovering the people involved in A) getting a proper request created and B) getting the money to the supplier. There is a huge amount of institutional knowledge inside the heads of people who have been around for a while, and especially in functional groups in a big company. You want to spin up a data center server? Talk to this guy. You need to install non-standard hardware? You’ll need her to grant an exception. Want to order from a new vendor? Talk to these people, oh, and maybe that guy has a locally-stored Word document you’ll need to send to the new vendor.

If you have been in the innovative space for as long as I have, you’ve definitely encountered these scenarios! And I hope that, like me, you’ve documented them for future pioneers. I’ve owned several new, unexplored “routes”, including Intuit Labs, Intuit Experimental Hosting, internal wikis and blogs. Those routes are filled with people who need to know, need to approve, or otherwise have some sort of gating role. Using Intuit QuickBase, I created processes that delight the developers and other folks who are using them.

Bottom line: it’s okay to have knowledge tied up with a PERSON, but you need to create a PROCESS that will get to that person and let them document the knowledge that they provide.

Download Trek.apk

More fun with Google’s Android App Inventor. This one is a Star Trek Communicator. Use the “open communicator” move to “flip” open the cover, then speak your command. The lights do things, too, so press them to find out.

There’s only a couple of commands active in this. I’m demoing it at the Intuit Tech Forum and will add a new command there, plus I’ll probably play with it more and add commands. Fun!

If you haven’t already done so, you’ll need to install the free Google Text to Speech service. Click here to install it.

Download Trek.apk

Click here to download the TextyDriver application

If you haven’t already done so, you’ll need to install the free Google Text to Speech service. Click here to install it.

It’s inevitable. You’re driving down the road, and you get a text message. What to do, what to do. You can read it – that takes your eyes off the road briefly. But… what if you need to respond? Can you pick up groceries? Make a quick call? Stop and pick up the kids from the mall?

You can text back a response. Dangerous. Trying to type while driving is a pain. Maybe your text message app accepts voice and transcribes it? That’s a little better, but you still have to click on the text field, then find the tiny microphone icon, speak your message, then read it to see if it was correctly transcribed, then press the send button.

Of course, you’re about out of luck if there was a transcription error. You have to try and delete the message and start over.

You could call. But that means more button pressing, locating the contact, getting to the right phone number, pressing the call button.

Enter Texty Driver. Massachusetts, like many states, has outlawed texting while driving – and for good reason! As I wrote above, it’s distracting. So the Texty Driver app is voice command driven. You can setup 3 frequent texters and with one button press, activate the texting sequence.

First, it states the name of the contact you are about to text and tells you to speak your message. When you are finished, just stop talking. The Android operating system on equipped phones, such as my Motorola Droid, will connect to servers and transcribe the message. It’s very accurate and works well even in road-noise environments.

Second, your transcribed message is read back to you. That lets you confirm the accuracy of transcription without looking away from the road. You can respond with “Yes”, “No” or “Cancel”. Yes sends the message, with a voice confirmation. No starts the transcription over, letting you speak your message again. Cancel stops the process.

If the app is kept running, there is an option that lets it speak received messages back to you. If one of the selected contacts responds, the app will convert the message to voice and speak it. However, App Inventor doesn’t currently allow applications to run as background processes, so it won’t speak if something else is running, or if the phone is locked.

Click here to download the TextyDriver application

A co-worker of mine told me of an ongoing contest at my office: a contest centered on me. The winner would be the person who could get me to say “Hello” to one of them. Someone would see me go for some coffee or popcorn, and they’d queue up to go into the break room and try to talk to me.

It wasn’t that I was intentionally unfriendly… I was just… focused. This was back when I was coding every minute of every day, cranking out applications at a rapid rate. My fellow programmers joked that I must type with my feet, too, since I was so fast. That speed was, in part, enabled by my ability to focus. Even necessary activities like restroom breaks or a snack were unwanted intrusions, an opportunity for my attention to drift away from the next line of code, the next bug to resolve.

My concentration was such that I would acknowledge other people, but often only in my mind. I said “Hello”, it was just so low-pitched, and sometimes no-pitched, that it was simply not there. So the only winners in that contest were the ones who happened to catch me at a transition, like finishing a bug sheet or a major part of code.

When I joined the Intuit Innovation Lab in 2002, some of that… lack of social grace… was necessarily overridden by the nature of my new work: I had to visit customers and talk to them. Or at least listen closely and ask the right follow up questions. I talked more to my co-workers, with my co-workers, and I learned how to connect with customers.

But all that change was just an unthoughtful response, not a deliberate difference compared to my “contest” days. It certainly wasn’t enough. I still had a lot of friction with my co-workers, viewed as “smart, fast, creative, and hard to work with”. It came to head when I locked horns with a co-worker, pushing things “my way” and not allowing a different opinion into the room. I didn’t like working that way, and neither did people like working with me when I was that way.

Fortunately, my boss at the time, Tara, suggested and supported me with a plan to change. She hired an executive coach for me. With his insights and help, I transformed how I interact with people – everyone, from my family, to my co-workers, to customers and just to everyone I meet.

I first took a personality test called an Enneagram. There are many such tests out there, and the Enneagram is probably one of the best. It has 3 person types, and 3 sub-types. The three types are Body, Mind and Feeling. I’m a Body type, with a sub-type of 1 – the Reformer. I want to solve problems, to make everything better. At my worst, I’m a perfectionist, plowing ahead with my own solution and pushing everyone else to the side.

The key to my transformation was to take the worst stereotype of a Reformer and apply that to myself. In every situation, I would laugh at that stereotype picture and refuse to fit into it, even as I knew that my normal mode would fit into it! I became a listener, a peacemaker, able to get things done as a team, as part of a team. I could let other ideas join my own without feeling like the solution would be “worse off”.

I can feel the difference, and it usually astonishes me. I’m happier, friendlier. I can connect with almost anyone. I get onto a plane where a flight attendant is greeting people. She didn’t look particularly happy, saying “Hi, welcome aboard.” I said, “Hi, thanks! How are you?” It was amazing – her face brightened, she talked some more, told me thanks for asking. I could hear her behind me greeting others with a smile! That’s why I’m astonished – I really had no idea before that I could personally, individually, brighten someone’s day just by, well, caring about them, to be honest. It’s more than just a “friendly” hello, rather I actually mean it when I ask, “How are you?” I talk to people about their day, their work, their feelings.

Those of you who know how I was “before” will, I believe, be pleasantly surprised at how I interact with you and those people around you. It’s a world full of people out there, and they’ve had all kinds of days: good and bad and indifferent. Open up ye engineers and explore the people around you. We’ll all be happier for it!

Software is… hard. There are so many things to think about, even when creating an offering as simple as an automated email message. Click on the image on the left and you’ll see what I mean. Notice the link in the bottom status bar and the highlighted link in the text. It’s for Hertz.com, but the actual link reference is for Hertz.com. – an added “.” period. Note that it is also an SSL secure website, which means that the security certificate needs to exactly match the URL if you don’t want the browser to pop up a scary “security exception” notice. Someone at Hertz.com didn’t get it right. More likely several someones.

Creating good software takes an attention to detail that the “engineering” discipline attempts to enforce. But unlike many traditional engineering tasks, there are many different ways of accomplishing the same task, and they can all be valid at one point or another. The number of systems, concepts, languages, end customer environments… it’s staggering how much a programming “maven” needs to keep in his or her head.

Processes and project roles are a big help. A project manager to plan and maintain the big picture, designers who sweat the details, developers who are experienced and focused, quality assurance folks who nitpick every little comma and period. Every one of those roles has a responsibility to catch that “Hertz.com.” error.

  • Did the project manager ensure that the wording in the email is correct?
  • Did the designer check the text, the fonts, the highlighting colors?
  • Did the developer know how to construct a link in both HTML and Text formats?
  • Did the QA folks actually click the link – and clicked it using a “clean” environment?

I remember a tester who worked on my EasyACCT stuff back at Tax and Accounting Software Corporation (TAASC) in Tulsa – Brian Anderson. He was a superb tester, and later became a developer as well. He owns Hostek.com, where this website (and my others) are hosted.

He would sometimes come up with the craziest sequences to duplicate an error – press Ctrl-Shift and then down arrow five times, type “Q-2” and press Enter, and you see this error message. Maddening. But if Brian tested it, then I was confident that my application was thoroughly tested and working as good as mortal man could make it.

A great tester is worth his or her weight in gold, as is a nit-picky designer, a thorough and knowledgeable project manager, and a careful and experienced developer. Don’t skimp on your people, and always have at least one truly experienced person in your project team. Programming is an art, not a science. You put chlorine onto gold, you’ll get dissolved gold and a very unhappy investor. There aren’t variations when those two elements are mixed. You design an application, and there are dozens if not hundreds of ways that things could be mixed to create the working application. Experience is absolutely necessary if you want Quality.

I feel very fortunate to have grown up closely with my cousins. While living in Texas, we visited family almost every weekend – my mom’s family most of the time… sometimes my dad’s. After my dad moved to Reno, I spent my summers, and many a Christmas season, in Reno. I also lived there for a little while.

I don’t remember exactly when or how Mark and Nancy became my favorite cousins… probably it was all the time we spent together either at their house or at The Lake – Lake Lahontan. We learned to water ski together, to fish together, to ride motorbikes together. We spent nights looking at the stars and days swimming in the lake, or in the swimming pool and hot tub back at the “Compound” – a group of 4 motor homes with a boathouse on some land just outside the Lahontan park area.

I was able to spend some extra time with them last week, along with their mother – my Auntie Pearl. My Uncle Jim recently died, and I really wanted to be there. At least I was able to take a few days and hang out. I’ve greatly missed them – they aren’t terribly active online or on social websites, although I’ve watched and looked for them over the years.

Fortunately, Nancy has an iPhone and likes to communicate via texting, and Mark will text and watches his email. I’m like a “tornado in a trailer park” now – happy as can be that I’ve found them again, connected again! They live super close to where I often travel for work (although super far away from my home). I plan on making a side trip to visit them every time I travel to the San Jose area for work — if I can swing it.

I spent a day and a night with my Auntie Pearl and cooked dinner (my simply grilled swordfish recipe… except we used ahi tuna), plus some vanilla creme brule. Then I spent a day with Nancy. The highlights were getting my hair cut (Nancy is a stylist), watching some movies and meeting one of her cats, Peaches (left). They are apparently very shy, and it was raining and thundering, so they hid under her bed. But Peaches eventually came out and we made friends. I’ve only seen her other cat in pictures. By the way, if you need your hair cut, styled, colored, or anything else – and you are in the Reno area, Nancy is the best. Call Bellissima and ask for her. She’ll make your day simply by smiling at you!

Mark lives out near the Moon Rocks and is an avid motocross rider with plenty of trophies in his career. As you can see in this picture, I geared up and went riding with him! I have my motorcycle license, although I don’t currently own one. I spent many summers puttering around Lake Lahontan on mini-bikes and a small motorcycle. I don’t think I ever wore a helmet back then! We did some four-wheeling until the rain stopped, then rode bikes for a little while, played some darts. Mark is now giving tours around the very special and little known trails in the area. Check it out and reserve a slot! You won’t be disappointed!

I love my extended family dearly, but Mark and Nancy hold a very special place in my heart, and I love them with all that I am!

I’ve been using the App Inventor for Android for a while now. I managed to get in on the private beta, partially on my credentials as an MIT Scratch educator. I’ve taught 3 Scratch classes to kids from elementary to high school. I also follow the App Inventor Google group and came across a few people needing a URL Encoder.

I’d already written a simple URL encoder while testing out a mapping application. It uses the Google Maps staticmap API function to retrieve a map with markers. The markers are created by passing in an address, and although many browsers will accept spaces in URLs, the Image component in App Inventor won’t: you must encode a space either with a plus + character or with the hexadecimal encoding %20.

The newline character “\n” is also encoded, but the routine to test for it is separate from the others as App Inventor doesn’t find the correct location of various characters when you include it.

Here are the blocks for the character codes and their translations, plus some misc variables used in the encode routine. The “chars” block contains $&+,/:;=?@ “<>#%{}|\^~[]’ and the codes block contains 24262B2C2F3A3B3D3F4020223C3E23257B7D7C5C5E7E5B5D60.

Now the URLEncode routine itself is fairly simple. It loops through each character in the provided text and searches for it in the chars and ctrl strings. If it finds it, it calculates the offset position for the code and adds that to the URL. If it doesn’t find it, then it just adds the character from the provided text. The offset position for each character is ((pos-1)*2)+1.

I have a very deliberate way with meetings. Like many Dilbert cartoons, I’ve been in a few meetings and felt fairly useless… like it was a waste of time. Many years ago, I would accept meetings, dial in or show up. Accept the imposition on my calendar.

Now, however, I try to be careful with my time. I’m often an individual contributor on a project: maybe a project manager, supporting innovation practices or development. Therefore I have to prevent all my time from being monopolized by meetings. I often wonder how senior executives do it – the constant meetings, I mean. I discovered that getting on the calendar of a VP can only be accomplished by bugging that VP’s administrative assistant. Their calendars are completely full for weeks to come, and always will be, it seems.

My philosophy on meetings has 3 elements. First, I don’t just accept meeting invites. If I’m optional, I’ll likely tentatively accept it. If the meeting invite doesn’t have an agenda, I’ll likely mark it tentative and email the sender to ask for the agenda. I’ll likely decline unless my active participation is required or else it’s some sort of learning or training in a topic of interest to me.

Second, I am diligent in using the Required/Optional features of an invitation. If I will hold the meeting even if a specific person doesn’t show up, then they are Optional. Period. If I will reschedule a meeting if a person declines the meeting, then they are Required.

Third, there are times when I schedule a training or information meeting of some kind. Those I send to everyone as Required. If it is a meeting with people who report to me, then I expect them to attend unless they are not in the office. If other people are invited and I didn’t list them as optional for some reason, then I expect them to apply the same criteria that I use: come if you want to know/hear what’s going on.

Don’t let meetings get in the way of more important work. Yes, they are necessary, but be deliberate. Would you hold the meeting even if I didn’t show up? If the answer is Yes, then I’m not really required, am I?

An email today got me thinking: can a person be taught to have a certain mindset?

At Intuit, we work to create a culture of innovation. We have leadership classes, innovation catalyst training, workshops on innovation tools, design for delight, unstructured time and idea jam sessions. Oh, and brainstorms a plenty.

It seems that when a culture, even a business culture, yells loudly enough, and often enough, that people begin to think about that topic, even when they aren’t prompted. So we yell loud and often about innovation, and people think about “innovation” in their projects. And they come talk to the innovators and leaders, get guidance, that sort of thing.

After a while, it does seem that a new mindset can begin to emerge. What you need is a good request/response system, and lots of advertising. And, of course, successes you can point out.

I think I’m rambling on a bit here… but there’s a second method: immersion. If you put an innovative person in a leading role in a project, the others are bound to see the mindset in action. Different ways of thinking about a problem will emerge. New tools will be discovered. Paths to success will never be random again: rather each new button or widget will have an impact on the bigger goal.

This is the best way to shift the mindset – model it from a position of authority, and others will see the benefits and begin to emulate it.