views:

1794

answers:

7

We're currently looking at using the Force.com platform as our development platform and the sales guys and the force.com website are full of reasons why it's the best platform in the world. What I'm looking for tho, is some real disadvantages to using such a platform.

+30  A: 

Here are 10 to get you started.

  1. Apex is a proprietary language. Other than the foce.com Eclipse plugin, there's little to no tooling available such as refactoring, code analysis, etc.
  2. Apex was modeled on Java 5, which is considered to be lagging behind other languages, and without tooling (see #1), can be quite cumbersome.
  3. Deployment is still fairly manual with lots of gotchas and manual steps. This situation is slowly improving over time, but you'll be disappointed if you're used to having automated deployments.
  4. Apex lacks packages/namespaces. All of your classes, interfaces, etc. live in one folder on the server. This makes code much less organized and class/interface names necessarily long to avoid name clashes and to provide context. This is one of my biggest complaints, and I would not freely choose to build on force.com for this reason alone.
  5. The "force.com IDE", aka force.com eclipse plugin, is incredibly slow. Saving any file, whether it be a class file, text file, etc., usually takes at least 5 seconds and sometimes up to 30 seconds depending on how many objects, data types, class files, etc. are in your org. Saving is also a blocking action, requiring not only compilation, but a full sync of your local project with the server. Orders of magnitude slower than Java or .NET.
  6. The online developer community does not seem very healthy. I've noticed lots of forum posts go unanswered or unsolved. I think this may have something to do with the forum software salesforce.com uses, which seems to suck pretty hard.
  7. The data access DSL in Apex leaves a lot to be desired. It's not even remotely competitive with the likes of (N)Hibernate, JPA, etc.
  8. Developing an app on Apex/VisualForce is an exercise in governor limits engineering. Easily half of programmer time is spent trying to optimize to avoid the numerous governor limits and other gotchas like visualforce view state limits. It could be argued that if you write efficient code to begin with you won't have this problem, which is true to an extent. However there are many times that you have valid reasons to make more than x queries in a session, or loop through more than x records, etc.
  9. The save->compile->run cycle is extremely slow, esp. when it involves zipping and uploading the entire static resource bundle just to do something like test a minor css or javascript change.
  10. In general, the pain of a young, fledgling platform without the benefits of it being open source. You have no way to validate and/or fix bugs in the platform. They say to post it to their IdeaExchange. Yeah, good luck with that.

Disclaimers/Disclosures: There are lots of benefits to a hosted platform such as force.com. Force.com does regularly enhance the platform. There are plenty of things about it I like. I make money building on force.com

Jeremy Ross
That's a great list you've got there
lomaxx
I'd love force.com if they did managed site hosting and I could get my data, not just the extras, or through some API, but a nightly incr. backup of my Oracle dataset. Do the salesforce guys offer this? I've never been able to get a straight answer out of their sales guys, which I always take as a no.
Chris Kaminski
They don't give you such "raw" access to your data. There is a backup service that gives you zipped CSVs of your org on a regular basis. There's also a replication api that allows you to keep your own side by side backup in pseudo real time.
Jeremy Ross
@Jeremy out of curiousity... how much time do you spend in the eclipse ide plugin vs just setting things up in the "setup" menu's within a salesforce application?
lomaxx
I personally spend 90% of my time in either eclipse or a text editor (TextMate, in my case). But that's because someone else usually does a lot of the basic data configuration. The configuration of custom objects and fields is done in salesforce.com, not code, because there is no DDL in the force.com world. There is a metadata api, but I never use it during data design.
Jeremy Ross
This is a great post, a lot of this stuff is stuff I am banging my head against the wall at.
Javed Ahamed
+8  A: 

Here's a few things I can give you after spending a fair bit of time developing on the platform in the last fortnight or so:

  1. There's no RESTful API. They have a soap based api that you can call, but there is no way of making true restful calls

  2. There's no simple way to take their SObjects and convert them to JSON objects.

  3. The visual force pages are ok until you want to customize them and then it's a whole world of pain.

  4. Visual force pages need to be bound to SObjects otherwise there's no way to get the standard input fields like the datepicker or select list to work.

  5. The eclipse plugin is ok if you want to work by yourself, but if you want to work in a large team with the eclipse plugin forget it. It doesn't handle synchronizing to and from the server, it crashes and it isn't really helpful at all.

  6. THERE IS NO DEBUGGER! If you want to debug, it's literally debug by system.debug statements. This is probably the biggest problem I've found

  7. Their "MVC" model isn't really MVC. It's a lot closer to ASP.NET Webforms. Your views are tightly coupled to not only the models but the controllers as well.

  8. Storing a large amount of documents is not feasible. We need to store over 100gb's of documents and we were quoted some ridiculous figure. We've decided to implement our document storage on amazons S3 infrastructure

  9. Even tho the language is java based, it's not java. You can't import any external packages or libraries. Also the base libraries that are available are severely limited so we've found ourselves implementing a bunch of stuff externally and then exposing those bits as services that are called by force.com

  10. You can call to external SOAP or REST based services but the message body is limited to 100kb's so it's very restrictive in what you can call.

In all honesty, whilst there are potential benefits to developing on something like the force.com platform, for me, you couldn't use the force.com platform for true enterprise level apps. At best you could write some basic crud style applications but once you move into anything remotely complicated I'd be avoiding it like the plague.

lomaxx
RESTful API is now available for force
mirezus
+2  A: 

The security model is also very very restrictive... but this isn't the worst part. You can't currently assert whether a user has the ability to perform a particular action.

You can check to see what their role is, but you can't check if that role has permissions to perform the current action.

Even worse is the response from tech support to "try the action and if there's an exception, catch it"

lomaxx
+2  A: 

I see you've gotten some answers, but I would like to reiterate how much time is wasted getting around the various governor limits on the platform. As much as I like the platform on certain levels, I would very strongly, highly, emphatically recommend against it as a general application development platform. It's great as a super configurable and extensible CRM application if that's what you want. While their marketing is exceptional at pushing the idea of Force.com as a general development platform, it's not even remotely close yet.

The efficiency of having a stable platform and avoiding big performance and stability problems is easily wasted in trying to code around the limits that people refer to. There are so many limits to the platform, it becomes completely maddening. These limits are not high-end limits you'll hit once you have a lot of users, you'll hit them almost right away.

While there are usually techniques to get around them, it's very hard to figure out strategies for avoiding them while you're also trying to develop the business logic of your actual application.

To give you a simple sense of how developer un-friendly the environment is, take the "lack of debugging environment" referred to above. It's worse than that. You can only see up to 20 of the most recent requests to the server in the debug logs. So, as you're developing inside the application you have to create a "New" debug request, select your name, hit "Save", switch back to your app, refresh the page, click back to your debug tab, try to find the request that will house your debug log, hit "find" to search for the text you're looking for. It's like ten clicks to look at a debug output. While it may seem trivial, it's just an example of how little care and consideration has been given to the developer's experience.

Everything about the development platform is a grafted-on afterthought. It's remarkable for what it is, but a total PITA for the most part. If you don't know exactly what you are doing (as in you're certified and have a very intimate understanding of Apex), it will easily take you upwards of 10-20x the amount of time that it would in another environment to do something that seems like it would be ridiculously simple, if you can even succeed at all.

The governor limits are indeed that bad. You have a combination of various limits (database queries, rows returned, "script statements", future calls, callouts, etc.) and you have to know exactly what you are doing to avoid these. For example, if you have a calculated rollup "formula" field on an object and you have a trigger on a child object, it will execute the parent object triggers and count those against your limits. Things like that aren't obvious until you've gone through the painful process of trying and failing.

You'll try one thing to avoid one limit, and hit another in a never ending game of "whack a limit". In the process you'll have to drastically re-architect your entire app and approach, as well as rewrite all of your test code. You must have 75% test code coverage to deploy into production, which is actually very good thing, but combined with all of the other limits, it's very burdensome. You'll actually hit governor limits writing your test code that wouldn't come up in normal user scenarios, but that will prevent you from achieving the coverage.

That is not to mention a whole host of other issues. Packaging isn't what you expect. You can't package up your app and deliver it to users without significant user intervention and configuration on the part of the administrator of the org. The AppExchange is a total joke, and they've even started charging 5K just to get your app listed. Importing with the data loader sucks, especially if you have any triggers. You can't export all of your data in one step that includes your relationships in such a way that it can easily be re-imported into another org in a single step (for example a dev org). You can only refresh a sandbox once a month from production, no exceptions, and you can't include your data in a refresh by default unless you have called your account executive to get that feature unlocked. You can't mass delete data in custom objects. You can't change your package names. Certain things can take numerous days to complete after you have requested them, such as a data backup before you want to deploy an app, with no progress report along the way and not much sense of when exactly the export occurred. Given that there are synchronicity issues of data if there are relationships between the data, there are serious data integrity issues in that there is no such thing as a "transaction" that can export numerous objects in a single step. There are probably some commercial tools to facilitate some of this, but these are not within reach to normal developers who may not have a huge budget.

Everything else the other people said here is true. It can take anywhere from five seconds to a minute sometimes to save a file.

I don't mean to be so negative because the platform is very cool in some ways and they're trying to do things in a multi-tenant environment that no one else is doing. It's a very innovative environment and powerful on some levels (I actually like VisualForce a lot), but give it another year or two. They're partnering with VMware, maybe that will lead to giving developers a bit more of a playpen rather than a jail cell to work in.

dt
+1  A: 

Considering Force.com is a "cloud" platform, its ability to act as a client to an external WSDL-defined service is pretty underwhelming. See http://force201.wordpress.com/2010/05/20/when-generate-from-wsdl-fails-hand-coding-web-service-calls/ for what you might end up having to do.

Keith C
you spend a lot of time being underwhelmed with force.com
lomaxx
+1  A: 

I think other people have covered the disadvantages in more depth but to me, it doesn't seem to use the MVC paradigm or support much in the way of code reuse at all. To do anything beyond simple applications is an exercise in frustration compared to developing an application using something like ASP.Net MVC.

Furthermore, the tools, the data layer and the frustration of trying to refactor code or rename fields during the development process doesn't help.

I think as a CMS it's pretty cool but as a platform for non CMS applications, it's doesn't make sense to me.

Neil M
+1  A: 

To all above, I am curious how the release of VMforce, allowing Java programmer to write code for Force.com, changes the disadvantages above?

http://www.zdnet.com/blog/saas/vmforcecom-redefines-the-paas-landscape/1071

Kris
it will alleviate some of the issues, but you will still be bound to the Force.com database which is terrible and you'll not really get true control over your deployments. It's still early days and this may change going forward, but right now it doesn't look to be an overly compelling alternative.
lomaxx

related questions