2008-06-10 00:03:05 UTC
Hi Openbravo team!
Hey that's not an easy task but at least your are taking it courageously! I hope you'll forgive me to be a bit rude here but I should say I'm not 100% confident in your success yet so I prefer being clear by what I mean when I mean changing things. I'm going to make some comparisons with OpenERP to illustrate were I think the current OB platform is lagging behind. That's not at all to bash OB but rather to make contrasts more obvious; indeed I wish OB success too: having several oss ERP players is better than a monopoly and the proprietary software model should be defeated so every bits helps. Also having the buzzword "Java" in you product might give you a small competitive advantage in some companies for an other couple of years, so that's why I think there is a little chance your last ventures get their money back one day :-)
Overall I'm going to agree with Mete Kural: the current overall OB platform is a bit tough so you would better invest in rebuilding the platform first rather than:
* investing on features prematurely,
* then rebuilding the platform (since you really have too, there is competition here already)
* and then again refactoring the features to use the platform which would cost you nearly has much as starting them from scratch.
So yes, build a more effective platform while you can. Be aware that OpenERP has already half of those listed features you are missing here (Saddly, I'm not joking, want to check?) and from my experience in both projects I would say they are running 5 times faster thanks to a much more productive platform (true business objects with OOP all the way, integrated BPM, amazing modularity, easiness of customization).
Also, if you think you can't afford rebuilding the platform, my best advice is
* option 1) you consider investing in specializing OB to be at least clearly the best in some markets. Let's say retail (thanks to Openbravo Pos?)
* option 2) Bad for open source, but might save you: dismiss from an open source business model and build a Saas model where you could eventually fund your required investments without caring too much about the platform being expensive to develop on or not.
* option 3) take a charter flight far from you business angels ;-)
My open source experience since 2003 might be short, but so far I should say I saw no successful open source project built on raw PL/SQL. Compiere took a niche before Navision, Divalto, Sage X3, Cegid or Business One were ready and Compiere current half and short-lived success is clearly not due to community efforts but rather to a standard proprietary ERP business model. I believe only a very good Object Oriented Programming can abstract the mere implementation of each feature to third party developers so that you can indeed reach a community catalysis point.
So, while there are clearly important missing features, I would just advice like Mete Kural:
1) First of all: #60 Data Access Layer
Hibernate would be good. But would an ActiveRecord JRuby on Rails powered ORM layer just kickass enough? Remember ActiveRecord don't prevent you from calling stored procedures or retriving data by raw SELECT's. On edge cases it's slower than Hibernate but I thing getting a Rails-like productivity is way more important than raw speed (OpenERP has such a Rails-like productivity if you are happy with one of the two presentation layers). And moreover I'm sure you could tweak your datamodel to get much more extra speed than the raw ORM speed.
ActiveRecord is just simpler than Hibernate and co and has the advantage of being scriptable so you would have more agility when hot swapping OB code. Keep in mind that only loading an extension module should ideally be able to hot patch the running datamodel, OpenERP uses it very efficiently already. Groovy + hibernate would make it too but I consider it's slower and make you miss the community of Rails and the power of JRuby. But yeah, anything else than SQLC might be better. PL/SQL might be migrated to take advantage of the ORM progressively. Things that might be customized should come first. Also having the ORM infrastructure would help a lot even if thousand of PL/SQL code remain. Using an ORM would help you targeting other databases.
NB1: if using ActiveRecord, you could consider using this plugin to automatically build your OOP data model after your existing physical table model:
http://www.redhillonrails.org/foreign_key_associations.html
NB2: the multithreading issue with ActiveRecord is not an issue if borrowing a different JRuby runtime from a pool (see warbler or the glasfish gem) when entering a threaded servlet. Also consider there is a Google Summer of code sponsored by Sun to overcome that limitation and at the very last you can even consider the DataMapper framework which combine the power of Hibernate with the easiness of AR (still less popular however).
2) Sorry, I couldn't find it in the list: a dynamic templating system for the UI layer
Be it what you want: JSP, JSF, ERB+JRuby but I think you need something dynamic the server will just JIT from one request to an other so you can dramatically speed up developments cycles. Yes you can turn your efforts towards your end customers, but keep in mind that without a developer community you won't make it either. Look at what the investment of SAP, Oracle or M$ are on their ERP products, nothing little like 15M$, so an oss player like OB can only make it if a community starts building and marketing the ERP at its maximum stride. Believe me or not, currently, when you explain an new comer he will have to recompile a part of OB just to put on an other server or port, he is likely to seek for a job elsewhere. And again raw speed is not a valid argument here. The server JVM will optimize the bytecode nearly as if it were static HTML.
3) #1 Modularity
Not everybody needs everything but nearly everybody needs more that what you currently get in the OB monolithic stack. Also consider a modular software is simpler to understand (because of a better encapsulation) so third party developers might contribute more effectively once modularity is there. Ideally you would handle dependencies to allow a multi-layer plugin system but that's only worth it if you get third party contribution for real. Again others have done it already.
3) My third is an easy one but that would lead to a dramatic UI improvement but I can't find it listed: paginated table views.
Currently it seems that if a table has many records it's displayed on a single page. I know it's 'ajaxified' by bits but still navigating is hard I think. We could indeed try to say OB is better on scalability (dream on) because of Oracle, but with such bloated tables, customers will be quick to feel worried.
4) #121 Projects enhancements (only if really improved for services companies, else you might better focus on something easier to achieve)
Currently I could advice Openbravo for the logistic, distribution or manufacturing sectors but certainly not to service oriented companies (again OpenERP is just far ahead here).
Basically the bare minimum would be the ability to assign tasks to employees and employees having obvious dashboard to enter their their tasks status (double input: time and %) So then you can monitor the effectiveness of the project.
5) #34 Integration with Google Calendar (especially if you do 4) )
Strange? Well let me explained. Again OpenERP did an amazing job here with their shared calendar (see on eTiny). But it took them a bit of work. And this was consider they have a way better platform already. So I think OB shouldn't try to compete here. Instead Google Calendar is there already, free of use, with a public API and really user friendly. You would get the most advanced calender feature for almost free by doing this move. Again a big step forward for project management. With GCalendar integrated, you could also drop some 'event management' listed here. Also that one is cool and good for your marketing as it seems so important to you.
6) #143 Tags (if easy)
Easy and efficient. if you had restful URL's you would have them for free using say Del.ico.us. Again, Having a good platform first makes things easy then.
7) #153 Bookmarks
Again: easy and efficient. And again being restful would have helped you doing it in no time.
8) #61 Web Services - Phase I
Yes, you should expose your datamodel, at least in a CRUD way to the world. Also notice that OpenERP (sorry that's the only better ERP I found), they expose controller actions with web services so you can just remote any GUI process like a piece of cake. having it would be a must.
9) Once you get 8), you can finally drive you logic using a BPM engine (#64)
I would finally advice a BPEL engine, possibly Intalio if it's open source enough (I'm still not sure). That would solve all your sale process requirements by the way. Again, I consider OpenERP clearly take advantage of having such an integrated BPM with now a DHTML BPM editor (eTiny trunk). Still, deploying a BPM editor on the client side is tough, but one can consider a webstart heavy client (or an applet, they just fixed the plugin in Java 6U10!) is acceptable considering the added value (DHTML is a must but is hard to achieve).
10) #170 Email Integration
Again, others have it already and it make them nice to use (for CRM, reporting...)
13) #140 Portal integration (optional)
Yeah, OB won't rule the world alone so it better play nice with other third party softwares. Why don't you put OB in a Liferay portal (it's MIT licensed, quite competitive and recently supported by Sun). It features JSR168 and JSR286.
But more importantly, I think you should integrate with javascript portals such as iGoogle (or Liferay again thanks to its Google Gadget portlet). Indeed, daddy's portlet market was a notorious failure because the best tools of the market simply aren't portlets or aren't always coded in Java (find a competitive Java forum or wiki and call me). On the contrary Google Gadget's like portals open a true competitive cross technology and cross server market were the user (not the system administrator) takes the control.
Just in case you were not aware, let me better illustrate:
http://fr.youtube.com/watch?v=8EsFJu6p3P4
Such portals are already free of use (like iGoogle) or even open source such as Liferay or Apache Shindig.
NB: by doing this move, you would also get a DHTML chat client for free using the Mibbit gadget or even GTalk.
11) #82 Rules Engine (optional)
Well, beware of bloatware. A simple rule engine is nice (for instance to build a price engine, a product configurator, a CRM front dispatcher...) but it would also be quite easy to build something to heavy to be actually used by an open source community. The price list system would better take advantage of the rule engine if any.
12) #73 Master details UI pattern (optional)
would give more freedom to the presentation layer
14) Then think to refactoring/developing new features among the listed ones.
So yes, I've been rude and it's not easy work. But I should say I see no other way. Also beware of doing too many real deployments before doing the hard job because you could then waste too much money to get a correct fame from those early deployments and then get trapped with the that last decade technology forever (or probably not even forever). Without OpenERP, there would be only Ofbiz, JFire and other immature or poorly supported projects so things would have been very different. But like it or not, in the Darwinian open source world, there is hardly room for a second place.
15) Port OpenERP over Jython on the Java platform and apply OB css theme. Sun just hired the two Jython dev lead to do what they did with JRuby over the last 2 years (Nutter, Enebo, Bini, Norbye and co). The code is GPL'ed so you are technically allowed to do it. Well OK, 15) is a joke ;-)
Good luck, your are indeed targeting at a great achievement for a better business world, I hope you success. You can count on me when I'll think the dev effort I put on the platform won't be wasted, that's what I usually like in open source projects.
Raphaël Valyi.