In summer 2017 I was part of the project for delivering a new solution for one of our customers in that time, who used Salesforce as their main platform. It was one of the weirdest experiences in my career. It was genuinely unexpected to me and our team to find out how such a big platform is so unsuitable for creating anything using it. Here is a list of most outrages things which we found and believe most of them are still not fixed:
General
- Version control is a nightmare. No GIT integration.
- No proper continuous integration.
- Third-party plugin Copado is a pain.
- No way to structure a project.
- No version control for databases nor databases structures.
IDE
No real officially supported IDE besides a browser-based one. We have used a third party plugin for IntelliJ — Illuminated Cloud:
- No automatic re-fetch from the server.
- There is “deploy all” (which can fuck everything), but there is no “take all from the server and overwrite local”.
- Plugin overwrites documents all the time.
- Poor code highlight support.
- Since we use illuminated cloud, we can not refactor, since each file needs to be re-pushed.
- In order to debug you will need to set up time frame when it will start debugging.
- Issues with illuminated cloud sync.
Lightning:
- Can’t turn off SLDS.
- Autorefresh of a page as soon as someone pushed new code.
- Style of if-else statement:
- Lightning list does not support list operations (push/pop).
- No access to the iterator:
- No proper ternary operator.
- Aura can not do component.find on dom which is created genetically.
- Code examples from https://www.lightningdesignsystem.com do not work with lightning.
- As soon as lightning js fails in some part of the page, page is invalidated and does not work.
- Can’t call functions as in usual in js.
- No support for interpolation.
Apex/SQL:
- Select leads to the error when there are no records.
- No select *, but can overcome by selecting definition from the table and then for each to run through each field.
- Misses many features that are in Java/C#.
- Apex is not Java, it is worse.
- Methods which are @AuraEnabled (exposed to js), can not be stored in a parent class and then used in children class.
- No more than two joins in database.
- No ability to test http requests to third parties.
- Running unit tests in Salesforce cloud (as everything else) is mega sloooow….
- Test limitations: on db requests, number of sql queries.
Salesforce:
- Bad documentation.
- Issues with migrating between orgs.
- Everything runs on one thread, thus debugging is complicated, very complicated.
- ACL on everything: which domains can call us, which fields can be seen to which people. It is a case when too much security is a problem for the development.
- Limit on: number of tables, number of requests, number objects to create, fields, etc.
P.S. We would be happy to see comments according to mistakes & typos.