IntelliJ IDEA is a Java IDE designed to maximize developer productivity. It achieves this by offering intelligent features that enhance the productivity of the developer. In this series of blog posts, we will discuss various aspects of the IntelliJ platform.
In this blog we will first discuss the goal of IntelliJ, then we will briefly go over its domain model, use cases and context. After that, we will discuss the stakeholders, key quality attributes, product roadmap and ethical considerations.
You will notice that we’ll use IntelliJ/IntelliJ IDEA/IntelliJ IDE/IntelliJ Community interchangeably. This is because there is not much difference between these statements, as will become clear as we’ll post more blogs.
Goal of the project
IntelliJ IDEA Community Edition aims to be the most ergonomic and developer productivity driven IDE for Java and Android development available.
The primary domain for IntelliJ IDEA is software development. This is done by developers with a wide variety of skill and knowledge, from beginners to professionals and teachers, each with their own needs from an IDE to support them to create better software. The most common needs for developers are syntax highlighting, auto-completion and running the code. Together with this, early error reporting is also vital to any programmer as it allows them to spot their mistakes early and learn from them. As the software developer becomes more professional, they will start caring more and more about the quality of their code and therefore code analysis will start playing a bigger role. An IDE can be succusful when it offers these elements to a developer for each experience level. IntelliJ has distinguished these levels by creating the Community Edition (CE) which is open source and freely availabe, and the Ultimate Edition which is an extension of the CE with more complex features usually only required by the professional developer.
As a second domain, IntelliJ provides interaction with the software environment. This interaction can be achieved in several ways including running tests and interfacing with a running application. Running tests allows the developer to verify the correctness of the code that was written. Also the application as a whole can be run, which will allow the developer to inspect the state of the application at different points through the execution using breakpoints, causing the program to halt such that the developer can inspect and step through the code. Outside of using breakpoints to inspect the state of an application, being able to interface with the database of the application also allows the developer to get a better understanding of the applications' state and any potential bugs.
Thirdly, in order to do efficient software development, version control software has been created such as Git and VCS. Easy access to these tools is crucial for any developer who is collaborating in a team or doing open-source software development. It allows developers to be working on separate bugs/features of a code base without interfering with each other.
Use cases and main capabilities
IntelliJ IDEA is an IDE, which means that its main purpose is to support programmers to develop code as efficiently as possible. It achieves this by offering intelligent features, such as: Smart code completion, Language injection, Cross-language refactoring, Duplicate code detection, Code inspection and quick-fixes.
Moreover, the IDE is designed with developer ergonomics in mind, such as: An editor-centric environment with quick popups only temporarily blocking the screen; A wide range of shortcuts empowering power users; An ergonomic UI and an inline debugger offering more insight.
Aside from these benefits, IntelliJ IDEA also offers built-in developer tools, such as: Version control, Build tools, Test runner and coverage, Decompiler, Terminal, Database tools, Application servers, Docker.
Finally, it offers a rich plugin ecosystem that can offer any functionality not yet implemented in the base software.
Context in which the system operates
IntelliJ IDEA is an IDE for Java, but it also supports other languages. Their users are developers, who use this as their primary tool to develop new software. Developers most often use IntelliJ IDE to develop external projects, but also to develop IntelliJ itself. Any IDE, Intelij included, depends on programming languages, with the main one being Java but many more are being supported since the original release. IntelliJ also integrates systems like git for version control and teamwork. As new tools, languages and services are constantly being developed, IntelliJ will need to keep integrating those who become popular to remain competitive with the competition. This is partly a natural process as IntelliJ has a SDK to create plugins, which developers use to add the wanted functionality.
The IntelliJ IDE has the following stakeholders:
|Who||What do they require from the project?|
|Contributors||These are the people improve IntelliJ by contributing to the open source codebase on GitHub and resolving issues. The contributors need a good and clear codebase, with proper standards and clear issues. In total there are 636 different contributors to the IntelliJ project on GitHub.|
|End users||The end users are the people using IntelliJ IDEA to develop their own code and can be regarded as programmers. Some of the end users may also be contributors by reporting issues and contributing to the codebase. The end users need a proper functioning IDE, offering them more efficiency and convenience compared to the competition.|
|JetBrains||JetBrains is the organization behind the InteliJ IDEA1. Aside from the open-source Community edition of IntelliJ, they also offer an ‘Ultimate’ version, that offers more tools and language support. Since this professional edition is an extension of the Community, they want the open source project to be as succesful as possible.|
|Analysts||Since IntelliJ IDEA is an open-source project, all source code is publicly available. This makes it interesting for other people to analyze the codebase, for example, for academic purposes. These people want the project to stay open-source.|
It is likely that the contributors are also all users, since IntelliJ is written in Java and is an IDE for Java. So it would make sense that the people that maintain it, also use it. Moreover, in the README.md2 the build instructions assume that it is being built with IntelliJ.
Key quality attributes
IntelliJ IDEA Community Edition, like any IDE, has at least the following key quality attributes for developers.
|Usability||Developers must be able to efficiently and effectively use IntelliJ IDEA CE for development purposes.|
|Reliability||Because different developers will be using IntelliJ IDEA CE for different purposes in different environments, it must function properly under almost any working environment.|
|Correctness||IntelliJ IDEA CE must be correct, so developers can be sure that when their code doesn’t work, they can find the problem in the code, rather than not knowing if its the IDE instead.|
|Efficiency||IntelliJ IDEA CE has to run efficiently enough so developers can compile and run their code within reasonable time, and have an accurate representation of how their application would run in practice.|
For contributors different key quality attributes should be met.
|Maintainability||Contributors should not have to make an unreasonable amount of changes to the codebase to add new functionality.|
|Testability||When users identify bugs, it should be easy for contributors to test for those bugs so they can be fixed as efficiently as possible.|
JetBrains, the developer of IntelliJ, has an irregular approach to roadmaps. For 2020, JetBrains published a roadmap spanning the entire year, while in 2019 they published roadmaps for monthly versions. Currently, no roadmap is available, however an Early Access Program (EAP) exists that includes all new additions that will be added in the next major update 2021.1 in march 2021.
In 2019, the focus changed from adding new functionality towards performance and quality. With 2020 reaching an even mix between the two. For 2021, the planned additions are small quality-of-life changes, performance and support additions.
In short, IntelliJ is an established product with most requested features already implemented, and thus has a focus on maintenance and improvements instead of a well-defined roadmap for the future.
Before any developer is allowed to contribute code to IntelliJ IDEA they are expected to sign the JetBrains Open Source and Community Code of Conduct3. These guidelines define how a developer should behave, how issues should be reported and any consequences that might be attached. Several of these guidelines can be mapped back to the ACM code of ethics. 4
Many of the How not to behave points map to section 1: General ethical principals in the code of ethics from ACM. IntelliJ requires their open-source contributors to show respect to eachother, allow them to learn from their mistakes and to not insult and/or discriminate any contributor in any way whilst allowing everyone’s privacy.
However, the IntelliJ’s code of conduct does not mention anything regarding the professional responsibilities of the open source developer. We believe that parts of sections such as: Strive to achieve high quality in both the processes and products of professional work and Accept and provide appropriate professional review must also be included in a Code of Conduct for an open source code base. We therefore suggest that IntelliJ further investigates these points and looks into ways of incorporating this into their Code of Conduct.
In conclusion, IntelliJ IDEA aims to provide all the tools a developer could need in order to create high quality code. It provides all the right quality attributes including usability, reliability, correctness and efficiency. In order to keep their product up to date, JetBrains is providing regular updates which are first tested on their EAP. Therefore, we believe that IntelliJ is the go to IDE for java developers.
IntellIj IDEA Community Edition README.md. (2021, March 17). IntelliJ IDEA Community Edition https://github.com/JetBrains/intellij-community/blob/master/README.md ↩︎
JetBrains. (2021, March 5). JetBrains Open Source and Community Code of Conduct. https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct ↩︎