Tools that help developers to successfully deliver software

Software Configuration Management

Subscribe to Software Configuration Management: eMailAlertsEmail Alerts newslettersWeekly Newsletters
Get Software Configuration Management: homepageHomepage mobileMobile rssRSS facebookFacebook twitterTwitter linkedinLinkedIn

SCM Authors: Stackify Blog, Elizabeth White, Mike Raia, John Basso, Derek Weeks

Related Topics: RIA Developer's Journal, Cloud Computing, Enterprise Architecture, Java Developer Magazine, Software Configuration Management

Blog Feed Post

The Unofficial History of Software Engineering

First, there was One Tier, and it was good

First, there was One Tier, and it was good. Back in the eighties, there was one mainframe and users’ dumb terminals were connecting this one and only Big Iron. These 3270 terminals were called dumb because they had only a keyboard and a monitor. No CPU. It was simply an I/O device.

Two Tiers. Thanks to Bill Gates, PCs with their own CPUs came to the masses, and in the end of the '80s and early '90 I was developing Client-Server applications with fat clients – part of the calculations was done locally and the data was sitting in the remote DBMS server. Life was simple. The resumes of the developers were simple too. You’d only need to know SQL to manipulate the data and some programming language. C++ would do. Too difficult to learn? Use SQLWindows, PowerBuilder, Visual Basic, or Delphi instead.

The main subject for discussions: where to put business logic – in the fat client or in DBMS as a stored procedure. In the latter case you’d also had to master the procedural language of DBMS of your choice, e.g. T-SQL or PL/SQL. But that was it.
The architecture of the application was still simple. The ability to start the application didn’t require you to have an Internet connection, and this was good.  The applications were launching locally. Sure enough, if the DBMS server was down or if too many users wanted the data, you couldn’t do much, but this was the only bottle neck back in the day.

Three Tiers. In mid-nineties, the creation of Web browsers made the Internet public. Enterprises were eagerly redesigning their tried-and-true client server systems just to put them on the Web. Why? Because they could.  This is when things started to get complicated.  A thin HTML client would talk to a Web server that either could serve the static content (texts, images) without asking for any third-party help or would need to pass the control to another server for smarter processing. Internet server providers were offering bandwidth for sale. Network connections were slow. The thin clients were poorly looking comparing to rich Visual Basic or PowerBuider UI.

The question remained the same though, “Where to put the business logic?” The thin client was out. Now the choices were either somewhere around the Web server or in DBMS.  Just having the Web server was not good enough. Since I’m from the Java crowd, I’ll explain you what was going on there.

Multiple Tiers. The middle tier turned into multiple tiers. A Web server talks to a Servlet Container, which in turn talks to an EJB container, which either talks to the DBMS directly or simply places the message into a queue provided by some Message-Oriented Middleware vendor. To make this even more flexible, add to the mix some Naming and Directory servers so the Java tier will perform a lookup of the queue first and only after that will publish a message there. Let’s not forget about demilitarized zones, which will increase the total number of  tiers.

This is when the new breed of developers was formed. These people were calling themselves Application Architects. They demanded more application-specific logical layers. And they wanted them now! The book on design patterns by the Gang of Four was made readily available and the Witches’ Sabbath began. Software frameworks flourished.

If a Java developer didn’t know Struts in the beginning of the century, his/her chances of being hired for enterprise development were close to zero. Now more and more people understand that Struts was yet another over-engineered useless MVC framework that overcomplicated the architecture of thousands of applications.  But the very existence of such frameworks received the warm welcome or even standing ovation by legions of code monkeys who realized that they can make a living by inserting limited-liability-if-statements in the templates, prescribed by local architects. Pursuing Computer Science degree is not needed any longer.

The first decade of 21st century is coming to an end, and we still live in a very fragile software dozen-tiered software world. Every additional tier (a.k.a. moving part) makes the architecture even more fragile. Every moving part is being purchased with an extra expense – technical support. But in the muddy waters of multi-tier architectures, the tech. support teams pretty quickly start playing the game of pointing fingers.  
The budget initially allocated for the project, gets drained rather quickly, the project owner starts cutting corners, which leaves him with a somewhat working applications. It’s great that our offshore partners are ready to extend a helping hand! We need it. It’s like money from home.

Two Tiers. In two weeks, the second decade of the 21st century begins. I really hope that we are going back to two tiers again. How so? A tablet talking to a cloud  makes two tiers.  You can argue that the cloud itself has tiers inside, but this is different though. It’s can be maintained by a single vendor, and from the client’s perspective it’s one piece of software.
The client’s application is started locally from a tablet, it has a local storage that enables work in the occasionally-connected scenarios. Both the data and the code are brought as close to the user as possible. Why do you think Microsoft Excel is the most popular software among business users in the enterprises? Because it allows a user to have her own little piece of data and amateurish-but-working-code (formulas) very close and personal. Right on the desktop. No need to ask these IT prima donnas for favors. No dependencies on the connectivity or some mysterious servers being slow or down. The most advanced business users even learn how to operate MS Access database to even lessen the dependency from IT. Way to go!

Consider sales force automation. Our company works now on a solution for the insurance application that automates the work of agents. I’ll just give you one example.  We store digital signatures of the clients in the database. The agent comes to the house of the customer, fills out the electronic forms and asks the person to sign with his/her finger right on the glass of the Android phone.  Adobe AIR applications saves this digitized signature in the local database right on the phone. As soon as the agent can get on any WiFi network, he can synchronize the local data with either PC or a cloud. Isn’t it two tiers?  The sales person can start and run their application without depending on the availability of the Internet.  When connection is available, the data gets synchronized with the Tier 2. This is it. Client-Server is back.

One Tier. The chances are pretty high that 10-15 years from now we’ll downgrade the architecture back to one tier turning our smart phones into the dumb ones.

"You can say I’m a dreamer. But I’m not the only one."
John Lennon

Read the original blog entry...

More Stories By Yakov Fain

Yakov Fain is a Java Champion and a co-founder of the IT consultancy Farata Systems and the product company SuranceBay. He wrote a thousand blogs ( and several books about software development. Yakov authored and co-authored such books as "Angular 2 Development with TypeScript", "Java 24-Hour Trainer", and "Enterprise Web Development". His Twitter tag is @yfain