Lambert on Development

My thoughts on software development

Lambert on Development RSS Feed
 
 
 
 

A feature greater than the sum of its bugs

Douglas Adams, muse to software developers everywhere, had this to say about bugs:

“Just as a slow series of clicks when speeded up will lose the definition of each individual click and gradually take on the quality of a sustained and rising tone, so a series of individual impressions here took on the quality of a sustained emotion[.]“

Ok, yeah – the quote is really from “Life, the Universe, and Everything“, and he wasn’t talking about bugs, but he could have been.

Big Bug III…!!!
Image by Denis Collette…!!! via Flickr

If you look at bugs one at a time, you can miss some important “big picture” stuff.  It’s possible to spot product design issues, usability issues, architecture issues, and more by looking at patterns across multiple bugs.  Instead of just taking the bug at face value, consider whether there are other factors that caused this bug (and others like it) to show up.  Unless you’re writing mission support modules for NASA, it doesn’t make sense to do a full five-why’s breakdown on each bug, but keep your eyes open for signs like this:

  • You find yourself going back to the same area of code over and over.
  • User complaints cluster around a few screens (or functions) in your application.
  • You recognize a similar pattern in source code that keeps popping up.

When you see patterns like this, you can certainly keep on fixing the bugs one at a time, but it’s pretty hard to make progress this way.  Instead, consider a larger bug fix, or even an actual feature (there’s really no difference, IMO) that cuts across individual bugs and fixes the foundational problem that’s spawning them.

  • Maybe you need to redesign a screen.  If users are having a hard time figuring out part of your application, you’re not going to be able to fix your users.  Bite the bullet and figure out what you need to change in your application so that it makes sense.
  • Refactor ugly code.  This should be a no-brainer.  Spaghetti code can hide a multitude of sins, and the bugs are just going to keep coming until you deal with the problem.
  • Address architectural issues.  Sometimes, your problems run really deep, and big changes are needed to fix them.  This can be a tough sell, but if you can show a pattern of costly bug fixes over time, all of which share an architectural root cause, you’ve got the ammunition to push for a fix that will make them go away.

If you eliminate the sources of these clustered bugs, you not only get rid of the current bugs, you wipe out a whole swarm of future bugs before they’ve had a chance to show their ugly little faces.  Don’t believe for a second that you can do this one bug at a time.

Enhanced by Zemanta

Post to Twitter Tweet This Post

More on “HTML is dead”

Microsoft’s S. Somasegar (“Soma”), who heads the Developer Division, posted on his blog yesterday about “Key Software Development Trends“.

I was pleased to see him include “Proliferation of Devices” among the top trends in development, but there was obviously an acute case of tunnel vision at work here, because Soma completely neglected all the non-Microsoft devices that people seem to insist on using.  I know, I know — you can’t have a Microsoft VP publicly acknowledge Apple on a corporate blog; that’s just craziness, but the rest of us sure can.

Windows v0.0
Image by . SantiMB . via Flickr

As I wrote in my last post, the proliferation of devices — especially across platforms — has the potential to impact me in a pretty fundamental way.  It wasn’t long ago that I could develop a web application and have a reasonable expectation that most clients could use it, regardless of their client architecture.  Differences existed among browsers, to be sure, but there were relatively few “can’t get there from here” moments.

Today, I see a fractured web.  Technologies like SilverLight have the potential to radically improve both the user experience and development productivity, but these benefits are hugely marginalized when they only run on some of the platforms that our customers use.  Today, Microsoft’s technology leadership position is challenged on every front:
  • The desktop.  Obviously, this is where Microsoft lives.  Between Windows and Office, this is not only where Microsoft asserts its most solid dominance, it’s also where they make most of their money.  In terms of technology adoption, though, they’re facing a 1-2 punch: they’ve struggled to get people to upgrade Windows, and they’ve struggled to get people to upgrade IE6.  The Windows upgrade problem also impacts SilverLight availability, since most people get SilverLight with an operating system upgrade.  According to Riastats.com, SilverLight’s current penetration is just above 50%, which is a good start, but not yet where it needs to be.  Adding insult to injury, more people are running Mac OS every day, and Linux continues to grab scraps of market share, too.
  • Internet Explorer.  When people leave IE6, there’s a good chance they’re going to FireFox or Chrome instead of to IE8.  Microsoft’s once near-monopoly in browsers has been eroding over time.  It’s now imperative that any UI technology that runs on a browser must run on most, if not all of them.
  • Windows Mobile.  The delay in getting Windows Mobile 7 out the door has absolutely killed Microsoft here.  They got caught by the iPhone in much the same way they were caught by the internet, and we’ve yet to see a credible response.  At this point, even Mobile 7 is lights-out fantastic, it’s got a pretty huge uphill battle to gain relevance, let alone dominance.
  • XBox.  The XBox is a real success story at Microsoft, but again, it’s not dominant, with a market share somewhere around 25% of all gaming consoles.

There’s no question that what Microsoft really wants is for us to develop software with Microsoft tools on a PC running Windows, and then to distribute this software to consumers who are also running on a Microsoft-powered device of some sort.  When Microsoft held near-monopoly positions on every platform where computing reasonably occurred, this was tenable.  Today, though, it’s just not reasonable.  Customers are computing on a dizzying array of devices, and not all of them are powered by Microsoft.

What’s needed today from Microsoft is real development leadership.  Give us a runtime that works everywhere, and Visual Studio becomes an absolute no-brainer choice for development.  While this might seem like a daunting task, a good part of this work is already being done.  Miguel de Icaza’s efforts with Mono have paid incredible dividends to-date.  Today, because of Mono, you can:

Microsoft, please jump on this bandwagon!  Visual Studio is so clearly superior to other development environments that its only current threat is developers hemorrhaging to develop for other platforms.  Making Visual Studio a true cross-platform tool could make that argument a non-starter.

Similarly, SilverLight could very easily overtake Flash as the most widely-available rich UI runtime, but support for more mobile platforms will surely help this cause.  In a recent blog post, Miguel talks about a library for the iPhone that helps define UI’s more declaratively – a trait SilverLight already handles well.

To envision the kind of difference this could make, imagine launching Windows Mobile 7 with a few thousand iPhone apps ready to run on it.  This makes WinMo7 a much easier switch for consumers, and it could be a reality if we were already developing iPhone apps in C#.  Aren’t the folks in Redmond sick of seeing every company from Dominos to Nationwide Insurance telling us to download their iPhone app?  Why not level the playing field and let these companies publish an app that works on any phone?

It’s within reach.

Reblog this post [with Zemanta]

Post to Twitter Tweet This Post

If HTML is dead, what’s next?

The introduction of Apple’s iPad got a lot of people talking about “apps” again. There’s no denying the oppressive popularity of apps today; everybody’s got an app store and everybody’s playing catch-up with Apple. Apps are the new hotness.

Yesterday, Stephen Forte (Is the iPhone (and Android) the harbinger of death for web pages?) observed that apps kick the crap out of web pages when you’re on a mobile device, which is why we’re seeing an app revolution similar to the one that launched HTML (and the web) to prominence a decade ago.

Assorted smartphones. From left to right, top ...
Image via Wikipedia

The part he missed, though, is the negative impact of a fractured client landscape.

When you see a Fortune-500 company announce a new iPhone app, do you ever wonder what it expects its Blackberry customers to use?  How about Android?  Is the cost of the new app hotness a need to build four copies of every app?

On iPad day, I caught an interview on NPR’s “Marketplace”.  Josh Bernoff from forrester.com was talking about how the web is effectively shattering due to the different experiences on each of these platforms.  To me, this demonstrates that we’re in the midst of a fundamental transformation.

The web (specifically, HTML) was the great equalizer. Any server could serve any client. This simple concept “made” the web.  We’re now experiencing a shakeup to this universal access. The web is now accessible to more devices than ever, but the cutting edge is rich client development (apps), and this is hugely fractured. On the web, we have technologies like Flash and SilverLight, and on mobile devices, you can develop for iPhone, iPad, Android, BlackBerry, Palm Pre, Windows Mobile, and others.

Today’s development tools give us no practical way to target all (or even most) of these client platforms “natively”. This is not due to technical impossibility; it’s a function of the power struggle that’s occurring among these warring platforms. If Microsoft and Apple both wanted to see SilverLight run on an iPhone, I’m confident that it would have happened by now.

Instead, all the major players in mobile platforms want to own that whole space, and their proprietary UI’s are required for this. If Apple, Windows Mobile, and Android all ran flash, for example, Apple’s dominance in mobile devices would be severely compromised (after all, I can get the same “apps” on any device at that point, right?).  Apple doesn’t want to see this, obviously — it takes money directly out of their pockets.

The impact of the splintered web on developers is twofold.  First, and most obviously, every app must be coded from scratch to run on each platform a developer wishes to reach natively.  This is going to force a pretty uncomfortable reckoning with Product Managers, and it’s probably going to mean that in many cases, only the top one or two  mobile platforms is served, leaving the rest of your customers to eat HTML table scraps.

The second impact on developers is a splintering of skill sets and tools.  If I want to port my .Net application to iPhone / iPad, I’m looking at a sizable intellectual and financial investment.  At a minimum, I need to buy an Apple computer, because you can’t do Apple development on a Windows box (no monopoly there, right?).  Only then can I even begin to try to port or rewrite the app.  Tools like MonoTouch can help preserve my business libraries, but the UI transition won’t be seamless.

In practical terms, the specialization needed to be good at developing for any of these platforms also means that any one developer can’t be great at all of them, which implies that I need multiple developers to target multiple platforms.  This is starting to get expensive, now, isn’t it?

In time, it’s inevitable that the market will work this out.  One of the major platforms will win, relegating the others to the “Island of Misfit Technologies”, or a number of them will agree to interoperate (via Flash, SilverLight, HTML 5, etc.).  In the mean time, though, businesses need to expect more expensive development if they want to reach all their users with native apps, and developers had better be prepared for more UI platform changes.

Do you miss the good old days of HTML already?

Reblog this post [with Zemanta]

Post to Twitter Tweet This Post

Is your Enterprise too big to fail?

We have met the enemy, and it is Complexity.

About a year ago, the media was flooded with debate about financial institutions that were deemed “too big to fail” by industry analysts, financial experts, and government representatives.  A failure by one of these institutions, these experts told us, would have catastrophic effects on our economy, and it was therefore incumbent upon us as a nation to keep these firms solvent.

And if you believe this, I’ve got some great beachfront property in Kansas I’d like to talk to you about.

What dependencies?
How, exactly, are all these financial firms connected?  Obviously, a full exploration of this is out-of-scope here, but the single biggest problem child in the financial meltdown was the web of financial derivatives, which financial institutions applied as a sort of insurance policy, but which, in the end, turned out to be anything but that.  The idea behind these derivatives was to aggregate a bunch of debt obligations together and resell them, and financial firms believed this would act, among other things, as a sort of reinsurance guarding against risk in any of the individual debt obligations.  As these things were packaged and repackaged, though, the cumulative effect was to create a virtual ponzi scheme of obligations linking all of these firms together in a frighteningly incestuous fashion.

“Too big to fail,” you see, resulted directly from “too complicated to understand.”  The real nightmare scenario for these experts wasn’t the failure of a single institution, no matter how big it was — it was the domino effect where the failure of one institution would cause a chain reaction of failures across all the top financial firms.  Here’s the killer, though: these experts couldn’t tell you which dominoes, exactly, would start a chain reaction, which mean that (1) these experts understood that there were horribly complicated inter-dependencies among these financial firms, and (2) they didn’t understand these dependencies well enough to understand what would happen when one failed.

The problems with this scenario go on and on.  Very few people have any real grasp on the actual implementation of complex financial instruments within a single organization, let alone the contractual obligations that link firms to firms.  This includes the executives running these companies, who, in true empty-suit fashion, blindly accepted whatever horse-hockey they were fed by their underlings because there wasn’t a chance in hell that they understood all the details of the operations under their control.  This isn’t to say that these executives aren’t bright guys — nothing could be further from the truth.  In fact, the complexity of these operations is so staggering that no one person could ever hope to grasp the whole picture at once.

At this point, you might be wondering what this has to do with software development.  Fair enough.  The connection is the common problem: complexity.

Software developers are no strangers to complexity.  Despite an onslaught of tools, techniques, frameworks, and design patterns which all claim to make Enterprise software development “easy”, our applications invariably end up complicated as hell by the time they’re installed.  I opened a Visual Studio solution the other day that had 43 projects in it.  What’s worse, this solution clearly followed patterns that have been demonstrated by Microsoft, so there’s a clear argument to be made here that this behemoth is crafted according to industry best practices.

Dominoes line
Image via Wikipedia

A developer who’s immersed in such a solution can have a ghost of a chance of understanding what’s happening among those 43 projects, but just barely, and only if he’s really good and really focused on this solution.  This is functionally equivalent to a Financial Analyst who understands in great detail how an individual financial derivative is constructed.  Like the financial example, though, there’s no way that business leaders could ever hope to fathom the complexity of software like this, and they’re the ones who are making decisions about it.

This has to end.  The status quo is one where our leader don’t understand the things they’re making decisions about.  How is it any wonder that they all behave like pointy-haired bosses?

It turns out that I’m not the only one that believes this.  Roger Sessions is a well-known architect and author who’s been promoting simplicity since the dawn of the Doppio Macchiato.  Recently, he’s been supporting his book, Simple Architectures for Complex Enterprises, with some excellent blogging and a white paper, which can be found on the book’s companion site.

Honestly, some of Roger’s material isn’t easy to swallow.  Software designers by nature are a pretty self-assured bunch, and usually, that’s well-justified, as they’re also a pretty bright crowd.  We’d all like to believe that the designs we’ve crafted are perfectly extensible and scalable.  Furthermore, we’re reluctant to admit that anything is too complicated for us to grok.

It’s not easy for business leaders to grasp this stuff, either.  Since they’re already oblivious to the complexity of these systems, it’s a pretty big leap of faith for them to accept that complexity is the problem, and furthermore, that there can actually be a solution.

Adding to this whole mess is the predisposition of nearly all the individual role players to keep right on doing what they’ve always done.  Our understanding of capitalism and efficient markets suggests that groups of people will collectively find efficiency and balance, but when the individuals involved don’t really understand how their actions affect outcomes, you start to see some pretty odd collective behavior.  Dan Ariely has done some remarkable work exploring this paradox in his book, Predictably Irrational.

All this suggests that it’s going to take a pretty phenomenal level of commitment to change the status quo.  Let’s start by admitting we’ve got a problem.  I believe that Complexity is the #1 problem facing Enterprise software development today, and it needs to be confronted and mastered.

Are you with me?

Reblog this post [with Zemanta]

Post to Twitter Tweet This Post

The construction analogy

I did it again – just like so many others before me.

Last night, Rob Conery dropped a rant about an industry heavyweight who, Rob felt, was doing us all a giant disservice by suggesting that perhaps less could be more, process-wise.  So, of course, I chimed in, and I used the tired, old construction analogy — you know — building software is like constructing a house, right?

PONTCYSYLLTE, UNITED KINGDOM - JUNE 25:  A nar...
Image by Getty Images via Daylife

In my defense, the specific point I was trying to make was that the software industry isn’t mature in the same way as construction.  Where you have building codes in Civil Engineering, for instance, there’s no equivalent binding set of rules governing how software is built — just a nebulous collection of “best practices”.

Then, this morning, I read another post on the IxDA discussion board trying to explain how software design (specifically, functional specifications) is like the function an architect performs when someone builds a home.

Clearly, there are holes in that analogy, and I pointed out a couple in a comment on that site.  The complexity (in terms of options) in construction pales next to software development in all but trivial applications.  As I mentioned, in my comment, a buyer could sit with an architect and describe parts of a home in pretty general terms, and be quite satisfied with the resulting home, because there already exists a rich vocabulary of assumptions about how homes are supposed to work.

Software interface design is automatically more complicated than physical buildings in part because we’re emulating “real” things in software.  All the metaphors and affordances we design into our software provide unlimited complexity, such that any conversation about what a customer wants to see in software has to occur at a high level of detail.

Beyond specifying behavior, the process of construction proceeds quite differently in software, as well.  When building a home, you quickly come to understand that some aspects of construction are literally “set in stone” very early in the project, and more importantly, these things are intuitively understood by the customer.  If a homeowner wishes to change a foundation or the frame of a home, he’s not surprised to learn that this will be an expensive change; anyone can see how one is built upon another.

Building codes also help constrain choices (and therefore, costs) when building a home.  There’s simply no arguing about how studs are spaced, or the materials that are used for different parts of the home, because these are mandated by building codes.  In software, everything is negotiable, which implies that it must be specified.  Once again, the analogy breaks down.

As many times as I’ve seen the construction analogy, it’s clear that a lot of people want it to work.  Just remember that it only works to a point.

Reblog this post [with Zemanta]

Post to Twitter Tweet This Post

Similar Posts

Google Reader

Blogroll

Blog Directories

 
Programming Blogs - Blog Catalog Blog Directory
 
Computers Blogs - Blog Top Sites
 
Banner
 
Lambert on Development - Blogged

Recent Posts

Popular Posts

Support this Site

Featured Articles

Lijit Search

Lijit Search