Dennis Forbes on Pragmatic Software Development
Subscribe to RSS
 
Thursday, February 22 2007

In the pursuit of home improvement I've had to remove and reinstall several toilets over the past year, sometimes redoing the same toilet more than once due to mistakes made on the first outing: all of the preparation in the world sometimes isn't enough if you haven't practically experienced a task before.

I've gotten to enjoy the removal and installation of wax rings, the wonderful varieties of flanges, and the unfortunate results of using too thin of a wax ring when the newly installed flooring raise the toilet's height just a little too far.

Sure I could pay someone to do this, but sometimes I enjoy, err, getting my hands dirty and learning these things myself.

The thing I marvel at is how terribly hackish the interface between toilet and sewage system really is -- you have to align a very heavy toilet perfectly over two held-up-only-by-good-intentions bolts, often back-breakingly leaning over in very tight confines while setting it down just perfectly on the bolts; bolts that are barely contained by a flange that is the end piece of some fixed plumbing, meaning that if you overtighten then you're breaking a pipe that's a massive pain to repair.

It's close to impossible to gauge the difference between not tight enough and too tight with these sorts of things, but it's a costly mistake if you go too far one way or the other (too tight and you have a busted flange or toilet base, but if it's too loose you could have movement that breaks the seal, which causes floor warpage, which breaks the seal more, which causes more warpage, which pushes the unit up breaking the flange): Sort of like the oil change technicians who stripped the oil plug and didn't bother telling me until it popped off, creating an environmental disaster in my driveway, or the auto mechanics that over-cranked the spark plug, stripping the aluminum head.

Of course the toilet interface demonstratably works, given that there are billions of non-leaking, non-broken facilities in operation right now, but technically it is, in my opinion, a complete hackjob of an interface.

In many ways it's like HTML and browsers that will happily adapt to many transgressions of the already loose spec.

Our world has endless numbers of these "there has to be a better way" designs, but because of low expectations, the inertia of the status quo, lots of workarounds, and the training and experience of those who have to deal with it, it's fine.

I bring this up because software is endlessly compared to other disciplines, usually with the software industry cast in a poor light. 

"Why can't we build software like we build bridges?", we endlessly hear.

People say this because they have no idea how hacked out (and often over-engineered and costly -- have you looked at the cost of building a little road over a gap these days?) the business of building bridges, or airplanes, or toilets, often is.

It isn't as perfectly engineered as they probably imagine.

Sidenote - How in the world does an entirely ambiguous word like "biweekly" or "bimonthly" continue to be used? Biweekly is sometimes used to indicate every other week, other times used to indicate twice a week. Bimonthly has the same confusion, either meaning every two months, or twice a month.

Tuesday, March 06 2007

For the stand-alone application developer targeting the Windows platform -- that increasingly endangered species --  when the need arose for a database backend, the default choice was historically the Microsoft Jet database engine, usually to interact with an mdb (e.g. Microsoft Access) database file (though Jet supported other, less-used options as well).

This goes all the way back to the terribly awkward DAO dll libraries callable from C, though interaction greatly improved through the years, to the ease and simplicity of today's ADO.NET.

When deployment time came, you could distribute with the freely redistributable Jet runtime (the only significant limitation being that you couldn't create a direct MS Access competitor, with table designers and the like), and while the client had no need for a Microsoft Access installation or license, if they did have it they could interact with the database directly where the need arose, or for extended functionality (e.g. reporting via Access). These mdb databases could also be accessed through other tools such as SQL Server linked servers, etc.

I write that in past-tense, as Microsoft has been beating Jet to death as of late.

The first punch was the complete lack of a 64-bit migration path -- existing or planned -- meaning that in a 64-bit instance of SQL Server you can't add linked Access databases, nor can you interact with Jet-supported databases from the 64-bit runtime of SSIS (though thankfully in that case you have the fallback of using the 32-bit runtime). And while Access 2007 runs atop a heavily modified version of Jet called ACE, the new library itself isn't redistributable being intended only for use from Access.

So what is the replacement? The primary replacement was the former MSDE (Microsoft Database Engine), called SQL Server Express in the latest iteration. Microsoft really wanted to push developers to the SQL Server platform from the smallest need to the largest need.

With a liberal, free redeployment, a very easy upgrade path to a "real" instance of SQL Server (and the easy integration and interoperation with other instances of SQL Server, taking part in functions such as replication), this is a compelling choice but for the fact that it is a resource-intensive overkill for many simple needs, with a multi-hundred megabyte install, a separate service which itself is far from slim (it is an actual instance of the same SQL Server database product that might be hosting the corporate HR databases, with only a couple of minor hardcoded limits differentiating it), and then the potential administration headaches in the future (the Slammer worm primarily infected MSDE installations that many users weren't even aware they had running. SQL Server's default configuration is far more intelligent now, such that by default it only listens on localhost, and it supports robust attaching/detaching of databases, but there still is an excessive surface-area for attack if only a basic database was desired).

If all you want is some basic table structures with simple indexing, the bulk of the database management system meant for large-scale corporate data warehouses just isn't reasonable.

Microsoft has another option now, albeit growing from a product path that has been around for a while, called SQL Server CE aka Compact Edition (confusingly you'll find it called Mobile Edition on many of the supporting documents, as that was a prior product name). Supporting a subset of T-SQL, and basic tables (no views, stored procedures, or triggers), it's an in-process, very lightweight option if you want a simple backend database in your application, and want it to easily interoperate with some other Microsoft technologies.

It's primarily unmanaged, but provides excellent .NET interoperability.

It isn't SQL Server, though. The code doesn't come from SQL Server. T-SQL is limited to a subset, the database format is completely different, and basic functionality like full-text search is missing. From an integration perspective, while it is manageable from SQL Server Management studio, the only real consistency is in the object explorer and the query analyzer, while index configuration and schema design occurs in completely new modules.

In its implementation some questionable decisions were made, such as the lack of non-unicode text types (there are a significant number of very legitimate uses for ASCII text. Going UCS-2 makes it more likely that surrogate keys get used where natural keys could have been the better choice at one-half the size, and is just a waste of space and performance if it isn't actually necessary).

So why am I talking about SQL Server CE at all?

The compelling feature is that it runs on the gamut of Windows targets, including mobile editions (e.g. smart cellphones and PDAs), including tools to sync between the devices. If you wanted to make a Getting Things Done task-tracking style app atop a reasonably robust, feature-rich-enough database, and you wanted it to be usable from a desktop and a PDA whether connected or not, it presents a very interesting option.

I'm going to play around with it a bit in the coming weeks when I need a distraction from more critical work, and this is just the intro piece to further analysis of this product. I may look at the unfortunately named VistaDB and other embedded, in-process options (I'd love to consider the embedded PostgreSQL -- itself a fabulous RDBMS -- however resources for it are few and far between).

Wednesday, March 07 2007

We've been using Microsoft's Team Foundation Server for version control and basic work item/requirements/bug tracking for about 9 months now. All in all it's a good tool, though really it still feels like a version 0.8 beta that got pushed out the door a little early.

Lining Up For The Landing

The Good

  • It's a world better than Visual SourceSafe
  • Superb integration with Visual Studio
  • Performance is great locally, but also over a low-speed pipe
  • Security is well-defined and adequate
  • Branching and merging works well
  • Multiple files are checked in as a changeset, rather than individually
  • The requirements/work items/bugs functionality is half-decent, albeit very unpolished and feature-poor

The Bad

  • Some basic functionalities, such as rollback, are missing (which is why I say that it seems like a pre-release beta in ways). There is a powertool hack that lets you rollback a changeset, in which case it checks out all of the affected files, does a get of the pre-checked out files, and then checks in the old file(s), leaving the "rolled back" version in the history.
  • burlington The application tier is incredibly fragile. If an enterprising team member decides to do some clean-up directly in the TfsVersionControl data-tier database (getting around missing functionality in the tools -- for instance there is no way to permanently delete, aka destroy, in the tools, remarkably, so if someone checks in a 500MB file and you want to remove it, you're forced to do it directly in the database), you will discover that a single missing related record -- the database doesn't define or enforce foreign-keys, so it isn't going to block the DELETE command there -- will cause the application tier to die a hundred deaths, excepting out on null values and other inanities. This is made far worse by the fact that the application tier caches a lot of lookup data, so check-ins/outs will work for a while after these related records were moved, making a simple database rollback impossible. Instead you need to go through every database manually rationalizing all of the data, determining where the application tier is dying.

    The worst part is that many of the unfound lookups should be complete non-events, either not displaying the unrelated records, or putting in placeholders while indicating that an error occurred. The idea that it takes down the entire version control system is completely unreasonable, and it really made me question the implementation.
  • Offline support is non-existent in the front-end tools, with it expecting a constant connection to the source control web services. There is a dubious powertool that manually works by removing the project from source control, and upon reconnection you tell it to reattach and then do a sync.

The Ugly

  • The application tier won't install on a domain controller, or on a 64-bit system, both limitation being entirely unreasonable and hindering for small shops.

All in all it's pretty decent, but I think they called it done a little early.

Wednesday, March 07 2007

Internet Usage Self-Assessment

How many times do you load sites like Slashdot, Netscape, Digg, and others during the day? Do you find all of the links colored a:visited? Do you wish they'd age-out quicker so you'd have more sites to visit and discuss, and to forward to peers and friends?

How many blogs do you read? How many RSS feeds do you subscribe to?

How much time do you spend browsing through Wikipedia entries?

How many futile online debates do you participate in (Microsoft versus Linux. Liberal versus Conservative. Pro- versus Anti-. Debates where nothing will ever be resolved, and no positions will ever be changed. No, seriously, no matter how convincing you think you are, and how enlightened the forum is, it is extraordinarily unlikely that you're ever going to change a single mind, much less the world).

How many facile blog entries are you wasting your time authoring, tickling the reader's ego by telling them that they surely must be among the cream of the crop reading such an enlightened entry (which should offend readers who can detect the obvious pandering, yet it's a tactic that is becoming common), desperately hoping that you'll get atop some momentary meme list, your 5-minutes of fame yielding nothing of real Earthly consequence?

How much time are you spending on all of the above in an average day?

Take a moment and answer honestly. Feel free to answer in the comments if you'd like, though this isn't meant to be a competition.

For many people the answer might be "very little or none at all" , but for quite a few I suspect the answer will lie somewhere between "a hella' lot" and "all day".

Squandered Opportunity

What are you gaining from that sunk time? Entertainment? Intellectual stimulation? An enlightened perspective? Work-related information (that's was my personal justification back when Slashdot was much more technology focused, and the discussions actually did expose me to new information about the industry and technologies, though at the time the turnover of stories was so low that a single short visit a day was sufficient)? Are you gathering some nebulous site-specific karma that's more of a badge of excessive free time, or on some sites a perspective that most correlates with the group think, than wizardly knowledge?

Most of the time the net benefit of a day spent on the meme sites is nothing more than entertainment, but few would admit to themselves that it was akin to watching an all-day episode of Survivor or Heroes.

What could you have achieved in that time?

Could you have spent that 3 hours building a Reddit clone (to waste someone else's time)? Launching your eTailoring venture? Learning Japanese? Learning Python? Taking up a new language? Implemented that awesome new piece of functionality? Gone to the gym and started the journey to fitness? Cooked an amazing, exotic meal?

Talking to and observing peers in the industry, I've noticed that this time suckage has become a widespread, massive squandering of opportunities, with so many talented developers, designers, and intellects basically wasting their days away. From a personal perspective, I know that occasionally I find myself "quickly" checking to see if there is anything on the feed sites before delving into a difficult problem, and some time later realizing that I'd completely burned away all of the personal project time that I had set aside.

It's for this reason that I'd previously talked about router blocks and Firefox rationing.

Honestly monitor where your time is going, and if you're being the best you that you can be.

Aside: Many will wonder if the "facile blog entries" bit was self-referential. These blog entries once served a commercial purpose -- yes, they were entirely selfish, as most human efforts are -- but as the associated ventures turned out to not need the publicity, and I no longer was looking for cold consulting clients, that overt selfish motivation evaporated. I've never really been motivated by appearing on the meme sites, as a quick look at the "peers" in the space tells me that it isn't really a great accomplishment to be on the front page alongside a "PICUTRE OF KITTEN [AMAZING!]". Now I mostly do this as a brain exercise, keeping entries very short, infrequent, and quick to compose, saving my time for my attempts to Try To Take Over The World!

Thursday, March 08 2007

The Usenet Legacy

A decade+ ago, most "online" comments were conceived and birthed in feature-rich, fat-client applications. These were tools that generally offered a rich gamut of functionality: spell-checking, automatic intelligent threading, offline composition, selective content blocks (such as plonking unliked trolls, censoring expletives), automatic notification of certain keywords or topics, alongside a wide breadth of additional capabilities.

You could read and participate in conversations on a massive array of topics, from law and order, to product support forums for a particular vendor's database product, to the seedier side of the alt hierarchy. All using the same client application that you were comfortable with, configured just the way you liked it.

After authoring your brilliant, convincing argument (or your question about what video card to buy or how to call a certain API function) and hitting send, the application would queue it up much like an outgoing email, and when the opportunity arose (when you dialed up to your local BBS), it would send it to your local server via a standard protocol, where it would be shared with a decentralized universe of servers.

Usually your brilliant literary gem would be immediately visible to the world -- limited only by the rate of propagation -- though a small number of newsgroups had post moderation that requiring each new addition to first be approved.

The Advantage of Standards

This standardized protocol, message format, and distribution mechanism allowed for rich client functionality without reinventing it for every single newsgroup. Imagine how absurd it would have been if you used a different set of tools, with a different set of functions, to interact with comp.sys.ibm.pc.hardware.video than you did with comp.sys.ibm.pc.hardware.sound?

Just as importantly, the standard message format and transport protocol allowed for very easy indexing and archiving -- easily searchable across time and space by whichever search vendor did the best job. This is how we got the incredible functionality of DejaNews (which was later purchased by Google and rebranded as Google Groups), which managed to reach its indexing fingers back a decade earlier than it was even imagined.

If you do software development, you've probably found newsgroups to be by far the most useful resource to search when looking for answers: While a normal web search will yield thousands of noise responses and pay sites begging for money to see the answer (that they usually ripped from a usenet newsgroup), a quick tab over to the groups will usually immediately find the archive of someone who faced a similar question or problem, and the helpful replies.

Of course Usenet is still around and very much alive, and some sites still use NNTP. Unfortunately the quantity of useful answers has been declining, or at least that's my impression, as more and more conversations are being siphoned off into poorly structured, often unindexed islands of information.

Why is every new web app creating yet another terrible reinvention of a container for discussions? Why are we functionally stepping back 20 years for every single new forum (see Digg, YouTube, Reddit, and others for examples of colosally broken discussion systems that people interact with despite their enormous failures, having no alternatives. There are a few, Slashdot for instance, that are moderately evolved, but it took half a decade to achieve a somewhat usable system, and even then the failings are numerous)?

Worse still, why are so many sites storing conversations and threads in isolated silos of data, stored and communicated in completely non-standardized ways. I can easily find and reference threads that I reminisce reading on a usenet newsgroups 14 years ago (usually for "I told you so!" purposes), yet it's often impossible to find a thread or comment on a modern web forum even if I remember seeing it a month ago.

This isn't an argument for a return to the days of yore, and I'm candy-coated the history and usability of Usenet, but it does seem like a lot of people are continually reinventing the wheel, ignoring the lessons of the past. 

It does seem like the value of each additional piece being added to the global solution set is being diminished or completely lost: Where once we had clearly defined domains of information, clearly deliminated and indexed by topic, with a clear threading organization and meta-data structure (author, date, what other comment entry it's a reply to, and so on) that could easily be interpreted by anyone who understood the NNTP spec, now we're at the point where search engines have to try to interpret a million variations of rendering engines, inevitably losing most context and metadata, and that's only if they happen to even crawl across the conversations in the first place.

Somehow we need to find a medium, taking from the past while incorporating modern technology. Perhaps a new embedded commenting structure should be an addition to Firefox 3.

The Ultimate Goal

  • Standard message structure and accessibility for archiving and indexing. Deja News provided an incredible example of the value this brought to the table.
  • Standardized authoring tools and structure - a threaded discussion forum has almost exactly the same needs as every other threaded discussion forum. Users spend so much time authoring comments that it is remarkable that we haven't long had a rich <comment></comment> HTML element as a supersized TEXTAREA, supporting all of the nuances and features shared by virtually every conversation site.
Tuesday, April 03 2007

When People Danced to the Macarena

The exploding importance of the Internet in the mid-90s brought tremendous change to the technology market. It forced industry leaders and followers to hastily adapt to the new opportunities and challenges.

It was a do-or-die time, and you had to embrace and adapt, or get extinguished.

To everyone but Microsoft, it seemed.

Despite the hurricane-force winds of change around them, the industry leading behemoth looked to be stuck in a recursive loop. While upstarts were racing in every direction, envisioning and implementing new uses for this growingly accessible platform, Microsoft seemed to be busy navel gazing, more worried about how to maintain the status quo.

Despite the relative success of Windows 95 -- the long-overdue migration to mainstream 32-bit computing -- Microsoft's slow-moving heft seemed to make them incredibly vulnerable during this critical transition period, making them appear a lumbering giant that could be toppled by the smallest adversary.

The young upstart Netscape appeared a likely candidate to shoot the mortal stone: Sales of Netscape's server and browser products yielded a revenue growth curve exceeding that of any software company in history. They were actually running a profitable business, which was a remarkable feat for a technology company at a time.

Their Netscape Navigator browser had fortified a seemingly insurmountable position in the marketplace . The company image was hip, and Mozilla adorned swag was flying out of their online store.

In that era of seemingly boundless opportunity, inebriated with the seemingly limitless potential of the company that he co-founded, Marc Andreessen made the infamous comment that the Netscape Navigator browser, coupled with the Java platform, would reduce Windows to an "unimportant collection of slightly buggy device drivers."

By then Gates had penned his famous internal "Internet Memo", demanding that the company focus on the Internet. The cruise ship Microsoft was ever so slowly changing course.

While the overwhelming majority of Microsoft's renewed focus turned out to be largely useless "internet-enabled" bedazzling of existing products -- the oft-lauded "turn on a dime" fiction about Microsoft's Internet revolution is grossly overstated -- where it really counted, the browser, Microsoft executed very well.

Microsoft's browser offering quickly became good enough that that average user couldn't be bothered to download and configure a competitor's products on their new PC (Microsoft didn't have to provide a better product, or even as good for that matter: It just had to be good enough to dissuade an average user from seeking out alternatives. This is a bundling reality used in all industries).

Add to that the fact that Netscape's development cycles got longer and longer, their innovation dried up, and their product got buggier.

Eventually Internet Explorer was the winning product on merit alone.

Soon we had an internet full of "Made for Internet Explorer" buttons. Much of the non-academic web had been Microsoft-ized, and you couldn't play unless you went where Microsoft was going today.

The rest is, of course, history: Internet Explorer rocketed to success, almost entirely at the expense of Netscape.

Knowing how things turned out, with the all-knowing clarity of hindsight, Andreessen's claims of course look like foolish bravado. Even at the time it sounded like nonsense: Java applets had shown little promise, delivering terrible performance, atrocious interfaces, and an awkward, crippled interaction with their host environment. The browser wasn't much better, limited mostly to rendering personal pages full of blink tags and gaudy color schemes.

I recall reading that quote from Andreessen back then (I believe in a Dvorak article in PC Magazine), puhshaw-ing in disbelief. I couldn't believe his audacity, and as a junior Windows-targeting developer at the time, with perhaps a bit of a fear of change (nobody likes when their skills, even at a beginner stage, are being obsoleted), I cheered on a Microsoft response.

"Bill Gates is going to CRUSH this guy!" I thought.

And of course Microsoft easily won that battle.

But are they losing the war?

The Pillars of Our Reliance on Windows

Windows as an operating system certainly has a lot going for it: It is feature rich, demonstrates a lot of technical excellence, and can credibly measure up against any competitor.

Yet for many users over the past decade, there was no choice: Windows was obligatory. It was exactly this hegemony that Andreessen felt his platform was upsetting.

His prediction was just a decade or so early. And instead of Java being their tag-team partner, it's JavaScript/AJAX, Flash, and the innovation and power of modern console gaming.

"I dual-boot to play games"

I hit a local department store recently to look for some educational games for my pre-school aged daughter. This location never had an extensive PC software selection, but I was still surprised to find the entire section had been removed, save for a couple of relics sitting in a discount bin.

The entire area was taken over by game console and handheld software.

Thinking this was an anomaly; I drove across town and checked their competition, and then their competition's competition, only to find the same at each: No PC software at all was for sale.

No games. No typing tutors. No foreign language training. No photo management software. No pre-school aged games.

Baffled, I hit the local EB Games location. Over the years I'd purchased dozens of PC games there, so I was shocked to find no PC software at all (the exception being a couple of ratty late-90s era boxes in a wire-mesh bin).

Determined, I ventured to the local Future Shop (the Canadian equivalent to Best Buy, and in fact the chain was acquired by Best Buy a few years ago, causing much confusion as it came in concert with the actual Best Buy chain itself) to find a small PC software section. While it was much smaller than it once was -- where once there were rows dedicated to just productivity applications, now a miniscule little section caters to the entire gamut of software -- at least it was something.

However compelling, my personal anecdote doesn't really prove much, but it does correlate with industry metrics that have shown retail PC software sales to end users to be stagnating or in freefall. Businesses keep buying their Office and Windows licenses, of course, and niche groups keep satisfying their business need, but what once was a vibrant retail market for applications and games has virtually disappeared. Some of this has been supplanted by online purchases, including some new electronic delivery method (which is how I got Half-Life 2 -- an impulse purchase is well catered to by a simple online purchase with immediate satisfaction), but much of it has just disappeared.

Consumers just aren't consuming PC software anymore.

The reasons are obvious.

Deja Vu All Over Again - The Rise of Console Gaming

On the gaming front, the PC has seen incredible competition from gaming consoles. Not only have those competitors evolved into technical heavyweights, the simplification of the entire gaming genre has equalized the playing field: Where once a mouse and a keyboard were mandatory to play any decent game, most popular games now feature simple interfaces that are equally accommodated on any platform, and the complex simulator type games, once the consistent chart toppers, are largely unloved.

You don't need a mouse to interact with an onscreen flower menu. You don't need a keyboard to communicate via a headset and in-game Voice-over-IP.

Consoles aren't the only reason for PC gaming's decline -- general internet use has taken a lot of time that people would have spent gaming, some of that time being spent being entertained by the countless Flash-based, cross-platform games available now.

Doomsayers have being declaring the death of PC gaming for years, as generations of consoles have come and then gone and Windows gaming has remained, but never has it seemed as likely to actually happen. In response, Microsoft is attempting some Windows gaming branding; perhaps realizing that it was a linchpin of their occupation of the home; but their intervention is likely too late.

So what does any of this have to do with Windows and Netscape and buggy device drivers?

One of the primary reasons many users felt tied to the Windows platform was gaming: If you wanted to play any of the prominent games at the time, that collection of slightly buggy device drivers was very important, and the game-du-jour was usually very tightly coupled with the platform. Aside from a couple of exceptions, PC gaming overwhelmingly meant Windows gaming.

The Netscape browser certainly wasn't a replacement for this. Neither was the Java platform.

This situation led many prospective Windows migrants to declare that they would make the move to Linux or the Mac or FreeBSD or whatever, if only they could run their current gaming obsession on it. Dual-booting is a half-measure that seldom held, and the direct graphics card access meant that gaming couldn't be accommodated via virtualization, so more often than not they just stuck with Windows.

"But my applications only run on Windows!"

Across the industry hundreds of thousands of solutions have migrated to the web, and if anything the pace is accelerating. Despite Microsoft submarining the overly-capable Internet Explorer team -- a team that brought us many of the innovations that we now enjoy in competing browsers -- the genie was out of the bottle: Many had experienced the incredible platform freedom, wonderful deployment model, and rich interfaces provided by web applications.

The classic computer purchase justifications (as stated by a million pleading children trying to convince their parents that a new gaming rig will be productive for the household) -- balancing the checkbook, storing recipes, authoring and sending letters (now email), maintaining databases -- can all be very competently accomplished online, from any modern browsers available on dozens of platforms. In many ways the experience is superior online, given the accessibility of the data from anywhere at any time.

Not every task can be performed online or from a web browser, and for those needs a plethora of cross-platform, often open source options have appeared (ex. GIMP, Open Office). Yet it remains that for an average user, the overwhelming percentage of their computer time now will be spent in their add-in enabled web browser, perhaps accessorized by one of countless available, many-network supporting IM clients.

Which is, of course, where we circle back to Andreessen's prediction: The most popular, and arguably capable, cross-platform browser is the Firefox browser. It is the phoenix (and was originally named firebird) that rose out of the ashes of the collapse of Netscape, the source code open sourced and revitalized with a many year reworking. While its market share numbers remain relatively small, its influence has been absolutely extraordinary. Even for sites that see 100% Internet Explorer users, the freedom and diversity offered by Firefox often leads enlightened development teams to ensure that they facilitate it just as well.

The rules of the game have completely changed. While many were prematurely declaring the end of Microsoft's dominance for years (every year for the past 7 years or so has been declared "The Year of Linux" by some open source evangelist or other), it has been years since the field has been so open for actual competition.

It has been a long time since the choice of platform held so few caveats and limitations.

We are entering a glorious time when the operating system really is an unimportant collection of device drivers, no longer driving completely unreleated application choices.

Wednesday, April 11 2007

A flurry of nattering erupted over the weekend regarding Paul Graham's declaration that "Microsoft Is Dead".

[Sidenote: Paul claims that he authored the piece to "say it first". While you might be widely linked for your Yahoo glory days, Paul, you're far from the first person to say it]

While Paul was obviously exaggerating to make a point (I presume he knows how to read a financial statement, and is well aware that Microsoft's revenue are still following a ballistic arc, and that >90% of PCs out there still run some variant of Microsoft's operating systems), it shouldn't come as a shock that I'm in agreement with his core point -- that Microsoft's ability to herd the industry has seen an unbelievable decline over the past several years, and that tech leaders aren't all that interested in whatever Microsoft is claiming that they'll think about maybe developing some time in a few years -- and indeed I'd said something very similar just last week, albeit without the confrontational, exaggerated title.

In today's Financial Post I see that Goldman Sachs has just removed Microsoft from their highly-rated "Americas Conviction List", specifically noting that investors are nervous about the future of retail software. Sure, Microsoft is still considered a "Buy", but this is another indication that people are seeing a future where Microsoft isn't all-singing and all-dancing.

While looking for an online link to provide for the news item (I'm still a happy reader of dead-tree newspapers), I came across this article on ZDNet, in which the author says-

"but can you really say a company with $28.8 billion in cash is on the downswing?"

YES! Of course you can!

That $28.8 billion is owned by shareholders, and if they see it squandered in failed attempt after failed attempt at buying diversity, they'll demand it back through another special dividend. Microsoft's bounty of cash, and their massive revenue, has never guaranteed them anything, and their history is rife with initiatives doomed to failures (much like the ridiculous "turn on an internet dime" myth, many have a selective memory when it comes to Microsoft, forgetting how many of their ventures have been dismal failures. Expect the whole ridiculous "Live" branding to be yet another failed direction).

Microsoft certainly isn't dead, however it will likely go through some massive, externally forced changes in coming years as the two foundations of Microsoft profitability -- Windows and Office -- start to crumble.

Earlier EntriesLater Entries

Dennis Forbes - Dennis Forbes is a Toronto-based software architect and technology writer