Friday, June 08, 2007

Writing can save your teeth!

I was going on a writing-fest today. This was only half intentional. Here's what happened...

I was going to a whole friggen big list of sites to see what they were about and how their user communities behaved and what features they had that we want to steal emulate and I found all these cool topics that I wanted to chime in on.

But the minute that I wanted to dash off a 5 minute note I started thinking about the topic, and that lead me to Wikipedia to research the topic, and before I know it about 2 hours has gone by and I've got about 6 paragraphs of research with friggen footnotes and crap all ready to post to some forum that I've only ever been to once and will probably never visit again except that now I'm getting email responding to my post saying, "That's exactly what I think" or "You're full of crap HotKatie80".

... um... sorry, that was a different forum.

Anyway, what I started to notice was that as I wrote the posts my ideas kept changing. I'd write, think about what I wrote, revise what I wrote, read what I wrote, and that would change what I thought, and...

Yeah... you can see where this is headed.

So now I'm thinking (as I'm writing this) that this might be a really good explanation for why spec reviews are so important.

What!?!?!

Okay, bear with me...

The thing is that a written spec can't "wave its hands" at a problem. You really have to think through how the thing will work and make it all simultaneously consistent. Since a written spec is random access (in a way that a conversation is not) you can compare one section to another easily to find "bugs". So the act of writing the spec is the important thing. And it can't be just for yourself, but for public consumption (or as public as your spec can be which is probably a spec review).

Talk is a high bandwidth but essentially serial access connection with another person's brain. But the written word can be jumped around in really at random. This allows you to put facts side-by-side easily and compare them to see what likely outcomes or problems might arise.

For example, when I was a kid if I had written down that I was going to take my friend's soapbox racer to the top of our (very) steep hill and ride down to stop in the cul-de-sac with no brakes and no plan for how to stop at the end I can tell you that it would have seemed just as dumb as it does now when I stare at it in print.

That's because I can put "steep", "no brakes", "stop", and "cul-de-sac" all side-by-side in a way that just wasn't possible when we talked over this "plan" for the half-hour it took Jon & Dave & my brother & I to put it together and push the soapbox racer sans brakes to the top of the (very) steep hill.

Hell, we even had a "spec review" before we went forward.

Bruce:
"Okay, I'll jump in and you push me off and then I'll drive down to the bottom of the hill and stop in the cul-de-sac."

Dave:
"Sounds good."

Jon:
"Go for it."

My Brother:
"You're an idiot... er... Yeah, go for it!"


If only I'd written it down first.

I might not have done it (okay, it's still a toss up).

I might still have most of my front tooth.

Wednesday, May 30, 2007

The Joy of Patent Work

I've been trying to get the patent applications in order for the stuff we've been working on at Team46 for the past couple of months. Oh the joy of government legalese!

The US Patent & Trademark Office says:
------------------
“The USPTO will accept color drawings in utility patent applications and statutory invention registrations only after granting a petition explaining why the color drawings are necessary. Any such petition must include the following:

the appropriate fee set forth in 37 CFR §1.17(h)

three sets of color drawings; and

the following language as the first paragraph in that portion of the specification relating to the BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWING. If the language is not in the specification, an amendment to insert the language must accompany the petition.”
------------------

Blaarghh!!! Please, kill me now.

Oh yeah… and THIS gem…

------------------
“The number of each sheet should be shown by two Arabic numerals placed on either side of an oblique line, with the first being the sheet number and the second being the total number of sheets of drawings, with no other marking.”
------------------

Oh, is that a fancy way of saying number sheets like 2 of 5 in this way; 2/5 ?

An oblique line!!?!? Grrr….

So if you've been tasked with taking care of IP stuff for your start-up let me give you some handy tips that I've come to so far...

Hire a lawyer
No, really. Time is one of your most precious commodities. Don't waste it on crap like trying to figure out the fancy government talk above.

Really prepare to talk to your lawyer
I like to write down all of my ideas, no matter how wacky or obvious, and get them in one big list. I write a short description (like two sentences) so I have a good idea of what I'm talking about. I also include diagrams or screenshots if I have them. Then I print out the list of ideas (with the numbers) as a table of contents and the ideas with their short descriptions with one idea per page. This way I have plenty of whitespace on my pages to take notes on what the lawyer says.

Types and Costs of Filings
There are two types of patent filings; Provisional (PF) and Utility (UF). Utility filings are what people typically think of when they think “patent”.

Provisional

Utility

Cheaper ($500-$5k) More expensive (see below)
12 mo. then abandon or file utility 20 yrs from filing or 17 yrs from issue
Establish date for “prior art” Establish exclusivity protection
Cannot be “tweaked” much before U.F. Can be tweaked or amended significantly
Not published Published

Figure 1 – Comparison of Provisional and Utility Filings

For Utility filings the costs based upon size and complexity of filing are t-shirt sized like this:

Size & Complexity

Initial Filing

2-3 Years Later

Low $12k +- 2k $12k
Medium $15k +- 2k $15k
High $18k +- 2k $18k



Gov.t Fees $1.5k - $2.5k

Figure 2 – Estimates of Costs for Utility Filings

One advantage to a Utility Filing is that it forces you to go through the whole process and see what needs to be shored up in any Provisional Filings you want to file.

It may also be worth your while to read through a few actual patents. Once you get past the language you can start to see how they are organized and what they are looking for in terms of specificity and organization. The US Patent Office has a pretty usable patent search site that covers both applications and grated patents.

That's about all I can think of right now. My eyeballs are about to fall out. Time to go home and drink myself to sleep. Thanks Patent Office.

Monday, May 07, 2007

To bug or not to bug

That is the question.

I used to be a software tester. In a way that's like saying, "I used to be an alcoholic." Just because you've moved on doesn't mean it stops defining a lot of your behavior. You see a bug and... well... it bugs you. You want it fixed.

So you see some trivial but vaguely troubling thing on a site and because your fingers can type a bug report on their own without your actually having to tell them to, bada-bing; the site owner gets a little nasty bomb in their inbox.

You're trying to help. You "just want to help them make their site better." But what you're actually doing is sucking the gumption right out of them. It isn't helping, it's hurting.

I did this recently.

The nice folks at Construx (who I think are quite good and who I rather like personally as well as professionally) put up a forums and blogs site for their training & consulting firm.

Now in my defense I wasn't trying to do something completely insane. I created a account, logged in, and could not see the forums or the blogs. This struck me as something they'd like to know about.

And here's where I went wrong. I wrote a bug report...


Sent From: brucephenry
Subject: Bug: If not logged in email form blanks after login
__________________________________

Repro:

  1. goto http://blogs.construx.com/members/EarlBCx.aspx
  2. Login
  3. Open another tab in your browser
  4. Click Send Earl an email link on the right
  5. In other window logout
  6. Type your message to Earl and hit [Send Email] button

Result:

Prompt to login followed by a blank email form.

Expected:

Prompt to login followed by "Thanks your email was sent" page (presumably along with sending the email as typed).

Bruce P. Henry





Why does the bug report have nothing at all to do with not being able to see the forums?

Well, I tried to send that one but as you can see above, if you're not logged in, you can't send email.

So why was I logged out?

Because if I was logged in I couldn't see the forums and so I also couldn't get the link in the forums to send mail.

As Earl says, "Arrrgg!"

This doesn't make me right. It just makes me a dork.

Earl is right (and he calls me on it). It really is a selfish thing to send this kind of crap.

He didn't ask me to test his site. He asked me to use it. To read it. To come play in it. He was my host and I threw rocks through his windows.

I was a poor guest. But it didn't have to be like this.

I just as easily could have sent a conversational, friendly email that said things like, "Hi! How's it going? It's really great that you guys have these blogs and forums and I'm looking forward to reading them." All of which is absolutely true.

"Hey I've noticed that I'm having trouble reading the forums and blogs when I'm signed in. This makes it hard for me to write comments on your blogs or post to the forums. The site looks great though and I'm really happy to see you folks building more of a community around your best practices stuff!"

That's all it would have taken. Just a little conversational civility.

I'm such a dork.

Thursday, March 29, 2007

Essential Interface Complexity

After reading a very interesting and insightful post on the Subtraction Blog I got to thinking about what it means for an interface to be "as simple as possible".

The kernel of the post is that for most software if you are going to offend/annoy anyone, you want it to be the experts. This is because for most software the experience level of users is distributed along a bell curve. And that mean that the vast preponderance of users live smack dab in the middle (or at least in the suburbs of the middle).

Now, while true for some software, I think it is far from true for all software.

It is obviously true for the majority of consumer software (and products in general). I want my tools/products to do one thing and to do it clearly and well. Less really is more in this kind of simple "I want my music to play" or "I want that text to be red" kind of tool.

However, there is another kind of tool. That's a tool for dealing with very complex problems. There is an entire class of problems sometimes called "wicked" problems (ref. http://en.wikipedia.org/wiki/Wicked_problems) that don't really have a simple solution. In this case it may be best to think of the problem (and the UI) as having no beginner/intermediate users.

There are numerous tools that take this approach when the problem is hard (or there is a negligible number of non-expert users).

  • Mathematica
  • Call Center Tools
  • Development Tools
  • etc

It is perfectly fine to want an interface as simple as possible. But it still needs to be complex enough to capture the essential complexity of the problem you're trying to solve. And the problem(s) that these tools are trying to solve are either extremely complex or the novices get "learned up" real fast.


The Eclipse IDE is a good example of a product geared directly to an expert end user. There is little done to hide the complexity of the tool from the user. In fact, the tool allows an enormous amount of complexity (compare it to an iPod) in order to perform all of the tasks that are essential to the product.

But in a sense it is also about as simple as you could possibly make it without losing the essence of the problem that they are trying to solve with the IDE. On the other side of this is booking some travel on a site like Expedia. Here the actual moving parts behind making a booking are incredibly complex (I used to work for them and let me tell you, airlines and hotels do not make it easy on them). But what the user wants to do has little essential complexity.

"I want to go to Hawaii for 5 days next month and stay at the Hyatt on Maui" is pretty friggen simple.

That's why a "give me my crap and here's some money wizard works so well for sites like Expedia and Amazon. The user really wants something conceptually simple. It is also why a "write Office 2011" wizard would not work so well.

Easy? Yes.

Simple? Yes.

But it lacks something essential.

Saturday, January 06, 2007

Organizational Breathing


So, I find myself sitting in my office watching the sun set over Seattle and thinking about organizations and how they change over time. It's interesting because I've now been around the proverbial block enough that I can start to see some patterns emerging.

Orgs need to go through a consolidate/diversify cycle to open up gaps that allow the high performing individuals to move up in the organization.

Static organizations tend towards hierarchical, seniority based promotion. This drives out some of your best performers.

It is natural from time to time to need to centralize or decentralize the functions in an organization. There are certain things that are easier to do when you have centralized a function (e.g. standardize process, share best practices, exchange tribal knowledge) and other things that are easier to do when you have decentralized a function (e.g. experiment with new methods, adopt new processes, eliminate old processes). Each of these is valuable in its own time. There's never a "perfect" organization just as there's never a perfect organism. Both organizations and organisms need to change, adapt, grow. At best they are dynamic, living things that need the freedom to change, but also the evolutionary pressure to cull the weak from the herd. That's where organizational breathing comes in.

I thought about this for quite a while when I worked at Expedia. I would often have people in my organization ask me what we were doing with the overall structure of the software development team and what would be next. They wanted to know if we would be reducing the number of independent project teams (centralizing functions like testing for example) or if we would be allowing specific business functions to "spin-off internally" (like making our corporate travel team a separate organization). Which one is right? Where are we going? Didn't we just finish centralizing (or decentralizing) that function? Can't management make up their damn minds?

Didn't you just finish inhaling (or exhaling)? Can't you make up your damn mind and just stick with one?

If we make the organization completely static then let's see what happens.

At first everything seems sane. Just business as usual. Good people get promoted. Bad people get fired (ideally). But occasionally someone makes a mistake. And then the proverbial wild rumpus starts.

Because now you have a manager or a director (or worse yet a VP) that's in over their head. They aren't doing a good job and it is affecting everyone below them. Additionally as that person's manager it may be hard to admit or see that they are in trouble. Heck, they may in fact be very gifted at "managing up" and effectively protected by that skill.

Now because the organization is static, there's no real way to move them "laterally" into a less sensitive position unless you just happen to have one open. In fact you've likely got no other option than to give them the boot because they just are not a good fit for the current position. And this is important, even if they are an otherwise excellent asset for the company overall.

"You have failed me for the final time director. Hssss. Whooosh. Hssss. Whooosh..."

That hissing and whooshing may be the breathing of an upper management despot, or it may be the talent escaping from your company.

And what of the otherwise excellent people who get stuck under great managers?

"Now wait a minute." you say. "What's so bad about being under an excellent manager?"

"Nothing at all." I say. "Provided you don't want to move up in the organization."

Ideally excellent managers tend to bring up excellent employees. So you get a bunch of excellent people reporting to your excellent manager. But in a static organization the excellent people below excellent managers end up fighting among themselves for the one spot (since we're certainly not going to reshuffle the whole org once a year or so) that your excellent manager is occupying. And then in the end you get a bunch of excellent folks leaving because of "politics" when it was really just that the game was rigged for exactly this outcome from the start.

Your excellent manager may end up leaving too since she may get sick of being undermined by the otherwise excellent people she's been training.

Sigh...

So breathe damn it!

Move people around.

Breathe in. Centralize functions (like DBAs or Testing or Program Management) when you want to spread best practices and when you want to do just a couple of LARGE projects. Or when those functions are just getting started in your company (like formal project management).

Breathe out. Scatter people into little pods of developers, testers, PMs, project managers, etc when you want to focus on a specific area of your product (like hotel search results, or better UI for selling cruises).

And each time you do it, just like breathing, go "out with the bad and in with the good." You'll be okay as long as you don't stop doing it.