Have we really fallen this far?

I am a grammar zealot.

It's entirely my Mother's fault; she drilled proper grammar into my skull from an early age, and I now cannot help but notice the absolutely atrocious spelling, grammar, and punctuation that permeates our culture.

Have you ever watched a history documentary where they read some crusty, tattered old manuscript that some Civil War soldier left behind?  Not ol' Honest Abe, or even Grant or Sherman -- just some guy who wrote to his folks or his girl.  These everyday soldiers invariably sound like Shakespeare compared to the IM-speaking crackberry addicts we meet today.

But surely, even if the everyday American has given up on proper grammar, our journalists are still upholding these standards.  Surely, they manage to set a positive example for all of us: showing us the error of our ways and offering their own writing as a shining sample of excellence, and surely among all of these highly-trained journalists, the writers for the Wall Street Journal would be right at the top.

Surely, this must be true.  Right?

Sadly, no.  Here's an excerpt from an article I saw from the WSJ a while back (preserved with spelling, capitalization, etc., exactly as found in the article online):

"A lot of traders are getting carried out of there seats. There are lots of liquidations including hedge funds out of riskier assets," Michael Franzese, head of Treasury trading at Wunderlich Securities in New York. "No one was expecting this sell off in stocks and the euro and a flight to quality trade is in full effect and it not yields levels it just capital preservation."

Read it again.  Sorry - yes, I know it hurts.  This time, just try to figure out what it's supposed to say.  I'll bet you can't do it.  It's like swimming a 100 IM in a pool full of Jello.

People, if you're going to commit anything to writing, please make a passing attempt to make it readable.  If you supposedly make your living as a writer, don't ever, ever do anything like this.

Thanks.

Nothing short of world domination will do

A good friend of mine sent me an email commenting on the changes in Apple's Developer Program license for the 4.0 iPhone OS, and I decided to share my thoughts here, as my email grew to become the tome you see here.

Steve Jobs at the WWDC 07
Image via Wikipedia

Apple has, as you've probably heard, indicated that it will allow apps on the iPhone and iPad only if they're written with Apple-native languages and tools, and it's widely-believed that this has been done as a form of anti-Flash "nuclear weapon", as my friend commented.

I'm not convinced that this move is directed only at Flash, though.  Any third-party tool (MonoTouch, for example) will be impacted by this move.   Some people have even speculated that this move is intended to help iPhone multitasking ("BS", I say -- write a damned API).  While all of these things might be factors in this move, I believe that the fundamental driver here is a maniacal need for Steve Jobs to control the entire digital experience for his users; nothing short of this will be enough.

Apple isn't perceived among consumers to be monopolistic simply because they don't have a majority market share yet.  The thing that just kills me about Apple right now, though, is that within their customer base, they're monopolistic to an extent that would have gotten Microsoft run out of town on a rail, even in its heyday.

Apple is a cult.  They mandate congruent behavior and thinking with an iron fist, and won't let trivia such as fairness or consistency cloud their vision (witness the iPhone app approval process).
Go ahead and float up to 50,000 feet and look at the whole "app" strategy on the iPhone.  Here's what I see:
  • All functionality on these devices is approved by Apple.
  • When rejecting an app or content, "because we said so" is sufficient reason.
  • "We changed our minds" is enough to get an app pulled after approval -- including yanking it off any devices upon which it's installed.
  • To get an app on your device, you have to go through iTunes.
  • To build an app, you have to use Apple development products (for all intents and purposes).
  • To use Apple development products, you have to be running a Mac.

That's a lot of kool-aide, folks, but if you think that's bad, it's going to get worse.[callout title=A benevolent monopoly?] Despite my ranting here,  I can appreciate the benefits of a technology monopoly.  The incredible growth of the PC platform was made possible mainly because of Wintel's near-monopoly -- it created a huge ecosystem for hardware companies, software companies, and consumers.  But as much as that partnership was effectively a monopoly, they still let mice scurry around and fight over table scraps, and the table scraps were enough to keep a lot of mice fed.[/callout]

I got a new phone last week.  Although I've experienced some teething pains, one of the most pleasant parts of the experience was spinning up my contact list and calendar.  I pointed a new Exchange account at Nuevasync (which connects to my Google account), and sucked down all my contacts and appoinments at 3G speed.  Easily the most painless phone transition I've ever experienced.  This is what cloud computing looks like for the consumer.

Apple is building a gigantic data center in North Carolina.  Care to take a guess why?

Data centers this size are being built today for cloud computing, almost exclusively.  Apple is going to suck your entire digital identity into their brand-new data center, and you'll never see it alive again unless you keep paying your monthly ransom.  As long as you play along, life will be wonderful, in a fuzzy, heavily-sedated way, but if you engage in nonconformist behavior (trying to get your data back, for instance), you should expect to be punished as you'd expect to punish any troublemaker.

Another friend of mine asked me the other day how he could get his DRM-protected music (bought on iTunes) off an old PC and onto his new one.  This is a smart man, by the way - a successful businessman, and he'd tried to figure this out and was stumped.  If you've ever tried this, I'm sure you can understand.

Take a good whiff, folks, because that's the experience we could be signing up for with all of your data.

I'll pass.  How about you?

Related articles by Zemanta

Reblog this post [with Zemanta]

Meet the new phone, same as the old phone

I've been soldiering on for a couple of years on a T-Mobile Wing.  That old phone did some pretty great things for my personal organization, but I always seemed to struggle with connection issues.

Last weekend, I finally bit the bullet and picked up a new HTC HD2.  Make no mistake, this is a spectacular piece of hardware, but sadly, I still find myself chasing connection issues.  I'll share some thoughts on the rest of the phone later if I end up keeping it, but right now, I want to detail my signal strength problems.  I'll continue to update this post as the fun and games ensues, so if I (or T-Mobile) manage to fix the problem, this post will show the resolution, and if not, you'll be able to see why I left.  All of the observations here, unless otherwise indicated, occured in exactly the same spot in Columbus, Ohio, near the OSU campus (ie, not while moving around).

Sunday, 3/28

  • Bought the phone, took it home, charged it, and powered on.  No data connection.  It turns out that the upgrade to 3G takes a while to provision.

Monday, 3/29

  • Signal bounces around all day.  Full-strength Edge, then nothing, then 3G, then nothing, then no connection at all.  This goes on most of the day, with almost all day spent on Edge only (no 3G).
  • In the evening, I got a good 3G signal, and the phone worked great.

Tuesday, 3/30

  • Slightly better luck with 3G, but not by much.
  • I talked to a couple people who said they tried to call me several times -- the phone never rang, and didn't show any missed calls.

Wednesday, 3/31

  • Noticed the same problems.  Signal really bouncing in the morning.
  • Called T-Mobile customer care at around 11:45.  Rep advised me to power off and back on a couple minutes later, and asked if I could call from another line (I can't).
  • Immediately upon powering up, here's what I saw:
  • 11:57 - 3G w/ 2 bars.
  • 11:58 - Edge w/ 3 bars.
  • 12:00 - no service (I was trying to dial voice mail).
  • 12:00 - Edge w/ 4 bars (after I stopped trying to dial VM).
  • 12:01 - no service (as soon as I dialed VM).
  • 12:20 - 3G w/ 3 bars.
  • 12:20 - Call to VM fails.
  • 12:22 - 3G w/ 2 bars.
  • 12:22 - Call to VM fails.
  • 12:24 - Call to VM fails.  "Phone operation failed" message.  Immediately saw Edge w/ 4 bars, then no signal.
  • 12:26 - Finally completed a call to VM.
  • 12:27 - no service.
  • 12:28 - no service - unable to place call.
  • 12:30 - placed call - it worked!
  • 12:39 - Edge w/ 4 bars.  As a side-effect of the connection-hunting, my battery is down to 57% - I noticed this sort of decreased battery life when my Wing was connection-hunting, too.  Done troubleshooting for now - my lunch is over.

(watch below for more updates) Continue reading "Meet the new phone, same as the old phone"

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

Almost a great idea

Here's an example of a good idea gone wrong.  I saw a link for a web site that exists solely to advance openness in government.  How cool is that?

U.S.
Image via Wikipedia

I clicked around for a bit, eventually reaching a place where I was supposed to be able to submit an idea for government, where it would (presumably) be viewed and discussed among my peers.  When I clicked the button to enter my idea, I was prompted to log in with OpenID (again, very cool).  I logged in and clicked the button again, and was rewarded with the following barfage:

500 Servlet Exception

[show] java.lang.NullPointerException

java.lang.NullPointerException
	at _jsp._jsp._includes._build_0header__jsp._jspService(jsp/includes/build_header.jsp:37)
	at com.caucho.jsp.JavaPage.service(JavaPage.java:61)
	at com.caucho.jsp.Page.pageservice(Page.java:578)
	at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:195)
	at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:97)
	at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
	at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:494)
	at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:358)
	at com.caucho.jsp.PageContextImpl.include(PageContextImpl.java:1008)
	at _jsp._jsp._includes._autoselect_0header__jsp._jspService(jsp/includes/autoselect_header.jsp:23)
	at com.caucho.jsp.JavaPage.service(JavaPage.java:61)....

Close, guys. Very close!

Please don't do this to your customers, okay?

Reblog this post [with Zemanta]

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]

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]

Do you need a smart customer?

I consider myself something of an amateur photographer (yes, in case you're wondering, the photos are mine, be they ever so humble).  By amateur, I mean in part that I've learned enough to know where I stand against the ranks of really good photographers.  Among other things, I've come to understand that there's a lot to learn about photography before you can really hope to be good, but I also understand how people come to believe that they can be pro photographers just going out and snapping up the latest and greatest hardware.

The advent of digital cameras made photography accessible to a lot more people by making photography cheaper and easier by a pretty huge increment relative to film photography.  Once you've bought a camera, it now costs next to nothing to go out and shoot a couple hundred pictures in a day.  Since you can see your results immediately, you can also make changes to settings or composition in real time, which massively increases a new photographer's learning curve.  Bottom line: you can go from zero to decent in a very short time.

"And what," you might be asking, "does this have to do with software?"

One of the problems facing both photographers and software professionals, it turns out, is that it's pretty difficult for an uneducated consumer to tell the difference between "passable" and "really good".  This morning, I read a really interesting article by Scott Bourne: And You Call Yourself a Professional? In this article, Scott bemoans the fact that there are budget photography "pro's" who are dramatically undercutting really good photographers, producing mediocre results for the client and, in Scott's words, these proto-pro's are "dragging down an entire industry."

My first reaction, of course, was that this is one of the fundamental problems in our industry, too.  Good developers can spot bad developers a mile away, but customers and employers can't do this -- at least, not until they've become somewhat educated in the intricacies of software development.  This is one of the key ideas in another one of my recent posts:  Fixed bid isn’t nirvanna.

Is it really reasonable to expect that bad photographers or software developers are going to take themselves out of the market?  Not really.  In a well-functioning market, they're either going to improve or be driven out of the market, but they're certainly not going to experience a crisis of conscience and change their ways if customers are buying this stuff.

Instead, Scott's “We fix $500 wedding photography” idea is probably a lot more effective.  Customers need to understand how they're affected when they bite on low-ball services, but this is no small feat.  Think about it: if a customer is shopping for a deal, you're going to have a hard time explaining to them exactly what can go wrong by taking short cuts.

In photography, there's a misconception that since cameras can set exposure, aperture, and focus automatically, it's impossible to take a bad picture, but it's less clear how photography is elevated to art.  In software, a customer can see an application that appears to work, and have no idea that the system is riddled with technical debt that will make future maintenance and extension a nightmare.

I'd love to think that we could educate customers on a massive scale, and in the process, drive out bad development practices because no customer would ever tolerate them, but I'm coming to understand that sometimes, a customer just may not be experienced enough to understand why you're a better value than the "cheap" service.

How are you educating your customers?

Reblog this post [with Zemanta]