Posts by Joel Spolsky

In 2000 I co-founded Fog Creek Software, where we created lots of cool things like the FogBugz bug tracker, Trello, and Glitch. I also worked with Jeff Atwood to create Stack Overflow and served as CEO of Stack Overflow from 2010-2019. Today I serve as the chairman of the board for Stack Overflow, Glitch, and HASH.

2001/08/05

VMWare Rocks

I’ve been using VMWare for configuration testing. This is a program that lets you run multiple virtual “computers” in windows on your desktop. It runs on Linux or Windows NT/2000. Each virtual computer can have any Intel-compatible operating system (Any flavor of Linux, DOS, and all flavors of Windows work fine.) Each virtual computer gets its own IP address, its own hard drive, and access to the CD-ROM and floppy, and acts exactly like a real computer. You decide how much RAM to allocate to your machine.

picture-vmware:

I’ve got a computer set up with a huge hard drive and 512 MB RAM for this purpose. It took all week, but I set up a couple of dozen operating system configurations: everything from Vanilla Windows 98 to Windows NT 4.0 to Windows 2000 to XP. I have entire domains running all on virtual machines; at one point I was running three machines at once: a domain controller, a machine with SQL Server 2000, and another machine with IIS. This allowed me to test really difficult FogBUGZ installation scenarios all on one computer.

The coolest thing is that you can create “undoable hard drives” on your virtual machines. So every time I ran SETUP and it didn’t work, with one click I could wipe out all the changes I had made to the hard drive and go back to a pristine Windows installation. (Testing on pristine computers is essential. Otherwise you may ship an installer which works perfectly on your developers’ computers, because they have all kinds of goodies loaded, but which simply does not work on typical users’ computers).

This is such an excellent product that I think every tester, developer, and product support person should have it. It’s also a great way to try out scary software (like Windows XP, Office XP, or the .NET Beta) without messing up your primary computer. It’s a nice tool for product support: when a user calls up asking for help with a procedure in Windows NT 4.0, you can instantly boot up Windows NT 4.0 in a window and give them exact instructions for what to do. Finally, it’s a nice way to run Linux software under Windows and vice-versa. I highly recommend it.

(I do have one complaint about VMWare… every time you create a virtual hard drive, it’s unpartitioned and unformatted. It took me almost three days to install an NT 4.0 system from scratch, because I had the hardest time figuring out that the NT 4.0 installer requires a FAT 16 formatted hard drive. It would be trivial for VMWare to ship some formatted “hard drives” on their CD-ROM).

Software takes ten years in Russia too.

picture-russian-ten-years:

Hard-assed Bug Fixin’

Software quality, or the lack thereof, is something everybody loves to gripe about. Now that I have my own company I finally decided to do something about it. Over the last two weeks we stopped everything at Fog Creek to ship a new incremental version of FogBUGZ with the goal of eliminating all known bugs (there were about 30).

As a software developer, fixing bugs is a good thing. Right? Isn’t it always a good thing?

No!

Fixing bugs is only important when the value of having the bug fixed exceeds the cost of the fixing it.

These things are hard, but not impossible, to measure. Let me give you an example. Suppose you operate a peanut-butter-and-jelly sandwich factory. Your factory produces 100,000 sandwiches a day. Recently, due to the introduction of some new flavors (garlic peanut butter with spicy Habanero jam), demand for your product has gone through the roof. The factory is operating full-out at 100,000 sandwiches, but the demand is probably closer to 200,000. You just can’t make any more. And each sandwich earns you a profit of 15 cents. So you’re losing $15,000 a day in potential earnings because you don’t have enough capacity.

Building a new factory would cost way too much. You don’t have the capital, and you’re afraid that spicy/garlicky sandwiches are just a fad which will pass, anyway. But you’re still losing that $15,000 a day.

It’s a good thing you hired Jason. Jason is a fourteen year old programmer who hacked into the computers that run the factory, and believes that he has come up with a way to speed up the assembly line by a factor of 2. Something about overclocking that he heard on slashdot. And it seemed to work in a test run.

There’s only one thing stopping you from rolling it out. There’s a teeny tiny wee little bug that causes a sandwich to be mushed once an hour or so. Jason wants to fix the wee bug. He thinks he can fix it in three days. Do you let him fix it, or do you roll out the software in its bug-addled state?

Rolling out the software three days later will cost you $45,000 in lost profits. And it will save you, um, the cost of raw materials for 72 sandwiches. (In either case Jason will get the bug fixed three days later). Well, I don’t know how much sandwiches cost on your planet, but here on Earth, they’re a lot less than $625.

Where was I. Oh yeah. Sometimes it is not worth fixing a bug. Here’s another bug that’s not worth fixing: if you have a bug that totally crashes your program when you open gigantic files, but it only happens to your single user who has OS/2 and who, for all you know, doesn’t even use large files. Well, don’t fix it. Worse things have happened at sea. Similarly I’ve generally given up caring about people with 16 color screens or people running off-the-shelf Windows 95 with no upgrades in 7 years. People like that don’t spend much money on packaged software products. Trust me.

But mostly, it’s worth fixing bugs. Even if they are “harmless” bugs, they may reduce the reputation of your company and your product, which, in the long run, will have a significant impact on your earnings. It’s hard to overcome the reputation of having a buggy product. When you do want to do that .01 release, here are some ideas for finding and fixing the right bugs: the ones that it is economically worth fixing.

Step One: Make Sure You Find Out About The Bugs.

In the case of FogBUGZ, we have two ways of doing that. First, we trap all bugs on our free demo server, capture as much information as we can, and email the whole thing to the development team. That found an awful lot of bugs, which was very cool. For example, we discovered a bunch of people who didn’t enter dates where they were supposed to in the “Fix For” screen. We didn’t even have an error message in that case, we just “crashed” (which, in a web app, just means you got an ugly IIS error instead of what you expected). Oops.

When I worked at Juno, we had an even cooler system in place to collect bugs “from the field” automatically. We installed a handler using TOOLHELP.DLL so that every time Juno crashed, it stayed alive just long enough to dump the stack into a log file before going to its grave. The next time the program connected to the Internet to send mail, it uploaded the log file. During betas, we gathered these log files, collated all the crashes, and entered them into the bug tracking database. This found literally hundreds of crashing bugs. When you have a million users, it is amazing what will crash, often because of severe low memory conditions or severely crappy computers (can you spell Packard Bell?) You could have code like this:

int foo( object& r )
{
    r.Blah();
    return 1;
}

and you would get crashes there because the r reference was NULL, even though that’s completely impossible, there’s no such thing as a NULL reference, C++ guarantees it, and you don’t have to believe me but when you wait long enough and have millions of users and religiously collect their stack dumps, you will find crashes in places like that and you won’t believe your eyes. (And you won’t fix them. Cosmic rays, man. Get a new computer and this time don’t install every cool shareware taskbar lint gizmo you find. Sheesh.)

The other thing we do is consider each and every tech support call to be evidence of a bug. When we take the call, we try to figure out what we could have done to eliminate it. For example, the old FogBUGZ Setup used to assume that FogBUGZ would run under the anonymous Internet user account. That was a good assumption 95% of the time, and a bad assumption 5% of the time, but every one of those 5% cases ended up in a call to our support line. So we modified Setup to prompt for an account.

Step Two: Make Sure You Get Economic Feedback

You may not be able to figure out exactly how much it’s worth to fix each bug, but there’s something you can do: charge the “cost” of tech support back to the business unit. In the early nineties there was a financial reorganization at Microsoft under which each product unit was charged for the full cost of all tech support calls. So the product units started insisting that PSS (Microsoft’s tech support) provide lists of Top Ten Bugs regularly. When the development team concentrated on those, product support costs plummeted.

This is a bit in contradiction with the new trend of letting the tech support department pay for its own operation, something that most large companies do. At Juno tech support was expected to break even by charging people for tech support. By moving the economic burden of bugs onto the users themselves, you lose what limited ability you might have had to detect the damage they were causing. (Instead you get irate users who resent having to pay for your bug, who tell their friends, and you can’t even measure how much that costs you. To be fair to Juno, the product itself was free, so stop yer bitchin.)

One way of resolving the two is to not charge the user when the support call was caused by a bug in your own product. Microsoft does this, and it’s quite nice, and I’ve never paid for a call to Microsoft 🙂 Instead, charge the $245 or whatever one developer incident costs these days back to the product unit. That blows away their profit completely for the product they sold you (several times over), and creates exactly the right economic incentives. Which reminds me of one reason DOS games were a terrible business… to get them to look good and run fast, you usually  needed strange video drivers, and a single tech support call about the video drivers would blow away the profit you could make from 20 copies of your product, assuming Egghead and Ingram and the ad on MTV hadn’t already guzzled away all your earnings.

Step Three: Figure Out What It’s Worth To You To Fix Them All.

At Fog Creek Software, well, we’re a tiny company (except in our own minds), and the development team just takes the tech support calls. The cost was running about 1 hour per day, which, based on our consulting rates, is somewhere around $75000 a year. We were pretty confident that we could get that down to 15 minutes a day by fixing all known bugs.

Using very sloppy numbers, here, that means that the net present value of the savings would be about $150,000. That justifies 62 days of work: if you can do it in less than 62 person-days, it’s worth doing.

Using the handy estimation feature built into FogBUGZ, we calculated that it would take 20 person-days (two people two weeks) to fix everything – that’s $48,000 “spent” for a return of $150,000, which is a great return on investment just on the basis of the tech support savings. (Observe that you could substitute the cost of programmer’s salaries and overhead instead of our consulting rate and get the same 3:1 result, since it cancels out).

I haven’t even begun to count the value from having a better product, but I can start doing that, too. We had 55 crashes on the demo server during the month of July with the old code, representing 17 distinct users. You have to imagine that at least one of those people decided not to buy FogBUGZ because they thought it was buggy when they ran the demo (although I don’t have real statistics for that.) In any case the lost sales was probably costing us somewhere between $7,000 and $100,000 in present value. (If you were serious enough, it wouldn’t be too hard to get a real number).

Next question. Can you charge more for a less buggy product? That would add a whole bunch of value to debugging. I suspect that at the extremes, bug count does affect price, but I am hard pressed to think of an example from the world of packaged software where this has been the case.

Please Don’t Beat Me Up!

Inevitably people read essays like this and come to silly conclusions, like, Joel doesn’t think you should fix bugs. In fact I think that for most of the kinds of bugs that most people fix, there’s a clear return on investment. But there may be an even higher monetary value to doing something other than fixing every last bug. If you have to decide between fixing the bug for OS/2 guy and adding a new feature that will sell 20,000 copies of your software to General Electric, well, sorry, OS/2 guy. And if you’re dumb enough to think that it’s still more important to fix OS/2 than to add the GE feature, maybe your competitors won’t be and you’ll be out of business.

With all that said, I’m optimistic at heart, and I believe that there is a lot of hidden value to producing very high quality products that is not very easy to capture. Your employees will be prouder. Fewer of your customers will send you back your CD in the mail after microwaving it and chopping it to bits with an ax. So I tend to err on the side of quality (indeed, we fixed every known bug in FogBUGZ, not just the big bang ones) and take pride in that, and feel confident, by the complete elimination of errors from the demo server, that we have a rock-solid product.

2001/07/31

FogBUGZ 2.03 is shipping. This is strictly a bug-fix release in which we have fixed all known bugs.

(If you’re a FogBUGZ customer and you didn’t get the upgrade notification by email, we probably have the wrong email for you on file. Email me at work and we’ll sort it out.)

Read all about our bug-fixing adventures in my latest article, Hard-assed Bug Fixin’.

Good Software Takes Ten Years. Get Used To it.

Have a look at this little chart:

picture-lotus-notes:
[Source: Iris Associates]

This is a chart showing the number of installed seats of the Lotus Notes workgroup software, from the time it was introduced in 1989 through 2000. In fact when Notes 1.0 finally shipped it had been under development for five years. Notice just how dang long it took before Notes was really good enough that people started buying it. Indeed, from the first line of code written in 1984 until the hockey-stick part of the curve where things really started to turn up, about 11 years passed. During this time Ray Ozzie and his crew weren’t drinking piña coladas in St Barts. They were writing code.

The reason I’m telling you this story is that it’s not unusual for a serious software application. The Oracle RDBMS has been around for 22 years now. Windows NT development started 12 years ago. Microsoft Word is positively long in the tooth; I remember seeing Word 1.0 for DOS in high school (that dates me, doesn’t it? It was 1983.)

To experienced software people, none of this is very surprising. You write the first version of your product, a few people use it, they might like it, but there are too many obvious missing features, performance problems, whatever, so a year later, you’ve got version 2.0. Everybody argues about which features are going to go into 2.0, 3.0, 4.0, because there are so many important things to do. I remember from the Excel days how many things we had that we just had to do. Pivot Tables. 3-D spreadsheets. VBA. Data access. When you finally shipped a new version to the waiting public, people fell all over themselves to buy it. Remember Windows 3.1? And it positively, absolutely needed long file names, it needed memory protection, it needed plug and play, it needed a zillion important things that we can’t imagine living without, but there was no time, so those features had to wait for Windows 95.

But that’s just the first ten years. After that, nobody can think of a single feature that they really need. Is there anything you need that Excel 2000 or Windows 2000 doesn’t already do? With all due respect to my friends on the Office team, I can’t help but feel that there hasn’t been a useful new feature in Office since about 1995. Many of the so-called “features” added since then, like the reviled ex-paperclip and auto-document-mangling, are just annoyances and O’Reilly is doing a nice business selling books telling you how to turn them off.

So, it takes a long time to write a good program, but when it’s done, it’s done. Oh sure, you can crank out a new version every year or two, trying to get the upgrade revenues, but eventually people will ask: “why fix what ain’t broken?”

picture-fruit:

Failure to understand the ten-year rule leads to crucial business mistakes.

Mistake number 1. The Get Big Fast syndrome. This fallacy of the Internet bubble has already been thoroughly discredited elsewhere, so I won’t flog it too much. But an important observation is that the bubble companies that were trying to create software (as opposed to pet food shops) just didn’t have enough time for their software to get good. My favorite example is desktop.com, which had the beginnings of something that would have been great if they had worked on it for 10 years. But the build-to-flip mentality, the huge overstaffing and overspending of the company, and the need to raise VC every ten minutes made it impossible to develop the software over 10 years. And the 1.0 version, like everything, was really morbidly awful, and nobody could imagine using it. But desktop.com 8.0 might have been seriously cool. We’ll never know.

Mistake number 2. the Overhype syndrome. When you release 1.0, you might want to actually keep it kind of quiet. Let the early adopters find it. If you market it and promote it too heavily, when people see what you’ve actually done, they will be underwhelmed. Desktop.com is an example of this, so is Marimba, and Groove: they had so much hype on day one that people stopped in and actually looked at their 1.0 release, trying to see what all the excitement was about, but like most 1.0 products, it was about as exciting as watching grass dry. So now there are a million people running around who haven’t looked at Marimba since 1996, and who think it’s still a dorky list box that downloads Java applets that was thrown together in about 4 months.

Keeping 1.0 quiet means you have to be able to break even with fewer sales. And that means you need lower costs, which means fewer employees, which, in the early days of software development, is actually a really great idea, because if you can only afford 1 programmer at the beginning, the architecture is likely to be reasonably consistent and intelligent, instead of a big mishmash with dozens of conflicting ideas from hundreds of programmers that needs to be rewritten from scratch (like Netscape, according to the defenders of the decision to throw away all the source code and start over).

Mistake number 3. Believing in Internet Time. Around 1996, the New York Times first noticed that new Netscape web browser releases were coming out every six months or so, much faster than the usual 2 year upgrade cycle people were used to from companies like Microsoft. This led to the myth that there was something called “Internet time” in which “business moved faster.” Which would be nice, but it wasn’t true. Software was not getting created any faster, it was just getting released more often. And in the early stages of a new software product, there are so many important things to add that you can do releases every six months and still add a bunch of great features that people Gotta Have. So you do it. But you’re not writing software any faster than you did before. (I will give the Internet Explorer team credit. With IE versions 3.0 and 4.0 they probably created software about ten times faster than the industry norm. This had nothing to do with the Internet and everything to do with the fact that they had a fantastic, war-hardened team that benefited from 15 years of collective experience creating commercial software at Microsoft.)

Mistake number 4. Running out of upgrade revenues when your software is done. A bit of industry lore: in the early days (late 1980s), the PC industry was growing so fast that almost all software was sold to first time users. Microsoft generally charged about $30 for an upgrade to their $500 software packages until somebody noticed that the growth from new users was running out, and too many copies were being bought as upgrades to justify the low price. Which got us to where we are today, with upgrades generally costing 50%-60% of the price of the full version and making up the majority of the sales. Now the trouble comes when you can’t think of any new features, so you put in the paperclip, and then you take out the paperclip, and you try to charge people both times, and they aren’t falling for it. That’s when you start to wish that you had charged people for one year licenses, so you can make your product a subscription and have permission to keep taking their money even when you haven’t added any new features. It’s a neat accounting trick: if you sell a software package for $100, Wall Street will value that at $100. But if you can sell a one year license for $30, then you can claim that you’re going to get recurring revenue of $30 for the next, say, 10 years, which is worth $200 to Wall Street. Tada! Stock price doubles! (Incidentally, that’s how SAS charges for their software. They get something like 97% renewals every year.)

The trouble is that with packaged software like Microsoft’s, customers won’t fall for it. Microsoft has been trying to get their customers to accept subscription-based software since the early 90’s, and they get massive pushback from their customers every single time. Once people got used to the idea that you “own” the software that you bought, and you don’t have to upgrade if you don’t want the new features, that can be a big problem for the software company which is trying to sell a product that is already feature complete.

Mistake number 5. The “We’ll Ship It When It’s Ready” syndrome. Which reminds me. What the hell is going on with Mozilla? I made fun of them more than a year ago because three years had passed and the damn thing was still not out the door. There’s a frequently-obsolete chart on their web site which purports to show that they now think they will ship in Q4 2001. Since they don’t actually have anything like a schedule based on estimates, I’m not sure why they think this. Ah, such is the state of software development in Internet Time Land.

But I’m getting off topic. Yes, software takes 10 years to write, and no, there is no possible way a business can survive if you don’t ship anything for 10 years. By the time you discount that revenue stream from 10 years in the future to today, you get bupkis, especially since business analysts like to pretend that everything past 5 years is just “residual value” when they make their fabricated, fictitious spreadsheets that convince them that investing in sock puppets at a $100,000,000 valuation is a pretty good idea.

Anyway, getting good software over the course of 10 years assumes that for at least 8 of those years, you’re getting good feedback from your customers, and good innovations from your competitors that you can copy, and good ideas from all the people that come to work for you because they believe that your version 1.0 is promising. You have to release early, incomplete versions — but don’t overhype them or advertise them on the Super Bowl, because they’re just not that good, no matter how smart you are.

Mistake number 6. Too-frequent upgrades (a.k.a. the Corel Syndrome). At the beginning, when you’re adding new features and you don’t have a lot of existing customers, you’ll be able to release a new version every 6 months or so, and people will love you for the new features. After four or five releases like that, you have to slow down, or your existing customers will stop upgrading. They’ll skip releases because they don’t want the pain or expense of upgrading. Once they skip a release, they’ll start to convince themselves that, hey, they don’t always need the latest and greatest. I used Corel PhotoPaint 6.0 for 5 years. Yes, I know, it had all kinds of off-by-one bugs, but I knew all the off-by-one bugs and compensated by always dragging the selection one pixel to the right of where I thought it should be.

picture-roosevelt:

Make a ten year plan. Make sure you can survive for 10 years, because the software products that bring in a billion dollars a year all took that long. Don’t get too hung up on your version 1 and don’t think, for a minute, that you have any hope of reaching large markets with your first version. Good software, like wine, takes time.

2001/06/27

Vacation

I’m going on vacation, back July 17th. Emails and phone calls will be responded to slowly, if at all.

Corporate
Gobbledygook

When I go to a company’s web site and it says that their product “provides Internet-scale event routing solutions that seamlessly integrate information among Web services, applications and users,” I want to barf. More specifically, I have no idea whatsoever why I should care, so I leave, and I don’t come back.

Did you know that KnowNow is “enabling the real-time enterprise to fully leverage the Internet to drive revenue, reduce costs and enhance business relationships”?

What does that mean?! Who cares? Who are the morons who write this stuff? Tell me what it does! I’m a software designer! I’m your target audience, and I can’t make head or tail of it!

(KnowNow is not the only company that has no ability to communicate using their home page. GrandCentral is equally inscrutable. “Grand Central provides a Web Services Network that enables companies to connect, integrate and manage their business processes with those of their partners and customers.” Good for you. I already connect, integrate, and manage with my partners, thank you very much. If you can make it as far as the white paper, you’ll see sentences like “At a feature level, the Grand Central Network provides four main categories of functionality.” I think that means “Grand Central has four features.” Maybe somebody thought that it didn’t sound cool enough that way.)

I have a feeling that both of these products are interesting and useful. But listen, bubbie: if I can’t understand it, and I’ve been writing software for twenty years, then I don’t know who will. Rohit, Halsey: you’re ruining your products because you can’t explain in two sentences what they do in a way which would be meaningful to the people who are going to make the purchase decision.

Software Testing

Eugene Vinsky has been hard at work on a web site with everything you ever wanted to know about software testing (and then some!) Check it out at SQATester.com.

SmartTags

With all the uproar over SmartTags it’s hard to believe Microsoft is actually going to ship with them, but I’ve disabled them on most Fog Creek web sites just to make sure.

2001/06/03

If you’ve been working in the software industry, you’ve probably seen zillions of good new product ideas quashed by some executive who asks, “what if Microsoft enters this space and makes all the profits go away?” More…

2001/06/24

I first worked with Adam Bosworth when he was designing Microsoft Access, and I was designing the application programmability strategy that became VBA. He is an incredibly fast thinker and incessantly right. Unlike most fast-thinkers who are always right, he also knows how to listen, and if he discovers he was wrong (as he did within one hour in 1992 when I convinced him that macro languages needed to be object-oriented), he’ll change his mind without emotional attachment to his old ideas. Adam set a better example for the role of Program Manager than anyone I’d ever met.

Adam has designed and shipped more world-shaping software than anyone else I can think of. Borland’s old Reflex relational database. Microsoft Access. ODBC. Internet Explorer’s “Trident” editor and document object model. Soap. XML. Now a new company called Crossgain is in the works.

And I’m not exaggerating when I say that one of the goals of my own company, Fog Creek Software, is to create a place where we stood a snowflake’s chance in hell of getting superstars like Adam Bosworth to work. It’s an ambitious goal and it’s going to take a few years, but I’m confident we’ll do it.

In the meantime, anybody working in the software industry needs to listen to Adam, attentively. When he talks about n-tier architectures, read every word he says. If you can’t follow it, ask someone to explain it to you. If he drops an acronym like WSDL that you don’t understand, study it so you don’t miss his points. Understand why all the six hundred demos you’ve seen of a SOAP service that returns stock quotes are unrealistically simplistic and don’t scale up to the real world. After you read that article, think about how the fact that it’s almost impossible to display a progress indicator in a web browser while the server does some 2 minute task came as close to killing the entire online travel-agency industry as Nikita Khrushchev came to destroying the world by putting missiles in Cuba.

As usual Adam is incredibly right, and he’s high-bandwidth, and if you can’t follow what he’s saying, don’t apply for a job at Fog Creek!

Google Searches Images

… and, typical of Google, it actually works.

Michael E. Porter’s Competitive Strategy

As research for the next book I’m supposed to be writing, I’ve been reading Michael E. Porter‘s book Competitive Strategy. It’s a brilliant book and it is considered the standard text on the subject, read by freshly hatched management consultants worldwide. But it’s drier than school cafeteria chicken, and every time I read two pages, I have to take a nap.

It’s worth it, so I’ve been taking a lot of naps lately. I’m only on page 57. 

One thing the book emphasizes is that you should analyze your competition and try to guess how they will react to your move. Here’s one question to ask yourself:

Are there any regulatory, antitrust, or other governmental or social constraints on the behavior of the firm that will affect such things as its reaction to moves of a smaller competitor or the probability that it will try to gain a larger market share? Has the competitor had any antitrust problems in the past? … Has it entered into any consent decrees? Such restraints or even just a history may sensitize a firm so that it foregoes reacting to strategic events unless some essential element [of] its business is threatened. The firm attempting to capture a small share of a market from an industry leader can enjoy some protection as a result of such constraints, for example. [page 53]

Of course, antitrust reminds me of Microsoft. Microsoft has always acted, against all credibility, as if it didn’t do anything remotely wrong — pundits ask “how can Microsoft executives be the only ones in the world who are so delusional about the legality their anticompetitive behavior?” Microsoft’s strategy has been to proclaim their innocence repeatedly; to continue to compete aggressively in all areas, and to merrily do new things, such as requiring Passport accounts for everything, which are bound to get them into anti-trust trouble yet again. Why?

If you’ve been working in the software industry, you’ve probably seen zillions of good new product ideas quashed by some executive who asks, “what if Microsoft enters this space and makes all the profits go away?” Lemming VCs generally have a policy of automatically saying “no” to any investment that could be seen as competing with Microsoft or which might prod Microsoft to create a new product in response. This herd fear of Microsoft in the software industry is enormously beneficial to Bill … lots of potential competition never gets off the ground because of fear that Microsoft will squash it.

This benefit would be lost if Microsoft acted even slightly concerned about the Justice Department. Put 2 and 2 together: if Microsoft were to act contrite and concede even the slightest point in the Justice Department’s anti-trust case, hundreds of independent software companies and VCs would see this as their opportunity to enter Microsoft’s markets and try to get a small piece of market share, knowing that Microsoft would be sensitized against appearing to be monopolistic and therefore might allow smaller competitors to survive. Bill Gates remembers working with IBM on OS/2 in the late 1980s, when it was completely impossible to get anything accomplished at IBM. Microsoft has an institutional memory of how ineffectual that company was against competitors: everything IBM did had to be reviewed by internal consent decree committees to make sure it wasn’t monopolistic, and it was no problem for young companies (like, um, Microsoft) to take big bites out of IBM’s ankles without provoking a reaction.

Seen in that context, Microsoft’s squashing of Netscape could well have been intended as a stern warning across the bow of Kleiner Perkins to stay the hell out of their garden; as much as Marc Andreessen’s childish threats to replace Windows was threatening, it was even more threatening that John Doerr seemed to have lost the fear of Microsoft that is vital to Microsoft’s dominance of the software industry.

It only makes sense to read Porter after you’ve spent a few years reading the business press; every sentence will remind you of dozens of examples you’ve seen across other industries and the whole thing will make sense. That’s the other reason this book takes me so long to read (besides the obligatory naps caused by it’s soporific nature): every sentence makes me look up at the ceiling, say “Ah-ha!” and rethink some aspect of how the software industry works in a new light.