Sunday, May 15, 2011

2012 Ford focus failings

Wait this is a software related blog, right? Yep, I'm not so much a car guy. I wanted functionality in a good package that's cost effective.... and something sporty (I'm still young, kind of). So I got myself a 2012 Ford Focus with the Titanium trim level. Overall great car, I think. But as a software developer I am WTFing at sync and the nav system. This thing is a buggy POS. Speech recognition seems to crash after an hour at the wheel and now I've learned that the nav system can partially crash as well and report stale information. Touch input can also die, combined with the computer rebooting itself and performing checks (like filesystem recovery), though I've had to walk out of the car to get the freaking thing to fully shutoff and reboot (if there's a button, please tell me where I can find it). The hardware specs are also crap. For 800 dollars you end up with a nice screen but no real hardware backing it. 46 megabytes of ram and some weak processor my Evo 4g (snapdragon based) phone outperforms or TI OMAP3+powervr by far exceeds in cost and performance. This is why the system lags (though the software probably isn't optimal either from the rush job I heard it got). Tomtom would've also hooked up something decent for you on fairly robust and time tested gps systems. I can kind of understand problems in speech rec though having worked with nuance's speech rec in robotics, I can only imagine memory related issues are only more fun in a windows embedded environment, for which I hear windows automotive but interpret as windows ce6. 46 freaking megabytes of ram doesn't help either. Actually it's something like 460 megabytes, I was off by a factor of 10. This actually makes the software even worse, however.

Why such a crap system, ford? Last time I checked it was 2012, not 2002, right? Why didn't you work up some carrier grade linux system built for reliability & deterministic performance. Or how about QNX / greenhills? The military / aerospace knows not to fool around on crap like windows automotive, but in something I use everyday capable of killing me and others? I don't see why such reliable systems are not the basis of your automobiles' human interface computer. Bullshit here causes distractions and car accidents. Liability warnings can be understood in the world we live in but it is downright evil to ship such a risky system and stupid considering its probably not all that cost effective.

So here's how you make a successful auto-system you can keep building on and update so you can keep people enjoying your system while also getting lockin and presenting a real and competitive selling point. By the way, you may have noticed that window's lockin for desktop means nothing to an ipad or smartphones as this is not the look/feel environment or user experience these devices provide so there's no outright reason to consider it as a platform for the car's interface system.

  • Make it capable of real featurewise updates that smartphone users would be capable of updating themselves, not just bug fixes. Ship it with decent competitive hardware so featurewise updates and software remain tangable. As a particular focus, keep tight integration going with the mobile world.

  • Keep feature "backports" limited to probably 3 and maybe up to 5 years of vehicles (cost limiting, not everything is feasible for backport, esp if resource heavy or 3d).

  • Get an inhouse talented software development team and keep them. A team of 5-10 is probably good enough. Consider that this system is an asset to your company and a selling point. Redirecting to outside sources for upgrades will only hurt user experience and consistency/compatibilities in the long term.

  • Keep the hardware similar and compatible on 3-5 year intervals, keep an eye towards ARM architecture for it's cost competitive nature so you can ride the tablet/smartphone technology wave. Don't disregard improvements to the tecnology - keep the platforms reasonably up to date so newer vehicles have more software capability.

  • Build your own linux variant (if done, please keep it relatively in-sync with it's FOSS dependancies), maybe with the help of montavista or some such experienced entity.

  • Consider some existing systems as leveragable work: intel/nokia's meego would form a good basis of stable quality software.

  • You may consider android though you will need to do something about the garbage collection nature with regards to real time / deterministic operation but you get to ride the "app" wave of android for free. Perhaps your core apps would not be dalvik vm apps with some other real time touches to get things working well. Beware of the flux of this route though. It's got a selling point of android/apps but it may have more technical hurdles, especially if you constrain your developers to android app programming.

  • You may also consolidate more cabin systems into such a computer, further reducing some costs and using some proprietary but internal standard for inter-device communication to allow for more of a one size fits all hardware platform. Do make it future proof however.