User Interface Development – The Wild Wild West

June 24th, 2015


When I first started programming professionally in the 80’s, there were just a few choices for building mission critical applications. For the most part, I was taught on an IBM Mainframe with a 3270 terminal. These were those “green screens” where the User Interface was considered a by-product of the actual system. Much of the complexity and what was considered important was the database (back then it was IMS, IDMS, or DB2) and the business logic code (yes, you guessed it – COBOL). Those were great times. Not a lot of choices…and we liked it!

Fast forward to today and arguably the main part of the system (at least what most focus on) is the User Interface. Most people believe the interaction, the presentation, and the features available from a User Interface (whether that’s web or mobile) are critical to a successful system. Software engineers know that the rest of the architecture and components really are the key to a scalable successful system, but we also recognize that most business leaders and product managers focus solely on the User Interface. Of course there’s both design and development/implementation of a User Interface. In terms of design, I believe most designers and user interaction specialists share a similar perspective on what great design is. We have come a long way in this area. In terms of software development of User Interfaces there’s a lot of disagreement on tools and architecture. We have some more work to do here.

So where are we today with User Interface development? Unfortunately, it’s rather confusing…even to most software engineers! Here’s my take on the shortened version of history as it pertains to User Interface development. I’ll pick it up from the 90’s. After the “green screens”, we had PC UI’s (take your pick of Java Swing, Microsoft VB, Powerbuilder). These were the first GUI’s in contrast with green screens. Those did well for a while in the client-server architecture world. After the internet boom, we started with applets/ActiveX controller and flash. We also moved into basic HTML UI’s with some JavaScript and continued with various forms of HTML with jQuery and various forms of HTML with language tags that execute on the server (JSP, ASP, PHP). For the most part the UI was still looked at as a by-product but product managers wanted more powerful UI’s with more logic. These worked well for a while until we started getting into super large applications where the front-end User Interface logic was occasionally overpowering for those sorts of UI architectures.
Now much of the software engineering community is focused on how we can build a User Interface that seamlessly works and can be deployed on web and mobile; good separation from a business layer so that we can use multiple client types; able to withstand a large User Interface feature set; able to allow many developers to work on the UI at once; and something that is as solid (easily tested) and performs and scales the way we typically expect servers to act.
Today…and I mean today since technology changes constantly, we almost always are using one of two User Interface architectures. The first is the standard server-side templating languages (JSP, ASP, and most frequently ERB for Ruby on Rails). These do the trick for most basic front end applications where you are dealing with CRUD (Create, Read, Update, Delete) logic and simple not taxing business logic on the front end. The second architecture type includes various MVC JavaScript frameworks such as AngularJS, Ember, Backbone, and KnockoutJS. When an application has a more than CRUD operations (Workflow, complex User Interface where the user spends more than a few minutes a day using the system, large, multi-month project) then one of these (we like AngularJS of this lot) currently has a good solution for dealing with much of the UI complexity. As some of you may know, AngularJS is going through a major change for release 2.0 which has the software development world up in arms, but in general it is moving in the right direction using more web standards and keeping with its philosophy of separation of concerns and componentization.
The key to a successful User Interface implementation, regardless of what architecture or framework is chosen is: consistency, testing, comments, design and well structured architecture. You can end up with jQuery spaghetti if you are not careful. User Interface implementation is becoming more and more important in an ever-increasing world of user interaction with IoT (Internet of Things services) and a greater demand for a better/functional user interface.