I’ve been working on a new project using GWT. Being the only developer of my team, I’ve started with prototyping the user interface interaction model and was looking for a framework that will help me go fast, without a need too change to many paradigms. As I’m building a SaaS product, it has to be web, so I was browsing for various alternatives for web development.
Basically, I had two options:
- Content Driven – create bunch of HTML documents for basic interaction and later enhance these with JavaScript (AJAX) for more dynamic feel
- Application Driven – build rich client application using modern development tools such as GWT or Flex and add server-side integration later.
I have taken the second approach and used GWT as I’m familiar with Java and Eclipse so the ramp up was fast enough.
I came about using principles from Test Driven Development (TDD). I used a TODO list to make sure I’m focused on a single specific task without thinking about infrastructure layers at all. I had to make sure I’m not looking at the big picture while doing the little things, as I wasn’t interested at all in optimization and long-term thinking. Coming from an architecture mind-set, I had to control my tendency to think about the system while doing UI coding.
My working methodology was something like:
Step 1: Create a screen using GWT and make sure it looks right
Step 2: Add client-side, mock data to fill the tables and grids I’m using just to make sure the interaction model is what I’m looking for
Step 3: Data is encapsulated into some kind of Data Provider abstraction that is still static and within the client, however it is not part of the view anymore
Step 4: Data is moved to the server and as the Data Provider is enhanced with data loading capabilities
Step 5: Server starts to create dynamic data based on real data sources and instead of dummy data sets
Through this exercise I learned something which wasn’t clear to me prior
- As client side development is much simpler than server side interaction between the various tier, I was able to move extremely fast in building the right interaction model for the client application
- The architecture that has evolved from this approach is of modern two-tiers approach, similar the the old client/server model but in internet age. Most of the functionality is being done within the client where as the serer serves as a data provider. Coming to think of it, this is a huge opportunity for web driven database which support web protocols – HTTP, REST and query capabilities.
It simply struck me. I don’t consider myself the fastest developer, I’ve been privileged to manage some of the top talent out there, so I know where I stand. Still, the opportunity RIA, web enabled middleware services and the cloud presents something unseen before, as we are finally getting to the right level of abstraction in building internet applications.
From my perspective, the days of page-driven web development for applications, and super-complex packages such as JEE with tiered MVC are long gone. Although I’m telling a known secret here, those who are going to leverage fast cloud enablement technologies will gain tremendous advantage of those who don’t.