Archive
Google Web Toolkit
The post which will bring some very very interesting discussions/debates/fights. Here it is.
(Before starting flames on this post, do read the last line note.)
When I co-founded this company and decided to work with early stage startups, I was faced with technology choices. Ruby was (is) getting mainstream momentum. Many startups were using it. PHP, no matter how much I dislike it, was still used widely. Python with Django was also started getting some ground. .Net and Java being as important as ever. Choices were there, all looking good on surface. Features were all there. We decided to evaluate all these technologies. We both come from deep roots in Java and object oriented technologies and do have some bias towards it. But still we tried to do our best. We listed down all pros and cons for all these technologies. Investigated all of them. Build sample projects/apps in all of them. Talked to experts, technology mentors.
Also while making the choices we had some limitations on ourselves and this choice should be evaluated against these limitations.
Limitations -
- We are not building one single product. We will be building many products, for diversified set of applications. For mobile, for web, for enterprises, for embedded devices and may be even for space crafts.
- Talent acquisition, training and retaining costs. Though we build cutting edge products, we still are a services company.
- We use our services arm to groom engineers. So finding projects on same/similar technology which can be executed by services division was also essentially, but this was more of an nice to have feature rather than limitation.
- We will be working for many startups in next few years. We want technology to support creation of off-shelf components and using them with multiple startups where ever possible.
- Knowledge transfer for code/design and technology should be minimal. Again nice to have but not exactly a limitation.
- Provides cool Ajax stuff like fading pop-overs, drag and drop and many such things in built.
- Though most of the features are available with other technologies too.
- Templating is one of the most important feature for UI side technology. Is there any better templating engine than a class? I dont think so.
- Why one should learn weird things like % % terminated tags? Weird UI side syntaxs? With GWT all you are doing is writing classes and implementing methods.
- Already many UI design tools are available for GWT. Writing your own is not a big problem. All you will be doing is churning out classes from the design tool. Hence performance and usability of such tools is much better for GWT than for other things.
- On UI side it is just HTML and Javascript code. Java code cross compiled into HTML + Javascript + CSS.
- This Javascript code is maintained by Google and open source communities. This gives it chance of getting better and better with every release. Hence more optimized.
- GWT is not much of code generation, but more of code replacement, hence limitations that code generation techniques have are not completely applicable to GWT from performance perspective.
- Browser specifics etc are handled much better.
- No need to write Javascript on your own, unless you want to write your own plugins. Even then, you write the Javascript, write a simple module to cross compile Java code to that Javascript and you never have to use Javascript directly again. Release that plugin into wild ie open source communities and it will keep evolving if its good enough.
- So performance not an issue with GWT on UI side.
- On backend its Java, so performance can not been an issue there. Java is proven for that.
- Also lot of performance improvement tools are available for Java. Caching systems, search engines and many such goodies are there well performing, which can be easily integrated.
- GWT code is essentially classes. We know that classes are more maintainable than PHP/JSP or other text files.
- Since code is just classes, you will be drawing class diagram, sequence diagram instead of screen mocks and screen flow. Now UML digram are backed up with specification and hence more maintainable.
- Two programmers can work on same class (but not on same plain text file) without giving too many check in conflicts. Great thing to have when quick fixing is required and you are fire fighting.
- Classes are structured, governed by OOD and OOP concepts. Its very easy to understand code written by some one else in the format of class than in a text file, even if we assume zero or 100% documentation. Also this helps in code-reviews, peer reviews and other audit processes.
- Using UML design philosophy and OOD/P concepts, code written is much cleaner, well organized and in fact much lesser than others. So much easier to maintain.
- I can not stop raving about how maintainable GWT+Java code is!
- There are thousands of Java programmers out there who are good in Java and understand HTML/CSS basics fairly well.
- No need to have Javascript wizards in the team, if you are working with GWT.
- Java is backed by Sun certification, if you believe in certifications which I dont much. Always good to know that some one is making money by certifying talent. You need not have to rely on them, but its a nice to have thing.
- So in short, talent acquisition is fairly straight forward, plenty of choices.
- I have covered these things in maintainability but to make sure one understands the importance of the same from distributed team work perspective too, I am reiterating in next points. If you know how they apply for this, then skip to next bold point :-).
- Class diagram, sequence diagram help in communicating thought process in more concise and clear way. With UML specs in place, you are sure that what you are saying is not misunderstood on the other side on internet pipe.
- Lots of tools, techniques available for Java to help in minimising issues related to distributed team structures.
- Java has a very very vibrant community. A little too vibrant for my taste actually.
- Lot of open source communities and products have made millions of dollars. JBoss, Hibernate, Apache are only few examples to note.
- Java is backed by Sun which is a multi billion dollar company. There revenues, not all but part, are dependent on Java and its success.
- Though Google, does not make money out GWT, at least for now, it cant just let GWT hanging. Google brand name is associated with it.
- Already there are tonns of communities which are creating wealth by GWT plugin development, support, tools are there.
- This can only grow from here.
- Many outsourcing vendors are available for GWT development, as it is nothing more than plain JEE development, a little easier in fact.
- As I have mentioned already in last post, that time to market is not counted from development day zero to release. But it is counted from inception of the concept to release. This include time for team building, trainings and everything.
- Considering all that time to market is much lower or at least same.
- Also lot of people who say Java is slow in development, never used any code generation tools. Never have actually seen a world class product being developed using Java. There are many things one can do to speed up the process.
- With GWT tool support is even more rich than for Java. Hence using excellent tools infrastructure and good design principles GWT+Java app is much faster developed or at least with the speed as a python app is developed.
- Also dont compare time to release first screen as a measurement. Yes, I agree for Java or Java based apps, getting first use case running smoothly gets some more time than others. That too if you are very rigid about following processes. But once you have that one use case flowing, rest of the things become very mechanical, apart from the algorithms. We generally generate the code using custom annotations etc once we have that first use case. So all we need to implement is the backend logics.
Technology buzzwords for 2009
Well everybody is talking about what to watch out for in 2009, so here is my own list of things I am looking out for in 2009.
- Cloud - I would not be surprised if Cisco finally decides to throw away appliance model and embrace cloud for its VoIP product offerings. Clouds are here to stay. Replicated, distributed (continentally) pay as you go payment and deployment models are working out good for all sorts of businesses. It is going to explode in 2009 given the current economic situations. Its sad to see though that bad times like war, recession are required to propel growth of the common sense and technologies based on common sense.
- SaaS - It was web based applications that dominated the enterprise market in late 90s and 00s, next entire decade will see world transitioning to Cloud based SaaS applications. But I would like to see collaborative SaaS something which takes ESBs as way to integrate various services available in the SaaS form and provides single-sign on and integration to end user. I would like to see integrations between various vendors like Salesforce, Google, Zoho for a start. Widgets/Gadgets/Plugin based Enterprise SaaS platform is what I am looking out for in 2009
- Android - Well you will not agree on this and I know why. But let me tell you Android is going to be big. Bigger than Symbian, bigger than Win mobile and bigger than iPhone. 2009 will see it getting the true momentum it deserves. If you want, check the amount of job postings for Android on freelancing websites. It has rose by at a very high rate and in 6-12 months time it will take over iPhone.
- Mash-up - With Mozilla ubiquity now available for beta testing, I see mash-ups hitting a whole new level in next year.
- Enterprise 2.0 - Its not more of technology, but still there is significant technology part involved in it so. Enterprise 2.0 is not just about having collaborative environment for enterprises, but its about collaboration between tools, frameworks from different vendors to talk/communicate collaborate with each other. Open ended architectures with web service interfaces are already being implemented. But with rise of SaaS I see this taking a big leap. So all your tools, frameworks, no matter if Microsoft, IBM, HP or any one else is the vendor, should and can collaborate with each other. Any one who is working in this space, do contact me asap
.
First impression is the last
Web 2.0 is no more a new concept. Web 2.0 is here from last few years now, all users understand it. Web 2.0 technologies are mature, stable. There few more Web 2.0 technologies coming in but I do not think I can call them bleeding edge now. Buzz is already started around what could be Web 3.0. But I am not talking about technologies, concepts. No. If you are building a web 2.0 application in any space make sure you build it right.
When some concept is very new, there is not a lot of penetration in the market, you can get away with ugly applications. You can get away with mediocre implementation, pathetic presentation as user has not seen what can be done with these concepts, technologies yet. But once the market starts maturing you need to make sure either you are providing something which is completely not provided by any one else out there OR make sure your presentation, usability, implementation is par with the competition. You should not expect to get into a brown market with mediocre product and think that users will give you more chances to better your product.
Yesterday I got invite from an application developed by a entrepreneur I know from some time. I was hoping for a very kick ass implementation as the domain he has ventured into already see 20 different players. But sadly I could not even get through with Screen 1 of registration process. And believe it or not, they have been developing it since almost an year now! Plus have some angel funds available to them.
In my opinion if you are building a web 2.0 concept, in today’s markets your first impression is going to be your last one. Lot of socio-net applications came in India in 2006, all with really really awful user experience and now they are about to be shut down. So first impression matters, do not expect you will get time to incorporate user feedback etc.