As a consultant I am often asked to justify an expense, explain a technology or architectural decision, give my advice on software development life-cycle processes, or any number of other aspects that go into delivering software solutions to customers. I was recently asked to justify the expense of buying IntelliJ licenses in a development group. I have had to do this on several other occasions. Much of what you are reading is the verbatim transcript of one of these exchanges. I’m sharing this because it is a huge thing for me.
People who know me or have worked with me know that I have been using Linux for 20 years now. I’m a big Open Source advocate. I don’t just drink the Kool-Aid, I guzzle the Kool-Aid. I have forked projects on Github, Bitbucket, and Google Code. I have shared my own code on these forums. I maintain several official packages for the Slackware Linux distribution. I’m the only guy at Isos who runs Linux natively for all my development and consulting work. We’re mostly a Mac shop and I have a Lenovo running Slackware Linux. Despite my personal idealism, I respect the persons writing my paychecks and I do everything I can to keep code, that I don’t own, safe by encrypting my hard disks with an encryption level that surpasses requirements for Top Secret government security. I’ll come clean right now… I’m an Open Source, security junkie. I pride myself on being neat, clean and efficient in my work. I love what I do. And it’s great that I can be paid to do it.
When I decide to buy software it’s a big deal. But to quote Linus Torvalds in one of his early Google talks on Git, “…I believe in using the best tool for the job…” I have specific reasons for using IntelliJ. It’s the one piece of software I enjoy buying personally and I would never consider not renewing my license unless the product quality significantly decreased. It has easily brought enough value to me personally to continue to renew my license. I feel that I come out way ahead as time is, of course, money. Having said that, I still maintain STS, Netbeans, and IntelliJ on both Windows 7 and Linux. I go to the trouble to maintain these configurations on several computers so I can be flexible and respond to issues others may have. When I redo the build system for a project, I need to test all of these configurations. In short, I think I have a valid opinion on the comparison of different development environments because I use all of them and I know how to make all of them work. There is no question that IntelliJ is far and away the best of these 3.
Here is a list of the reasons IntelliJ is better, not that *I* think it is, but that it *is* better:

  • Resource usage – IntelliJ uses a little more than 1/2 the compute resources (CPU and RAM) as STS or Netbeans.
  • Stability – No comparison. STS freezes several times a day. I leave IntelliJ up for weeks at a time. Netbeans is stable too, but not as good as IntelliJ.
  • Ad-hoc JPA queries – The application is not required to run in order to test JPQL database access code. No other IDE does this.
  • Aspect support, syntax highlighting (STS has some, Netbeans none, IntelliJ is excellent)
  • Gradle support – Not needed for every project but good for Android development and it offers some advantages over Maven (even though I still prefer Maven).
  • Spring Configuration support is fully understood. Syntax highlighting instead of having to run the project and find errors. Again, STS has some. Netbeans has gotten better. IntelliJ is the best here.
  • Tiles configuration support (see previous) and the ability to natively navigate definitions – huge time saver especially when you have a lot of definitions to navigate.
  • Native SASS support – great for responsive designs and different screen profiles and generally more compact and flexible CSS.
  • Better syntax highlighting and understanding of Javascript and CSS – No comparison. It will tell you which browsers your Javascript and CSS will actually work within.
  • More robust Git support – Egit in STS/Eclipse is an atrocity and I advocate not using it for the most part. Netbeans Git support is now pretty good though.
  • IntelliJ has, by far, the best command completion when you are coding. Saves a ton of time when you are banging out code.
  • No need to ever save a file. Files are always saved automatically. This is a huge time and confusion saver. Also better at eliminating corruption issues and recovering from a power outage, for example.
  • Files are not cached in IntelliJ so there is no need to “refresh” the workspace. Netbeans has gotten better about this in more recent versions but it still requires you to save files. I don’t know what Eclipse is doing. I never know what Eclipse is doing. I never trust that what I see on the screen is what is actually running in an Eclipse based environment. You can change the files outside of IntelliJ and IntelliJ will pick them up properly without intervention. This is a huge time suck in Eclipse because what you see is not necessarily what is running in Eclipse. Not so with IntelliJ. Huge source of confusion is eliminated. Netbeans is generally pretty good about running what you see on it’s interface.

I’m only mentioning a few things here, but you get the idea. Any one or 2 of these items makes the license worthwhile. Put all of them together and it becomes a no brainer. I was a huge Eclipse advocate 10 years ago. I quit using it about 7 years ago for my primary development environment and switched to Netbeans for 5 or 6 years. It was much better than Eclipse/STS but it does not have Aspect support and several other features mentioned in the list above. So I investigated IntelliJ about 2 years ago because of the Aspect programming support and I have never looked back. I have put my own money where my mouth is. I am not advocating something I would not do myself.
Do you want more reasons to switch? How about Android Studio vs Android Development Tools. If you do mobile development on the Android platform, all of the new innovation is going in to Android Studio, which is a fork of IntelliJ Community Edition. Android Development Tools is based on Eclipse and it’s in Maintenance mode. For the most part, it will get no new features and will eventually become less and less relevant. This is all according to Google’s Android development team. I don’t know if a public announcement has been made, but this is what was passed on to me by source whom I respect and has directly talked to Google’s team.
If you’re Java developer, stop wasting your valuable time on the Eclipse platform or the variations like STS. It’s not worth your time and the return on investment more than offsets the licensing cost of the IntelliJ license. To be sure, the pain of switching development environments is horrible, but the discomfort only lasts around 2 to 4 weeks. After that, you’ll wonder why you ever went through the horrific pain that Eclipse has become. If you jump from Netbeans, you’ll like IntellJ better, but it won’t be the same level of improvement as switching from Eclipse, STS, or any other Eclipse variant.