Application Development Glass Ceilings
Sometimes in app-dev we’re using technologies that have a delayed cost. Simple to use now, but with shortcomings that mean that later features might be much harder to add. The term ‘Glass Ceilings’ (whilst classically meaning something else) seems to apply here.
An Example

I’ll Assume you are familiar with Agile. The customer/product-owner asks for a change to an existing dropdown in the UI. She wants a picture of the fruit next to the name of the fruit. He remembers Visual-Basic application development from the mid 90’s where this was easy. Also, She’s seen it in Java-Swing applications not so long ago. Now, that most enterprise apps are web-based, and fifteen years have passed since She first saw it, She thinks it should be easy!
Well, it is not. HTML does not support this be default. Most formal Web-Frameworks don’t do icon+text combo boxes. If they do it at all, it is because the authors have written something special in JavaScript. It’s a very custom control in HTML-land.
Lets say that the original feature (dropdown of fruit names load and saving to the database for the ‘thing’ in question) took a day to write. If we’re using a technology that does not have that feature we are going to have to go back to the product owner with some bad news or VERY bad news. It could take an eternity or be impossible to do it with the technology we are currently using.
What you really hope for is an ‘easy’ addition of something that’s correct for your technology choices. If you were using JQuery as your substantial in-browser technology, or were compatible with it, and you had this exact problem, then you’d be very happy that you found Fairway Technology’s FlexBox. Refer example 7 on their demo site like so:

Punching through the glass ceiling yourself
If we are using a commercial closed-source technology we are beholden to the vendor to even think our change request is important, or have a channel open for such communication. Moreover, we hope they are a competent outfit, and can ship a release quickly. If the technology is open source, then we’ve recourse to fork it and make a change ourselves. In that eventuality, we hope that the canonical version’s team will accept back the changes, and not make too many changes. Incidentally, this is one place that open source teams fails – not-facilitating someone else’s idea for that technology.
The worst-case scenario is that you have to change technologies. You might be halfway through the product buildout cycle, and heads will roll on this bad news!
The best-case scenario, is that the open or closed source team has ‘plugin’ mechanism for adding capability. Even better if there’s a way of leveraging/extending supplied components.
Even in the best-case scenario we’re going to have to suggest to the product owner that the feature She needs is going to take five days, but after that’s done, similar changes to other dropdowns will take half a day.
Thus, in summary, we hope that if we encounter glass ceilings during the building of an app, we can punch though them. Perhaps we are unsure about how much effort that will be in advance of encountering it. It is probably best that we are diligent in technology choices up front. I’m going to return to that particular thought in my next blog entry.
Not just UI controls
The problem of glass ceilings does not just apply to UI affordances and effects. You could encounter it in mismatches between a self-designed relation-schema for your app, and perhaps the Object-Relational Mapping (ORM) technology you chose. Perhaps your synchronous RPC technology should have been asynchronous.
Footnotes
I’ve talked about this before Ruby versus JavaScript for Web3.0 in 2006. That one was proposing changes to web-app coding that have not come into fruition. Perhaps they could with a future version of Dart, but I’m not chasing that agenda for the time being.
I’ll link to other proper HTML combobox solutions if people email me, or comment below.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Karl Peterbauer replied on Tue, 2012/05/15 - 7:40pm
Web development is a different beast, and it will remain so in the near future. A web developer's runtime environment is the browser - one of the most limited programming environments on earth. A web developer has a few dozen HTML tags at disposal, historically grown, more or less well defined, implemented more or less standards-compliant, accompanied by a few dozen CSS rules, again historically grown, inconsistent and quite arbitrarily chosen, and a very limited JavaScript API (mostly due to security constraints). HTML 5 does not save the day: Either one sticks to DOM/CSS3, or one bets on the canvas, but that's a total new story (the HTML 5 "schisma").
Let's face it: HTML is not extensible, and it will never be, by design. Thousands of web developers reinvent the wheel every day, over and over again: List boxes with icons, menu bars, tables supporting scrolling, resizing and reordering of columns, date pickers, combo boxes for textual input and list selection, keyboard shortcuts, modal dialogs, and worst of all: no full control of the layout geometry and the rendering cycle...
There is no "channel for change requests" (W3C? Mozilla? Microsoft? Apple? Safari?), and forking is obviously not an option. Roll your own solution or pick one of the cool frameworks/libraries, but JQuery and friends are just workarounds for a limited design.
John Esposito replied on Thu, 2012/05/17 - 5:21pm
in response to:
Karl Peterbauer
Karl Peterbauer replied on Sun, 2012/05/20 - 6:50am
John Esposito replied on Mon, 2012/05/21 - 5:27pm
in response to:
Karl Peterbauer
Karl Peterbauer replied on Tue, 2012/05/22 - 5:17pm
in response to:
John Esposito
At least we see a faster standardization pace now, compared to the complete stagnation between - say - 1999 and 2004, and we see a fierce competition between all big boys, both for performance and for compliance.
But major shortcomings are evident. <audio> is a joke, <video> without a common codec is madness, and the CSS/JS vendor prefix quagmire is ridiculous. Webkit dominance is a real menace. Some random quotes from the February W3C meeting with the conspiratorial title "Why and How to Implement Other Vendors' Prefixes":
It would be interesting to estimate manpower and money which will have to be spent world-wide to work around those flaws.