A Shorter Letter
A couple years ago I learned of what is now one of my favorite quotes from one of our senior developers, Gil Moskowitz. I asked him why a particular development resulted in so much code and complexity. He referred to a quote from Blaise Pascal: "I would have written a shorter letter, but I did not have the time."
As many of you know, we've been hard at work on our new Mobile Web client. For much of this year the plan has been to base the client on Blossom, a fork of SproutCore, that we sponsored to evolve that framework to a mobile-ready platform. We debuted our new client running on Blossom at the OSBC and FluentJS conferences in May. A funny thing happened on the way to fame and fortune at those conferences. We discovered a better framework called Enyo.
Enyo 2.0 is a HTML5 framework based on Hewlett Packard's WebOS platform designed to work in any web browser environment including all popular desktop and mobile browsers. The first beta was released about a month after we started on our Blossom project. Having invested heavily in SproutCore and Blossom by May, we were more than a bit skeptical about yet another framework, but after seeing some impressive demos we thought it was at least worth a closer look. First what we found is Enyo is about 90% smaller than SproutCore. While SproutCore clocks in at around 300K lines of code and Blossom at 200K, Enyo is around 30K. As a result it is easier to learn and understand, so coding in it is a dream. It also comes with a set of widgets in its "Onyx" library that look great in all environments. Plus it's fast! Finally, Enyo is being actively developed and documented by a team of full time professionals. This was just too good to ignore, so we continued looking even closer.
One thing Enyo was missing was a strong data management layer, which is important to us because our application is so data intensive. For this we pulled in Backbone.js and a corollary project Backbone-Relational.js. These two libraries add up to about 1,500 lines of code and do more than the SproutCore datastore does in 6,800 lines of code. I was able to read the code and understand the APIs for these two projects in about a day.
Finally, we never quite got Blossom to work in all environments, such as phones. We found, however, that Enyo truly did work everywhere: on phones, tablets, even the Kindle Fire! We decided to spend a couple more weeks coding in Enyo with Backbone and see where it would lead. In about a week I had re-written our entire model layer in Backbone and unbelievably didn't run into a single bug. In two weeks our new Enyo based application started to look very much like what we showed off in May.
The most important factor in our decision to change was usability. Because SproutCore and Blossom are so large and encumbered by so much indirection and a complicated run loop, the learning curve to use them is very steep and debugging is difficult. By comparison these other frameworks are a breeze to use. Enyo and Backbone are case studies of "Less is More," as neither are over burdened with features and code bloat like so many application frameworks in existence. So we decided to take a little more time and write a "shorter letter" with Enyo and Backbone. The outcome is a new client that is turning out to be a much simpler and more reliable product. We feel a few weeks of delay will pay huge dividends for our development team, customers and partners for years to come.
"We see a lot of feature-driven product design in which the cost of features is not properly accounted. Features can have a negative value to consumers because they make the products more difficult to understand and use. We are finding that people like products that just work. It turns out that designs that just work are much harder to produce than designs that assemble long lists of features.
Features have a specification cost, a design cost, and a development cost. There is a testing cost and a reliability cost. The more features there are, the more likely one will develop problems or will interact badly with another. In software systems, there is a storage cost, which was becoming negligible, but in mobile applications is becoming significant again. There are ascending performance costs because Moore's Law doesn't apply to batteries.
Features have a documentation cost. Every feature adds pages to the manual, increasing training costs. Features that offer value to a minority of users impose a cost on all users. So, in designing products and programming languages, we want to get the core features 'the good parts' right because that is where we create most of the value.
We all find the good parts in the products that we use. We value simplicity, and when simplicity isn't offered to us, we make it ourselves. My microwave oven has tons of features, but the only ones I use are cook and the clock. And setting the clock is a struggle. We cope with the complexity of feature-driven design by finding and sticking with the good parts.
It would be nice if products and programming languages were designed to have only good parts."
Wed, 07/25/2012 - 08:27#1
One thing that does *not* please me is having Linux as a Tier-2 (lower priority support) platform.
Thu, 07/26/2012 - 08:10#2
Hi Cleber, I'm Steve Hackbarth, one of the core developers on the enyo app here at xTuple. I've done all of my development for this product on Ubuntu 12.04, and I can vouch that I haven't run into any problems. And we're certainly not going to ship anything that doesn't run well on Linux, because that's one of our development platforms. I don't even think it'll be an issue; enyo runs great on Linux.
Thu, 07/26/2012 - 11:43#3
It's comforting to hear that!
It's comforting to hear that! Keep up the amazing work!
Fri, 07/27/2012 - 20:08#4
Hi Cleber, I'm Kevin Schaaf, the product manager on the Enyo framework. I understand your concern, so I want to clarify our support matrix a little bit. First, our goal is that Enyo works across ALL modern web platforms, period (which certainly includes Linux). However, "all" is a pretty huge problem space with a really long tail when you start permuting browsers with browser versions with devices with operating systems with operating system versions (any one of which can and often do result in strange browser quirks), so we thought Enyo developers would appreciate understanding how we prioritize our testing and issue resolution.
You should expect Enyo to work well across all Tier 1 and 2 platforms including Linux, with the main difference being the order and priority we give to QA testing and issue resolution, based largely on market relevance (for example we spend a lot of time on Android Gingerbread and ICS, and less on Honeycomb because there are far fewer devices out there). Right now we QA at least 17 different configurations at every release, but we do look at and fix any issues found on Tier 2 platforms, and we're working on automated and possibly crowdsourced testing to get better coverage across the long tail of other configurations. Not hating on Linux (or Blackberry or anyone else)! -Kevin
Wed, 07/25/2012 - 11:14#5
I wouldn't read too much into
I wouldn't read too much into that. The multiplicity of Linux distros makes it perfectly understandable that a big company like HP would represent it this way - but we're confident that Linux will be well supported.
Fri, 07/27/2012 - 11:58#6
It must be scary to go
It must be scary to go through such a drastic change, after investing time and development efforts into a different solution. It really does sound like it will pay off in the long run though.
Mon, 07/30/2012 - 19:37#7
Is there a middle tier?
Is there a middle tier? I just discovered Enyo myself and have begun to play with it.
Tue, 07/31/2012 - 06:09#8
We'll be talking more about
We'll be talking more about all this once we get the beta launched, but the short answer is yes there is a middle tier. It is made up of multiple components built using NodeJS including a service framework (node-xt), a router (node-router) and a datasource (soon to be renamed node-datasource). We've also built an ORM layer to handle object relational mapping and function dispatch calls on the database using plv8js for Postgres. You can see all the pieces here:
Please be advised, however, we are still in active development and will not be fielding questions on how it all works until we have a release.
Also note that current users of the Qt based version of xTuple will continue to be able to operate in version 4.0 without any of these new layers. These new components are strictly optional to support the web-mobile client.
Tue, 07/31/2012 - 14:19#9
Screenshot of EnyoJS.com
Screenshot of http://www.EnyoJS.com homepage with shout-out to John's blog post: http://www.xtuple.com/sites/default/files/images/xTuple_enyo_JohnRogelst...
Thu, 08/02/2012 - 13:48#10
Enyo continues to share the love
Case study: xTuple finds Enyo "a dream"
Fri, 08/03/2012 - 10:47#11
So will John be in Sunnyvale
So will John be in Sunnyvale this weekend?
Fri, 08/03/2012 - 11:04#12
@EnyoJS Hackathon 1st in SF Bay Area focused on Enyo-based applications. Saturday Aug 4 - who's going? http://enyohackathon.eventbrite.com/
Fri, 08/03/2012 - 12:29#13
I wish I could... but we've
I wish I could... but we've got to get this product to beta.
I've heard though that the Enyo Hackathon is completely sold out. Good sign.