Illuminated Cloud is developed by Scott Wells, a 25+ year veteran software developer and architect and unabashed development tool snob. In 2010 I began working with what was then known as the Force.com Platform-as-a-Service as a key component of a composite Software-as-a-Service architecture. While impressed with how Force.com effectively commoditizes a vast number of otherwise complex technical components, like many others I was disappointed with the lack of modern development tools for the platform, in particular for Apex and Visualforce development. Illuminated Cloud was born out of this productivity paradox.

As a long-time user of JetBrains IntelliJ IDEA for Java development, I started toying with the idea of a custom language plugin that would ultimately bring the same modern feature set and near-telepathic capabilities of IntelliJ IDEA's Java IDE to Apex and Visualforce developers. As Illuminated Cloud was being developed, I cataloged what I perceived to be the most critical features of the Java editor: completion, navigation, formatting, documentation, and validation. These along with Salesforce metadata Deployment and Retrieval operations became the initial feature set for Illuminated Cloud.

Since the release of Illuminated Cloud 1.0 I've steadily refined and enhanced Illuminated Cloud based on both my own experiences as a daily user of the tool and on input from the Illuminated Cloud user community via the public issue tracker, discussion groups, email threads, and in-person chats. Ever since starting on this project, though, I'd yearned to move on to a second generation of IDE features for Salesforce development including refactoring capabilities, deep client-side code analysis and assistance via code inspections and intentions, time-saving smart code generation, and even more intelligent code completion capabilities. Illuminated Cloud 2 represents the first major step along that path, but by no means is it the last.

If you'd like to hear more about the experience of creating, releasing, supporting, and constantly evolving Illuminated Cloud, the following podcast interviews—one from relatively early in the journey and the other a bit further on—provide more details:

What's Next?

My "short list" of additional refactorings, code inspections and intentions, code generation features, etc., is perhaps ten or twenty printed pages in length! In my experience, Illuminated Cloud 2 has reached the point where enough of the JetBrains IDEs' editor features are present that I often find myself reaching for things that aren't yet implemented. As I do so, those features go immediately onto my backlog. The more frequently I look for something and find it missing, the higher its priority. In short, I continue toward my ultimate goal of narrowing the gap between the experience offered for Salesforce development by Illuminated Cloud and that offered for Java development by IntelliJ IDEA (and for other languages by JetBrains' other IDEs). As always, while I certainly have my own list of items I'd like to see, I also treasure input from other users who might have a different workflow and therefore prioritize other features or refinements.

When you combine the complexities of writing an IDE for a language with no published grammar or behavioral specification (and boy does it have some quirky behaviors!) with the complexities of refactoring and real-time static code analysis, bugs are inevitable. The good news is that I've tested these features against hundreds of thousands (perhaps millions now) of lines of Apex code and fixed the bugs uncovered by those projects. This has led to much more accurate and reliable reference injection and dynamic type inference implementations which are critical for features like refactoring and static code analysis. The reality, though, is that there is going to be source code that reveals bugs that I simply haven't yet encountered. My guess is that these will take the form of false positives and negatives reported by Illuminated Cloud 2's parsers and code inspections or unexpected refactoring results. I am constantly collating bug reports for these types of issues and using that information to minimize and hopefully eliminate them. If you do run into such a problem, the best way to help me resolve it is to provide a standalone reproduction of the problem via the public issue tracker.

For more insights into the upcoming feature work, see the working backlog.