#

Wednesday, March 26, 2014

Java E-Commerce platform

Java for the Elite ?

The past decade has seen an explosion of technologies and solutions. On one had we have witnessed popular communities around WORDPRESS, DRUPAL, JOOMLA, MAGENTO and more, on the other hand within the Java community we have witnessed so many advancements in the language, platform, scripting and frameworks. However when you look closer something odd strikes you. The Web and mainly B2C driven solutions are dominated by PHP products and should make one wonder why don't we see a single Java based platform. Specially, with all the advancements and tooling one would wonder where are all these frameworks leading to?

While there are some very interesting advancements in the Java community; I prefer to coin them academic rather than useful. Be it the coming of Scala over Java or frameworks like Play-2. In spite all the innovation within the language, I do feel java developers dwell a lot on code quality (however one may choose to define it), verbosity etc. There is a certain "High", in creating frameworks rather than committing solutions that go the distance. Lets face it, most programmers do not like the noise and the politics of the outside world. I do feel this is a cultural issue rather than an issue with any platform or language. Further, we have survived our arrogance because Java is still desired by the big boys and in the so call "Enterprise" world.

Motivation for a E-Commerce platform

I'm aware of the CMS efforts from the Java community as am aware of the E-Commerce efforts. I won't name them here however Its sufficient to say, when challenged by service competitors from the PHP community competing with the likes of Drupal, Magento etc, ...Java has very little to offer. For all the frameworks we have we lack real world answers and our solace seems to be "Enterprise Development, Custom Development ". As if, we were never good enough for the average web developer on the street or maybe the average web developer isn't good enough to be writing and extending frameworks all his life. Somewhere the elitist attitude faded for me to just writing something useful to help the guys on the front line (guys like myself); catering to small to enterprise Business users from a shared Web Server instance without even SSH access to an Enterprise on multiple nodes. One size fits all! Something that can run by a client without needing a team of technical experts to maintain it. Something that packs in all the features needed to compete and do better than the solutions offered on the PHP front line and yet offer the platform benefits that Java has to offer. Not that I have anything against PHP (I actually admire things about the community), but as a java developer I do feel handicapped and loss for answers. Within JAVA we have fragmented ourselves so much that little comes out that is truly less boiler plate and more progressive. I won't mention all the Java based CMS's/Solutions I tried here, but its sufficient to prove that nothing in the Java community matches the success of DRUPAL, WORDPRESS, JOOMLA, MAGENTO to name a few, and you need to ask yourself "why" !

What's different ?

The above motivations my seem abstract. In reality how it translates is that there are many by-products of E-Commerce. Like Search, ETL, CMS etc. These not only find their way to contribute to E-Commerce but also other areas of development that are application specific. The issue with "framework" mindset is you are always providing a tool and nothing more. The higher order glues are left to the developers. That is a good thing, but in today's world these tools are not good enough. The GAP between polished services and what frameworks provide is getting larger. E-Commerce demands solutions and a lot of these "solutions" can be shared, improved, modularized or even exposed as services. Furthermore it results in leaner code bases and also better utilization of memmory, lower learning curves, lower investment in writing business ready applications.

When I look @ companies selling Enterprise versions, and giving Community edition's they seem just a little more than frameworks. But if you had to pitch it to a client, you fall very short with almost no community help from the companies that provided then Open Source solutions. We all want to make money, however what I'm against is monopoly of what the community contributes back. This is causing a dilemma for me in terms of licensing (separate topic)

There is also a lot of emphasis on reduced number of entities and Data Models. The entire CMS, ECOM, User data, etc .. you name it, can be put down in 8 Database Tables without any loss of functionality. I don't want to get into a technical discussion yet, however compare that number to some elephant you install. As features grow, so do their data needs. There are ramifications of blatant abuse of entities that most platforms adopt. These are exponential and not just limited to hardware. I feel these concerns are conveniently ignored in most projects. There are many other concepts that I won't dive into yet and let the code, architecture do the talking. Reducing and reusing entity objects (definitions and instances), does imply drastic improvement in many ways.

Structure

There are many things that go into making a CMS and more so an E-Commerce platform. Hence, all these services have been broken into Libraries. ETL, Reporting, Searching, Content Handling Services, Admin UI, Authorization, Authentication, Carts, etc etc. I have developed each as a standalone library so that people can use them independently. A lot of things useful in a CMS & E-Com can be leveraged in some other projects also. I feel existing CMS definitions are very single focused and hence limited.

The idea is that people don't have to look @ it as a monolithic project and can create or contribute to parts that are of interest, and each module can grow as its own project.

The liability of learning a new Framework

Shifting away from JAVA & PHP; furthermore if something is designed as a CMS then it is only a CMS. Its hard to extend it to being an E-Commerce platform and so on. This is not just about providing a JAVA's alternative but providing something that offers more flexibility for developers to build like LEGO blocks. Spring, Apache Wicket are beautiful example where they make this possible. This also offers a lower learning curve to adopters with no DSL or additional learning curve needed as such. However, as mentioned below we have plenty of frameworks. When you put together an E-Commerce site you do realize the gaps and the mammoth effort of putting all these together. And what you dont want is a "CUSTOM" glued solution that's a curry of all frameworks. You want solutions and services that have been tested and optimized in a domain specific environment and validated by business users and consumers.

A frustrating point of adopting new frameworks or alternatives is the knowledge curve required. The aim of any platform should be to allow people familiar with the core frameworks to dive right in. In addition, providing an independent module for each type of service allows which aspects people would like to use, customize, contribute. Solutions demand answers and the ability to replace frameworks if need be over time. However, there is a masochist in every good developer. For me learning Scala was not about a better language but was just about getting to learn a new alternative. This does not always imply we will be more productive and yet when a new framework comes out, no matter how productive, we always like the fact we can be Elite. Nothing wrong with that, but from a platform developers perspective the idea should be to allow and welcome as many people onboard and thus weed out core dependencies that are not standard practice. make it simple and useful and let people decide what works for them.

I do hope the motivation is well placed and look to hearing views. Strong opinions are welcome. I do also hope to back this up with the platform soon...

Current Status & Direction

The project has matured and achieved sufficient functionality for any small to medium enterprise to use it. However I am now to focus on the following. Worth noting I'd be looking @ a community to help me grow this:
  1. Licensing - Big, tough one!
  2. Documentation
  3. Creating the user Forum
  4. Creating a sample application for the community to demonstrate base usage and ability backed by videos and tutorials
  5. Providing OOB integration's with existing popular cloud services
  6. Additional Unit and integration test automation


Site(s) developed on this platform

https://lemillindia.com
https://nurhome.in

CMS only based sites:
http://wrap.co.in

more in the pipeline ...